summaryrefslogtreecommitdiff
path: root/src/gui/updaterwindow.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-08-28 21:52:49 +0300
committerAndrei Karas <akaras@inbox.ru>2011-08-28 21:52:49 +0300
commita9345c0e74408538488b0a329202ce611a4a0072 (patch)
tree9e8df5b62f4337286f4785fa7b62a3b256b81b57 /src/gui/updaterwindow.cpp
parent1d5e1e10214b2f992888045dc750c8d8b7937b21 (diff)
downloadmanaplus-a9345c0e74408538488b0a329202ce611a4a0072.tar.gz
manaplus-a9345c0e74408538488b0a329202ce611a4a0072.tar.bz2
manaplus-a9345c0e74408538488b0a329202ce611a4a0072.tar.xz
manaplus-a9345c0e74408538488b0a329202ce611a4a0072.zip
Add support for auto download content fixes.
Diffstat (limited to 'src/gui/updaterwindow.cpp')
-rw-r--r--src/gui/updaterwindow.cpp76
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;