diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-11-04 21:50:17 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-11-04 21:50:17 +0000 |
commit | 222db257d7de12f1077eb43d448d6b357d4642e7 (patch) | |
tree | ef76d759d93e60a0f66ab7c2a26117a02964f149 /src/gui | |
parent | a9a59f28594b87c8ac29e6739e34decd79f2fd2a (diff) | |
download | mana-222db257d7de12f1077eb43d448d6b357d4642e7.tar.gz mana-222db257d7de12f1077eb43d448d6b357d4642e7.tar.bz2 mana-222db257d7de12f1077eb43d448d6b357d4642e7.tar.xz mana-222db257d7de12f1077eb43d448d6b357d4642e7.zip |
Merged revisions 4332 via svnmerge from
https://themanaworld.svn.sourceforge.net/svnroot/themanaworld/tmw/branches/0.0
........
r4332 | b_lindeijer | 2008-06-05 09:33:12 +0200 (Thu, 05 Jun 2008) | 5 lines
Added command line argument to specify the update host (-H). Also, to avoid
problems when files with the same name are served by different update hosts,
the updates are now stored in an update host specific directory. Based on a
patch by Sanga.
........
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/updatewindow.cpp | 52 | ||||
-rw-r--r-- | src/gui/updatewindow.h | 15 |
2 files changed, 44 insertions, 23 deletions
diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp index 10d0c826..22bf8c13 100644 --- a/src/gui/updatewindow.cpp +++ b/src/gui/updatewindow.cpp @@ -46,8 +46,6 @@ #include "../resources/resourcemanager.h" -extern std::string homeDir; - /** * Calculates the Alder-32 checksum for the given file. */ @@ -68,14 +66,38 @@ unsigned long fadler32(FILE *file) return adler; } -UpdaterWindow::UpdaterWindow(): +/** + * Load the given file into a vector of strings. + */ +std::vector<std::string> +loadTextFile(const std::string &fileName) +{ + std::vector<std::string> lines; + std::ifstream fin(fileName.c_str()); + + if (!fin) { + logger->log("Couldn't load text file: %s", fileName.c_str()); + return lines; + } + + std::string line; + + while (getline(fin, line)) + lines.push_back(line); + + return lines; +} + + +UpdaterWindow::UpdaterWindow(const std::string &updateHost, + const std::string &updatesDir): Window("Updating..."), mThread(NULL), mDownloadStatus(UPDATE_NEWS), - mUpdateHost(""), + mUpdateHost(updateHost), + mUpdatesDir(updatesDir), mCurrentFile("news.txt"), mCurrentChecksum(0), - mBasePath(""), mStoreInMemory(true), mDownloadComplete(true), mUserCancel(false), @@ -119,10 +141,6 @@ UpdaterWindow::UpdaterWindow(): setVisible(true); mCancelButton->requestFocus(); - mUpdateHost = - config.getValue("updatehost", "http://updates.themanaworld.org"); - mBasePath = homeDir; - // Try to download the updates list download(); } @@ -141,7 +159,7 @@ UpdaterWindow::~UpdaterWindow() } // Remove possibly leftover temporary download - ::remove((mBasePath + "/updates/download.temp").c_str()); + ::remove((mUpdatesDir + "/download.temp").c_str()); delete[] mCurlError; } @@ -280,9 +298,7 @@ int UpdaterWindow::downloadThread(void *ptr) } else { - // Download in the proper folder : ./updates under win, - // /home/user/.tmw/updates for unices - outFilename = uw->mBasePath + "/updates/download.temp"; + outFilename = uw->mUpdatesDir + "/download.temp"; outfile = fopen(outFilename.c_str(), "w+b"); curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile); } @@ -349,8 +365,8 @@ int UpdaterWindow::downloadThread(void *ptr) fclose(outfile); // Give the file the proper name - std::string newName(uw->mBasePath + "/updates/" + - uw->mCurrentFile.c_str()); + const std::string newName = + uw->mUpdatesDir + "/" + uw->mCurrentFile; // Any existing file with this name is deleted first, otherwise // the rename will fail on Windows. @@ -438,8 +454,7 @@ void UpdaterWindow::logic() case UPDATE_LIST: if (mDownloadComplete) { - ResourceManager *resman = ResourceManager::getInstance(); - mLines = resman->loadTextFile("updates/resources2.txt"); + mLines = loadTextFile(mUpdatesDir + "/resources2.txt"); mStoreInMemory = false; mDownloadStatus = UPDATE_RESOURCES; } @@ -463,7 +478,8 @@ void UpdaterWindow::logic() ss >> std::hex >> mCurrentChecksum; std::ifstream temp( - (mBasePath + "/updates/" + mCurrentFile).c_str()); + (mUpdatesDir + "/" + mCurrentFile).c_str()); + if (!temp.is_open()) { temp.close(); diff --git a/src/gui/updatewindow.h b/src/gui/updatewindow.h index b5f6a6df..61ea4a27 100644 --- a/src/gui/updatewindow.h +++ b/src/gui/updatewindow.h @@ -49,9 +49,14 @@ class UpdaterWindow : public Window, public gcn::ActionListener { public: /** - * Constructor + * Constructor. + * + * @param updateHost Host where to get the updated files. + * @param updatesDir Directory where to store updates (should be absolute + * and already created). */ - UpdaterWindow(); + UpdaterWindow(const std::string &updateHost, + const std::string &updatesDir); /** * Destructor @@ -124,15 +129,15 @@ class UpdaterWindow : public Window, public gcn::ActionListener /** Host where we get the updated files. */ std::string mUpdateHost; + /** Place where the updates are stored (absolute path). */ + std::string mUpdatesDir; + /** The file currently downloading. */ std::string mCurrentFile; /** The Adler32 checksum of the file currently downloading. */ unsigned long mCurrentChecksum; - /** Absolute path to locally save downloaded files. */ - std::string mBasePath; - /** A flag to indicate whether to use a memory buffer or a regular file. */ bool mStoreInMemory; |