1 /* === This file is part of Calamares - <https://calamares.io> ===
2  *
3  *   SPDX-FileCopyrightText: 2014 Teo Mrnjavac <teo@kde.org> (original dummypython code)
4  *   SPDX-FileCopyrightText: 2016 Kevin Kofler <kevin.kofler@chello.at>
5  *   SPDX-FileCopyrightText: 2018 Adriaan de Groot <groot@kde.org>
6  *   SPDX-License-Identifier: GPL-3.0-or-later
7  *
8  *   Calamares is Free Software: see the License-Identifier above.
9  *
10  */
11 
12 #include "DummyCppJob.h"
13 
14 #include <QDateTime>
15 #include <QProcess>
16 #include <QThread>
17 
18 #include "CalamaresVersion.h"
19 #include "GlobalStorage.h"
20 #include "JobQueue.h"
21 
22 #include "utils/CalamaresUtilsSystem.h"
23 #include "utils/Logger.h"
24 
DummyCppJob(QObject * parent)25 DummyCppJob::DummyCppJob( QObject* parent )
26     : Calamares::CppJob( parent )
27 {
28 }
29 
30 
~DummyCppJob()31 DummyCppJob::~DummyCppJob() {}
32 
33 
34 QString
prettyName() const35 DummyCppJob::prettyName() const
36 {
37     return tr( "Dummy C++ Job" );
38 }
39 
40 
41 static QString variantListToString( const QVariantList& variantList );
42 static QString variantMapToString( const QVariantMap& variantMap );
43 static QString variantHashToString( const QVariantHash& variantHash );
44 
45 
46 static QString
variantToString(const QVariant & variant)47 variantToString( const QVariant& variant )
48 {
49     if ( variant.type() == QVariant::Map )
50     {
51         return variantMapToString( variant.toMap() );
52     }
53     else if ( variant.type() == QVariant::Hash )
54     {
55         return variantHashToString( variant.toHash() );
56     }
57     else if ( ( variant.type() == QVariant::List ) || ( variant.type() == QVariant::StringList ) )
58     {
59         return variantListToString( variant.toList() );
60     }
61     else
62     {
63         return variant.toString();
64     }
65 }
66 
67 
68 static QString
variantListToString(const QVariantList & variantList)69 variantListToString( const QVariantList& variantList )
70 {
71     QStringList result;
72     for ( const QVariant& variant : variantList )
73     {
74         result.append( variantToString( variant ) );
75     }
76     return '{' + result.join( ',' ) + '}';
77 }
78 
79 
80 static QString
variantMapToString(const QVariantMap & variantMap)81 variantMapToString( const QVariantMap& variantMap )
82 {
83     QStringList result;
84     for ( auto it = variantMap.constBegin(); it != variantMap.constEnd(); ++it )
85     {
86         result.append( it.key() + '=' + variantToString( it.value() ) );
87     }
88     return '[' + result.join( ',' ) + ']';
89 }
90 
91 
92 static QString
variantHashToString(const QVariantHash & variantHash)93 variantHashToString( const QVariantHash& variantHash )
94 {
95     QStringList result;
96     for ( auto it = variantHash.constBegin(); it != variantHash.constEnd(); ++it )
97     {
98         result.append( it.key() + '=' + variantToString( it.value() ) );
99     }
100     return '<' + result.join( ',' ) + '>';
101 }
102 
103 
104 Calamares::JobResult
exec()105 DummyCppJob::exec()
106 {
107     // Ported from dummypython
108     CalamaresUtils::System::runCommand( CalamaresUtils::System::RunLocation::RunInHost,
109                                         QStringList() << "/bin/sh"
110                                                       << "-c"
111                                                       << "touch ~/calamares-dummycpp" );
112     QString accumulator = QDateTime::currentDateTimeUtc().toString( Qt::ISODate ) + '\n';
113     accumulator += QStringLiteral( "Calamares version: " ) + CALAMARES_VERSION_SHORT + '\n';
114     accumulator += QStringLiteral( "This job's name: " ) + prettyName() + '\n';
115     accumulator += QStringLiteral( "Configuration map: %1\n" ).arg( variantMapToString( m_configurationMap ) );
116     accumulator += QStringLiteral( "   *** globalstorage test ***\n" );
117     Calamares::GlobalStorage* globalStorage = Calamares::JobQueue::instance()->globalStorage();
118     accumulator += QStringLiteral( "lala: " )
119         + ( globalStorage->contains( "lala" ) ? QStringLiteral( "true" ) : QStringLiteral( "false" ) ) + '\n';
120     accumulator += QStringLiteral( "foo: " )
121         + ( globalStorage->contains( "foo" ) ? QStringLiteral( "true" ) : QStringLiteral( "false" ) ) + '\n';
122     accumulator += QStringLiteral( "count: " ) + QString::number( globalStorage->count() ) + '\n';
123     globalStorage->insert( "item2", "value2" );
124     globalStorage->insert( "item3", 3 );
125     accumulator += QStringLiteral( "keys: %1\n" ).arg( globalStorage->keys().join( ',' ) );
126     accumulator += QStringLiteral( "remove: %1\n" ).arg( QString::number( globalStorage->remove( "item2" ) ) );
127     accumulator += QStringLiteral( "values: %1 %2 %3\n" )
128                        .arg( globalStorage->value( "foo" ).toString(),
129                              globalStorage->value( "item2" ).toString(),
130                              globalStorage->value( "item3" ).toString() );
131 
132     emit progress( 0.1 );
133     cDebug() << "[DUMMYCPP]: " << accumulator;
134 
135     globalStorage->debugDump();
136     emit progress( 0.5 );
137 
138     QThread::sleep( 3 );
139 
140     return Calamares::JobResult::ok();
141 }
142 
143 
144 void
setConfigurationMap(const QVariantMap & configurationMap)145 DummyCppJob::setConfigurationMap( const QVariantMap& configurationMap )
146 {
147     m_configurationMap = configurationMap;
148 }
149 
150 CALAMARES_PLUGIN_FACTORY_DEFINITION( DummyCppJobFactory, registerPlugin< DummyCppJob >(); )
151