diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-08-28 21:52:49 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-08-28 21:52:49 +0300 |
commit | a9345c0e74408538488b0a329202ce611a4a0072 (patch) | |
tree | 9e8df5b62f4337286f4785fa7b62a3b256b81b57 /src/gui/updaterwindow.cpp | |
parent | 1d5e1e10214b2f992888045dc750c8d8b7937b21 (diff) | |
download | plus-a9345c0e74408538488b0a329202ce611a4a0072.tar.gz plus-a9345c0e74408538488b0a329202ce611a4a0072.tar.bz2 plus-a9345c0e74408538488b0a329202ce611a4a0072.tar.xz plus-a9345c0e74408538488b0a329202ce611a4a0072.zip |
Add support for auto download content fixes.
Diffstat (limited to 'src/gui/updaterwindow.cpp')
-rw-r--r-- | src/gui/updaterwindow.cpp | 76 |
1 files changed, 67 insertions, 9 deletions
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<updateFile> loadXMLFile(const std::string &fileName); std::vector<updateFile> 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; |