#include "ipcfilewatcher.h" #include "orchestrator.h" #include "mainwindow.h" #include "conffilehandlerdialog.h" #include #include #include #include #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QTranslator translator; const QStringList uiLanguages = QLocale::system().uiLanguages(); for (const QString &locale : uiLanguages) { const QString baseName = "lubuntu-update_" + QLocale(locale).name(); if (translator.load(":/i18n/" + baseName)) { a.installTranslator(&translator); break; } } /* * If Lubuntu Update is already running, create * /dev/shm/lubuntu-update/lubuntu-update-show-win and exit. This will * trigger the existing process to pop up a window. */ QProcess procDetector; procDetector.setProgram("/usr/bin/bash"); procDetector.setArguments(QStringList() << "-c" << "ps axo comm | grep lubuntu-update"); procDetector.start(); procDetector.waitForFinished(); QString procDetectResult = procDetector.readAllStandardOutput(); procDetectResult = procDetectResult.trimmed(); QStringList procDetectResultList = procDetectResult.split('\n'); if (procDetectResultList.count() > 1) { QFile flagFile("/dev/shm/lubuntu-update/lubuntu-update-show-win"); flagFile.open(QFile::WriteOnly); flagFile.close(); return 0; } // Don't want the updater to stop just because the user closed it :P a.setQuitOnLastWindowClosed(false); /* * IPCFileWatcher just watches the /dev/shm/lubuntu-update folder for the * creation of a lubuntu-update-show-win file. If it detects it, it * immediately deletes it and emits a signal. This is then used later to * cause the updater window to pop up. */ IPCFileWatcher *p = new IPCFileWatcher(); if (p->didInitFail()) { return 1; } /* * As this is a background process, we don't pop up any window upon * startup. An Orchestrator object periodically checks to see if new * updates have been detected, and offers them to the user (by displaying * a tray icon) if so. The user can click on this tray icon to see the * updater window. * * Orchestrator's constructor automatically starts the update checker, so * there's no need to do anything with this except create it and then * start the event loop. */ Orchestrator *o = new Orchestrator(); QObject::connect(p, &IPCFileWatcher::showWindowFlagDetected, o, &Orchestrator::displayUpdater); /* * This is an artifact from testing the conffile handler window. You can * uncomment this and rebuild lubuntu-update in order to test the conffile * handler UI and develop it further. * * ConffileHandlerDialog cfhd(QStringList() << "/home/user/testfile"); * cfhd.show(); */ return a.exec(); }