From 127c425a9a7479433c39ac6a51f80d89417e7a17 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 29 Apr 2019 11:22:53 -0400 Subject: [PATCH] [oemid] Write batch-identifier into standard file location --- src/modules/oemid/IDJob.cpp | 58 ++++++++++++++++++++++++++++++++++++- src/modules/oemid/IDJob.h | 3 ++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/modules/oemid/IDJob.cpp b/src/modules/oemid/IDJob.cpp index db62b39c5..07ce1efad 100644 --- a/src/modules/oemid/IDJob.cpp +++ b/src/modules/oemid/IDJob.cpp @@ -18,8 +18,15 @@ #include "IDJob.h" +#include "GlobalStorage.h" +#include "JobQueue.h" +#include "Settings.h" + #include "utils/Logger.h" +#include +#include + IDJob::IDJob(const QString& id, QObject* parent) : Job( parent ) , m_batchIdentifier( id ) @@ -31,8 +38,57 @@ QString IDJob::prettyName() const return tr( "OEM Batch Identifier" ); } +Calamares::JobResult IDJob::writeId( const QString& dirs, const QString& filename, const QString& contents ) +{ + if ( !QDir().mkpath( dirs ) ) + { + cError() << "Could not create directories" << dirs; + return Calamares::JobResult::error( + tr( "OEM Batch Identifier" ), + tr( "Could not create directories %1." ).arg( dirs ) ); + } + + QFile output( QDir( dirs ).filePath( filename ) ); + if ( output.exists() ) + cWarning() << "Existing OEM Batch ID" << output.fileName() << "overwritten."; + + if ( !output.open( QIODevice::WriteOnly ) ) + { + cError() << "Could not write to" << output.fileName(); + return Calamares::JobResult::error( + tr( "OEM Batch Identifier" ), + tr( "Could not open file %1." ).arg( output.fileName() ) ); + } + + if ( output.write( contents.toUtf8() ) < 0 ) + { + cError() << "Write error on" << output.fileName(); + return Calamares::JobResult::error( + tr( "OEM Batch Identifier" ), + tr( "Could not write to file %1." ).arg( output.fileName() ) ); + } + output.write( "\n" ); // Ignore error on this one + + return Calamares::JobResult::ok(); +} + Calamares::JobResult IDJob::exec() { cDebug() << "Setting OEM Batch ID to" << m_batchIdentifier; - return Calamares::JobResult::ok(); + + Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + + QString targetDir = QStringLiteral( "/var/log/installer/" ); + QString targetFile = QStringLiteral( "oem-id" ); + QString rootMount = gs->value( "rootMountPoint" ).toString(); + + static const char noRoot[] = "No rootMountPoint is set."; + static const char yesRoot[] = "rootMountPoint is set:"; + + QString targetPath; + + if ( rootMount.isEmpty() && Calamares::Settings::instance()->doChroot() ) + cWarning() << Logger::SubEntry << noRoot; + + return writeId( Calamares::Settings::instance()->doChroot() ? rootMount + targetDir : targetDir, targetFile, m_batchIdentifier ); } diff --git a/src/modules/oemid/IDJob.h b/src/modules/oemid/IDJob.h index 0f563837e..845a3f451 100644 --- a/src/modules/oemid/IDJob.h +++ b/src/modules/oemid/IDJob.h @@ -25,6 +25,7 @@ class IDJob : public Calamares::Job { + Q_OBJECT public: explicit IDJob( const QString& id, QObject* parent = nullptr ); @@ -32,6 +33,8 @@ public: virtual Calamares::JobResult exec() override; private: + Calamares::JobResult writeId( const QString&, const QString&, const QString& ); + QString m_batchIdentifier; } ;