Mercurial > trustbridge
diff ui/mainwindow.cpp @ 16:225a5ec20dad
Use QSettings and manage downloader from mainwindow.
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 19 Feb 2014 10:45:29 +0000 |
parents | 7e2f14c7aba2 |
children | c12825a651ed |
line wrap: on
line diff
--- a/ui/mainwindow.cpp Wed Feb 19 10:45:06 2014 +0000 +++ b/ui/mainwindow.cpp Wed Feb 19 10:45:29 2014 +0000 @@ -7,6 +7,7 @@ #include <QDialog> #include <QMenu> #include <QApplication> +#include <QFile> #include "certificatelist.h" #include "downloader.h" @@ -21,14 +22,14 @@ void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason) { - showMessage(); - qDebug() << "Activated for reason: " << reason; switch (reason) { case QSystemTrayIcon::Trigger: - case QSystemTrayIcon::DoubleClick: case QSystemTrayIcon::MiddleClick: showMessage(); break; + case QSystemTrayIcon::DoubleClick: + // TODO show menu + break; default: ; } @@ -36,20 +37,114 @@ void MainWindow::showMessage() { - mTrayIcon->showMessage("Hello", "World", QSystemTrayIcon::Information, - 10000); + if (!mCurMessage.isEmpty()) { + mTrayIcon->showMessage(QApplication::applicationName(), mCurMessage, + QSystemTrayIcon::Information, 5000); + } } -void MainWindow::manualCheck() + +/** @brief check the integrity of available files. + * + * Do not use this as a trust check as this only works on + * FileNames where the underlying files can change. This + * is just meant to check if the downloaded data was somehow + * removed or corrupted. + * + */ +void MainWindow::verifyAvailableData() { - Downloader* downloader = new Downloader(this, QString::fromLatin1("")); - connect(downloader, &Downloader::finished, downloader, &QObject::deleteLater); + QString listFileName = mSettings.value("List/available").toString(); + QString swFileName = mSettings.value("Software/available").toString(); + + if (!listFileName.isEmpty()) { + const char *cFileName = listFileName.toLocal8Bit().constData(); + char *data = NULL; + size_t size; + + if (readAndVerifyList(cFileName, &data, &size) != Valid) { + // Probably a bug when Qt fileName is encoded and cFileName + // fails because of this. This needs a unit test! + // Maybe check that the file is in our data directory + QFile::remove(listFileName); + mSettings.remove("List/available"); + mSettings.remove("List/availableDate"); + } + + free(data); // We only needed verify + } else { + // Make sure the available notation is also removed + mSettings.remove("List/available"); + mSettings.remove("List/availableDate"); + } + + if (!swFileName.isEmpty()) { + // TODO + } else { + mSettings.remove("Software/available"); + mSettings.remove("Software/availableDate"); + } +} + +void MainWindow::handleNewList(const QString& fileName, const QDateTime& modDate) { + + mCurMessage = tr("An updated certificate list is available. Click here to install."); + setState(NewListAvailable); + mSettings.setValue("List/available", fileName); + mSettings.setValue("List/availableDate", modDate); + showMessage(); +} + +void MainWindow::handleNewSW(const QString& fileName, const QDateTime& modDate) { + mCurMessage = tr("An update for %1 is available. Click here to install.").arg( + QApplication::applicationName()); + setState(NewSoftwareAvailable); + mSettings.setValue("Software/available", fileName); + mSettings.setValue("Software/availableDate", modDate); + + qDebug() << "Settings value: " << mSettings.value("Software/available"); + mSettings.sync(); + showMessage(); +} + +void MainWindow::checkUpdates() +{ + verifyAvailableData(); + + QDateTime listAvailableLastMod = mSettings.value("List/availableDate").toDateTime(); + QDateTime swAvailableLastMod = mSettings.value("Software/availableDate").toDateTime(); + + if (!listAvailableLastMod.isValid()) { + listAvailableLastMod = mSettings.value("List/installedLastMod").toDateTime(); + } + + if (!swAvailableLastMod.isValid()) { + swAvailableLastMod = mSettings.value("List/installedLastMod").toDateTime(); + } + + Downloader* downloader = new Downloader(this, QString::fromLatin1("www.files.kolab.org"), + QByteArray(), swAvailableLastMod, listAvailableLastMod); + connect(downloader, SIGNAL(newListAvailable(const QString&, const QDateTime&)), + this, SLOT(handleNewList(const QString&, const QDateTime&))); + connect(downloader, SIGNAL(newSoftwareAvailable(const QString&, const QDateTime&)), + this, SLOT(handleNewSW(const QString&, const QDateTime&))); + connect(downloader, SIGNAL(finished()), downloader, SLOT(deleteLater())); + connect(downloader, SIGNAL(error(const QString &, Downloader::ErrorCode)), + this, SLOT(downloaderError(const QString &, Downloader::ErrorCode))); downloader->start(); } + +void MainWindow::downloaderError(const QString &message, Downloader::ErrorCode error) +{ + // TODO decide what to show when and how. + mCurMessage = message; +} + + void MainWindow::createActions() { mCheckUpdates = new QAction(tr("Check for Updates"), this); - connect(mCheckUpdates, SIGNAL(triggered()), this, SLOT(manualCheck())); + connect(mCheckUpdates, SIGNAL(triggered()), this, SLOT(checkUpdates())); mQuitAction = new QAction(tr("Quit"), this); connect(mQuitAction, SIGNAL(triggered()), qApp, SLOT(quit())); } @@ -69,5 +164,4 @@ setWindowIcon(trayImg); mTrayIcon->show(); mTrayIcon->setToolTip(tr("m13ui")); - showMessage(); }