summaryrefslogtreecommitdiffstats
path: root/tools/repocompare/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/repocompare/mainwindow.cpp')
-rw-r--r--tools/repocompare/mainwindow.cpp159
1 files changed, 20 insertions, 139 deletions
diff --git a/tools/repocompare/mainwindow.cpp b/tools/repocompare/mainwindow.cpp
index 51a388c72..641cab7e9 100644
--- a/tools/repocompare/mainwindow.cpp
+++ b/tools/repocompare/mainwindow.cpp
@@ -80,9 +80,8 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->actionExit, SIGNAL(triggered()), this, SLOT(close()));
connect(ui->productionButton, SIGNAL(clicked()), this, SLOT(getProductionRepository()));
connect(ui->updateButton, SIGNAL(clicked()), this, SLOT(getUpdateRepository()));
- manager = new QNetworkAccessManager(this);
- connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(receiveRepository(QNetworkReply*)));
connect(ui->exportButton, SIGNAL(clicked()), this, SLOT(createExportFile()));
+ connect(&manager, SIGNAL(repositoriesCompared()), this, SLOT(displayRepositories()));
}
MainWindow::~MainWindow()
@@ -95,121 +94,29 @@ MainWindow::~MainWindow()
void MainWindow::getProductionRepository()
{
- QUrl url = this->ui->productionRepo->currentText();
- if (!url.isValid()) {
- QMessageBox::critical(this, "Error", "Specified URL is not valid");
- return;
- }
-
- if (productionFile.isOpen())
- productionFile.close();
- if (!productionFile.open()) {
- QMessageBox::critical(this, "Error", "Could not open File");
- return;
- }
-
- QNetworkRequest request(url);
- productionReply = manager->get(request);
+ manager.setProductionRepository(ui->productionRepo->currentText());
}
void MainWindow::getUpdateRepository()
{
- QUrl url = this->ui->updateRepo->currentText();
- if (!url.isValid()) {
- QMessageBox::critical(this, "Error", "Specified URL is not valid");
- return;
- }
-
- if (updateFile.isOpen())
- updateFile.close();
- if (!updateFile.open()) {
- QMessageBox::critical(this, "Error", "Could not open File");
- return;
- }
-
- QNetworkRequest request(url);
- updateReply = manager->get(request);
+ manager.setUpdateRepository(ui->updateRepo->currentText());
}
-void MainWindow::receiveRepository(QNetworkReply *reply)
+void MainWindow::displayRepositories()
{
- QByteArray data = reply->readAll();
- reply->deleteLater();
- if (reply == productionReply) {
- createRepositoryMap(data, productionMap);
- uniqueAppend(ui->productionRepo, reply->url().toString());
- } else if (reply == updateReply) {
- createRepositoryMap(data, updateMap);
- uniqueAppend(ui->updateRepo, reply->url().toString());
- }
- if (productionMap.size() && updateMap.size())
- compareRepositories();
-}
+ uniqueAppend(ui->productionRepo, ui->productionRepo->currentText());
+ uniqueAppend(ui->updateRepo, ui->updateRepo->currentText());
-void MainWindow::createRepositoryMap(const QByteArray &data, QMap<QString, RepositoryDescription> &map)
-{
- QXmlStreamReader reader(data);
- QString currentItem;
- RepositoryDescription currentDescription;
- while (!reader.atEnd()) {
- QXmlStreamReader::TokenType type = reader.readNext();
- if (type == QXmlStreamReader::StartElement) {
- if (reader.name() == "PackageUpdate") {
- // new package
- if (!currentItem.isEmpty())
- map.insert(currentItem, currentDescription);
- currentDescription.updateText.clear();
- currentDescription.version.clear();
- currentDescription.checksum.clear();
- }
- if (reader.name() == "SHA1")
- currentDescription.checksum = reader.readElementText();
- else if (reader.name() == "Version")
- currentDescription.version = reader.readElementText();
- else if (reader.name() == "ReleaseDate")
- currentDescription.releaseDate = QDate::fromString(reader.readElementText(), "yyyy-MM-dd");
- else if (reader.name() == "UpdateText")
- currentDescription.updateText = reader.readElementText();
- else if (reader.name() == "Name")
- currentItem = reader.readElementText();
- }
- }
- // Insert the last item
- if (!currentItem.isEmpty())
- map.insert(currentItem, currentDescription);
-}
-
-static qreal createVersionNumber(const QString &text)
-{
- QStringList items = text.split(QLatin1Char('.'));
- QString last = items.takeLast();
- items.append(last.split(QLatin1Char('-')));
-
- qreal value = 0;
- if (items.count() == 4)
- value += qreal(0.01) * items.takeLast().toInt();
-
- int multiplier = 10000;
- do {
- value += multiplier * items.takeFirst().toInt();
- multiplier /= 100;
- } while (items.count());
-
- return value;
-}
-
-void MainWindow::compareRepositories()
-{
// First we put everything into the treeview
for (int i = 0; i < 2; ++i) {
- QMap<QString, RepositoryDescription>* map;
+ QMap<QString, ComponentDescription>* map;
if (i == 0)
- map = &productionMap;
+ map = manager.productionComponents();
else
- map = &updateMap;
+ map = manager.updateComponents();
int indexIncrement = 4*i;
- for (QMap<QString, RepositoryDescription>::iterator it = map->begin(); it != map->end(); ++it) {
+ for (QMap<QString, ComponentDescription>::iterator it = map->begin(); it != map->end(); ++it) {
QList<QTreeWidgetItem*> list = ui->treeWidget->findItems(it.key(), Qt::MatchExactly);
QTreeWidgetItem* item;
if (list.size())
@@ -222,29 +129,14 @@ void MainWindow::compareRepositories()
item->setText(indexIncrement + 4, it.value().releaseDate.toString("yyyy-MM-dd"));
item->setText(indexIncrement + 5, it.value().checksum);
item->setText(indexIncrement + 6, it.value().updateText);
- }
- }
-
- // Now iterate over the items and check where an update is needed
- for (int i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) {
- QTreeWidgetItem* item = ui->treeWidget->topLevelItem(i);
- if (item->text(3).isEmpty() && !item->text(7).isEmpty()) {
- item->setText(1, "Yes");
- item->setText(2, "New Component");
- } else if (item->text(7).isEmpty()) {
- item->setText(2, "Caution: component removed");
- } else if (createVersionNumber(item->text(3)) < createVersionNumber(item->text(7))) {
- // New Version
- item->setText(1, "Yes");
- // Check update date
- QDate productionDate = QDate::fromString(item->text(4), "yyyy-MM-dd");
- QDate updateDate = QDate::fromString(item->text(8), "yyyy-MM-dd");
- if (updateDate <= productionDate)
- item->setText(2, "Error: Date not correct");
- else if (item->text(6) == item->text(10) || item->text(10).isEmpty())
- item->setText(2, "Error: Update text wrong");
- else
- item->setText(2, "Ok");
+ if (i != 0) {
+ QString errorText;
+ if (manager.updateRequired(it.key(), &errorText))
+ item->setText(1, "Yes");
+ else
+ item->setText(1, "No");
+ item->setText(2, errorText);
+ }
}
}
}
@@ -252,18 +144,7 @@ void MainWindow::compareRepositories()
void MainWindow::createExportFile()
{
QString fileName = QFileDialog::getSaveFileName(this, "Export File");
- QFile file(fileName);
- if (!file.open(QIODevice::ReadWrite)) {
- QMessageBox::critical(this, "Error", "Could not open File for saving");
+ if (fileName.isEmpty())
return;
- }
-
- QTextStream s(&file);
- for (int i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) {
- QTreeWidgetItem* item = ui->treeWidget->topLevelItem(i);
- if (item->text(1) == "Yes" && item->text(2) == "Ok")
- s << item->text(0) << "\n";
- }
- s.flush();
- file.close();
+ manager.writeUpdateFile(fileName);
}