From a9345c0e74408538488b0a329202ce611a4a0072 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 28 Aug 2011 21:52:49 +0300 Subject: Add support for auto download content fixes. --- src/gui/updaterwindow.cpp | 76 +++++++++++++++++++++++++++++++++++++++++------ src/gui/updaterwindow.h | 13 +++++++- 2 files changed, 79 insertions(+), 10 deletions(-) (limited to 'src/gui') diff --git a/src/gui/updaterwindow.cpp b/src/gui/updaterwindow.cpp index 7534b12a9..ba482919e 100644 --- a/src/gui/updaterwindow.cpp +++ b/src/gui/updaterwindow.cpp @@ -54,6 +54,7 @@ const std::string xmlUpdateFile = "resources.xml"; const std::string txtUpdateFile = "resources2.txt"; +const std::string updateServer2 = "http://download.evolonline.org/manaplus/updates/"; std::vector loadXMLFile(const std::string &fileName); std::vector loadTxtFile(const std::string &fileName); @@ -137,6 +138,7 @@ UpdaterWindow::UpdaterWindow(const std::string &updateHost, mDownloadStatus(UPDATE_NEWS), mUpdateHost(updateHost), mUpdatesDir(updatesDir), + mUpdatesDirReal(updatesDir), mCurrentFile("news.txt"), mDownloadProgress(0.0f), mCurrentChecksum(0), @@ -147,6 +149,7 @@ UpdaterWindow::UpdaterWindow(const std::string &updateHost, mMemoryBuffer(NULL), mDownload(NULL), mUpdateIndex(0), + mUpdateIndexOffset(0), mLoadUpdates(applyUpdates), mUpdateType(updateType) { @@ -181,6 +184,10 @@ UpdaterWindow::UpdaterWindow(const std::string &updateHost, setVisible(true); mCancelButton->requestFocus(); + mUpdateServerPath = mUpdateHost; + removeProtocol(mUpdateServerPath); + logger->log("mUpdateServerPath: %s, %s", mUpdateHost.c_str(), mUpdateServerPath.c_str()); + // Try to download the updates list download(); } @@ -539,8 +546,9 @@ void UpdaterWindow::logic() mProgressBar->setProgress(mDownloadProgress); if (mUpdateFiles.size() && mUpdateIndex <= mUpdateFiles.size()) { - mProgressBar->setText(strprintf("%d/%d", - mUpdateIndex + 1, (int)mUpdateFiles.size() + 1)); + mProgressBar->setText(strprintf("%d/%d", mUpdateIndex + + mUpdateIndexOffset + 1, (int)mUpdateFiles.size() + + (int)mTempUpdateFiles.size() + 1)); } else { @@ -582,13 +590,12 @@ void UpdaterWindow::logic() // Parse current memory buffer as news and dispose of the data loadPatch(); -/* - mCurrentFile = "news.txt"; - mStoreInMemory = true; - mDownloadStatus = UPDATE_NEWS; - download(); // download() changes mDownloadComplete to false -*/ - mDownloadStatus = UPDATE_COMPLETE; + mUpdateHost = updateServer2 + mUpdateServerPath; + mUpdatesDir += "/fix"; + mCurrentFile = xmlUpdateFile; + mStoreInMemory = false; + mDownloadStatus = UPDATE_LIST2; + download(); } break; @@ -681,7 +688,58 @@ void UpdaterWindow::logic() } } break; + case UPDATE_LIST2: + if (mDownloadComplete) + { + if (mCurrentFile == xmlUpdateFile) + { + mTempUpdateFiles = loadXMLFile( + mUpdatesDir + "/" + xmlUpdateFile); + } + mUpdateIndexOffset = mUpdateIndex; + mUpdateIndex = 0; + mStoreInMemory = false; + mDownloadStatus = UPDATE_RESOURCES2; + download(); + } + break; + case UPDATE_RESOURCES2: + if (mDownloadComplete) + { + if (mUpdateIndex < mTempUpdateFiles.size()) + { + updateFile thisFile = mTempUpdateFiles[mUpdateIndex]; + mCurrentFile = thisFile.name; + std::string checksum; + checksum = thisFile.hash; + std::stringstream ss(checksum); + ss >> std::hex >> mCurrentChecksum; + + std::ifstream temp( + (mUpdatesDir + "/" + mCurrentFile).c_str()); + + if (!temp.is_open() || !validateFile(mUpdatesDir + "/" + + mCurrentFile, mCurrentChecksum)) + { + temp.close(); + download(); + } + else + { + temp.close(); + logger->log("%s already here", mCurrentFile.c_str()); + } + mUpdateIndex++; + } + else + { + mUpdatesDir = mUpdatesDirReal; + mDownloadStatus = UPDATE_COMPLETE; + } + } + break; case UPDATE_COMPLETE: + mUpdatesDir = mUpdatesDirReal; enable(); setLabel(_("Completed")); break; diff --git a/src/gui/updaterwindow.h b/src/gui/updaterwindow.h index a1dc556d5..e9a45241f 100644 --- a/src/gui/updaterwindow.h +++ b/src/gui/updaterwindow.h @@ -146,7 +146,9 @@ private: UPDATE_COMPLETE, UPDATE_NEWS, UPDATE_RESOURCES, - UPDATE_PATCH + UPDATE_PATCH, + UPDATE_LIST2, + UPDATE_RESOURCES2 }; /** Status of the current download. */ @@ -158,6 +160,8 @@ private: /** Place where the updates are stored (absolute path). */ std::string mUpdatesDir; + std::string mUpdatesDirReal; + /** The file currently downloading. */ std::string mCurrentFile; @@ -194,9 +198,15 @@ private: /** List of files to download. */ std::vector mUpdateFiles; + /** List of temp files to download. */ + std::vector mTempUpdateFiles; + /** Index of the file to be downloaded. */ unsigned int mUpdateIndex; + /** Index offset for disaplay downloaded file. */ + unsigned int mUpdateIndexOffset; + /** Tells ~UpdaterWindow() if it should load updates */ bool mLoadUpdates; @@ -208,6 +218,7 @@ private: ProgressBar *mProgressBar; /**< Update progress bar. */ BrowserBox *mBrowserBox; /**< Box to display news. */ ScrollArea *mScrollArea; /**< Used to scroll news box. */ + std::string mUpdateServerPath; }; #endif -- cgit v1.2.3-60-g2f50