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"