diff --git a/src/library/sysadm-update.cpp b/src/library/sysadm-update.cpp index f65de87..fc345cf 100644 --- a/src/library/sysadm-update.cpp +++ b/src/library/sysadm-update.cpp @@ -14,56 +14,87 @@ using namespace sysadm; // Return a list of updates available QJsonObject Update::checkUpdates() { - QJsonObject retObject; + QJsonObject retObject; - QStringList output = General::RunCommand("pc-updatemanager check").split("\n"); - QString nameval; + QStringList output = General::RunCommand("pc-updatemanager check").split("\n"); + QString nameval; - for ( int i = 0; i < output.size(); i++) - { - if ( output.at(i).indexOf("Your system is up to date!") != -1 ) - { - retObject.insert("status", "noupdates"); - return retObject; - } - if ( output.at(i).indexOf("NAME: ") != -1 ) - nameval = output.at(i).section(" ", 1, 1); + for ( int i = 0; i < output.size(); i++) + { + if ( output.at(i).indexOf("Your system is up to date!") != -1 ) + { + retObject.insert("status", "noupdates"); + return retObject; + } + if ( output.at(i).indexOf("NAME: ") != -1 ) + nameval = output.at(i).section(" ", 1, 1); - if ( output.at(i).indexOf("TYPE: SECURITYUPDATE") != -1 ) { - QJsonObject itemvals; - itemvals.insert("name", nameval); - retObject.insert("security", itemvals); - } - if ( output.at(i).indexOf("TYPE: SYSTEMUPDATE") != -1 ) { - QJsonObject itemvals; - itemvals.insert("name", nameval); - if ( output.size() > ( i + 1) ) - itemvals.insert("tag", output.at(i+1).section(" ", 1, 1)); - if ( output.size() > ( i + 2) ) - itemvals.insert("version", output.at(i+2).section(" ", 1, 1)); - retObject.insert("majorupgrade", itemvals); - } - if ( output.at(i).indexOf("TYPE: PATCH") != -1 ) { - QJsonObject itemvals; - itemvals.insert("name", nameval); - if ( output.size() > ( i + 1) ) - itemvals.insert("tag", output.at(i+1).section(" ", 1, 1)); - if ( output.size() > ( i + 2) ) - itemvals.insert("details", output.at(i+2).section(" ", 1, 1)); - if ( output.size() > ( i + 3) ) - itemvals.insert("date", output.at(i+3).section(" ", 1, 1)); - if ( output.size() > ( i + 4) ) - itemvals.insert("size", output.at(i+4).section(" ", 1, 1)); - retObject.insert("patch", itemvals); - } - if ( output.at(i).indexOf("TYPE: PKGUPDATE") != -1 ) { - QJsonObject itemvals; - itemvals.insert("name", nameval); - retObject.insert("packageupdate", itemvals); - } + if ( output.at(i).indexOf("TYPE: SECURITYUPDATE") != -1 ) { + QJsonObject itemvals; + itemvals.insert("name", nameval); + retObject.insert("security", itemvals); + } + if ( output.at(i).indexOf("TYPE: SYSTEMUPDATE") != -1 ) { + QJsonObject itemvals; + itemvals.insert("name", nameval); + if ( output.size() > ( i + 1) ) + itemvals.insert("tag", output.at(i+1).section(" ", 1, 1)); + if ( output.size() > ( i + 2) ) + itemvals.insert("version", output.at(i+2).section(" ", 1, 1)); + retObject.insert("majorupgrade", itemvals); + } + if ( output.at(i).indexOf("TYPE: PATCH") != -1 ) { + QJsonObject itemvals; + itemvals.insert("name", nameval); + if ( output.size() > ( i + 1) ) + itemvals.insert("tag", output.at(i+1).section(" ", 1, 1)); + if ( output.size() > ( i + 2) ) + itemvals.insert("details", output.at(i+2).section(" ", 1, 1)); + if ( output.size() > ( i + 3) ) + itemvals.insert("date", output.at(i+3).section(" ", 1, 1)); + if ( output.size() > ( i + 4) ) + itemvals.insert("size", output.at(i+4).section(" ", 1, 1)); + retObject.insert("patch", itemvals); + } + if ( output.at(i).indexOf("TYPE: PKGUPDATE") != -1 ) { + QJsonObject itemvals; + itemvals.insert("name", nameval); + retObject.insert("packageupdate", itemvals); + } } // Update status that we have updates retObject.insert("status", "updatesavailable"); return retObject; } + +// List available branches we can switch to +QJsonObject Update::listBranches() { + QJsonObject retObject; + + QStringList output = General::RunCommand("pc-updatemanager branches").split("\n"); + + bool inSection = false; + for ( int i = 0; i < output.size(); i++) + { + if ( output.at(i).indexOf("-----------------") != -1 ) { + inSection = true; + continue; + } + + if (!inSection) + continue; + + if ( output.at(i).isEmpty() ) + break; + + QString tmp = output.at(i).section(" ", 0, 0); + QString tmp2 = output.at(i).section(" ", 1, 1); + if ( tmp2 == "*" ) + retObject.insert(tmp, "active"); + else + retObject.insert(tmp, "available"); + } + + return retObject; +} diff --git a/src/library/sysadm-update.h b/src/library/sysadm-update.h index f2a9284..efc7e3d 100644 --- a/src/library/sysadm-update.h +++ b/src/library/sysadm-update.h @@ -15,6 +15,7 @@ namespace sysadm{ class Update{ public: static QJsonObject checkUpdates(); + static QJsonObject listBranches(); }; } //end of pcbsd namespace diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index c5e870a..98a3bd5 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -297,9 +297,11 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmUpdateRequest(const QJsonVal QString act = JsonValueToString(in_args.toObject().value("action")); if(act=="checkupdates"){ ok = true; - qDebug() << " - Starting update check"; out->insert("checkupdates", sysadm::Update::checkUpdates()); - qDebug() << " - Finished update check"; + } + if(act=="listbranches"){ + ok = true; + out->insert("listbranches", sysadm::Update::listBranches()); } } //end of "action" key usage