Browse Source

Small improvement for patch downloader

Ivan Arkhipov 3 years ago
parent
commit
9494a4eacb

+ 7 - 23
src/Legacy/models/patchdownloader.cpp

@@ -29,12 +29,12 @@ void PatchDownloader::startPatchDownloaderChain() {
     if (started_) {
         qCritical() << "PatchDwnlder: Tried to start patch downloader chain while other was already running!";
     }
-    started_ = true;
     emit started();
+    started_ = true;
     checkForUpdates();
-    beginDownload();
-    // Finished signal will be emitted when all downloads are completed.
-    // Note, this function finishes immediately after downloads are STARTED!
+    downloadDatabases();
+    started_ = false;
+    emit finished();
 }
 
 void PatchDownloader::onDownloaderProgressChanged(Downloader* context, Downloader::Status progress) {
@@ -52,17 +52,6 @@ void PatchDownloader::onDownloaderFinished(Downloader* context) {
     context->targetFile->deleteLater();
     context->targetFile = nullptr;
     Settings::setValue("DatabaseNeedInstall/" + patch_downloaders_.key(context), true);
-
-    patch_downloaders_status_[context] = context->getDownloadStatus();
-    Downloader::Status cumulative_status;
-    for (const Downloader::Status& status: patch_downloaders_status_.values()) {
-        cumulative_status = cumulative_status + status;
-    }
-
-    if (!cumulative_status.running) {
-        started_ = false;
-        emit finished();
-    }
 }
 
 void PatchDownloader::checkForUpdates() {
@@ -113,9 +102,7 @@ void PatchDownloader::checkForUpdates() {
     }
 }
 
-void PatchDownloader::beginDownload() {
-    bool downloads_started = false;
-
+void PatchDownloader::downloadDatabases() {
     for (const QString& patch: patches_) {
         QString target_filename = Settings::getValue("PatchDatabases/" + patch + "/path").toString();
 
@@ -137,17 +124,14 @@ void PatchDownloader::beginDownload() {
         patch_downloaders_[patch]->setUrl(Settings::getValue("PatchDatabases/" + patch + "/url").toUrl());
         patch_downloaders_[patch]->targetFile = target_file;
         patch_downloaders_[patch]->start();
-        downloads_started = true;
     }
 
-    if (!downloads_started) {
-        started_ = false;
-        emit finished();
+    for (Downloader* patch_downloader: patch_downloaders_) {
+        patch_downloader->waitForDownloaded();
     }
 }
 
 
-
 bool PatchDownloader::needDownloadDatabase(QString db_name)
 {
     QString patch_filename = Settings::getValue("PatchDatabases/" + db_name + "/path").toString();

+ 1 - 1
src/Legacy/models/patchdownloader.h

@@ -23,7 +23,7 @@ public:
 private:
     PatchDownloader();
     void checkForUpdates();  // Checks for updates. Returns true, if there are new patch updates
-    void beginDownload();         // Starts downloading all necessary patches.
+    void downloadDatabases();         // Starts downloading all necessary patches.
     static bool needDownloadDatabase(QString db_name); // Checks if database needs to be downloaded (by checksum comparing)
 
 public slots:

+ 4 - 1
src/Legacy/models/patchinstaller.h

@@ -54,8 +54,11 @@ private:
 
     void deinit();
 
-    void installPatch(QString patch_name, QString database_path, RESOURCE_FILE_TYPE dat_file);
+    void installPatch(QString patch_name, LOTRO_DAT::Database& database);
 
+    void installLoadscreens(LOTRO_DAT::Database& database);
+
+    void installVideos(LOTRO_DAT::Database& database);
 
 public slots:
     void init();