Mercurial > trustbridge
comparison ui/mainwindow.cpp @ 389:3be838c3e4d8
Handle installation success. Save / load last installed list.
This also adds a feature that you can specifiy the download
resource when release build is not set so that you can
update a list without modifying the server data.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Tue, 15 Apr 2014 19:05:49 +0200 |
parents | 9e38a4bcd44e |
children | ae2ef965a41b |
comparison
equal
deleted
inserted
replaced
388:a507e5f1b999 | 389:3be838c3e4d8 |
---|---|
51 mMessageTimer = new QTimer(this); | 51 mMessageTimer = new QTimer(this); |
52 connect(mMessageTimer, SIGNAL(timeout()), this, SLOT(showMessage())); | 52 connect(mMessageTimer, SIGNAL(timeout()), this, SLOT(showMessage())); |
53 mMessageTimer->setInterval(NAG_INTERVAL_MINUTES * 60 * 1000); | 53 mMessageTimer->setInterval(NAG_INTERVAL_MINUTES * 60 * 1000); |
54 mMessageTimer->start(); | 54 mMessageTimer->start(); |
55 checkUpdates(); | 55 checkUpdates(); |
56 loadUnselectedCertificates(); | |
57 loadCertificateList(); | |
56 if (!trayMode) { | 58 if (!trayMode) { |
57 show(); | 59 show(); |
58 } | 60 } |
59 loadUnselectedCertificates(); | |
60 } | 61 } |
61 | 62 |
62 void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason) | 63 void MainWindow::iconActivated(QSystemTrayIcon::ActivationReason reason) |
63 { | 64 { |
64 switch (reason) { | 65 switch (reason) { |
90 } | 91 } |
91 } | 92 } |
92 | 93 |
93 void MainWindow::verifyAvailableData() | 94 void MainWindow::verifyAvailableData() |
94 { | 95 { |
95 QString listFileName = mSettings.value("List/available").toString(); | 96 QString availableFileName = mSettings.value("List/available").toString(); |
97 QString installedFileName = mSettings.value("List/installed").toString(); | |
96 QString swFileName = mSettings.value("Software/available").toString(); | 98 QString swFileName = mSettings.value("Software/available").toString(); |
97 | 99 |
98 if (!listFileName.isEmpty()) { | 100 if (!availableFileName.isEmpty()) { |
99 mListToInstall.readList(listFileName.toLocal8Bit().constData()); | 101 mListToInstall.readList(availableFileName.toLocal8Bit().constData()); |
100 if (!mListToInstall.isValid()) { | 102 if (!mListToInstall.isValid()) { |
101 mCurState = TransferError; | 103 mCurState = TransferError; |
102 // Probably a bug when Qt fileName is encoded and cFileName | 104 // Probably a bug when Qt fileName is encoded and cFileName |
103 // fails because of this. This needs a unit test! | 105 // fails because of this. This needs a unit test! |
104 // Maybe check that the file is in our data directory | 106 // Maybe check that the file is in our data directory |
105 QFile::remove(listFileName); | 107 QFile::remove(availableFileName); |
106 mSettings.remove("List/available"); | 108 mSettings.remove("List/available"); |
107 mSettings.remove("List/availableDate"); | 109 mSettings.remove("List/availableDate"); |
108 } | 110 } |
109 } else { | 111 } else { |
110 // Make sure the available notation is also removed | 112 // Make sure the available notation is also removed |
111 mSettings.remove("List/available"); | 113 mSettings.remove("List/available"); |
112 mSettings.remove("List/availableDate"); | 114 mSettings.remove("List/availableDate"); |
115 } | |
116 | |
117 if (!installedFileName.isEmpty()) { | |
118 mInstalledList.readList(installedFileName.toLocal8Bit().constData()); | |
119 if (!mInstalledList.isValid()) { | |
120 // Probably a bug when Qt fileName is encoded and cFileName | |
121 // fails because of this. This needs a unit test! | |
122 // Maybe check that the file is in our data directory | |
123 QFile::remove(installedFileName); | |
124 mSettings.remove("List/installed"); | |
125 mSettings.remove("List/installedDate"); | |
126 } | |
127 } else { | |
128 // Make sure the available notation is also removed | |
129 mSettings.remove("List/installed"); | |
130 mSettings.remove("List/installedDate"); | |
113 } | 131 } |
114 | 132 |
115 if (!swFileName.isEmpty()) { | 133 if (!swFileName.isEmpty()) { |
116 // TODO | 134 // TODO |
117 } else { | 135 } else { |
156 verifyAvailableData(); | 174 verifyAvailableData(); |
157 | 175 |
158 QDateTime listInstalledLastMod = mSettings.value("List/installedDate").toDateTime(); | 176 QDateTime listInstalledLastMod = mSettings.value("List/installedDate").toDateTime(); |
159 QDateTime swInstalledLastMod = mSettings.value("Software/installedDate").toDateTime(); | 177 QDateTime swInstalledLastMod = mSettings.value("Software/installedDate").toDateTime(); |
160 | 178 |
179 QString listResource = QString::fromLatin1(LIST_RESOURCE); | |
180 QString swResource = QString::fromLatin1(SW_RESOURCE); | |
181 | |
182 #ifndef RELEASE_BUILD | |
183 /* Use this for testing to specify another file name for updates */ | |
184 listResource = mSettings.value("List/resource", listResource).toString(); | |
185 swResource = mSettings.value("Software/resource", swResource).toString(); | |
186 #endif | |
187 | |
188 | |
161 Downloader* downloader = new Downloader(this, | 189 Downloader* downloader = new Downloader(this, |
162 QString::fromLatin1(SERVER_URL), | 190 QString::fromLatin1(SERVER_URL), |
163 QByteArray(), | 191 QByteArray(), |
164 QDateTime::currentDateTime(), | 192 QDateTime::currentDateTime(), |
165 // swInstalledLastMod, | 193 // TODO swInstalledLastMod, |
166 listInstalledLastMod, | 194 listInstalledLastMod, |
167 QString::fromLatin1(SW_RESOURCE), | 195 QString::fromLatin1(SW_RESOURCE), |
168 QString::fromLatin1(LIST_RESOURCE)); | 196 QString::fromLatin1(LIST_RESOURCE)); |
169 | 197 |
170 connect(downloader, SIGNAL(newListAvailable(const QString&, const QDateTime&)), | 198 connect(downloader, SIGNAL(newListAvailable(const QString&, const QDateTime&)), |
317 | 345 |
318 void MainWindow::loadCertificateList() | 346 void MainWindow::loadCertificateList() |
319 { | 347 { |
320 mCertListWidget->clear(); | 348 mCertListWidget->clear(); |
321 int i = 0; | 349 int i = 0; |
322 foreach (const Certificate &cert, mListToInstall.getCertificates()) { | 350 |
351 /* TODO: if nothing is available (neither old nor new) add some progress | |
352 * indication */ | |
353 | |
354 foreach (const Certificate &cert, mListToInstall.isValid() ? | |
355 mListToInstall.getCertificates() : | |
356 mInstalledList.getCertificates()) { | |
323 if (!cert.isValid()) { | 357 if (!cert.isValid()) { |
324 qWarning() << "Invalid certificate in list"; | 358 qWarning() << "Invalid certificate in list"; |
325 continue; | 359 continue; |
326 } | 360 } |
327 QListWidgetItem* item = new QListWidgetItem(cert.shortDescription()); | 361 QListWidgetItem* item = new QListWidgetItem(cert.shortDescription()); |
328 SeparatorItemDelegate *separator = new SeparatorItemDelegate(); | 362 SeparatorItemDelegate *separator = new SeparatorItemDelegate(); |
329 item->setData(CertificateItemDelegate::DetailsRole, cert.details()); | 363 item->setData(CertificateItemDelegate::DetailsRole, cert.details()); |
330 item->setData(CertificateItemDelegate::B64LineRole, cert.base64Line()); | 364 item->setData(CertificateItemDelegate::B64LineRole, cert.base64Line()); |
331 Qt::CheckState checkedState = mPreviouslyUnselected.contains(cert.base64Line()) ? | 365 Qt::CheckState checkedState = mPreviouslyUnselected.contains(cert.base64Line()) ? |
332 Qt::Unchecked : Qt::Checked; | 366 Qt::Unchecked : Qt::Checked; |
367 | |
368 bool isOld = mInstalledList.getCertificates().contains(cert); | |
369 qDebug() << "Found old certificate."; | |
370 /* TODO properly work with that information. */ | |
371 | |
333 if (cert.isInstallCert()) { | 372 if (cert.isInstallCert()) { |
334 // This if statements is for testing! @TODO Remove this! | 373 // This if statements is for testing! @TODO Remove this! |
335 if (i <= 2) { | 374 if (isOld) { |
336 item->setData(CertificateItemDelegate::StatusRole, Certificate::InstallOld); | 375 item->setData(CertificateItemDelegate::StatusRole, Certificate::InstallOld); |
337 item->setFlags(item->flags() | Qt::ItemIsUserCheckable); | 376 item->setFlags(item->flags() | Qt::ItemIsUserCheckable); |
338 } | 377 } |
339 else { | 378 else { |
340 item->setData(CertificateItemDelegate::StatusRole, Certificate::InstallNew); | 379 item->setData(CertificateItemDelegate::StatusRole, Certificate::InstallNew); |
405 | 444 |
406 void MainWindow::installerError(const QString& errMsg) { | 445 void MainWindow::installerError(const QString& errMsg) { |
407 QMessageBox::warning(this, tr("Error executing update"), errMsg); | 446 QMessageBox::warning(this, tr("Error executing update"), errMsg); |
408 } | 447 } |
409 | 448 |
449 void MainWindow::installerSuccess() { | |
450 if (mCurState == NewListAvailable) { | |
451 mCurState = NothingChanged; | |
452 mCurMessage = QString(); | |
453 | |
454 QString listFileName = mSettings.value("List/available").toString(); | |
455 QDateTime listFileDate = mSettings.value("List/availableDate").toDateTime(); | |
456 | |
457 mSettings.remove("List/available"); | |
458 mSettings.remove("List/availableDate"); | |
459 | |
460 if (listFileName.isEmpty() || !listFileDate.isValid()) { | |
461 qWarning() << "Error accessing settings"; | |
462 return; /* Try again with next check */ | |
463 } | |
464 | |
465 mSettings.setValue("List/installed", listFileName); | |
466 mSettings.setValue("List/installedDate", listFileDate); | |
467 } | |
468 } | |
469 | |
410 void MainWindow::installCerts() { | 470 void MainWindow::installCerts() { |
411 QStringList choices; | 471 QStringList choices; |
412 | 472 |
413 for (int i = 0; i < mCertListWidget->count(); i++) { | 473 for (int i = 0; i < mCertListWidget->count(); i++) { |
414 QListWidgetItem *item = mCertListWidget->item(i); | 474 QListWidgetItem *item = mCertListWidget->item(i); |
436 choices); | 496 choices); |
437 /* Clean up object and progress dialog */ | 497 /* Clean up object and progress dialog */ |
438 connect(instWrap, SIGNAL(finished()), instWrap, SLOT(deleteLater())); | 498 connect(instWrap, SIGNAL(finished()), instWrap, SLOT(deleteLater())); |
439 connect(instWrap, SIGNAL(finished()), progress, SLOT(deleteLater())); | 499 connect(instWrap, SIGNAL(finished()), progress, SLOT(deleteLater())); |
440 connect(instWrap, SIGNAL(finished()), progress, SLOT(cancel())); | 500 connect(instWrap, SIGNAL(finished()), progress, SLOT(cancel())); |
501 connect(instWrap, SIGNAL(installationSuccessful()), | |
502 this, SLOT(installerSuccess())); | |
441 connect(instWrap, SIGNAL(error(const QString &)), | 503 connect(instWrap, SIGNAL(error(const QString &)), |
442 this, SLOT(installerError(const QString &))); | 504 this, SLOT(installerError(const QString &))); |
443 instWrap->start(); | 505 instWrap->start(); |
444 | 506 |
445 if (!saveUnselectedCertificates()) { | 507 if (!saveUnselectedCertificates()) { |
446 qWarning() << "Failed to save previosly unselected certificates."; | 508 qWarning() << "Failed to save previosly unselected certificates."; |
447 } | 509 } |