diff --git a/rbutil/rbutilqt/base/serverinfo.cpp b/rbutil/rbutilqt/base/serverinfo.cpp index 544348c3b1..08f7f770b7 100644 --- a/rbutil/rbutilqt/base/serverinfo.cpp +++ b/rbutil/rbutilqt/base/serverinfo.cpp @@ -21,7 +21,15 @@ #include "systeminfo.h" #include "Logger.h" -static QSettings* serverSettings = nullptr; +ServerInfo* ServerInfo::infoInstance = nullptr; + +ServerInfo* ServerInfo::instance() +{ + if (infoInstance == nullptr) { + infoInstance = new ServerInfo(); + } + return infoInstance; +} // server infos const static struct { @@ -131,10 +139,10 @@ QVariant ServerInfo::platformValue(enum ServerInfos info, QString platform) return value; } -QString ServerInfo::statusToString(int status) +QString ServerInfo::statusAsString(QString platform) { QString value; - switch(status) + switch(platformValue(CurStatus, platform).toInt()) { case STATUS_RETIRED: value = tr("Stable (Retired)"); diff --git a/rbutil/rbutilqt/base/serverinfo.h b/rbutil/rbutilqt/base/serverinfo.h index e8d7cd5b74..9affcb6032 100644 --- a/rbutil/rbutilqt/base/serverinfo.h +++ b/rbutil/rbutilqt/base/serverinfo.h @@ -18,6 +18,9 @@ * ****************************************************************************/ +// Parse and provide information from build server via build-info file. +// This is a singleton. + #ifndef SERVERINFO_H #define SERVERINFO_H @@ -47,17 +50,21 @@ class ServerInfo : public QObject RelCandidateUrl, }; + static ServerInfo* instance(); + //! read in buildinfo file - static void readBuildInfo(QString file); + void readBuildInfo(QString file); //! get a value from server info for a named platform. - static QVariant platformValue(enum ServerInfos setting, QString platform = ""); - //! Convert status number to string - static QString statusToString(int status); + QVariant platformValue(enum ServerInfos setting, QString platform = ""); + //! Get status number as string + QString statusAsString(QString platform = ""); + + protected: + ServerInfo() : serverSettings(nullptr) {} private: - //! you shouldnt call this, its a fully static class - ServerInfo() {} - + static ServerInfo* infoInstance; + QSettings* serverSettings; }; diff --git a/rbutil/rbutilqt/configure.cpp b/rbutil/rbutilqt/configure.cpp index d4457a34ed..fc67cb410e 100644 --- a/rbutil/rbutilqt/configure.cpp +++ b/rbutil/rbutilqt/configure.cpp @@ -385,9 +385,8 @@ void Config::setDevices() continue; // construct display name QString curname = SystemInfo::platformValue( - SystemInfo::Name, platformList.at(it)).toString() + - " (" + ServerInfo::statusToString(ServerInfo::platformValue( - ServerInfo::CurStatus, platformList.at(it)).toInt()) +")"; + SystemInfo::Name, platformList.at(it)).toString() + + " (" + ServerInfo::instance()->statusAsString(platformList.at(it)) + ")"; LOG_INFO() << "add supported device:" << brands.at(c) << curname; w2 = new QTreeWidgetItem(w, QStringList(curname)); w2->setData(0, Qt::UserRole, platformList.at(it)); diff --git a/rbutil/rbutilqt/gui/manualwidget.cpp b/rbutil/rbutilqt/gui/manualwidget.cpp index ba8f6f6064..c10288df10 100644 --- a/rbutil/rbutilqt/gui/manualwidget.cpp +++ b/rbutil/rbutilqt/gui/manualwidget.cpp @@ -42,9 +42,9 @@ void ManualWidget::updateManual() if(!m_platform.isEmpty()) { ui.labelPdfManual->setText(tr("PDF Manual") - .arg(ServerInfo::platformValue(ServerInfo::ManualPdfUrl, m_platform).toString())); + .arg(ServerInfo::instance()->platformValue(ServerInfo::ManualPdfUrl, m_platform).toString())); ui.labelHtmlManual->setText(tr("HTML Manual (opens in browser)") - .arg(ServerInfo::platformValue(ServerInfo::ManualHtmlUrl, m_platform).toString())); + .arg(ServerInfo::instance()->platformValue(ServerInfo::ManualHtmlUrl, m_platform).toString())); } else { ui.labelPdfManual->setText(tr("Select a device for a link to the correct manual")); @@ -65,7 +65,7 @@ void ManualWidget::downloadManual(void) QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { return; } - QString manual = ServerInfo::platformValue(ServerInfo::ManualPdfUrl).toString(); + QString manual = ServerInfo::instance()->platformValue(ServerInfo::ManualPdfUrl).toString(); ProgressLoggerGui* logger = new ProgressLoggerGui(this); logger->show(); @@ -75,12 +75,12 @@ void ManualWidget::downloadManual(void) installer->setCache(true); if(ui.radioPdf->isChecked()) { - installer->setUrl(ServerInfo::platformValue( + installer->setUrl(ServerInfo::instance()->platformValue( ServerInfo::ManualPdfUrl, m_platform).toString()); installer->setLogSection("Manual (PDF)"); } else { - installer->setUrl(ServerInfo::platformValue( + installer->setUrl(ServerInfo::instance()->platformValue( ServerInfo::ManualZipUrl, m_platform).toString()); installer->setLogSection("Manual (HTML)"); } diff --git a/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp b/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp index f875844c9c..805a432877 100644 --- a/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp +++ b/rbutil/rbutilqt/gui/selectiveinstallwidget.cpp @@ -69,7 +69,7 @@ void SelectiveInstallWidget::selectedVersionChanged(int index) if(current == "development") ui.selectedDescription->setText(tr("The development version is " "updated on every code change. Last update was on %1").arg( - ServerInfo::platformValue(ServerInfo::BleedingDate).toString())); + ServerInfo::instance()->platformValue(ServerInfo::BleedingDate).toString())); if(current == "rc") ui.selectedDescription->setText(tr("This will eventually become the " "next Rockbox version. Install it to help testing.")); @@ -91,11 +91,11 @@ void SelectiveInstallWidget::updateVersion(void) // re-populate all version items m_versions.clear(); - m_versions.insert("release", ServerInfo::platformValue(ServerInfo::CurReleaseVersion).toString()); + m_versions.insert("release", ServerInfo::instance()->platformValue(ServerInfo::CurReleaseVersion).toString()); // Don't populate RC or development selections if target has been retired. - if (ServerInfo::platformValue(ServerInfo::CurStatus).toInt() != STATUS_RETIRED) { - m_versions.insert("development", ServerInfo::platformValue(ServerInfo::BleedingRevision).toString()); - m_versions.insert("rc", ServerInfo::platformValue(ServerInfo::RelCandidateVersion).toString()); + if (ServerInfo::instance()->platformValue(ServerInfo::CurStatus).toInt() != STATUS_RETIRED) { + m_versions.insert("development", ServerInfo::instance()->platformValue(ServerInfo::BleedingRevision).toString()); + m_versions.insert("rc", ServerInfo::instance()->platformValue(ServerInfo::RelCandidateVersion).toString()); } ui.selectedVersion->clear(); @@ -385,11 +385,11 @@ void SelectiveInstallWidget::installRockbox(void) RbSettings::setValue(RbSettings::Build, selected); RbSettings::sync(); - if(selected == "release") url = ServerInfo::platformValue( + if(selected == "release") url = ServerInfo::instance()->platformValue( ServerInfo::CurReleaseUrl, m_target).toString(); - else if(selected == "development") url = ServerInfo::platformValue( + else if(selected == "development") url = ServerInfo::instance()->platformValue( ServerInfo::CurDevelUrl, m_target).toString(); - else if(selected == "rc") url = ServerInfo::platformValue( + else if(selected == "rc") url = ServerInfo::instance()->platformValue( ServerInfo::RelCandidateUrl, m_target).toString(); //! install build diff --git a/rbutil/rbutilqt/rbutilqt.cpp b/rbutil/rbutilqt/rbutilqt.cpp index 0fb2ba562e..cd5bea57b9 100644 --- a/rbutil/rbutilqt/rbutilqt.cpp +++ b/rbutil/rbutilqt/rbutilqt.cpp @@ -252,7 +252,7 @@ void RbUtilQt::downloadDone(bool error) // read info into ServerInfo object buildInfo.open(); - ServerInfo::readBuildInfo(buildInfo.fileName()); + ServerInfo::instance()->readBuildInfo(buildInfo.fileName()); buildInfo.close(); ui.statusbar->showMessage(tr("Download build information finished."), 5000); @@ -408,7 +408,7 @@ void RbUtilQt::updateDevice() QString brand = SystemInfo::platformValue(SystemInfo::Brand).toString(); QString name = QString("%1 (%2)").arg(SystemInfo::platformValue(SystemInfo::Name).toString(), - ServerInfo::statusToString(ServerInfo::platformValue(ServerInfo::CurStatus).toInt())); + ServerInfo::instance()->statusAsString()); ui.labelDevice->setText(QString("%1 %2").arg(brand, name)); QString mountpoint = RbSettings::value(RbSettings::Mountpoint).toString(); @@ -789,7 +789,7 @@ void RbUtilQt::changeEvent(QEvent *e) if(e->type() == QEvent::LanguageChange) { ui.retranslateUi(this); buildInfo.open(); - ServerInfo::readBuildInfo(buildInfo.fileName()); + ServerInfo::instance()->readBuildInfo(buildInfo.fileName()); buildInfo.close(); updateDevice(); } else { diff --git a/rbutil/rbutilqt/test/test-serverinfo.cpp b/rbutil/rbutilqt/test/test-serverinfo.cpp index bda939676c..bc6024e843 100644 --- a/rbutil/rbutilqt/test/test-serverinfo.cpp +++ b/rbutil/rbutilqt/test/test-serverinfo.cpp @@ -110,11 +110,11 @@ void TestServerInfo::testMain() tf.write(testinfo); tf.close(); - ServerInfo::readBuildInfo(filename); + ServerInfo::instance()->readBuildInfo(filename); unsigned int i; for(i = 0; i < sizeof(testdata) / sizeof(struct testvector); i++) { - QString result = ServerInfo::platformValue(testdata[i].entry, testdata[i].target).toString(); + QString result = ServerInfo::instance()->platformValue(testdata[i].entry, testdata[i].target).toString(); QCOMPARE(result, QString(testdata[i].expected)); } }