File indexing completed on 2025-03-09 04:54:55

0001 /*
0002    SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "downloadlocaldatabasethread.h"
0008 #include "createdatabasefilejob.h"
0009 #include "webengineviewer_debug.h"
0010 using namespace WebEngineViewer;
0011 
0012 DownloadLocalDatabaseThread::DownloadLocalDatabaseThread(QObject *parent)
0013     : QThread(parent)
0014 {
0015     qCDebug(WEBENGINEVIEWER_LOG) << "DownloadLocalDatabaseThread::DownloadLocalDatabaseThread " << this;
0016 }
0017 
0018 DownloadLocalDatabaseThread::~DownloadLocalDatabaseThread()
0019 {
0020     qCDebug(WEBENGINEVIEWER_LOG) << "DownloadLocalDatabaseThread::~DownloadLocalDatabaseThread " << this;
0021 }
0022 
0023 void DownloadLocalDatabaseThread::setDataBaseState(const QString &value)
0024 {
0025     mCurrentDataBaseState = value;
0026 }
0027 
0028 void DownloadLocalDatabaseThread::run()
0029 {
0030     if (mDatabaseFullPath.isEmpty()) {
0031         qCWarning(WEBENGINEVIEWER_LOG) << "Database full path is empty";
0032         Q_EMIT createDataBaseFailed();
0033         deleteLater();
0034         return;
0035     }
0036     auto job = new WebEngineViewer::CreatePhishingUrlDataBaseJob;
0037     job->moveToThread(this);
0038     job->setDataBaseDownloadNeeded(mCurrentDataBaseState.isEmpty() ? WebEngineViewer::CreatePhishingUrlDataBaseJob::FullDataBase
0039                                                                    : WebEngineViewer::CreatePhishingUrlDataBaseJob::UpdateDataBase);
0040     job->setDataBaseState(mCurrentDataBaseState);
0041     connect(job, &CreatePhishingUrlDataBaseJob::finished, this, &DownloadLocalDatabaseThread::slotDownloadDataBaseFinished);
0042     job->start();
0043     exec();
0044 }
0045 
0046 void DownloadLocalDatabaseThread::slotDownloadDataBaseFinished(const WebEngineViewer::UpdateDataBaseInfo &infoDataBase,
0047                                                                WebEngineViewer::CreatePhishingUrlDataBaseJob::DataBaseDownloadResult status)
0048 {
0049     bool dataBaseOk = false;
0050     switch (status) {
0051     case CreatePhishingUrlDataBaseJob::InvalidData:
0052         qCWarning(WEBENGINEVIEWER_LOG) << "Invalid Data.";
0053         dataBaseOk = false;
0054         break;
0055     case CreatePhishingUrlDataBaseJob::ValidData:
0056         qCDebug(WEBENGINEVIEWER_LOG) << "Valid Data.";
0057         dataBaseOk = true;
0058         break;
0059     case CreatePhishingUrlDataBaseJob::UnknownError:
0060         qCWarning(WEBENGINEVIEWER_LOG) << "Unknown data.";
0061         dataBaseOk = false;
0062         break;
0063     case CreatePhishingUrlDataBaseJob::BrokenNetwork:
0064         qCWarning(WEBENGINEVIEWER_LOG) << "Broken Networks.";
0065         dataBaseOk = false;
0066         break;
0067     }
0068     if (dataBaseOk) {
0069         if (mCurrentDataBaseState == infoDataBase.newClientState) {
0070             qCDebug(WEBENGINEVIEWER_LOG) << "No update necessary ";
0071         } else {
0072             switch (infoDataBase.responseType) {
0073             case WebEngineViewer::UpdateDataBaseInfo::FullUpdate:
0074             case WebEngineViewer::UpdateDataBaseInfo::PartialUpdate:
0075                 installNewDataBase(infoDataBase);
0076                 break;
0077             case WebEngineViewer::UpdateDataBaseInfo::Unknown:
0078                 break;
0079             }
0080         }
0081     } else {
0082         Q_EMIT createDataBaseFailed();
0083         quit();
0084     }
0085 }
0086 
0087 void DownloadLocalDatabaseThread::setDatabaseFullPath(const QString &databaseFullPath)
0088 {
0089     mDatabaseFullPath = databaseFullPath;
0090 }
0091 
0092 void DownloadLocalDatabaseThread::installNewDataBase(const WebEngineViewer::UpdateDataBaseInfo &infoDataBase)
0093 {
0094     auto job = new WebEngineViewer::CreateDatabaseFileJob;
0095     job->setFileName(mDatabaseFullPath);
0096     job->setUpdateDataBaseInfo(infoDataBase);
0097     connect(job, &CreateDatabaseFileJob::finished, this, &DownloadLocalDatabaseThread::slotCreateDataBaseFileNameFinished);
0098     job->start();
0099 }
0100 
0101 void DownloadLocalDatabaseThread::slotCreateDataBaseFileNameFinished(bool success, const QString &newClientState, const QString &minimumWaitDurationStr)
0102 {
0103     Q_EMIT createDataBaseFinished(success, newClientState, minimumWaitDurationStr);
0104     quit();
0105 }
0106 
0107 #include "moc_downloadlocaldatabasethread.cpp"