File indexing completed on 2024-04-28 05:26:47

0001 /*
0002  *   SPDX-FileCopyrightText: 2020 Aleix Pol Gonzalez <aleixpol@kde.org>
0003  *
0004  *   SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "DiscoverUpdate.h"
0008 #include <QCoreApplication>
0009 #include <QDebug>
0010 #include <resources/ResourcesModel.h>
0011 #include <resources/ResourcesUpdatesModel.h>
0012 
0013 DiscoverUpdate::DiscoverUpdate()
0014     : QObject(nullptr)
0015     , m_resourcesUpdatesModel(new ResourcesUpdatesModel)
0016 {
0017     connect(m_resourcesUpdatesModel, &ResourcesUpdatesModel::passiveMessage, this, [](const QString &message) {
0018         qWarning() << "message" << message;
0019     });
0020     connect(ResourcesModel::global(), &ResourcesModel::fetchingChanged, this, &DiscoverUpdate::start);
0021     connect(m_resourcesUpdatesModel, &ResourcesUpdatesModel::progressingChanged, this, &DiscoverUpdate::start);
0022     connect(ResourcesModel::global(), &ResourcesModel::backendsChanged, this, &DiscoverUpdate::start);
0023 }
0024 
0025 DiscoverUpdate::~DiscoverUpdate() = default;
0026 
0027 void DiscoverUpdate::start()
0028 {
0029     if (m_resourcesUpdatesModel->isProgressing() || ResourcesModel::global()->isFetching() || m_done)
0030         return;
0031 
0032     m_resourcesUpdatesModel->setOfflineUpdates(m_offlineUpdates);
0033     qDebug() << "ready" << ResourcesModel::global()->updatesCount();
0034     m_resourcesUpdatesModel->prepare();
0035     qDebug() << "steady" << m_resourcesUpdatesModel->rowCount({});
0036     m_resourcesUpdatesModel->updateAll();
0037 
0038     auto transaction = m_resourcesUpdatesModel->transaction();
0039     if (!transaction) {
0040         qWarning() << "No updates available, exiting";
0041         QCoreApplication::instance()->exit(0);
0042         return;
0043     }
0044 
0045     connect(transaction, &Transaction::statusChanged, this, &DiscoverUpdate::transactionStatusChanged);
0046 
0047     qDebug() << "go!" << transaction;
0048 }
0049 
0050 void DiscoverUpdate::transactionStatusChanged(Transaction::Status status)
0051 {
0052     m_done = true;
0053     qDebug() << "status!" << status << ResourcesModel::global()->updatesCount();
0054     if (status == Transaction::DoneStatus || status == Transaction::DoneWithErrorStatus) {
0055         const bool withError = status == Transaction::DoneWithErrorStatus;
0056         QCoreApplication::instance()->exit(withError);
0057     }
0058 }