diff --git a/src/calculateconfig.cpp b/src/calculateconfig.cpp index 2ad6cdd..f61d435 100644 --- a/src/calculateconfig.cpp +++ b/src/calculateconfig.cpp @@ -50,7 +50,7 @@ bool CalculateConfig::getDefaultConfig() { QDomElement domRoot = xmlVars.documentElement(); if (domRoot.tagName() == "variables") { - parseVariables(domRoot); + parseVariables(domRoot, m_Config); } else { qDebug() << "Section \"variables\" not found"; return false; @@ -80,7 +80,71 @@ bool CalculateConfig::getDefaultConfig() return true; } -void CalculateConfig::parseVariables(const QDomNode& node) +QStringList CalculateConfig::getPasswordUsers() +{ + QStringList result; + + MapConfig migrateUser; + + QProcess cl_install; + + QString usersParam; + + foreach( const QString& user, m_Config["gui_users"].toStringList() ) + { + usersParam += " --user " + user; + } + + qDebug() << "Start cl-install" << usersParam << " -v --xml --filter *migrate*"; + cl_install.start("cl-install" + usersParam + " -v --xml --filter *migrate*" ); + + if ( !cl_install.waitForStarted() ) + { + qDebug() << "Process not started"; + return QStringList(); + } + + if ( !cl_install.waitForFinished() ) + { + qDebug() << "Process finished with error"; + return QStringList(); + } + + QString outVars = cl_install.readAll(); + + QDomDocument xmlVars; + QString errMsg; + int errLine; + int errColumn; + + if ( xmlVars.setContent(outVars, true, &errMsg, &errLine, &errColumn) ) + { + QDomElement domRoot = xmlVars.documentElement(); + if (domRoot.tagName() == "variables") { + parseVariables(domRoot, migrateUser); + } else { + qDebug() << "Section \"variables\" not found"; + return QStringList(); + } + } + + if ( migrateUser["cl_migrate_user"].toStringList().count() != + migrateUser["cl_migrate_user_psw"].toStringList().count() + ) + { + return QStringList(); + } + + for ( int i(0); i != migrateUser["cl_migrate_user"].toStringList().count(); ++i ) + { + if ( migrateUser["cl_migrate_user_psw"].toStringList().at(i) == "yes" ) + result << migrateUser["cl_migrate_user"].toStringList().at(i); + } + + return result; +} + +void CalculateConfig::parseVariables(const QDomNode& node, MapConfig& cfg) { QDomNode domNode = node.firstChild(); while ( !domNode.isNull() ) @@ -94,11 +158,11 @@ void CalculateConfig::parseVariables(const QDomNode& node) { if (domElement.attribute("type") == "var") { - parseVar(domElement); + parseVar(domElement, cfg); } else if (domElement.attribute("type") == "list") { - parseVarList(domElement); + parseVarList(domElement, cfg); } } } @@ -107,7 +171,7 @@ void CalculateConfig::parseVariables(const QDomNode& node) } } -void CalculateConfig::parseVar(const QDomNode& node) +void CalculateConfig::parseVar(const QDomNode& node, MapConfig& cfg) { QString name = node.toElement().attribute("name"); QDomNode domNode = node.firstChild(); @@ -122,7 +186,7 @@ void CalculateConfig::parseVar(const QDomNode& node) if (domElement.tagName() == "value") { //qDebug() << "var " << name << " = " << domElement.text(); - m_Config[name] = QVariant( domElement.text() ); + cfg[name] = QVariant( domElement.text() ); } } } @@ -130,7 +194,7 @@ void CalculateConfig::parseVar(const QDomNode& node) } } -void CalculateConfig::parseVarList(const QDomNode& node) +void CalculateConfig::parseVarList(const QDomNode& node, MapConfig& cfg) { QStringList resList; QString name = node.toElement().attribute("name"); @@ -154,7 +218,7 @@ void CalculateConfig::parseVarList(const QDomNode& node) } if ( !resList.isEmpty() ) { - m_Config[name] = QVariant( resList ); + cfg[name] = QVariant( resList ); } } @@ -183,7 +247,7 @@ QStringList CalculateConfig::getInstallParameters() foreach(const QString& disk, m_Config["--disk"].toStringList()) { QString disk_t(disk); - disk_t.replace(" ", ""); + disk_t = disk_t.simplified(); params << QString("--disk ") + disk_t; } } @@ -230,5 +294,14 @@ QStringList CalculateConfig::getInstallParameters() if ( !m_Config["gui_install_language"].toString().isEmpty() ) params << "--lang " + m_Config["gui_install_language"].toString(); + // users + if ( m_Config["gui_users"].toStringList().count() > 0 ) + { + foreach(const QString& user, m_Config["gui_users"].toStringList()) + { + params << QString("--user ") + user; + } + } + return params; } diff --git a/src/calculateconfig.h b/src/calculateconfig.h index f359b4d..0d8c104 100644 --- a/src/calculateconfig.h +++ b/src/calculateconfig.h @@ -10,6 +10,8 @@ class QDomNode; +typedef QMap MapConfig; + class CalculateConfig: public QObject { Q_OBJECT @@ -24,6 +26,8 @@ public: void showInstallParameters(); QStringList getInstallParameters(); + QStringList getPasswordUsers(); + signals: void sendParameters(QStringList); @@ -33,12 +37,12 @@ private: CalculateConfig(const CalculateConfig&); CalculateConfig& operator=(const CalculateConfig&); - void parseVariables(const QDomNode& node); - void parseVar(const QDomNode& node); - void parseVarList(const QDomNode& node); + void parseVariables(const QDomNode& node, MapConfig& cfg); + void parseVar(const QDomNode& node, MapConfig& cfg); + void parseVarList(const QDomNode& node, MapConfig& cfg); private: static CalculateConfig* _instance; - QMap m_Config; + MapConfig m_Config; }; \ No newline at end of file diff --git a/src/pageinstall.cpp b/src/pageinstall.cpp index c63b8e5..09c7308 100644 --- a/src/pageinstall.cpp +++ b/src/pageinstall.cpp @@ -24,7 +24,7 @@ void PageInstall::setupUi() m_Output->setReadOnly(true); QFont font = m_Output->currentFont(); font.setFamily("Droid Sans Mono"); - font.setPointSize(10); + font.setPointSize(8); m_Output->setFont( font ); m_Output->setLineWrapMode( QTextEdit::NoWrap ); @@ -57,11 +57,39 @@ void PageInstall::show() { qDebug() << "install show()"; + CalculateConfig* clConf = CalculateConfig::instance(); + emit changeNext(false); emit changePrev(false); if ( !m_clProc ) { + // check password for user + QStringList passwdNeed = clConf->getPasswordUsers(); + qDebug() << "Passwords need: " + passwdNeed.join(","); + + QStringList passwd; + foreach(const QString& user, passwdNeed) + { + if (user == "root") + { + passwd << clConf->getValue("gui_root_psw").toString(); + } + else + { + for (int i(0); i != clConf->getValue("gui_users").toStringList().count(); ++i) + { + if ( clConf->getValue("gui_users").toStringList().at(i) == user ) + { + passwd << clConf->getValue("gui_passwds").toStringList().at(i); + break; + } + qDebug() << "Unknown user " << user; + return; + } + } + } + m_clProc = new QProcess(this); connect( m_clProc, SIGNAL(error(QProcess::ProcessError)), this, SLOT(onError(QProcess::ProcessError)) ); @@ -82,6 +110,8 @@ void PageInstall::show() m_Progress->setMinimum(0); m_Progress->setMaximum(0); + + m_clProc->write( (passwd.join("\n") + "\n").toLocal8Bit() ); } } @@ -97,19 +127,16 @@ void PageInstall::showStdOut() { if (m_clProc) { - // debug QString str = m_clProc->readAllStandardOutput(); - //qDebug() << "stdout : " << str.toLocal8Bit().toHex(); - // skip fan (/|\-) str.replace("\x08/", ""); str.replace("\x08\\", ""); str.replace("\x08-", ""); str.replace("\x08|", ""); + m_Output->moveCursor(QTextCursor::End); m_Output->insertPlainText( str ); - m_Output->moveCursor(QTextCursor::EndOfBlock); } } @@ -132,6 +159,7 @@ void PageInstall::onFinish(int exitCode, QProcess::ExitStatus exitStatus) } else { + m_Output->moveCursor(QTextCursor::End); m_Output->insertPlainText( tr("Error. Additional information in /var/log/calculate/cl-install-gui-err.log") ); diff --git a/src/pageusers.cpp b/src/pageusers.cpp index 979ae09..a9ec4f0 100644 --- a/src/pageusers.cpp +++ b/src/pageusers.cpp @@ -15,6 +15,8 @@ #include +#include "calculateconfig.h" + PageUsers::PageUsers() : InstallerPage() { @@ -245,3 +247,23 @@ int PageUsers::findUserName( const UserInfo& userInfo ) return -1; } +bool PageUsers::validate() +{ + CalculateConfig* clConf = CalculateConfig::instance(); + + clConf->setValue("gui_root_psw", m_edRootPsw->text()); + + QStringList users; + QStringList passwords; + foreach(const UserInfo& user, m_lstUserInfo) + { + users << user.name; + passwords << user.psw; + } + + clConf->setValue("gui_users", users); + clConf->setValue("gui_passwds", passwords); + + return true; +} + diff --git a/src/pageusers.h b/src/pageusers.h index 8365dc2..a82f1e1 100644 --- a/src/pageusers.h +++ b/src/pageusers.h @@ -16,6 +16,7 @@ public: explicit PageUsers(); void retranslateUi(); + bool validate(); protected: void setupUi(); diff --git a/src/systeminstaller.cpp b/src/systeminstaller.cpp index ba60154..da1f3d4 100644 --- a/src/systeminstaller.cpp +++ b/src/systeminstaller.cpp @@ -131,8 +131,8 @@ void SystemInstaller::setupUi() // minimum size for window TODO: remove magic numbers, add other sizes? //setMinimumSize(800, 600); //setMaximumSize(800, 600); - setMinimumSize(800, 500); - setMaximumSize(800, 500); + setMinimumSize(800, 600); + setMaximumSize(800, 600); QRect scr = QApplication::desktop()->screenGeometry(); move( scr.width() - scr.width()/2 - 800/2, scr.height() - scr.height()/2 - 600/2 ); @@ -177,10 +177,10 @@ void SystemInstaller::setupInstallerPages() PageConfiguration* pageConfiguration( new PageConfiguration ); m_PageManager->addPage(pageConfiguration); -/* + PageUsers* pageUsers( new PageUsers ); m_PageManager->addPage( pageUsers ); -*/ + PageInstall* pageInstall( new PageInstall ); m_PageManager->addPage(pageInstall);