From: <mg...@us...> - 2008-08-06 17:04:48
|
Revision: 2006 http://planeshift.svn.sourceforge.net/planeshift/?rev=2006&view=rev Author: mgist Date: 2008-08-06 17:04:56 +0000 (Wed, 06 Aug 2008) Log Message: ----------- - Tweaks to updater. Modified Paths: -------------- trunk/src/pslaunch/download.h trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/download.h =================================================================== --- trunk/src/pslaunch/download.h 2008-08-06 16:49:38 UTC (rev 2005) +++ trunk/src/pslaunch/download.h 2008-08-06 17:04:56 UTC (rev 2006) @@ -41,7 +41,7 @@ * If URL is true; download a file from 'file' where 'file' is the * full URL to the file, and save to 'dest' */ - bool DownloadFile (const char* file, const char* dest, bool URL, bool silent = false, uint retries = 2); + bool DownloadFile (const char* file, const char* dest, bool URL, bool silent = false, uint retries = 3); /* Set the proxy server host and port */ void SetProxy (const char* host, int port); Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2008-08-06 16:49:38 UTC (rev 2005) +++ trunk/src/pslaunch/updaterengine.cpp 2008-08-06 17:04:56 UTC (rev 2006) @@ -671,13 +671,19 @@ // Download update zip. PrintOutput("\nDownloading update file..\n"); - downloader->DownloadFile(zip, zip, false, true); + if(!downloader->DownloadFile(zip, zip, false, true)) + { + PrintOutput("Failed to download the update file! Try again later.\n"); + fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); + return; + } // Check md5sum is correct. csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + zip, true); if (!buffer) { PrintOutput("Could not get MD5 of updater zip!!\n"); + fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); return; } @@ -688,6 +694,7 @@ if(!md5sum.Compare(newCv->GetMD5Sum())) { PrintOutput("md5sum of client zip does not match correct md5sum!!\n"); + fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-08-15 05:43:50
|
Revision: 2054 http://planeshift.svn.sourceforge.net/planeshift/?rev=2054&view=rev Author: mgist Date: 2008-08-15 05:43:59 +0000 (Fri, 15 Aug 2008) Log Message: ----------- - Fixed a few bugs in pslaunch. Modified Paths: -------------- trunk/src/pslaunch/download.cpp trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/updaterconfig.cpp Modified: trunk/src/pslaunch/download.cpp =================================================================== --- trunk/src/pslaunch/download.cpp 2008-08-15 02:45:02 UTC (rev 2053) +++ trunk/src/pslaunch/download.cpp 2008-08-15 05:43:59 UTC (rev 2054) @@ -25,52 +25,52 @@ #include "updaterconfig.h" #include "updaterengine.h" -static int ProgressCallback(int progress, int finalSize) -{ - static int lastSize = 0; - - // Don't output anything if there's been no progress. - if(progress == 0) - return 0; - - if(lastSize == 0) - { - if(finalSize > 102400) - { - UpdaterEngine::GetSingletonPtr()->PrintOutput("\n0%% "); - lastSize = progress; - } - } - else if(finalSize/progress < 4 && lastSize < finalSize/4) - { - UpdaterEngine::GetSingletonPtr()->PrintOutput(" 25%% "); - lastSize = progress; - } - else if(finalSize/progress < 2 && lastSize < finalSize/2) - { - UpdaterEngine::GetSingletonPtr()->PrintOutput(" 50%% "); - lastSize = progress; - } - else if((float)finalSize/(float)progress < 1.34 && (float)lastSize < (float)finalSize/1.34) - { - UpdaterEngine::GetSingletonPtr()->PrintOutput(" 75%% "); - lastSize = progress; - } - else if(progress == finalSize) - { - UpdaterEngine::GetSingletonPtr()->PrintOutput(" 100%%"); - UpdaterEngine::GetSingletonPtr()->PrintOutput("\n"); - lastSize = 0; - } - else if((progress-lastSize) > (finalSize/20) && progress < finalSize - (finalSize/20)) - { - UpdaterEngine::GetSingletonPtr()->PrintOutput("-"); - lastSize = progress; - } - - fflush(stdout); - - return UpdaterEngine::GetSingletonPtr()->CheckQuit() ? nsHTTPConn::E_USER_CANCEL : 0; +static int ProgressCallback(int progress, int finalSize) +{ + static int lastSize = 0; + + // Don't output anything if there's been no progress. + if(progress == 0) + return 0; + + if(lastSize == 0) + { + if(finalSize > 102400) + { + UpdaterEngine::GetSingletonPtr()->PrintOutput("\n0%% "); + lastSize = progress; + } + } + else if(finalSize/progress < 4 && lastSize < finalSize/4) + { + UpdaterEngine::GetSingletonPtr()->PrintOutput(" 25%% "); + lastSize = progress; + } + else if(finalSize/progress < 2 && lastSize < finalSize/2) + { + UpdaterEngine::GetSingletonPtr()->PrintOutput(" 50%% "); + lastSize = progress; + } + else if((float)finalSize/(float)progress < 1.34 && (float)lastSize < (float)finalSize/1.34) + { + UpdaterEngine::GetSingletonPtr()->PrintOutput(" 75%% "); + lastSize = progress; + } + else if(progress == finalSize) + { + UpdaterEngine::GetSingletonPtr()->PrintOutput(" 100%%"); + UpdaterEngine::GetSingletonPtr()->PrintOutput("\n"); + lastSize = 0; + } + else if((progress-lastSize) > (finalSize/20) && progress < finalSize - (finalSize/20)) + { + UpdaterEngine::GetSingletonPtr()->PrintOutput("-"); + lastSize = progress; + } + + fflush(stdout); + + return UpdaterEngine::GetSingletonPtr()->CheckQuit() ? nsHTTPConn::E_USER_CANCEL : 0; } Downloader::Downloader(csRef<iVFS> _vfs, UpdaterConfig* _config) Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2008-08-15 02:45:02 UTC (rev 2053) +++ trunk/src/pslaunch/pslaunch.cpp 2008-08-15 05:43:59 UTC (rev 2054) @@ -123,13 +123,30 @@ g2d->AllowResize(false); - // Mount the skin + // Mount the VFS paths. if (!vfs->Mount ("/planeshift/", "$^")) { - printf("Failed to mount skin!\n"); + printf("Failed to mount /planeshift!\n"); return false; } + csString configPath = csGetPlatformConfigPath("PlaneShift"); + configPath.ReplaceAll("/.crystalspace/", "/."); + configPath = configManager->GetStr("PlaneShift.UserConfigPath", configPath); + FileUtil fileUtil(vfs); + csRef<FileStat> filestat = fileUtil.StatFile(configPath); + if (!filestat.IsValid() && CS_MKDIR(configPath) < 0) + { + printf("Could not create required %s directory!\n", configPath.GetData()); + return false; + } + + if (!vfs->Mount("/planeshift/userdata", configPath + "$/")) + { + printf("Could not mount %s as /planeshift/userdata!\n", configPath.GetData()); + return false; + } + // paws initialization csString skinPath; skinPath = configManager->GetStr("PlaneShift.GUI.Skin", "/planeshift/art/pslaunch.zip"); Modified: trunk/src/pslaunch/updaterconfig.cpp =================================================================== --- trunk/src/pslaunch/updaterconfig.cpp 2008-08-15 02:45:02 UTC (rev 2053) +++ trunk/src/pslaunch/updaterconfig.cpp 2008-08-15 05:43:59 UTC (rev 2054) @@ -130,6 +130,7 @@ csRef<iDocumentNode> mirrorNode = node->GetNode("mirrors"); if (mirrorNode) { + mirrors.Empty(); csRef<iDocumentNodeIterator> nodeItr = mirrorNode->GetNodes(); while(nodeItr->HasNext()) { @@ -156,6 +157,7 @@ csRef<iDocumentNode> clientNode = node->GetNode("client"); if(clientNode) { + clientVersions.Empty(); csRef<iDocumentNodeIterator> nodeItr = clientNode->GetNodes(); while(nodeItr->HasNext()) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-08-16 11:14:33
|
Revision: 2070 http://planeshift.svn.sourceforge.net/planeshift/?rev=2070&view=rev Author: mgist Date: 2008-08-16 11:14:39 +0000 (Sat, 16 Aug 2008) Log Message: ----------- - Changed the updater to use /planeshift/userdata/ Modified Paths: -------------- trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/updater.cpp trunk/src/pslaunch/updaterconfig.h trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2008-08-16 09:12:48 UTC (rev 2069) +++ trunk/src/pslaunch/pslaunch.cpp 2008-08-16 11:14:39 UTC (rev 2070) @@ -123,30 +123,6 @@ g2d->AllowResize(false); - // Mount the VFS paths. - if (!vfs->Mount ("/planeshift/", "$^")) - { - printf("Failed to mount /planeshift!\n"); - return false; - } - - csString configPath = csGetPlatformConfigPath("PlaneShift"); - configPath.ReplaceAll("/.crystalspace/", "/."); - configPath = configManager->GetStr("PlaneShift.UserConfigPath", configPath); - FileUtil fileUtil(vfs); - csRef<FileStat> filestat = fileUtil.StatFile(configPath); - if (!filestat.IsValid() && CS_MKDIR(configPath) < 0) - { - printf("Could not create required %s directory!\n", configPath.GetData()); - return false; - } - - if (!vfs->Mount("/planeshift/userdata", configPath + "$/")) - { - printf("Could not mount %s as /planeshift/userdata!\n", configPath.GetData()); - return false; - } - // paws initialization csString skinPath; skinPath = configManager->GetStr("PlaneShift.GUI.Skin", "/planeshift/art/pslaunch.zip"); @@ -369,6 +345,32 @@ infoShare->SetPerformUpdate(false); infoShare->SetUpdateNeeded(false); + // Mount the VFS paths. + csRef<iVFS> vfs = csQueryRegistry<iVFS>(object_reg); + if (!vfs->Mount ("/planeshift/", "$^")) + { + printf("Failed to mount /planeshift!\n"); + return false; + } + + csRef<iConfigManager> configManager = csQueryRegistry<iConfigManager> (object_reg); + csString configPath = csGetPlatformConfigPath("PlaneShift"); + configPath.ReplaceAll("/.crystalspace/", "/."); + configPath = configManager->GetStr("PlaneShift.UserConfigPath", configPath); + FileUtil fileUtil(vfs); + csRef<FileStat> filestat = fileUtil.StatFile(configPath); + if (!filestat.IsValid() && CS_MKDIR(configPath) < 0) + { + printf("Could not create required %s directory!\n", configPath.GetData()); + return false; + } + + if (!vfs->Mount("/planeshift/userdata", configPath + "$/")) + { + printf("Could not mount %s as /planeshift/userdata!\n", configPath.GetData()); + return false; + } + // Initialize updater engine. UpdaterEngine* engine = new UpdaterEngine(args, object_reg, "pslaunch", infoShare); Modified: trunk/src/pslaunch/updater.cpp =================================================================== --- trunk/src/pslaunch/updater.cpp 2008-08-16 09:12:48 UTC (rev 2069) +++ trunk/src/pslaunch/updater.cpp 2008-08-16 11:14:39 UTC (rev 2070) @@ -43,6 +43,32 @@ } // Request needed plugins. csInitializer::RequestPlugins(object_reg, CS_REQUEST_VFS, CS_REQUEST_END); + + // Mount the VFS paths. + csRef<iVFS> vfs = csQueryRegistry<iVFS>(object_reg); + if (!vfs->Mount ("/planeshift/", "$^")) + { + printf("Failed to mount /planeshift!\n"); + exit(1); + } + + csRef<iConfigManager> configManager = csQueryRegistry<iConfigManager> (object_reg); + csString configPath = csGetPlatformConfigPath("PlaneShift"); + configPath.ReplaceAll("/.crystalspace/", "/."); + configPath = configManager->GetStr("PlaneShift.UserConfigPath", configPath); + FileUtil fileUtil(vfs); + csRef<FileStat> filestat = fileUtil.StatFile(configPath); + if (!filestat.IsValid() && CS_MKDIR(configPath) < 0) + { + printf("Could not create required %s directory!\n", configPath.GetData()); + exit(1); + } + + if (!vfs->Mount("/planeshift/userdata", configPath + "$/")) + { + printf("Could not mount %s as /planeshift/userdata!\n", configPath.GetData()); + exit(1); + } } psUpdater::~psUpdater() Modified: trunk/src/pslaunch/updaterconfig.h =================================================================== --- trunk/src/pslaunch/updaterconfig.h 2008-08-16 09:12:48 UTC (rev 2069) +++ trunk/src/pslaunch/updaterconfig.h 2008-08-16 11:14:39 UTC (rev 2070) @@ -29,8 +29,8 @@ #include "util/singleton.h" #define CONFIG_FILENAME "/this/psupdater.cfg" -#define UPDATERINFO_FILENAME "/this/updaterinfo.xml" -#define UPDATERINFO_OLD_FILENAME "/this/updaterinfo.xml.bak" +#define UPDATERINFO_FILENAME "/planeshift/userdata/updaterinfo.xml" +#define UPDATERINFO_CURRENT_FILENAME "/this/updaterinfo.xml" class Mirror : public csRefCount { Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2008-08-16 09:12:48 UTC (rev 2069) +++ trunk/src/pslaunch/updaterengine.cpp 2008-08-16 11:14:39 UTC (rev 2070) @@ -105,213 +105,158 @@ void UpdaterEngine::CheckForUpdates() { - if(!log.IsValid()) + // Make sure the old instance had time to terminate (self-update). + if(config->IsSelfUpdating()) + csSleep(1000); + + // Load current config data. + csRef<iDocumentNode> root = GetRootNode(UPDATERINFO_CURRENT_FILENAME); + if(!root) { - if(appName.Compare("psupdater")) - { - printf("This program requires admin/root or write privileges to run. Please restart the program with these.\n"); - printf("In windows, this means right clicking the Updater shortcut and selecting \"Run as administrator\".\n"); - printf("For everyone else, login as the root user. If you don't have root access, contact someone who does and ask them nicely to run the updater!\n"); - } - else - { - /* - * This will need fixing for pslaunch somehow. We don't want to need admin rights until we know we need to update... - * Maybe write updaterinfo.xml to the userdata path instead of the install path, then execute a new thread which - * needs admin if we don't have it.. for UAC anyway. For linux, we can think of something else (maybe just print a message in the pslaunch - * window like we do to the console in psupdater. - */ - } + PrintOutput("Unable to get root node\n"); + return; } - else + + csRef<iDocumentNode> confignode = root->GetNode("config"); + if (!confignode) { + PrintOutput("Couldn't find config node in configfile!\n"); + return; + } - // Make sure the old instance had time to terminate (self-update). - if(config->IsSelfUpdating()) - csSleep(1000); + // Load updater config + if (!config->GetCurrentConfig()->Initialize(confignode)) + { + PrintOutput("Failed to Initialize mirror config current!\n"); + return; + } - // Check if the last attempt at a general updated ended in failure. - if(!config->WasCleanUpdate()) - { - // Safety check. - if(!vfs->Exists("/this/updaterinfo.xml.bak")) - { - config->GetConfigFile()->SetBool("Update.Clean", true); - config->GetConfigFile()->Save(); - } - else - { - // Restore config file which gives us the last updated position. - fileUtil->RemoveFile("/this/updaterinfo.xml"); - fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); - } - } + // Initialise downloader. + downloader = new Downloader(GetVFS(), config); + // Set proxy + downloader->SetProxy(GetConfig()->GetProxy().host.GetData(), + GetConfig()->GetProxy().port); - // Load current config data. - csRef<iDocumentNode> root = GetRootNode(UPDATERINFO_FILENAME); - if(!root) - { - PrintOutput("Unable to get root node\n"); - return; - } + PrintOutput("Checking for updates to the updater: "); - csRef<iDocumentNode> confignode = root->GetNode("config"); - if (!confignode) - { - PrintOutput("Couldn't find config node in configfile!\n"); - return; - } + if(CheckUpdater()) + { + PrintOutput("Update Available!\n"); - // Load updater config - if (!config->GetCurrentConfig()->Initialize(confignode)) + // Check if we have write permissions. + if(!log.IsValid()) { - PrintOutput("Failed to Initialize mirror config current!\n"); + PrintOutput("Please run this program with administrator permissions to continue updating.\n"); return; } - // Initialise downloader. - downloader = new Downloader(GetVFS(), config); - - // Set proxy - downloader->SetProxy(GetConfig()->GetProxy().host.GetData(), - GetConfig()->GetProxy().port); - - PrintOutput("Checking for updates to the updater: "); - - if(CheckUpdater()) + // If using a GUI, prompt user whether or not to update. + if(!appName.Compare("psupdater")) { - PrintOutput("Update Available!\n"); - - // Restore config files. - fileUtil->RemoveFile("/this/updaterinfo.xml"); - fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); - - // If using a GUI, prompt user whether or not to update. - if(!appName.Compare("psupdater")) + infoShare->SetUpdateNeeded(true); + while(!infoShare->GetPerformUpdate() || !infoShare->GetExitGUI()) { - infoShare->SetUpdateNeeded(true); - while(!infoShare->GetPerformUpdate() || !infoShare->GetExitGUI()) + csSleep(500); + // Make sure we die if we exit the gui as well. + if(!infoShare->GetUpdateNeeded() || infoShare->GetExitGUI()) { - csSleep(500); - // Make sure we die if we exit the gui as well. - if(!infoShare->GetUpdateNeeded() || infoShare->GetExitGUI()) - { - delete downloader; - downloader = NULL; - return; - } + delete downloader; + downloader = NULL; + return; + } - // If we're going to self-update, close the GUI. - if(infoShare->GetPerformUpdate()) - { - infoShare->SetExitGUI(true); - } + // If we're going to self-update, close the GUI. + if(infoShare->GetPerformUpdate()) + { + infoShare->SetExitGUI(true); } } - - // Begin the self update process. - SelfUpdate(false); - return; } - if(!vfs->Exists("/this/updaterinfo.xml.bak")) - return; + // Begin the self update process. + SelfUpdate(false); + return; + } - PrintOutput("No updates needed!\nChecking for updates to all files: "); + PrintOutput("No updates needed!\nChecking for updates to all files: "); - // Check for normal updates. - if(CheckGeneral()) + // Check for normal updates. + if(CheckGeneral()) + { + PrintOutput("Updates Available!\n"); + + // Check if we have write permissions. + if(!log.IsValid()) { - PrintOutput("Updates Available!\n"); - // Mark update as incomplete. - config->GetConfigFile()->SetBool("Update.Clean", false); - config->GetConfigFile()->Save(); + PrintOutput("Please run this program with administrator permissions to continue updating.\n"); + return; + } - // If using a GUI, prompt user whether or not to update. - if(!appName.Compare("psupdater")) + // If using a GUI, prompt user whether or not to update. + if(!appName.Compare("psupdater")) + { + infoShare->SetUpdateNeeded(true); + while(!infoShare->GetPerformUpdate()) { - infoShare->SetUpdateNeeded(true); - while(!infoShare->GetPerformUpdate()) + csSleep(500); + if(!infoShare->GetUpdateNeeded()) { - csSleep(500); - if(!infoShare->GetUpdateNeeded()) - { - delete downloader; - downloader = NULL; - return; - } + delete downloader; + downloader = NULL; + return; } } + } - // Begin general update. - GeneralUpdate(); + // Begin general update. + GeneralUpdate(); - // Maybe this fixes a bug. - fflush(stdout); + // Maybe this fixes a bug. + fflush(stdout); - // Mark update as complete and clean up. - config->GetConfigFile()->SetBool("Update.Clean", true); - config->GetConfigFile()->Save(); - PrintOutput("Update finished!\n"); - } - else - PrintOutput("No updates needed!\n"); - - delete downloader; - downloader = NULL; - infoShare->SetUpdateNeeded(false); + PrintOutput("Update finished!\n"); } + else + PrintOutput("No updates needed!\n"); - return; + delete downloader; + downloader = NULL; + infoShare->SetUpdateNeeded(false); } bool UpdaterEngine::CheckUpdater() { - // Backup old config, download new. - fileUtil->MoveFile("/this/updaterinfo.xml", "/this/updaterinfo.xml.bak", true, false); + // Download the latest updaterinfo. + if(!downloader->DownloadFile("updaterinfo.xml", UPDATERINFO_FILENAME, false, true)) + { + return false; + } - bool failed = false; - - if(!downloader->DownloadFile("updaterinfo.xml", "updaterinfo.xml", false, true)) - failed = true; - // Load new config data. - if(!failed) + csRef<iDocumentNode> root = GetRootNode(UPDATERINFO_FILENAME); + if(!root) { - csRef<iDocumentNode> root = GetRootNode(UPDATERINFO_FILENAME); - if(!root) - { - PrintOutput("Unable to get root node!\n"); - failed = true; - } + PrintOutput("Unable to get root node!\n"); + return false; + } - if(!failed) - { - csRef<iDocumentNode> confignode = root->GetNode("config"); - if (!confignode) - { - PrintOutput("Couldn't find config node in configfile!\n"); - failed = true; - } + csRef<iDocumentNode> confignode = root->GetNode("config"); + if (!confignode) + { + PrintOutput("Couldn't find config node in configfile!\n"); + return false; + } - if(!failed && !confignode->GetAttributeValueAsBool("active", true)) - { - PrintOutput("The updater mirrors are down, possibly for an update. Please try again later.\n"); - failed = true; - } - - if (!failed && !config->GetNewConfig()->Initialize(confignode)) - { - PrintOutput("Failed to Initialize mirror config new!\n"); - failed = true; - } - } + if(!confignode->GetAttributeValueAsBool("active", true)) + { + PrintOutput("The updater mirrors are down, possibly for an update. Please try again later.\n"); + return false; } - if(failed) + if(!config->GetNewConfig()->Initialize(confignode)) { - fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); + PrintOutput("Failed to Initialize mirror config new!\n"); return false; } @@ -363,13 +308,9 @@ PrintOutput("\nLocal config and server config are incompatible!\n"); PrintOutput("This is caused when your local version becomes out of sync with the update mirrors.\n"); PrintOutput("To resolve this, reinstall your client using the latest installer on the website.\n"); - fileUtil->RemoveFile("/this/updaterinfo.xml"); - fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); - return false; } } - // Remove the backup of the xml (they're the same). - fileUtil->RemoveFile("/this/updaterinfo.xml.bak"); + return false; } @@ -387,7 +328,7 @@ return NULL; } - //Try to read file + // Try to read file csRef<iDataBuffer> buf = vfs->ReadFile(nodeName); if (!buf || !buf->GetSize()) { @@ -395,7 +336,7 @@ return NULL; } - //Try to parse file + // Try to parse file configdoc = xml->CreateDocument(); const char* error = configdoc->Parse(buf); if (error) @@ -404,7 +345,7 @@ return NULL; } - //Try to get root + // Try to get root csRef<iDocumentNode> root = configdoc->GetRoot (); if (!root) { @@ -642,7 +583,7 @@ // Start by fetching the configs. csRefArray<ClientVersion>& oldCvs = config->GetCurrentConfig()->GetClientVersions(); const csRefArray<ClientVersion>& newCvs = config->GetNewConfig()->GetClientVersions(); - csRef<iDocumentNode> rootnode = GetRootNode(UPDATERINFO_OLD_FILENAME); + csRef<iDocumentNode> rootnode = GetRootNode(UPDATERINFO_CURRENT_FILENAME); csRef<iDocumentNode> confignode = rootnode->GetNode("config"); if (!confignode) @@ -889,10 +830,11 @@ printf("Failed to unmount file %s\n", zip.GetData()); } - // Add version info to updaterinfo.xml.bak and oldCvs. + // Add version info to updaterinfo.xml and oldCvs. csString value("<version name=\""); value.AppendFmt("%s\" />", newCv->GetName()); confignode->GetNode("client")->CreateNodeBefore(CS_NODE_TEXT)->SetValue(value); + configdoc->Write(vfs, UPDATERINFO_CURRENT_FILENAME); oldCvs.PushSmart(newCv); } } @@ -902,7 +844,7 @@ PrintOutput("Beginning integrity check!\n"); // Load current config data. - csRef<iDocumentNode> root = GetRootNode(UPDATERINFO_FILENAME); + csRef<iDocumentNode> root = GetRootNode(UPDATERINFO_CURRENT_FILENAME); bool success = true; if(!root) { @@ -919,10 +861,17 @@ if(!success) { + // Check if we have write permissions. + if(!log.IsValid()) + { + PrintOutput("Please run this program with administrator permissions to run the integrity check.\n"); + return; + } + fileUtil->RemoveFile("/this/updaterinfo.xml", true); downloader = new Downloader(vfs); downloader->SetProxy(config->GetProxy().host.GetData(), config->GetProxy().port); - if(!downloader->DownloadFile("http://www.psmirror.org/repo/updaterinfo.xml", "updaterinfo.xml", true, true)) + if(!downloader->DownloadFile("http://www.psmirror.org/repo/updaterinfo.xml", UPDATERINFO_CURRENT_FILENAME, true, true)) { PrintOutput("\nFailed to download updater info!\n"); return; @@ -930,7 +879,7 @@ delete downloader; - root = GetRootNode(UPDATERINFO_FILENAME); + root = GetRootNode(UPDATERINFO_CURRENT_FILENAME); if(!root) { PrintOutput("Unable to get root node!\n"); @@ -958,10 +907,9 @@ // Set proxy downloader->SetProxy(config->GetProxy().host.GetData(), config->GetProxy().port); - // Backup old config, download new. - fileUtil->MoveFile("/this/updaterinfo.xml", "/this/updaterinfo.xml.bak", true, false); - - if(!downloader->DownloadFile("updaterinfo.xml", "updaterinfo.xml", false, true)) + // Download new config. + fileUtil->RemoveFile(UPDATERINFO_CURRENT_FILENAME, true); + if(!downloader->DownloadFile("updaterinfo.xml", UPDATERINFO_CURRENT_FILENAME, false, true)) { PrintOutput("\nFailed to download updater info from a mirror!\n"); return; @@ -969,7 +917,7 @@ delete downloader; - root = GetRootNode(UPDATERINFO_FILENAME); + root = GetRootNode(UPDATERINFO_CURRENT_FILENAME); if(!root) { PrintOutput("Unable to get root node!\n"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-08-16 15:14:06
|
Revision: 2071 http://planeshift.svn.sourceforge.net/planeshift/?rev=2071&view=rev Author: mgist Date: 2008-08-16 15:14:15 +0000 (Sat, 16 Aug 2008) Log Message: ----------- - Fixed some bugs from the last updater changes. Modified Paths: -------------- trunk/src/pslaunch/download.cpp trunk/src/pslaunch/download.h trunk/src/pslaunch/updaterengine.cpp trunk/src/pslaunch/updaterengine.h Modified: trunk/src/pslaunch/download.cpp =================================================================== --- trunk/src/pslaunch/download.cpp 2008-08-16 11:14:39 UTC (rev 2070) +++ trunk/src/pslaunch/download.cpp 2008-08-16 15:14:15 UTC (rev 2071) @@ -95,7 +95,7 @@ { } -bool Downloader::DownloadFile(const char *file, const char *dest, bool URL, bool silent, uint retries) +bool Downloader::DownloadFile(const char *file, const char *dest, bool URL, bool silent, uint retries, bool vfsPath) { // Get active url, append file to get full path. Mirror* mirror; @@ -122,7 +122,16 @@ if (vfs) { - csRef<iDataBuffer> path = vfs->GetRealPath("/this/" + destpath); + csRef<iDataBuffer> path; + if(vfsPath) + { + path = vfs->GetRealPath(destpath); + } + else + { + path = vfs->GetRealPath("/this/" + destpath); + } + destpath = path->GetData(); } else Modified: trunk/src/pslaunch/download.h =================================================================== --- trunk/src/pslaunch/download.h 2008-08-16 11:14:39 UTC (rev 2070) +++ trunk/src/pslaunch/download.h 2008-08-16 15:14:15 UTC (rev 2071) @@ -41,7 +41,7 @@ * If URL is true; download a file from 'file' where 'file' is the * full URL to the file, and save to 'dest' */ - bool DownloadFile (const char* file, const char* dest, bool URL, bool silent = false, uint retries = 3); + bool DownloadFile (const char* file, const char* dest, bool URL, bool silent = false, uint retries = 3, bool vfsPath = false); /* Set the proxy server host and port */ void SetProxy (const char* host, int port); Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2008-08-16 11:14:39 UTC (rev 2070) +++ trunk/src/pslaunch/updaterengine.cpp 2008-08-16 15:14:15 UTC (rev 2071) @@ -228,7 +228,7 @@ bool UpdaterEngine::CheckUpdater() { // Download the latest updaterinfo. - if(!downloader->DownloadFile("updaterinfo.xml", UPDATERINFO_FILENAME, false, true)) + if(!downloader->DownloadFile("updaterinfo.xml", UPDATERINFO_FILENAME, false, true, 3, true)) { return false; } @@ -318,7 +318,7 @@ return true; } -csRef<iDocumentNode> UpdaterEngine::GetRootNode(const char* nodeName) +csRef<iDocumentNode> UpdaterEngine::GetRootNode(const char* nodeName, csRef<iDocument>* document) { // Load xml. csRef<iDocumentSystem> xml = csPtr<iDocumentSystem> (new csTinyDocumentSystem); @@ -337,7 +337,16 @@ } // Try to parse file - configdoc = xml->CreateDocument(); + if(document) + { + *document = xml->CreateDocument(); + configdoc = *document; + } + else + { + configdoc = xml->CreateDocument(); + } + const char* error = configdoc->Parse(buf); if (error) { @@ -583,7 +592,8 @@ // Start by fetching the configs. csRefArray<ClientVersion>& oldCvs = config->GetCurrentConfig()->GetClientVersions(); const csRefArray<ClientVersion>& newCvs = config->GetNewConfig()->GetClientVersions(); - csRef<iDocumentNode> rootnode = GetRootNode(UPDATERINFO_CURRENT_FILENAME); + csRef<iDocument> updaterinfo; + csRef<iDocumentNode> rootnode = GetRootNode(UPDATERINFO_CURRENT_FILENAME, &updaterinfo); csRef<iDocumentNode> confignode = rootnode->GetNode("config"); if (!confignode) @@ -834,7 +844,7 @@ csString value("<version name=\""); value.AppendFmt("%s\" />", newCv->GetName()); confignode->GetNode("client")->CreateNodeBefore(CS_NODE_TEXT)->SetValue(value); - configdoc->Write(vfs, UPDATERINFO_CURRENT_FILENAME); + updaterinfo->Write(vfs, UPDATERINFO_CURRENT_FILENAME); oldCvs.PushSmart(newCv); } } @@ -871,7 +881,7 @@ fileUtil->RemoveFile("/this/updaterinfo.xml", true); downloader = new Downloader(vfs); downloader->SetProxy(config->GetProxy().host.GetData(), config->GetProxy().port); - if(!downloader->DownloadFile("http://www.psmirror.org/repo/updaterinfo.xml", UPDATERINFO_CURRENT_FILENAME, true, true)) + if(!downloader->DownloadFile("http://www.psmirror.org/repo/updaterinfo.xml", UPDATERINFO_CURRENT_FILENAME, true, true, 3, true)) { PrintOutput("\nFailed to download updater info!\n"); return; @@ -909,7 +919,7 @@ // Download new config. fileUtil->RemoveFile(UPDATERINFO_CURRENT_FILENAME, true); - if(!downloader->DownloadFile("updaterinfo.xml", UPDATERINFO_CURRENT_FILENAME, false, true)) + if(!downloader->DownloadFile("updaterinfo.xml", UPDATERINFO_CURRENT_FILENAME, false, true, 3, true)) { PrintOutput("\nFailed to download updater info from a mirror!\n"); return; Modified: trunk/src/pslaunch/updaterengine.h =================================================================== --- trunk/src/pslaunch/updaterengine.h 2008-08-16 11:14:39 UTC (rev 2070) +++ trunk/src/pslaunch/updaterengine.h 2008-08-16 15:14:15 UTC (rev 2071) @@ -164,7 +164,7 @@ csRef<iVFS> GetVFS() const { return vfs; } // Find the config node given an xml file name. - csRef<iDocumentNode> GetRootNode(const char* fileName); + csRef<iDocumentNode> GetRootNode(const char* fileName, csRef<iDocument>* document = 0); /* * Starts and finishes a self update This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-09-04 18:04:09
|
Revision: 2151 http://planeshift.svn.sourceforge.net/planeshift/?rev=2151&view=rev Author: mgist Date: 2008-09-04 18:04:19 +0000 (Thu, 04 Sep 2008) Log Message: ----------- - Fixed a typo causing the updater to have trouble restarting itself on macs. - Renamed CheckIntegrity to --repair (-repair is also valid). Modified Paths: -------------- trunk/src/pslaunch/updaterconfig.cpp trunk/src/pslaunch/updaterengine.cpp trunk/src/pslaunch/updaterengine.h Modified: trunk/src/pslaunch/updaterconfig.cpp =================================================================== --- trunk/src/pslaunch/updaterconfig.cpp 2008-09-03 09:03:15 UTC (rev 2150) +++ trunk/src/pslaunch/updaterconfig.cpp 2008-09-04 18:04:19 UTC (rev 2151) @@ -46,11 +46,11 @@ for(uint i=0; i<args.GetSize(); i++) { csString arg = args.Pop(); - if(arg.Compare("selfUpdateFirst")) + if(arg.CompareNoCase("selfUpdateFirst")) selfUpdating = 1; - else if(arg.Compare("selfUpdateSecond")) + else if(arg.CompareNoCase("selfUpdateSecond")) selfUpdating = 2; - else if(arg.Compare("CheckIntegrity")) + else if(arg.CompareNoCase("-repair") || arg.CompareNoCase("--repair")) checkIntegrity = true; } Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2008-09-03 09:03:15 UTC (rev 2150) +++ trunk/src/pslaunch/updaterengine.cpp 2008-09-04 18:04:19 UTC (rev 2151) @@ -562,7 +562,7 @@ cmd.Format("cd %s; unzip -oqq %s", thisPath->GetData(), zip.GetData()); system(cmd); -#if defined(CSPLATFORM_MACOSX) +#if defined(CS_PLATFORM_MACOSX) // Create a new process of the updater and exit. cmd.Clear(); Modified: trunk/src/pslaunch/updaterengine.h =================================================================== --- trunk/src/pslaunch/updaterengine.h 2008-09-03 09:03:15 UTC (rev 2150) +++ trunk/src/pslaunch/updaterengine.h 2008-09-04 18:04:19 UTC (rev 2151) @@ -34,7 +34,7 @@ #include "util/singleton.h" /* To be incremented every time we want to make an update. */ -#define UPDATER_VERSION 1.0 +#define UPDATER_VERSION 1.1 struct iConfigManager; struct iVFS; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-11-29 00:10:25
|
Revision: 2543 http://planeshift.svn.sourceforge.net/planeshift/?rev=2543&view=rev Author: mgist Date: 2008-11-29 00:10:21 +0000 (Sat, 29 Nov 2008) Log Message: ----------- - A few pslaunch warning fixes. Modified Paths: -------------- trunk/src/pslaunch/pawslauncherwindow.cpp trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/pawslauncherwindow.cpp =================================================================== --- trunk/src/pslaunch/pawslauncherwindow.cpp 2008-11-28 22:33:06 UTC (rev 2542) +++ trunk/src/pslaunch/pawslauncherwindow.cpp 2008-11-29 00:10:21 UTC (rev 2543) @@ -810,7 +810,7 @@ if (!psLaunchGUI->GetVFS()->Exists(zip)) { - printf("Current skin doesn't exist, skipping..\n"); + printf("Current skin %s doesn't exist, skipping..\n", zip.GetData()); return; } Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2008-11-28 22:33:06 UTC (rev 2542) +++ trunk/src/pslaunch/updaterengine.cpp 2008-11-29 00:10:21 UTC (rev 2543) @@ -158,7 +158,7 @@ while(!infoShare->GetPerformUpdate()) { // Make sure we die if we exit the gui as well. - if(!infoShare->GetUpdateNeeded() || infoShare->GetExitGUI()) + if(!infoShare->GetUpdateNeeded() || infoShare->GetExitGUI() || CheckQuit()) { infoShare->Sync(false); delete downloader; @@ -197,7 +197,7 @@ infoShare->SetUpdateNeeded(true); while(!infoShare->GetPerformUpdate()) { - if(!infoShare->GetUpdateNeeded() || infoShare->GetExitGUI()) + if(!infoShare->GetUpdateNeeded() || infoShare->GetExitGUI() || CheckQuit()) { infoShare->Sync(false); delete downloader; @@ -512,7 +512,7 @@ // Construct zip name. csString zip = appName; - zip.AppendFmt(config->GetCurrentConfig()->GetPlatform()); + zip.AppendFmt("%s", config->GetCurrentConfig()->GetPlatform()); zip.AppendFmt(".zip"); // Remove updater zip. @@ -528,7 +528,7 @@ // Construct zip name. csString zip = appName; - zip.AppendFmt(config->GetCurrentConfig()->GetPlatform()); + zip.AppendFmt("%s", config->GetCurrentConfig()->GetPlatform()); zip.AppendFmt(".zip"); if(vfs->Exists("/this/" + zip)) @@ -560,7 +560,11 @@ csString cmd; csRef<iDataBuffer> thisPath = vfs->GetRealPath("/this/"); cmd.Format("cd %s; unzip -oqq %s", thisPath->GetData(), zip.GetData()); - system(cmd); + int res = system(cmd); + if(res == -1) + { + printf("system(%s) failed!\n", cmd.GetData()); + } #if defined(CS_PLATFORM_MACOSX) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2008-11-29 15:13:44
|
Revision: 2551 http://planeshift.svn.sourceforge.net/planeshift/?rev=2551&view=rev Author: mgist Date: 2008-11-29 15:13:42 +0000 (Sat, 29 Nov 2008) Log Message: ----------- - Fixed a few leaks in pslaunch. Modified Paths: -------------- trunk/src/pslaunch/pawslauncherwindow.h trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/pslaunch.h Modified: trunk/src/pslaunch/pawslauncherwindow.h =================================================================== --- trunk/src/pslaunch/pawslauncherwindow.h 2008-11-29 15:04:41 UTC (rev 2550) +++ trunk/src/pslaunch/pawslauncherwindow.h 2008-11-29 15:13:42 UTC (rev 2551) @@ -20,10 +20,11 @@ #ifndef __PAWS_LAUNCHER_WINDOW_H__ #define __PAWS_LAUNCHER_WINDOW_H__ +#include "paws/pawswidget.h" + #include "pslaunch.h" class pawsComboBox; -class pawsWidget; class pawsYesNoBox; class pawsLauncherWindow : public pawsWidget Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2008-11-29 15:04:41 UTC (rev 2550) +++ trunk/src/pslaunch/pslaunch.cpp 2008-11-29 15:13:42 UTC (rev 2551) @@ -34,6 +34,8 @@ #include "updater.h" #include "paws/pawsbutton.h" +#include "paws/pawsmainwidget.h" +#include "paws/pawsmanager.h" #include "paws/pawstextbox.h" #include "util/log.h" @@ -57,6 +59,10 @@ if(InitApp()) csDefaultRunLoop(object_reg); + delete launcherWidget; + launcherWidget = NULL; + delete mainWidget; + mainWidget = NULL; delete paws; paws = NULL; delete downloader; @@ -138,7 +144,7 @@ paws->SetMainWidget(mainWidget); // Register factory - new pawsLauncherWindowFactory; + launcherWidget = new pawsLauncherWindowFactory(); // Load and assign a default button click sound for pawsbutton paws->LoadSound("/planeshift/art/music/gui/ccreate/next.wav","sound.standardButtonClick"); Modified: trunk/src/pslaunch/pslaunch.h =================================================================== --- trunk/src/pslaunch/pslaunch.h 2008-11-29 15:04:41 UTC (rev 2550) +++ trunk/src/pslaunch/pslaunch.h 2008-11-29 15:13:42 UTC (rev 2551) @@ -25,8 +25,6 @@ #include "updaterconfig.h" #include "updaterengine.h" -#include "paws/pawsmanager.h" -#include "paws/pawsmainwidget.h" #include "util/genericevent.h" class pawsMessageTextBox; @@ -35,6 +33,9 @@ #define LAUNCHER_CONFIG_FILENAME "/this/pslaunch.cfg" +class pawsLauncherWindowFactory; +class pawsMainWidget; +class PawsManager; struct iObjectRegistry; using namespace CS::Threading; @@ -55,6 +56,7 @@ // PAWS PawsManager* paws; pawsMainWidget* mainWidget; + pawsLauncherWindowFactory* launcherWidget; /* Info shared with other threads. */ InfoShare *infoShare; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-01-21 03:09:47
|
Revision: 2922 http://planeshift.svn.sourceforge.net/planeshift/?rev=2922&view=rev Author: mgist Date: 2009-01-21 03:09:44 +0000 (Wed, 21 Jan 2009) Log Message: ----------- - Swapped around the launcher's gui and updater threads. Will hopefully resolve some mac problems. Modified Paths: -------------- trunk/src/pslaunch/pawslauncherwindow.cpp trunk/src/pslaunch/pawslauncherwindow.h trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/pslaunch.h trunk/src/pslaunch/updaterengine.cpp trunk/src/pslaunch/updaterengine.h Modified: trunk/src/pslaunch/pawslauncherwindow.cpp =================================================================== --- trunk/src/pslaunch/pawslauncherwindow.cpp 2009-01-21 01:02:54 UTC (rev 2921) +++ trunk/src/pslaunch/pawslauncherwindow.cpp 2009-01-21 03:09:44 UTC (rev 2922) @@ -34,6 +34,7 @@ #include "globals.h" #include "pawslauncherwindow.h" +using namespace CS::Threading; using namespace std; pawsLauncherWindow::pawsLauncherWindow() Modified: trunk/src/pslaunch/pawslauncherwindow.h =================================================================== --- trunk/src/pslaunch/pawslauncherwindow.h 2009-01-21 01:02:54 UTC (rev 2921) +++ trunk/src/pslaunch/pawslauncherwindow.h 2009-01-21 03:09:44 UTC (rev 2922) @@ -41,7 +41,7 @@ pawsYesNoBox* updateAvailable; csRef<iConfigFile> configFile; csRef<iConfigFile> configUser; - csRef<Thread> newsUpdater; + csRef<CS::Threading::Thread> newsUpdater; csString mountedPath; csString currentSkin; @@ -54,7 +54,7 @@ bool LoadResource(const char* resource,const char* resname, const char* mountPath); void OnListAction(pawsListBox* widget, int status); - class NewsUpdater : public Runnable + class NewsUpdater : public CS::Threading::Runnable { public: NewsUpdater(pawsLauncherWindow* plw) Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2009-01-21 01:02:54 UTC (rev 2921) +++ trunk/src/pslaunch/pslaunch.cpp 2009-01-21 03:09:44 UTC (rev 2922) @@ -42,6 +42,8 @@ CS_IMPLEMENT_APPLICATION psLauncherGUI* psLaunchGUI; + +using namespace CS::Threading; psLauncherGUI::psLauncherGUI(iObjectRegistry* _object_reg, InfoShare *_infoShare, bool *_execPSClient) { @@ -402,10 +404,6 @@ args.Push(argv[i]); } - InfoShare *infoShare = new InfoShare(); - infoShare->SetPerformUpdate(false); - infoShare->SetUpdateNeeded(false); - // Mount the VFS paths. csRef<iVFS> vfs = csQueryRegistry<iVFS>(object_reg); if (!vfs->Mount ("/planeshift/", "$^")) @@ -414,26 +412,39 @@ return false; } + // Set config path. csRef<iConfigManager> configManager = csQueryRegistry<iConfigManager> (object_reg); csString configPath = csGetPlatformConfigPath("PlaneShift"); configPath.ReplaceAll("/.crystalspace/", "/."); configPath = configManager->GetStr("PlaneShift.UserConfigPath", configPath); - FileUtil fileUtil(vfs); - csRef<FileStat> filestat = fileUtil.StatFile(configPath); + + // Check that the path exists, else attempt to create it. + FileUtil* fileUtil = new FileUtil(vfs); + csRef<FileStat> filestat = fileUtil->StatFile(configPath); if (!filestat.IsValid() && CS_MKDIR(configPath) < 0) { printf("Could not create required %s directory!\n", configPath.GetData()); return false; } + filestat.Invalidate(); + delete fileUtil; + fileUtil = NULL; + // Mount config path. if (!vfs->Mount("/planeshift/userdata", configPath + "$/")) { printf("Could not mount %s as /planeshift/userdata!\n", configPath.GetData()); return false; } + // Init thread communication structure. + InfoShare *infoShare = new InfoShare(); + infoShare->SetPerformUpdate(false); + infoShare->SetUpdateNeeded(false); + // Initialize updater engine. - UpdaterEngine* engine = new UpdaterEngine(args, object_reg, "pslaunch", infoShare); + csRef<UpdaterEngine> engine; + engine.AttachNew(new UpdaterEngine(args, object_reg, "pslaunch", infoShare)); // If we're self updating, continue self update. if(engine->GetConfig()->IsSelfUpdating()) @@ -441,98 +452,78 @@ exitApp = engine->SelfUpdate(engine->GetConfig()->IsSelfUpdating()); } - // If we don't have to exit the app, create GUI thread and run updater. + // Set to true by GUI if we have to launch the client. + bool execPSClient = false; + + // If we don't have to exit the app, create updater thread and run the GUI. if(!exitApp) { - // Set to true by GUI if we have to launch the client. - bool execPSClient = false; - // Ping stuff. + // Start up updater. + csRef<Thread> updaterThread; + updaterThread.AttachNew(new Thread(engine)); + updaterThread->Start(); // Request needed plugins for GUI. csInitializer::RequestPlugins(object_reg, CS_REQUEST_FONTSERVER, CS_REQUEST_IMAGELOADER, CS_REQUEST_OPENGL3D, CS_REQUEST_END); - // Start up GUI. - csRef<Runnable> gui; - gui.AttachNew(new psLauncherGUI(object_reg, infoShare, &execPSClient)); - csRef<Thread> guiThread; - guiThread.AttachNew(new Thread(gui)); - guiThread->Start(); + // Start GUI. + psLauncherGUI* gui = new psLauncherGUI(object_reg, infoShare, &execPSClient); + gui->Run(); - //Begin update checking. - if(engine) - engine->CheckForUpdates(); + // Free GUI. + delete gui; + } - // Wait for the gui to exit. - while(guiThread->IsRunning()) - { - csSleep(500); - if(infoShare->GetCheckIntegrity()) - { - engine->CheckIntegrity(); - csSleep(1000); - infoShare->SetCheckIntegrity(false); - } + // Clean up everything else. + engine.Invalidate(); + delete infoShare; + configManager.Invalidate(); + vfs.Invalidate(); + csInitializer::DestroyApplication(object_reg); - } + if (execPSClient) + { + // Execute psclient process. - // Free updater. - delete engine; - engine = NULL; - - // Free the GUI. - guiThread = NULL; - gui = NULL; - - // Clean up everything else. - csInitializer::DestroyApplication(object_reg); - object_reg = NULL; - delete infoShare; - infoShare = NULL; - - if (execPSClient) - { - // Execute psclient process. - #ifdef CS_PLATFORM_WIN32 - // Info for CreateProcess. - STARTUPINFO siStartupInfo; - DWORD dwExitCode; - PROCESS_INFORMATION piProcessInfo; - memset(&siStartupInfo, 0, sizeof(siStartupInfo)); - memset(&piProcessInfo, 0, sizeof(piProcessInfo)); - siStartupInfo.cb = sizeof(siStartupInfo); + // Info for CreateProcess. + STARTUPINFO siStartupInfo; + DWORD dwExitCode; + PROCESS_INFORMATION piProcessInfo; + memset(&siStartupInfo, 0, sizeof(siStartupInfo)); + memset(&piProcessInfo, 0, sizeof(piProcessInfo)); + siStartupInfo.cb = sizeof(siStartupInfo); - CreateProcess(NULL, "psclient.exe", 0, 0, false, - CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo); - GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode); - while (dwExitCode == STILL_ACTIVE) - { - csSleep(1000); - GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode); - } - exitApp = dwExitCode ? 0 : !0; - CloseHandle(piProcessInfo.hProcess); - CloseHandle(piProcessInfo.hThread); + CreateProcess(NULL, "psclient.exe", 0, 0, false, + CREATE_DEFAULT_ERROR_MODE, 0, 0, &siStartupInfo, &piProcessInfo); + GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode); + while (dwExitCode == STILL_ACTIVE) + { + csSleep(1000); + GetExitCodeProcess(piProcessInfo.hProcess, &dwExitCode); + } + exitApp = dwExitCode ? 0 : !0; + CloseHandle(piProcessInfo.hProcess); + CloseHandle(piProcessInfo.hThread); #else - if(fork() == 0) - { - execl("./psclient", "./psclient", (char*)0); - } - else - { - int status; - wait(&status); - exitApp = status ? 0 : !0; - } + if(fork() == 0) + { + execl("./psclient", "./psclient", (char*)0); + } + else + { + int status; + wait(&status); + exitApp = status ? 0 : !0; + } #endif - } - else - { - exitApp = true; - } } + else + { + exitApp = true; + } } } Modified: trunk/src/pslaunch/pslaunch.h =================================================================== --- trunk/src/pslaunch/pslaunch.h 2009-01-21 01:02:54 UTC (rev 2921) +++ trunk/src/pslaunch/pslaunch.h 2009-01-21 03:09:44 UTC (rev 2922) @@ -38,9 +38,7 @@ class PawsManager; struct iObjectRegistry; -using namespace CS::Threading; - -class psLauncherGUI : public Runnable +class psLauncherGUI { private: @@ -108,9 +106,8 @@ void CancelUpdater() { infoShare->SetCancelUpdater(true); } - // Run thread. + // Run. void Run(); - }; #endif // __PSLAUNCH_H__ Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-01-21 01:02:54 UTC (rev 2921) +++ trunk/src/pslaunch/updaterengine.cpp 2009-01-21 03:09:44 UTC (rev 2922) @@ -103,6 +103,20 @@ } } +void UpdaterEngine::Run() +{ + CheckForUpdates(); + + while(!infoShare->GetExitGUI()) + { + if(infoShare->GetCheckIntegrity()) + { + CheckIntegrity(); + infoShare->SetCheckIntegrity(false); + } + } +} + void UpdaterEngine::CheckForUpdates() { // Make sure the old instance had time to terminate (self-update). Modified: trunk/src/pslaunch/updaterengine.h =================================================================== --- trunk/src/pslaunch/updaterengine.h 2009-01-21 01:02:54 UTC (rev 2921) +++ trunk/src/pslaunch/updaterengine.h 2009-01-21 03:09:44 UTC (rev 2922) @@ -131,7 +131,7 @@ } }; -class UpdaterEngine : public Singleton<UpdaterEngine> +class UpdaterEngine : public CS::Threading::Runnable, public Singleton<UpdaterEngine> { private: iObjectRegistry* object_reg; @@ -208,6 +208,9 @@ /* Print to console and save to array for GUI output. */ void PrintOutput(const char* string, ...); + + /* Run updater thread. */ + void Run(); }; #endif // __UPDATERENGINE_H__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-01-21 19:07:38
|
Revision: 2931 http://planeshift.svn.sourceforge.net/planeshift/?rev=2931&view=rev Author: mgist Date: 2009-01-21 19:07:33 +0000 (Wed, 21 Jan 2009) Log Message: ----------- - Fixes. Modified Paths: -------------- trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2009-01-21 19:06:19 UTC (rev 2930) +++ trunk/src/pslaunch/pslaunch.cpp 2009-01-21 19:07:33 UTC (rev 2931) @@ -379,11 +379,12 @@ } else { - // Set to true to exit the app. bool exitApp = false; - while(!exitApp) { + // Set to exit app. + exitApp = true; + // Set up CS iObjectRegistry* object_reg = csInitializer::CreateEnvironment (argc, argv); Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-01-21 19:06:19 UTC (rev 2930) +++ trunk/src/pslaunch/updaterengine.cpp 2009-01-21 19:07:33 UTC (rev 2931) @@ -583,9 +583,9 @@ #if defined(CS_PLATFORM_MACOSX) // Create a new process of the updater and exit. - cmd.Clear(); - cmd.Format("%s%s.app/Contents/MacOS/%s_static selfUpdateSecond", thisPath->GetData(), appName.GetData(), appName.GetData()); - system(cmd); + csString path = appName; + if(fork() == 0) + execl(path.Append(".app"), path.Append(".app"), "selfUpdateSecond", NULL); #else if(fork() == 0) execl(appName, appName, "selfUpdateSecond", NULL); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-03-21 12:05:08
|
Revision: 3264 http://planeshift.svn.sourceforge.net/planeshift/?rev=3264&view=rev Author: mgist Date: 2009-03-21 12:05:02 +0000 (Sat, 21 Mar 2009) Log Message: ----------- - Fixed #2758 - PSlaunch console repair updater fails to work. Modified Paths: -------------- trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2009-03-21 11:46:17 UTC (rev 3263) +++ trunk/src/pslaunch/pslaunch.cpp 2009-03-21 12:05:02 UTC (rev 3264) @@ -376,8 +376,12 @@ if(!engine->GetConfig()->IsSelfUpdating()) { +#if defined(WIN32) && defined(NDEBUG) + printf("\nUpdater finished!\n"); +#else printf("\nUpdater finished, press enter to exit.\n"); getchar(); +#endif } // Terminate updater! Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-03-21 11:46:17 UTC (rev 3263) +++ trunk/src/pslaunch/updaterengine.cpp 2009-03-21 12:05:02 UTC (rev 3264) @@ -176,7 +176,7 @@ } // If using a GUI, prompt user whether or not to update. - if(!appName.Compare("psupdater")) + if(hasGUI) { infoShare->SetUpdateNeeded(true); while(!infoShare->GetPerformUpdate()) @@ -223,7 +223,7 @@ } // If using a GUI, prompt user whether or not to update. - if(!appName.Compare("psupdater")) + if(hasGUI) { infoShare->SetUpdateNeeded(true); while(!infoShare->GetPerformUpdate()) @@ -430,7 +430,7 @@ fileUtil->CopyFile("/this/" + tempName, "/this/" + appName, true, true); // Copy any art and data. - if(appName.Compare("pslaunch")) + if(hasGUI) { csString zip = appName; zip.AppendFmt(config->GetCurrentConfig()->GetPlatform()); @@ -1098,7 +1098,7 @@ char c = ' '; PrintOutput("\nDo you wish to download the correct copies of these files? (y/n)\n"); - if(!appName.Compare("pslaunch")) + if(!hasGUI) { while(c != 'y' && c != 'n') { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-04-19 05:21:05
|
Revision: 3501 http://planeshift.svn.sourceforge.net/planeshift/?rev=3501&view=rev Author: mgist Date: 2009-04-19 05:21:01 +0000 (Sun, 19 Apr 2009) Log Message: ----------- - Changed the updater to work in two update steps (platform specific and generic) instead of the previous one. Modified Paths: -------------- trunk/src/pslaunch/updaterconfig.cpp trunk/src/pslaunch/updaterconfig.h trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/updaterconfig.cpp =================================================================== --- trunk/src/pslaunch/updaterconfig.cpp 2009-04-19 01:56:09 UTC (rev 3500) +++ trunk/src/pslaunch/updaterconfig.cpp 2009-04-19 05:21:01 UTC (rev 3501) @@ -82,7 +82,7 @@ { if(!UpdaterConfig::GetSingletonPtr()->UpdatePlatform()) { - return "generic"; + return GetGeneric(); } #if defined(CS_PLATFORM_WIN32) return "win32"; Modified: trunk/src/pslaunch/updaterconfig.h =================================================================== --- trunk/src/pslaunch/updaterconfig.h 2009-04-19 01:56:09 UTC (rev 3500) +++ trunk/src/pslaunch/updaterconfig.h 2009-04-19 05:21:01 UTC (rev 3501) @@ -116,6 +116,8 @@ /* Get our platform string. */ const char* GetPlatform() const; + const char* GetGeneric() const { return "generic"; } + /* Get latest updater version */ float GetUpdaterVersionLatest() const { return updaterVersionLatest; } Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-04-19 01:56:09 UTC (rev 3500) +++ trunk/src/pslaunch/updaterengine.cpp 2009-04-19 05:21:01 UTC (rev 3501) @@ -640,6 +640,10 @@ return; } + // True if the platform is 'generic' (data only). + bool genericPlatform = !strcmp(config->GetCurrentConfig()->GetPlatform(), + config->GetCurrentConfig()->GetGeneric()); + // Main loop. while(CheckGeneral()) { @@ -649,150 +653,134 @@ // Use index to find the first update version in newCvs. ClientVersion* newCv = newCvs.Get(index); - // Construct zip name. - csString zip = config->GetCurrentConfig()->GetPlatform(); - zip.AppendFmt("-%s.zip", newCv->GetName()); - - if(vfs->Exists("/this/" + zip)) + /** + * Two passes: + * First is for the platform specific update. + * Second is for the generic update. + */ + for(int pass=1; pass<=2; ++pass) { - fileUtil->RemoveFile("/this/" + zip); - } + // Only do second pass if the platform isn't 'generic'. + if(pass == 2 && genericPlatform) + break; - // Download update zip. - PrintOutput("\nDownloading update file..\n"); - if(!downloader->DownloadFile(zip, zip, false, true)) - { - PrintOutput("Failed to download the update file! Try again later.\n"); - return; - } + // Construct zip name. + csString zip; + if(pass == 1) + { + zip = config->GetCurrentConfig()->GetPlatform(); + } + else + { + zip = config->GetCurrentConfig()->GetGeneric(); + } - // Check md5sum is correct. - csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + zip, true); - if (!buffer) - { - PrintOutput("Could not get MD5 of updater zip!!\n"); - return; - } + zip.AppendFmt("-%s.zip", newCv->GetName()); - csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); + if(vfs->Exists("/this/" + zip)) + { + fileUtil->RemoveFile("/this/" + zip); + } - csString md5sum = md5.HexString(); + // Download update zip. + if(pass == 1 && !genericPlatform) + { + PrintOutput("\nDownloading platform specific update file..\n"); + } + else + { + PrintOutput("\nDownloading generic update file..\n"); + } - if(!md5sum.Compare(newCv->GetMD5Sum())) - { - PrintOutput("md5sum of client zip does not match correct md5sum!!\n"); - return; - } + if(!downloader->DownloadFile(zip, zip, false, true)) + { + PrintOutput("Failed to download the update file! Try again later.\n"); + return; + } - // Mount zip - csRef<iDataBuffer> realZipPath = vfs->GetRealPath("/this/" + zip); - vfs->Mount("/zip", realZipPath->GetData()); - - // Parse deleted files xml, make a list. - csArray<csString> deletedList; - csRef<iDocumentNode> deletedrootnode = GetRootNode("/zip/deletedfiles.xml"); - if(deletedrootnode) - { - csRef<iDocumentNode> deletednode = deletedrootnode->GetNode("deletedfiles"); - csRef<iDocumentNodeIterator> nodeItr = deletednode->GetNodes(); - while(nodeItr->HasNext()) + // Check md5sum is correct. + csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + zip, true); + if (!buffer) { - csRef<iDocumentNode> node = nodeItr->Next(); - deletedList.PushSmart(node->GetAttributeValue("name")); + PrintOutput("Could not get MD5 of updater zip!!\n"); + return; } - } - // Remove all those files from our real dir. - for(uint i=0; i<deletedList.GetSize(); i++) - { - fileUtil->RemoveFile("/this/" + deletedList.Get(i)); - } + csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); - // Parse new files xml, make a list. - csArray<csString> newList; - csArray<csString> newListPlatform; - csArray<bool> newListExec; - csRef<iDocumentNode> newrootnode = GetRootNode("/zip/newfiles.xml"); - if(newrootnode) - { - csRef<iDocumentNode> newnode = newrootnode->GetNode("newfiles"); - csRef<iDocumentNodeIterator> nodeItr = newnode->GetNodes(); - while(nodeItr->HasNext()) + csString md5sum = md5.HexString(); + + if(!md5sum.Compare(newCv->GetMD5Sum())) { - csRef<iDocumentNode> node = nodeItr->Next(); - newList.PushSmart(node->GetAttributeValue("name")); - newListPlatform.Push(node->GetAttributeValue("platform")); - newListExec.Push(node->GetAttributeValueAsBool("exec")); + PrintOutput("md5sum of client zip does not match correct md5sum!!\n"); + return; } - } - // Copy all those files to our real dir. - for(uint i=0; i<newList.GetSize(); i++) - { - fileUtil->CopyFile("/zip/" + newList.Get(i), "/this/" + newList.Get(i), true, newListExec.Get(i)); - } + // Mount zip + csRef<iDataBuffer> realZipPath = vfs->GetRealPath("/this/" + zip); + vfs->Mount("/zip", realZipPath->GetData()); - // Parse changed files xml, binary patch each file. - csRef<iDocumentNode> changedrootnode = GetRootNode("/zip/changedfiles.xml"); - if(changedrootnode) - { - csRef<iDocumentNode> changednode = changedrootnode->GetNode("changedfiles"); - csRef<iDocumentNodeIterator> nodeItr = changednode->GetNodes(); - while(nodeItr->HasNext()) + // Parse deleted files xml, make a list. + csArray<csString> deletedList; + csRef<iDocumentNode> deletedrootnode = GetRootNode("/zip/deletedfiles.xml"); + if(deletedrootnode) { - csRef<iDocumentNode> next = nodeItr->Next(); - - csString newFilePath = next->GetAttributeValue("filepath"); - csString diff = next->GetAttributeValue("diff"); - csString oldFilePath = newFilePath; - oldFilePath.AppendFmt(".old"); - - // Start by checking whether the existing file is already up to date. - csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + newFilePath); - if(buffer) + csRef<iDocumentNode> deletednode = deletedrootnode->GetNode("deletedfiles"); + csRef<iDocumentNodeIterator> nodeItr = deletednode->GetNodes(); + while(nodeItr->HasNext()) { - csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); - csString md5sum = md5.HexString(); - - csString fileMD5 = next->GetAttributeValue("md5sum"); - - // If it's up to date then skip this file. - if(md5sum.Compare(fileMD5)) - { - continue; - } + csRef<iDocumentNode> node = nodeItr->Next(); + deletedList.PushSmart(node->GetAttributeValue("name")); } + } - // Move old file to a temp location ready for input. - fileUtil->MoveFile("/this/" + newFilePath, "/this/" + oldFilePath, true, false, true); + // Remove all those files from our real dir. + for(uint i=0; i<deletedList.GetSize(); i++) + { + fileUtil->RemoveFile("/this/" + deletedList.Get(i)); + } - // Move diff to a real location ready for input. - fileUtil->CopyFile("/zip/" + diff, "/this/" + newFilePath + ".vcdiff", true, false, true); - diff = newFilePath + ".vcdiff"; - - // Get real paths. - csRef<iDataBuffer> oldFP = vfs->GetRealPath("/this/" + oldFilePath); - csRef<iDataBuffer> diffFP = vfs->GetRealPath("/this/" + diff); - csRef<iDataBuffer> newFP = vfs->GetRealPath("/this/" + newFilePath); - - // Save permissions. - csRef<FileStat> fs = fileUtil->StatFile(oldFP->GetData()); -#ifdef CS_PLATFORM_UNIX - if(next->GetAttributeValueAsBool("exec")) + // Parse new files xml, make a list. + csArray<csString> newList; + csArray<csString> newListPlatform; + csArray<bool> newListExec; + csRef<iDocumentNode> newrootnode = GetRootNode("/zip/newfiles.xml"); + if(newrootnode) + { + csRef<iDocumentNode> newnode = newrootnode->GetNode("newfiles"); + csRef<iDocumentNodeIterator> nodeItr = newnode->GetNodes(); + while(nodeItr->HasNext()) { - fs->mode = fs->mode | S_IXUSR | S_IXGRP; + csRef<iDocumentNode> node = nodeItr->Next(); + newList.PushSmart(node->GetAttributeValue("name")); + newListPlatform.Push(node->GetAttributeValue("platform")); + newListExec.Push(node->GetAttributeValueAsBool("exec")); } -#endif + } - // Binary patch. - PrintOutput("\nPatching file %s: ", newFilePath.GetData()); - if(!PatchFile(oldFP->GetData(), diffFP->GetData(), newFP->GetData())) + // Copy all those files to our real dir. + for(uint i=0; i<newList.GetSize(); i++) + { + fileUtil->CopyFile("/zip/" + newList.Get(i), "/this/" + newList.Get(i), true, newListExec.Get(i)); + } + + // Parse changed files xml, binary patch each file. + csRef<iDocumentNode> changedrootnode = GetRootNode("/zip/changedfiles.xml"); + if(changedrootnode) + { + csRef<iDocumentNode> changednode = changedrootnode->GetNode("changedfiles"); + csRef<iDocumentNodeIterator> nodeItr = changednode->GetNodes(); + while(nodeItr->HasNext()) { - PrintOutput("Failed!\n"); + csRef<iDocumentNode> next = nodeItr->Next(); - // Check if the file is already up to date. - bool download = true; - csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + oldFilePath); + csString newFilePath = next->GetAttributeValue("filepath"); + csString diff = next->GetAttributeValue("diff"); + csString oldFilePath = newFilePath; + oldFilePath.AppendFmt(".old"); + + // Start by checking whether the existing file is already up to date. + csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + newFilePath); if(buffer) { csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); @@ -800,19 +788,41 @@ csString fileMD5 = next->GetAttributeValue("md5sum"); + // If it's up to date then skip this file. if(md5sum.Compare(fileMD5)) { - fileUtil->RemoveFile("/this/" + newFilePath); - fileUtil->RemoveFile("/this/" + diff); - fileUtil->CopyFile("/this/" + oldFilePath, "/this/" + newFilePath, true, false); - download = false; + continue; } } - if(download) + // Move old file to a temp location ready for input. + fileUtil->MoveFile("/this/" + newFilePath, "/this/" + oldFilePath, true, false, true); + + // Move diff to a real location ready for input. + fileUtil->CopyFile("/zip/" + diff, "/this/" + newFilePath + ".vcdiff", true, false, true); + diff = newFilePath + ".vcdiff"; + + // Get real paths. + csRef<iDataBuffer> oldFP = vfs->GetRealPath("/this/" + oldFilePath); + csRef<iDataBuffer> diffFP = vfs->GetRealPath("/this/" + diff); + csRef<iDataBuffer> newFP = vfs->GetRealPath("/this/" + newFilePath); + + // Save permissions. + csRef<FileStat> fs = fileUtil->StatFile(oldFP->GetData()); +#ifdef CS_PLATFORM_UNIX + if(next->GetAttributeValueAsBool("exec")) { - PrintOutput("Attempting to download full version of %s: \n", newFilePath.GetData()); + fs->mode = fs->mode | S_IXUSR | S_IXGRP; + } +#endif + // Binary patch. + PrintOutput("\nPatching file %s: ", newFilePath.GetData()); + if(!PatchFile(oldFP->GetData(), diffFP->GetData(), newFP->GetData())) + { + PrintOutput("Failed!"); + PrintOutput("\nAttempting to download full version of %s:", newFilePath.GetData()); + // Get the 'backup' mirror, should always be the first in the list. csString baseurl = config->GetNewConfig()->GetMirror(0)->GetBaseURL(); baseurl.Append("backup/"); @@ -830,66 +840,64 @@ fileUtil->CopyFile("/this/" + oldFilePath, "/this/" + newFilePath, true, false); } else - PrintOutput("Done!\n"); + PrintOutput(" Done!\n"); } else - PrintOutput("Done!\n"); + PrintOutput(" Done!\n"); } else - PrintOutput("File is already up to date!"); - } - else - { - PrintOutput("Done!\n"); - - // Check md5sum is correct. - PrintOutput("Checking for correct md5sum: "); - csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + newFilePath); - if(!buffer) { - PrintOutput("Could not get MD5 of patched file %s! Reverting file!\n", newFilePath.GetData()); - fileUtil->RemoveFile("/this/" + newFilePath); - fileUtil->CopyFile("/this/" + oldFilePath, "/this/" + newFilePath, true, false); - } - else - { - csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); - csString md5sum = md5.HexString(); + PrintOutput("Done!"); - csString fileMD5 = next->GetAttributeValue("md5sum"); - - if(!md5sum.Compare(fileMD5)) + // Check md5sum is correct. + PrintOutput("\nChecking for correct md5sum: "); + csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + newFilePath); + if(!buffer) { - PrintOutput("md5sum of file %s does not match correct md5sum! Reverting file!\n", newFilePath.GetData()); + PrintOutput("Could not get MD5 of patched file %s! Reverting file!\n", newFilePath.GetData()); fileUtil->RemoveFile("/this/" + newFilePath); fileUtil->CopyFile("/this/" + oldFilePath, "/this/" + newFilePath, true, false); } else - PrintOutput("Success!\n"); + { + csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); + csString md5sum = md5.HexString(); + + csString fileMD5 = next->GetAttributeValue("md5sum"); + + if(!md5sum.Compare(fileMD5)) + { + PrintOutput("md5sum of file %s does not match correct md5sum! Reverting file!\n", newFilePath.GetData()); + fileUtil->RemoveFile("/this/" + newFilePath); + fileUtil->CopyFile("/this/" + oldFilePath, "/this/" + newFilePath, true, false); + } + else + PrintOutput("Success!\n"); + } + fileUtil->RemoveFile("/this/" + oldFilePath); } - fileUtil->RemoveFile("/this/" + oldFilePath); - } - // Clean up temp files. - fileUtil->RemoveFile("/this/" + diff, false); + // Clean up temp files. + fileUtil->RemoveFile("/this/" + diff, false); - // Set permissions. - if(fs.IsValid()) - { - fileUtil->SetPermissions(newFP->GetData(), fs); + // Set permissions. + if(fs.IsValid()) + { + fileUtil->SetPermissions(newFP->GetData(), fs); + } } } - } - // Unmount zip and delete. - if(vfs->Unmount("/zip", realZipPath->GetData())) - { - vfs->Sync(); - fileUtil->RemoveFile("/this/" + zip); + // Unmount zip and delete. + if(vfs->Unmount("/zip", realZipPath->GetData())) + { + vfs->Sync(); + fileUtil->RemoveFile("/this/" + zip); + } + else + { + printf("Failed to unmount file %s\n", zip.GetData()); + } } - else - { - printf("Failed to unmount file %s\n", zip.GetData()); - } // Add version info to updaterinfo.xml and oldCvs. csRef<iDocumentNode> newNode = confignode->GetNode("client")->CreateNodeBefore(CS_NODE_ELEMENT); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-04-19 05:46:29
|
Revision: 3503 http://planeshift.svn.sourceforge.net/planeshift/?rev=3503&view=rev Author: mgist Date: 2009-04-19 05:46:13 +0000 (Sun, 19 Apr 2009) Log Message: ----------- - Fixed md5 check. - Changed updater to bail out if a file can't be updated by any means, so the update can be retried. Modified Paths: -------------- trunk/src/pslaunch/updaterconfig.cpp trunk/src/pslaunch/updaterconfig.h trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/updaterconfig.cpp =================================================================== --- trunk/src/pslaunch/updaterconfig.cpp 2009-04-19 05:27:39 UTC (rev 3502) +++ trunk/src/pslaunch/updaterconfig.cpp 2009-04-19 05:46:13 UTC (rev 3503) @@ -168,7 +168,8 @@ cVersion.AttachNew(new ClientVersion()); cVersion->SetName(cNode->GetAttributeValue("name")); csString md5 = "md5"; - cVersion->SetMD5Sum(cNode->GetAttributeValue(md5.Append(GetPlatform()))); + cVersion->SetMD5Sum(cNode->GetAttributeValue(md5 + GetPlatform())); + cVersion->SetGenericMD5Sum(cNode->GetAttributeValue(md5 + GetGeneric())); clientVersions.PushSmart(cVersion); } } Modified: trunk/src/pslaunch/updaterconfig.h =================================================================== --- trunk/src/pslaunch/updaterconfig.h 2009-04-19 05:27:39 UTC (rev 3502) +++ trunk/src/pslaunch/updaterconfig.h 2009-04-19 05:46:13 UTC (rev 3503) @@ -74,18 +74,25 @@ /* Get client update file name */ const char* GetName() const { return name; } - /* Get client update file md5sum */ + /* Get platform specific update file md5sum */ const char* GetMD5Sum() const { return md5sum; } + /* Get generic update file md5sum */ + const char* GetGenericMD5Sum() const { return genericmd5sum; } + void SetName(const char* name) { this->name = name; } void SetMD5Sum(const char* md5sum) { this->md5sum = md5sum; } + void SetGenericMD5Sum(const char* genericmd5sum) { this->genericmd5sum = genericmd5sum; } private: /* Client update file name */ csString name; - /* md5sum of the client update file */ + /* md5sum of the platform specific update file */ csString md5sum; + + /* md5sum of the generic update file */ + csString genericmd5sum; }; struct Proxy Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-04-19 05:27:39 UTC (rev 3502) +++ trunk/src/pslaunch/updaterengine.cpp 2009-04-19 05:46:13 UTC (rev 3503) @@ -247,11 +247,11 @@ // Maybe this fixes a bug. fflush(stdout); - PrintOutput("Update finished!\n"); + PrintOutput("\nUpdate finished!\n"); infoShare->Sync(); } else - PrintOutput("No updates needed!\n"); + PrintOutput("\nNo updates needed!\n"); delete downloader; downloader = NULL; @@ -709,9 +709,18 @@ csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); csString md5sum = md5.HexString(); - - if(!md5sum.Compare(newCv->GetMD5Sum())) + csString correctMD5Sum; + if(pass == 1) { + correctMD5Sum = newCv->GetMD5Sum(); + } + else + { + correctMD5Sum = newCv->GetGenericMD5Sum(); + } + + if(md5sum != correctMD5Sum) + { PrintOutput("\nmd5sum of client zip does not match correct md5sum!!\n"); return; } @@ -838,6 +847,8 @@ { PrintOutput("\nUnable to update file: %s. Reverting file!\n", newFilePath.GetData()); fileUtil->CopyFile("/this/" + oldFilePath, "/this/" + newFilePath, true, false); + PrintOutput("\nPlease rerun the update.\n"); + return; } else PrintOutput(" Done!\n"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-04-20 08:31:01
|
Revision: 3509 http://planeshift.svn.sourceforge.net/planeshift/?rev=3509&view=rev Author: mgist Date: 2009-04-20 08:30:59 +0000 (Mon, 20 Apr 2009) Log Message: ----------- - Warning fixes. Modified Paths: -------------- trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2009-04-20 02:29:22 UTC (rev 3508) +++ trunk/src/pslaunch/pslaunch.cpp 2009-04-20 08:30:59 UTC (rev 3509) @@ -361,7 +361,7 @@ { argvs[i] = argv[i]; } - argvs[argc] = "--console"; + argvs[argc] = const_cast<char*>("--console"); // Set up CS psUpdater* updater = new psUpdater(argc+1, argvs); @@ -556,7 +556,7 @@ execv("/usr/bin/open", nargv); #else char* nargv[argc+1]; - char* name = "./psclient"; + char* name = const_cast<char*>("./psclient"); nargv[0] = name; for(int i=1; i<argc; ++i) { Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-04-20 02:29:22 UTC (rev 3508) +++ trunk/src/pslaunch/updaterengine.cpp 2009-04-20 08:30:59 UTC (rev 3509) @@ -1236,7 +1236,7 @@ csString xmlPath = UPDATERINFO_CURRENT_FILENAME; csString xmlBakPath; - xmlBakPath.Format("%s_bak", xmlPath); + xmlBakPath.Format("%s_bak", xmlPath.GetData()); fileUtil->MoveFile(xmlPath, xmlBakPath, true, false, true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-04-30 11:09:15
|
Revision: 3594 http://planeshift.svn.sourceforge.net/planeshift/?rev=3594&view=rev Author: mgist Date: 2009-04-30 11:09:12 +0000 (Thu, 30 Apr 2009) Log Message: ----------- - A few updater output formatting tweaks. Modified Paths: -------------- trunk/src/pslaunch/download.cpp trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/download.cpp =================================================================== --- trunk/src/pslaunch/download.cpp 2009-04-29 08:51:29 UTC (rev 3593) +++ trunk/src/pslaunch/download.cpp 2009-04-30 11:09:12 UTC (rev 3594) @@ -58,8 +58,7 @@ } else if(progress == finalSize) { - UpdaterEngine::GetSingletonPtr()->PrintOutput(" 100%%"); - UpdaterEngine::GetSingletonPtr()->PrintOutput("\n"); + UpdaterEngine::GetSingletonPtr()->PrintOutput(" 100%%\n\n"); lastSize = 0; } else if((progress-lastSize) > (finalSize/20) && progress < finalSize - (finalSize/20)) Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-04-29 08:51:29 UTC (rev 3593) +++ trunk/src/pslaunch/updaterengine.cpp 2009-04-30 11:09:12 UTC (rev 3594) @@ -934,6 +934,8 @@ { printf("Failed to unmount file %s\n", zip.GetData()); } + + PrintOutput("\n"); } // Add version info to updaterinfo.xml and oldCvs. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-08-23 12:18:37
|
Revision: 4235 http://planeshift.svn.sourceforge.net/planeshift/?rev=4235&view=rev Author: mgist Date: 2009-08-23 12:18:29 +0000 (Sun, 23 Aug 2009) Log Message: ----------- - Fixed update attempt using disabled updaterinfo.xml (fixes crash in pslaunch with svn updaterinfo). Modified Paths: -------------- trunk/src/pslaunch/updaterconfig.cpp trunk/src/pslaunch/updaterconfig.h trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/updaterconfig.cpp =================================================================== --- trunk/src/pslaunch/updaterconfig.cpp 2009-08-23 11:36:12 UTC (rev 4234) +++ trunk/src/pslaunch/updaterconfig.cpp 2009-08-23 12:18:29 UTC (rev 4235) @@ -123,6 +123,9 @@ bool Config::Initialize(csRef<iDocumentNode> node) { + // Get activity state. + active = node->GetAttributeValueAsBool("active", true); + // Get Updater info. csRef<iDocumentNode> updaterNode = node->GetNode("updater"); if(updaterNode) Modified: trunk/src/pslaunch/updaterconfig.h =================================================================== --- trunk/src/pslaunch/updaterconfig.h 2009-08-23 11:36:12 UTC (rev 4234) +++ trunk/src/pslaunch/updaterconfig.h 2009-08-23 12:18:29 UTC (rev 4235) @@ -131,6 +131,8 @@ /* Get latest updater version md5sum */ const char* GetUpdaterVersionLatestMD5() const { return updaterVersionLatestMD5; } + /* Get whether the updater mirror is active */ + bool IsActive() const { return active; } private: /* Latest updater version */ @@ -144,6 +146,9 @@ /* List of client versions */ csRefArray<ClientVersion> clientVersions; + + /* Whether the updater mirror is active */ + bool active; }; class UpdaterConfig : public Singleton<UpdaterConfig> Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-08-23 11:36:12 UTC (rev 4234) +++ trunk/src/pslaunch/updaterengine.cpp 2009-08-23 12:18:29 UTC (rev 4235) @@ -313,6 +313,12 @@ bool UpdaterEngine::CheckGeneral() { + // Check if general updating is enabled. + if(!config->GetCurrentConfig()->IsActive()) + { + return false; + } + /* * Compare length of both old and new client version lists. * If they're the same, then compare the last lines to be extra sure. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-08-31 23:53:40
|
Revision: 4299 http://planeshift.svn.sourceforge.net/planeshift/?rev=4299&view=rev Author: mgist Date: 2009-08-31 23:53:29 +0000 (Mon, 31 Aug 2009) Log Message: ----------- - Small fixes. Modified Paths: -------------- trunk/src/pslaunch/Jamfile trunk/src/pslaunch/pslaunch.cpp Modified: trunk/src/pslaunch/Jamfile =================================================================== --- trunk/src/pslaunch/Jamfile 2009-08-31 22:10:31 UTC (rev 4298) +++ trunk/src/pslaunch/Jamfile 2009-08-31 23:53:29 UTC (rev 4299) @@ -24,6 +24,7 @@ fontplex freefnt2 gl3d + engine imgplex shadermgr vfs Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2009-08-31 22:10:31 UTC (rev 4298) +++ trunk/src/pslaunch/pslaunch.cpp 2009-08-31 23:53:29 UTC (rev 4299) @@ -54,6 +54,8 @@ drawScreen = true; psLaunchGUI = this; + fileUtil = NULL; + downloader = NULL; paws = NULL; updateTold = false; } @@ -112,13 +114,6 @@ return false; } - csRef<iLoader> loader = csQueryRegistry<iLoader> (object_reg); - if (!loader) - { - printf("Loader failed to Init!\n"); - return false; - } - // Initialise downloader. downloader = new Downloader(vfs); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-10-01 04:28:39
|
Revision: 4590 http://planeshift.svn.sourceforge.net/planeshift/?rev=4590&view=rev Author: mgist Date: 2009-10-01 04:28:32 +0000 (Thu, 01 Oct 2009) Log Message: ----------- - Added support for in-zip repairs (disabled by default, enable if you're going to be messing with the big zips and hate backups...) to the updater. - Changed the updater to run a repair at the end of an update with fails, instead of fixing the file at the time of failure. Both still need a bit of polishing. Modified Paths: -------------- trunk/src/pslaunch/updaterconfig.cpp trunk/src/pslaunch/updaterconfig.h trunk/src/pslaunch/updaterengine.cpp trunk/src/pslaunch/updaterengine.h Modified: trunk/src/pslaunch/updaterconfig.cpp =================================================================== --- trunk/src/pslaunch/updaterconfig.cpp 2009-09-30 12:59:41 UTC (rev 4589) +++ trunk/src/pslaunch/updaterconfig.cpp 2009-10-01 04:28:32 UTC (rev 4590) @@ -76,6 +76,7 @@ configFile = new csConfigFile(CONFIG_FILENAME, vfs); cleanUpdate = configFile->GetBool("Update.Clean", true); updatePlatform = configFile->GetBool("Update.Platform", true); + repairInZip = configFile->GetBool("Update.RepairInZip"); proxy.host = configFile->GetStr("Updater.Proxy.Host", ""); proxy.port = configFile->GetInt("Updater.Proxy.Port", 0); Modified: trunk/src/pslaunch/updaterconfig.h =================================================================== --- trunk/src/pslaunch/updaterconfig.h 2009-09-30 12:59:41 UTC (rev 4589) +++ trunk/src/pslaunch/updaterconfig.h 2009-10-01 04:28:32 UTC (rev 4590) @@ -181,6 +181,9 @@ /* Returns true if we want the updater to update platform specific files. */ bool UpdatePlatform() const { return updatePlatform; } + /* Returns true if we want to do in-zip repairs. */ + bool RepairingInZip() const { return repairInZip; } + /* Returns the configfile for the app */ csRef<iConfigFile> GetConfigFile() const { return configFile; } @@ -205,6 +208,9 @@ /* True if we're being asked to switch the updater mirror. */ bool switchMirror; + /* True if we want to do in-zip repairs. */ + bool repairInZip; + /* Address of new mirror. */ csString newMirror; Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-09-30 12:59:41 UTC (rev 4589) +++ trunk/src/pslaunch/updaterengine.cpp 2009-10-01 04:28:32 UTC (rev 4590) @@ -672,6 +672,9 @@ bool genericPlatform = !strcmp(config->GetCurrentConfig()->GetPlatform(), config->GetCurrentConfig()->GetGeneric()); + // True if we're going to check the integrity of the game after update. + bool repairAfterUpdate = false; + // Main loop. while(CheckGeneral()) { @@ -864,31 +867,12 @@ if(!PatchFile(oldFP->GetData(), diffFP->GetData(), newFP->GetData())) { PrintOutput("Failed!\n"); - PrintOutput("Attempting to download full version of %s: ", newFilePath.GetData()); - // Get the 'backup' mirror, should always be the first in the list. - csString baseurl = config->GetNewConfig()->GetMirror(0)->GetBaseURL(); - baseurl.Append("backup/"); - - // Try path from base URL. - csString url = baseurl; - if(!downloader->DownloadFile(url.Append(newFilePath.GetData()), newFilePath.GetData(), true, true)) + if(!repairAfterUpdate) { - // Maybe it's in a platform specific subdirectory. Try that next. - url = baseurl; - url.AppendFmt("%s/", config->GetNewConfig()->GetPlatform()); - if(!downloader->DownloadFile(url.Append(newFilePath.GetData()), newFilePath.GetData(), true, true)) - { - PrintOutput("\nUnable to update file: %s. Reverting file!\n", newFilePath.GetData()); - fileUtil->CopyFile("/this/" + oldFilePath, "/this/" + newFilePath, true, false); - PrintOutput("Please re-run the update.\n"); - return; - } - else - PrintOutput("Done!\n"); + PrintOutput("Scheduling a repair at the end of the update!\n"); + repairAfterUpdate = true; } - else - PrintOutput("Done!\n"); } else { @@ -953,6 +937,11 @@ updaterinfo->Write(vfs, UPDATERINFO_CURRENT_FILENAME); oldCvs.PushSmart(newCv); } + + if(repairAfterUpdate) + { + CheckIntegrity(); + } } void UpdaterEngine::CheckIntegrity() @@ -1095,154 +1084,190 @@ if(!failed) { - csRefArray<iDocumentNode> failed; + CheckMD5s(md5sums, baseurl); + } + } + + vfs->Unmount("/zip/", realZipPath->GetData()); + + fileUtil->RemoveFile("integrity.zip", true); + + return; +} + +void UpdaterEngine::CheckMD5s(iDocumentNode* md5sums, csString& baseurl, bool accepted) +{ + csRefArray<iDocumentNode> failed; + csArray<bool> updateinside; #ifdef CS_PLATFORM_UNIX - csHash<bool, csRef<iDocumentNode> > failedExec; + csHash<bool, csRef<iDocumentNode> > failedExec; #endif - csRef<iDocumentNodeIterator> md5nodes = md5sums->GetNodes("md5sum"); - while(md5nodes->HasNext()) - { - CHECK_QUIT - csRef<iDocumentNode> node = md5nodes->Next(); + csRef<iDocumentNodeIterator> md5nodes = md5sums->GetNodes("md5sum"); + while(md5nodes->HasNext()) + { + CHECK_QUIT + csRef<iDocumentNode> node = md5nodes->Next(); - csString platform = node->GetAttributeValue("platform"); + csString platform = node->GetAttributeValue("platform"); - if(!config->UpdatePlatform() && !platform.Compare("all")) - continue; + if(!config->UpdatePlatform() && !platform.Compare("all")) + continue; - csString path = node->GetAttributeValue("path"); - csString md5sum = node->GetAttributeValue("md5sum"); + csString path = node->GetAttributeValue("path"); + csString md5sum = node->GetAttributeValue("md5sum"); - csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + path); - if(!buffer) - { - // File is genuinely missing. - if(platform.Compare(config->GetCurrentConfig()->GetPlatform()) || - platform.Compare("cfg") || platform.Compare("all")) - { - failed.Push(node); + csRef<iDataBuffer> buffer = vfs->ReadFile("/this/" + path); + if(!buffer) + { + // File is genuinely missing. + if(platform.Compare(config->GetCurrentConfig()->GetPlatform()) || + platform.Compare("cfg") || platform.Compare("all")) + { + updateinside.Push(false); + failed.Push(node); #ifdef CS_PLATFORM_UNIX - failedExec.Put(node, node->GetAttributeValueAsBool("exec")); + failedExec.Put(node, node->GetAttributeValueAsBool("exec")); #endif - } - continue; - } + } + continue; + } - csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); - csString md5s = md5.HexString(); + csMD5::Digest md5 = csMD5::Encode(buffer->GetData(), buffer->GetSize()); + csString md5s = md5.HexString(); - if((platform.Compare(config->GetCurrentConfig()->GetPlatform()) || - platform.Compare("cfg") || platform.Compare("all")) && !md5s.Compare(md5sum)) + if((platform.Compare(config->GetCurrentConfig()->GetPlatform()) || + platform.Compare("cfg") || platform.Compare("all")) && !md5s.Compare(md5sum)) + { + failed.Push(node); + updateinside.Push(config->RepairingInZip() && node->GetAttributeValueAsBool("checkonly")); + } + } + + size_t failedSize = failed.GetSize(); + if(failedSize == 0) + { + PrintOutput("\nAll files passed the check!\n"); + } + else + { + PrintOutput("\nThe following files failed the check:\n\n"); + for(size_t i=0; i<failedSize; i++) + { + PrintOutput("%s\n", failed.Get(i)->GetAttributeValue("path")); + } + + char c = ' '; + PrintOutput("\nDo you wish to download the correct copies of these files? (y/n)\n"); + if(!accepted) + { + if(!hasGUI) + { + while(c != 'y' && c != 'n') { - failed.Push(node); + c = getchar(); } } - - size_t failedSize = failed.GetSize(); - if(failedSize == 0) - { - PrintOutput("\nAll files passed the check!\n"); - } else { - PrintOutput("\nThe following files failed the check:\n\n"); - for(size_t i=0; i<failedSize; i++) + infoShare->SetUpdateNeeded(true); + while(infoShare->GetUpdateNeeded()) { - PrintOutput("%s\n", failed.Get(i)->GetAttributeValue("path")); + CHECK_QUIT + csSleep(100); } + c = infoShare->GetPerformUpdate() ? 'y' : 'n'; + infoShare->SetPerformUpdate(false); + infoShare->Sync(); + } + } - char c = ' '; - PrintOutput("\nDo you wish to download the correct copies of these files? (y/n)\n"); - if(!hasGUI) + if(c == 'n') + { + if(vfs->Exists("/this/updaterinfo.xml.bak")) + { + fileUtil->RemoveFile("/this/updaterinfo.xml", true); + fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); + } + } + else if(accepted || c == 'y') + { + for(size_t i=0; i<failedSize; i++) + { + CHECK_QUIT + + if(updateinside.Get(i)) { - while(c != 'y' && c != 'n') + csRef<iDocumentNode> zipmd5sums; + csRef<iDocumentNodeIterator> zips = md5sums->GetNodes("zip"); + while(zips->HasNext()) { - c = getchar(); + zipmd5sums = zips->Next(); + if(!strcmp(failed.Get(i)->GetAttributeValue("path"), zipmd5sums->GetAttributeValue("path"))) + { + csString realPath = zipmd5sums->GetAttributeValue("path"); + csRef<iDataBuffer> rpdb = vfs->GetRealPath("/this/" + realPath); + realPath = rpdb->GetData(); + csString path = zipmd5sums->GetAttributeValue("path"); + path = path.Truncate(path.Length()-4); + vfs->Mount("/this/" + path, realPath); + CheckMD5s(zipmd5sums, baseurl, true); + vfs->Unmount("/this/" + path, realPath); + break; + } } + + continue; } - else + + PrintOutput("\nDownloading file: %s\n", failed.Get(i)->GetAttributeValue("path")); + + csString downloadpath("/this/"); + downloadpath.Append(failed.Get(i)->GetAttributeValue("path")); + + // Save permissions. + csRef<iDataBuffer> rp = vfs->GetRealPath(downloadpath); + csRef<FileStat> fs = fileUtil->StatFile(rp->GetData()); + fileUtil->MoveFile(downloadpath, downloadpath + ".bak", true, false, true); + + // Make parent dir if needed. + csString parent = downloadpath; + fileUtil->MakeDirectory(parent.Truncate(parent.FindLast('/'))); + + // Download file. + if(!downloader->DownloadFile(baseurl + failed.Get(i)->GetAttributeValue("path"), + failed.Get(i)->GetAttributeValue("path"), true, true)) { - infoShare->SetUpdateNeeded(true); - while(infoShare->GetUpdateNeeded()) + // Maybe it's in a platform specific subdirectory. Try that next. + csString url = baseurl + config->GetCurrentConfig()->GetPlatform() + "/"; + if(!downloader->DownloadFile(url + failed.Get(i)->GetAttributeValue("path"), + failed.Get(i)->GetAttributeValue("path"), true, true)) { - CHECK_QUIT - csSleep(100); + // Restore file. + fileUtil->RemoveFile(downloadpath, true); + fileUtil->MoveFile(downloadpath + ".bak", downloadpath, true, false, true); + PrintOutput(" Failed!\n"); + continue; } - c = infoShare->GetPerformUpdate() ? 'y' : 'n'; - infoShare->SetPerformUpdate(false); - infoShare->Sync(); } - - if(c == 'n') +#ifdef CS_PLATFORM_UNIX + // Restore permissions. + if(fs.IsValid()) { - if(vfs->Exists("/this/updaterinfo.xml.bak")) + bool failedEx = failedExec.Get(failed.Get(i), false); + if(failedEx) { - fileUtil->RemoveFile("/this/updaterinfo.xml", true); - fileUtil->MoveFile("/this/updaterinfo.xml.bak", "/this/updaterinfo.xml", true, false); + fs->mode = fs->mode | S_IXUSR | S_IXGRP; } + fileUtil->SetPermissions(rp->GetData(), fs); } - else if(c == 'y') - { - for(size_t i=0; i<failedSize; i++) - { - CHECK_QUIT - PrintOutput("\nDownloading file: %s\n", failed.Get(i)->GetAttributeValue("path")); - - csString downloadpath("/this/"); - downloadpath.Append(failed.Get(i)->GetAttributeValue("path")); - - // Save permissions. - csRef<iDataBuffer> rp = vfs->GetRealPath(downloadpath); - csRef<FileStat> fs = fileUtil->StatFile(rp->GetData()); - fileUtil->MoveFile(downloadpath, downloadpath + ".bak", true, false, true); - - // Make parent dir if needed. - csString parent = downloadpath; - fileUtil->MakeDirectory(parent.Truncate(parent.FindLast('/'))); - - // Download file. - if(!downloader->DownloadFile(baseurl + failed.Get(i)->GetAttributeValue("path"), - failed.Get(i)->GetAttributeValue("path"), true, true)) - { - // Maybe it's in a platform specific subdirectory. Try that next. - csString url = baseurl + config->GetCurrentConfig()->GetPlatform() + "/"; - if(!downloader->DownloadFile(url + failed.Get(i)->GetAttributeValue("path"), - failed.Get(i)->GetAttributeValue("path"), true, true)) - { - // Restore file. - fileUtil->RemoveFile(downloadpath, true); - fileUtil->MoveFile(downloadpath + ".bak", downloadpath, true, false, true); - PrintOutput(" Failed!\n"); - continue; - } - } -#ifdef CS_PLATFORM_UNIX - // Restore permissions. - if(fs.IsValid()) - { - bool failedEx = failedExec.Get(failed.Get(i), false); - if(failedEx) - { - fs->mode = fs->mode | S_IXUSR | S_IXGRP; - } - fileUtil->SetPermissions(rp->GetData(), fs); - } #endif - fileUtil->RemoveFile(downloadpath + ".bak", true); - PrintOutput(" Success!\n"); - } - fileUtil->RemoveFile("/this/updaterinfo.xml.bak", true); - PrintOutput("\nDone!\n"); - } + fileUtil->RemoveFile(downloadpath + ".bak", true); + PrintOutput(" Success!\n"); } + fileUtil->RemoveFile("/this/updaterinfo.xml.bak", true); + PrintOutput("\nDone!\n"); } } - - vfs->Unmount("/zip/", realZipPath->GetData()); - - fileUtil->RemoveFile("integrity.zip", true); - - return; } bool UpdaterEngine::SwitchMirror() Modified: trunk/src/pslaunch/updaterengine.h =================================================================== --- trunk/src/pslaunch/updaterengine.h 2009-09-30 12:59:41 UTC (rev 4589) +++ trunk/src/pslaunch/updaterengine.h 2009-10-01 04:28:32 UTC (rev 4590) @@ -172,6 +172,8 @@ /* Function shared by ctors */ void Init(csStringArray& args, iObjectRegistry* _object_reg, const char* _appName, InfoShare *infoshare); + + void CheckMD5s(iDocumentNode* md5sums, csString& baseurl, bool accepted = false); public: UpdaterEngine(csStringArray& args, iObjectRegistry* _object_reg, const char* _appName); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2009-10-01 16:56:15
|
Revision: 4594 http://planeshift.svn.sourceforge.net/planeshift/?rev=4594&view=rev Author: mgist Date: 2009-10-01 16:56:01 +0000 (Thu, 01 Oct 2009) Log Message: ----------- - Added updater options toggling the repair of failed files (default true) and the keeping of the old versions of repaired files (default false). Modified Paths: -------------- trunk/src/pslaunch/updaterconfig.cpp trunk/src/pslaunch/updaterconfig.h trunk/src/pslaunch/updaterengine.cpp trunk/src/pslaunch/updaterengine.h Modified: trunk/src/pslaunch/updaterconfig.cpp =================================================================== --- trunk/src/pslaunch/updaterconfig.cpp 2009-10-01 16:20:43 UTC (rev 4593) +++ trunk/src/pslaunch/updaterconfig.cpp 2009-10-01 16:56:01 UTC (rev 4594) @@ -77,6 +77,8 @@ cleanUpdate = configFile->GetBool("Update.Clean", true); updatePlatform = configFile->GetBool("Update.Platform", true); repairInZip = configFile->GetBool("Update.RepairInZip"); + keepRepaired = configFile->GetBool("Update.KeepRepairedFiles"); + repairFailed = configFile->GetBool("Update.RepairFailed", true); proxy.host = configFile->GetStr("Updater.Proxy.Host", ""); proxy.port = configFile->GetInt("Updater.Proxy.Port", 0); Modified: trunk/src/pslaunch/updaterconfig.h =================================================================== --- trunk/src/pslaunch/updaterconfig.h 2009-10-01 16:20:43 UTC (rev 4593) +++ trunk/src/pslaunch/updaterconfig.h 2009-10-01 16:56:01 UTC (rev 4594) @@ -184,6 +184,12 @@ /* Returns true if we want to do in-zip repairs. */ bool RepairingInZip() const { return repairInZip; } + /* Returns true if we want a repair to keep the old file (*.bak). */ + bool KeepingRepaired() const { return keepRepaired; } + + /* Returns true if we want to perform a repair when files fail after an update. */ + bool RepairFailed() const { return repairFailed; } + /* Returns the configfile for the app */ csRef<iConfigFile> GetConfigFile() const { return configFile; } @@ -211,6 +217,12 @@ /* True if we want to do in-zip repairs. */ bool repairInZip; + /* True if we want a repair to keep the old file (*.bak). */ + bool keepRepaired; + + /* True if we want to perform a repair when files fail after an update. */ + bool repairFailed; + /* Address of new mirror. */ csString newMirror; Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2009-10-01 16:20:43 UTC (rev 4593) +++ trunk/src/pslaunch/updaterengine.cpp 2009-10-01 16:56:01 UTC (rev 4594) @@ -868,7 +868,7 @@ { PrintOutput("Failed!\n"); - if(!repairAfterUpdate) + if(!repairAfterUpdate && config->RepairFailed()) { PrintOutput("Scheduling a repair at the end of the update!\n"); repairAfterUpdate = true; @@ -940,13 +940,20 @@ if(repairAfterUpdate) { - CheckIntegrity(); + CheckIntegrity(true); } } -void UpdaterEngine::CheckIntegrity() +void UpdaterEngine::CheckIntegrity(bool automatic) { - PrintOutput("Beginning integrity check!\n"); + if(automatic) + { + PrintOutput("Fixing files which failed to update...\n"); + } + else + { + PrintOutput("Beginning integrity check!\n"); + } // Load current config data. csRef<iDocumentNode> confignode; @@ -1084,7 +1091,7 @@ if(!failed) { - CheckMD5s(md5sums, baseurl); + CheckMD5s(md5sums, baseurl, automatic); } } @@ -1265,7 +1272,10 @@ fileUtil->SetPermissions(rp->GetData(), fs); } #endif - fileUtil->RemoveFile(downloadpath + ".bak", true); + if(!config->KeepingRepaired()) + { + fileUtil->RemoveFile(downloadpath + ".bak", true); + } PrintOutput(" Success!\n"); } fileUtil->RemoveFile("/this/updaterinfo.xml.bak", true); Modified: trunk/src/pslaunch/updaterengine.h =================================================================== --- trunk/src/pslaunch/updaterengine.h 2009-10-01 16:20:43 UTC (rev 4593) +++ trunk/src/pslaunch/updaterengine.h 2009-10-01 16:56:01 UTC (rev 4594) @@ -209,7 +209,7 @@ bool CheckGeneral(); /* Check the integrity of the install */ - void CheckIntegrity(); + void CheckIntegrity(bool automatic = false); /* Switch updater mirror. */ bool SwitchMirror(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ken...@us...> - 2009-11-09 08:42:42
|
Revision: 4730 http://planeshift.svn.sourceforge.net/planeshift/?rev=4730&view=rev Author: kennygraunke Date: 2009-11-09 08:42:35 +0000 (Mon, 09 Nov 2009) Log Message: ----------- Fix const-correctness issues in pslaunch. Please do not use const_cast<> in PlaneShift code; it is dangerous and almost assuredly the wrong thing to do. Modified Paths: -------------- trunk/src/pslaunch/pslaunch.cpp trunk/src/pslaunch/updater.cpp trunk/src/pslaunch/updater.h Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2009-11-08 10:07:12 UTC (rev 4729) +++ trunk/src/pslaunch/pslaunch.cpp 2009-11-09 08:42:35 UTC (rev 4730) @@ -363,12 +363,12 @@ if(help) { // Create new string array to make sure --help is there. - char** argvs = new char*[argc+1]; + const char** argvs = new const char*[argc+1]; for(int i=0; i<argc; i++) { argvs[i] = argv[i]; } - argvs[argc] = const_cast<char*>("--help"); + argvs[argc] = "--help"; // Set up CS psUpdater* updater = new psUpdater(argc+1, argvs); @@ -402,12 +402,12 @@ else if(console) { // Create new string array to make sure --console is there. - char** argvs = new char*[argc+1]; + const char** argvs = new const char*[argc+1]; for(int i=0; i<argc; i++) { argvs[i] = argv[i]; } - argvs[argc] = const_cast<char*>("--console"); + argvs[argc] = "--console"; // Set up CS psUpdater* updater = new psUpdater(argc+1, argvs); Modified: trunk/src/pslaunch/updater.cpp =================================================================== --- trunk/src/pslaunch/updater.cpp 2009-11-08 10:07:12 UTC (rev 4729) +++ trunk/src/pslaunch/updater.cpp 2009-11-09 08:42:35 UTC (rev 4730) @@ -25,7 +25,7 @@ iObjectRegistry* psUpdater::object_reg = NULL; -psUpdater::psUpdater(int argc, char* argv[]) +psUpdater::psUpdater(int argc, const char* argv[]) { object_reg = csInitializer::CreateEnvironment (argc, argv); if(!object_reg) Modified: trunk/src/pslaunch/updater.h =================================================================== --- trunk/src/pslaunch/updater.h 2009-11-08 10:07:12 UTC (rev 4729) +++ trunk/src/pslaunch/updater.h 2009-11-09 08:42:35 UTC (rev 4730) @@ -30,7 +30,7 @@ class psUpdater { public: - psUpdater(int argc, char* argv[]); + psUpdater(int argc, const char* argv[]); ~psUpdater(); iObjectRegistry* GetObjectRegistry() const { return object_reg; } void RunUpdate(UpdaterEngine* engine) const; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2010-01-10 23:19:00
|
Revision: 5225 http://planeshift.svn.sourceforge.net/planeshift/?rev=5225&view=rev Author: mgist Date: 2010-01-10 23:18:54 +0000 (Sun, 10 Jan 2010) Log Message: ----------- - Don't allow the Play button to be pressed until we've checked for updates. Modified Paths: -------------- trunk/src/pslaunch/pawslauncherwindow.cpp trunk/src/pslaunch/pslaunch.h trunk/src/pslaunch/updaterengine.cpp trunk/src/pslaunch/updaterengine.h Modified: trunk/src/pslaunch/pawslauncherwindow.cpp =================================================================== --- trunk/src/pslaunch/pawslauncherwindow.cpp 2010-01-10 19:27:37 UTC (rev 5224) +++ trunk/src/pslaunch/pawslauncherwindow.cpp 2010-01-10 23:18:54 UTC (rev 5225) @@ -105,8 +105,12 @@ } else if(ID == PLAY_BUTTON) { - psLaunchGUI->ExecClient(true); - psLaunchGUI->Quit(); + // TODO: Grey out the Play button instead of doing nothing. + if(psLaunchGUI->UpdateChecked()) + { + psLaunchGUI->ExecClient(true); + psLaunchGUI->Quit(); + } } else if(ID == SETTINGS_BUTTON) { Modified: trunk/src/pslaunch/pslaunch.h =================================================================== --- trunk/src/pslaunch/pslaunch.h 2010-01-10 19:27:37 UTC (rev 5224) +++ trunk/src/pslaunch/pslaunch.h 2010-01-10 23:18:54 UTC (rev 5225) @@ -106,6 +106,8 @@ void CancelUpdater() { infoShare->SetCancelUpdater(true); } + bool UpdateChecked() { return infoShare->GetUpdateChecked(); } + // Run. void Run(); }; Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2010-01-10 19:27:37 UTC (rev 5224) +++ trunk/src/pslaunch/updaterengine.cpp 2010-01-10 23:18:54 UTC (rev 5225) @@ -110,6 +110,7 @@ void UpdaterEngine::Run() { CheckForUpdates(); + infoShare->SetUpdateChecked(true); while(!infoShare->GetExitGUI()) { Modified: trunk/src/pslaunch/updaterengine.h =================================================================== --- trunk/src/pslaunch/updaterengine.h 2010-01-10 19:27:37 UTC (rev 5224) +++ trunk/src/pslaunch/updaterengine.h 2010-01-10 23:18:54 UTC (rev 5225) @@ -60,6 +60,9 @@ /* Set to true to perform an integrity check. */ volatile bool checkIntegrity; + /* Set to true once we have checked for an update. */ + volatile bool updateChecked; + /* Safety. */ CS::Threading::Mutex mutex; @@ -78,6 +81,7 @@ updateNeeded = false; updateAdminNeeded = false; checkIntegrity = false; + updateChecked = false; cancelUpdater = false; synching = false; mutex.Initialize(); @@ -89,6 +93,7 @@ inline void SetPerformUpdate(bool v) { performUpdate = v; } inline void SetCheckIntegrity(bool v) { checkIntegrity = v; } inline void SetCancelUpdater(bool v) { cancelUpdater = v; } + inline void SetUpdateChecked(bool v) { updateChecked = v; } inline void Sync() { CS::Threading::MutexScopedLock lock(mutex); @@ -110,6 +115,7 @@ inline bool GetPerformUpdate() { return performUpdate; } inline bool GetCheckIntegrity() { return checkIntegrity; } inline bool GetCancelUpdater() { return cancelUpdater; } + inline bool GetUpdateChecked() { return updateChecked; } inline void EmptyConsole() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-02-19 00:10:11
|
Revision: 5582 http://planeshift.svn.sourceforge.net/planeshift/?rev=5582&view=rev Author: Khakilord Date: 2010-02-18 23:42:51 +0000 (Thu, 18 Feb 2010) Log Message: ----------- Fixed extra newline in middle of updater message. Fixed multiple progress bars when download is complete. Modified Paths: -------------- trunk/src/pslaunch/download.cpp trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/download.cpp =================================================================== --- trunk/src/pslaunch/download.cpp 2010-02-18 21:03:54 UTC (rev 5581) +++ trunk/src/pslaunch/download.cpp 2010-02-18 23:42:51 UTC (rev 5582) @@ -25,8 +25,9 @@ #include "updaterconfig.h" #include "updaterengine.h" -csTicks dlStart; +csTicks dlStart = 0; const int progressWidth = 50; +int lastSize = 0; size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) { @@ -45,14 +46,17 @@ return "MB"; } + int ProgressCallback(void *clientp, double finalSize, double dlnow, double ultotal, double ulnow) { - static int lastSize = 0; double progress = dlnow / finalSize; // Don't output anything if there's been no progress. if(progress == 0 || finalSize <= 102400) return 0; + // Already notified of completion + if(lastSize == -1) + return 0; csString progressLine; if(lastSize == 0) progressLine += '\n'; @@ -74,7 +78,7 @@ if(dlnow == finalSize) { progressLine += "\n\n"; - lastSize = 0; + lastSize = -1; } else progressLine += '\r'; @@ -184,6 +188,7 @@ } dlStart = csGetTicks(); + lastSize = 0; curl_easy_setopt(curl, CURLOPT_URL, url.GetData()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, file); Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2010-02-18 21:03:54 UTC (rev 5581) +++ trunk/src/pslaunch/updaterengine.cpp 2010-02-18 23:42:51 UTC (rev 5582) @@ -1128,7 +1128,8 @@ void UpdaterEngine::CheckMD5s(iDocumentNode* md5sums, csString& baseurl, bool accepted) { - PrintOutput("Checking file integrity:\nUsing mirror %s\n\n", baseurl.GetData()); + PrintOutput("Checking file integrity:\n"); + PrintOutput("Using mirror %s\n\n", baseurl.GetData()); csRefArray<iDocumentNode> failed; csArray<bool> updateinside; #ifdef CS_PLATFORM_UNIX This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-02-19 00:59:18
|
Revision: 5584 http://planeshift.svn.sourceforge.net/planeshift/?rev=5584&view=rev Author: Khakilord Date: 2010-02-19 00:59:10 +0000 (Fri, 19 Feb 2010) Log Message: ----------- Fixed refcount race that sometimes crashes the updater thread. Modified Paths: -------------- trunk/src/pslaunch/updaterengine.cpp trunk/src/pslaunch/updaterengine.h Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2010-02-19 00:19:14 UTC (rev 5583) +++ trunk/src/pslaunch/updaterengine.cpp 2010-02-19 00:59:10 UTC (rev 5584) @@ -413,6 +413,8 @@ return NULL; } + csRef<iDocument> configdoc; + // Try to parse file if(document) { Modified: trunk/src/pslaunch/updaterengine.h =================================================================== --- trunk/src/pslaunch/updaterengine.h 2010-02-19 00:19:14 UTC (rev 5583) +++ trunk/src/pslaunch/updaterengine.h 2010-02-19 00:59:10 UTC (rev 5584) @@ -163,8 +163,6 @@ /* Real name of the app (e.g. updater, pslaunch, etc.) */ csString appName; - /* XML doc; reading from xml files in the update zip. */ - csRef<iDocument> configdoc; /* Info shared with other threads. */ InfoShare *infoShare; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-02-19 01:09:42
|
Revision: 5583 http://planeshift.svn.sourceforge.net/planeshift/?rev=5583&view=rev Author: Khakilord Date: 2010-02-19 00:19:14 +0000 (Fri, 19 Feb 2010) Log Message: ----------- Changed some file moving to file copying to make updater more robust. Modified Paths: -------------- trunk/src/pslaunch/download.cpp trunk/src/pslaunch/updaterengine.cpp Modified: trunk/src/pslaunch/download.cpp =================================================================== --- trunk/src/pslaunch/download.cpp 2010-02-18 23:42:51 UTC (rev 5582) +++ trunk/src/pslaunch/download.cpp 2010-02-19 00:19:14 UTC (rev 5583) @@ -54,12 +54,11 @@ // Don't output anything if there's been no progress. if(progress == 0 || finalSize <= 102400) return 0; - // Already notified of completion - if(lastSize == -1) - return 0; csString progressLine; if(lastSize == 0) progressLine += '\n'; + else + progressLine += '\r'; progressLine += '['; for(int pos = 0; pos < progressWidth; pos++) { @@ -73,15 +72,8 @@ double dlnormalized = dlnow; const char* dlUnits = normalize_bytes(&dlnormalized); - progressLine.AppendFmt("] %4.2f%s (%3.1f%%) %4.2f%s/s", dlnormalized, dlUnits, progress * 100.0, speed, speedUnits); + progressLine.AppendFmt("] %4.2f%s (%3.1f%%) %4.2f%s/s ", dlnormalized, dlUnits, progress * 100.0, speed, speedUnits); lastSize = dlnow; - if(dlnow == finalSize) - { - progressLine += "\n\n"; - lastSize = -1; - } - else - progressLine += '\r'; UpdaterEngine::GetSingletonPtr()->PrintOutput(progressLine); fflush(stdout); @@ -198,6 +190,12 @@ CURLcode result = curl_easy_perform(curl); + // Check if progress bar was shown. + if(lastSize != 0) + { + UpdaterEngine::GetSingletonPtr()->PrintOutput("\n\n"); + lastSize = 0; + } fclose (file); curl_easy_getinfo (curl, CURLINFO_HTTP_CODE, &curlhttpcode); Modified: trunk/src/pslaunch/updaterengine.cpp =================================================================== --- trunk/src/pslaunch/updaterengine.cpp 2010-02-18 23:42:51 UTC (rev 5582) +++ trunk/src/pslaunch/updaterengine.cpp 2010-02-19 00:19:14 UTC (rev 5583) @@ -1265,7 +1265,7 @@ // Save permissions. csRef<iDataBuffer> rp = vfs->GetRealPath(downloadpath); csRef<FileStat> fs = fileUtil->StatFile(rp->GetData()); - fileUtil->MoveFile(downloadpath, downloadpath + ".bak", true, false, true); + fileUtil->CopyFile(downloadpath, downloadpath + ".bak", true, false, true); // Make parent dir if needed. csString parent = downloadpath; @@ -1329,7 +1329,7 @@ csString xmlBakPath; xmlBakPath.Format("%s_bak", xmlPath.GetData()); - fileUtil->MoveFile(xmlPath, xmlBakPath, true, false, true); + fileUtil->CopyFile(xmlPath, xmlBakPath, true, false, true); // Initialise downloader. downloader = new Downloader(vfs); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mg...@us...> - 2010-02-21 11:08:33
|
Revision: 5608 http://planeshift.svn.sourceforge.net/planeshift/?rev=5608&view=rev Author: mgist Date: 2010-02-21 11:08:25 +0000 (Sun, 21 Feb 2010) Log Message: ----------- - Bumped updater version. - Small header improvement. Modified Paths: -------------- trunk/src/pslaunch/download.cpp trunk/src/pslaunch/download.h trunk/src/pslaunch/updaterengine.h Modified: trunk/src/pslaunch/download.cpp =================================================================== --- trunk/src/pslaunch/download.cpp 2010-02-21 10:52:22 UTC (rev 5607) +++ trunk/src/pslaunch/download.cpp 2010-02-21 11:08:25 UTC (rev 5608) @@ -21,6 +21,8 @@ #include <csutil/randomgen.h> +#include <curl/curl.h> + #include "download.h" #include "updaterconfig.h" #include "updaterengine.h" Modified: trunk/src/pslaunch/download.h =================================================================== --- trunk/src/pslaunch/download.h 2010-02-21 10:52:22 UTC (rev 5607) +++ trunk/src/pslaunch/download.h 2010-02-21 11:08:25 UTC (rev 5608) @@ -23,11 +23,11 @@ #include <iutil/vfs.h> -#include <curl/curl.h> - class UpdaterEngine; class UpdaterConfig; +typedef void CURL; + class Downloader { public: Modified: trunk/src/pslaunch/updaterengine.h =================================================================== --- trunk/src/pslaunch/updaterengine.h 2010-02-21 10:52:22 UTC (rev 5607) +++ trunk/src/pslaunch/updaterengine.h 2010-02-21 11:08:25 UTC (rev 5608) @@ -34,7 +34,7 @@ #include "util/singleton.h" /* To be incremented every time we want to make an update. */ -#define UPDATER_VERSION 2.3 +#define UPDATER_VERSION 2.4 struct iConfigManager; struct iVFS; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <Kha...@us...> - 2010-03-07 22:17:43
|
Revision: 5650 http://planeshift.svn.sourceforge.net/planeshift/?rev=5650&view=rev Author: Khakilord Date: 2010-03-07 22:17:36 +0000 (Sun, 07 Mar 2010) Log Message: ----------- Fixed various multi-threaded errors in pslaunch. Fixed threading error in curl init. Removed global variables from download progress. The play button will now always be enabled since connection errors to the mirror may mean the update check takes up to 3 minutes to complete. Modified Paths: -------------- trunk/src/pslaunch/download.cpp trunk/src/pslaunch/pawslauncherwindow.cpp trunk/src/pslaunch/pslaunch.cpp Modified: trunk/src/pslaunch/download.cpp =================================================================== --- trunk/src/pslaunch/download.cpp 2010-03-04 10:24:06 UTC (rev 5649) +++ trunk/src/pslaunch/download.cpp 2010-03-07 22:17:36 UTC (rev 5650) @@ -27,19 +27,23 @@ #include "updaterconfig.h" #include "updaterengine.h" -csTicks timeStart = 0; -double dlStart = 0.0; -double speedLast = -1.0; const int progressWidth = 40; -int lastSize = 0; -void init_callback() +struct progressData { - timeStart = csGetTicks(); - dlStart = 0.0; - lastSize = 0; -} + csTicks timeStart; + csTicks timeLast; + double dlLast; + double speedLast; + int lastSize; + progressData() { + timeLast = timeStart = csGetTicks(); + dlLast = 0.0; + lastSize = 0; + speedLast = -1.0; + } +}; size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) { @@ -83,19 +87,19 @@ int ProgressCallback(void *clientp, double finalSize, double dlnow, double ultotal, double ulnow) { + progressData* data = (progressData*) clientp; double progress = dlnow / finalSize; + csTicks timeNow = csGetTicks(); + csTicks timeDelta = timeNow - data->timeLast; // Don't output anything if there's been no progress. if(progress == 0 || finalSize <= 102400) return 0; - csTicks timeNow = csGetTicks(); - - csTicks timeDelta = timeNow - timeStart; - double dlDelta = dlnow - dlStart; + double dlDelta = dlnow - data->dlLast; csString progressLine; - if(lastSize == 0) + if(data->lastSize == 0) progressLine += '\n'; else progressLine += '\r'; @@ -110,14 +114,14 @@ // Recalculate download speed in seconds every 5 seconds. - if(timeDelta > 5000 || speedLast == -1.0) + if(timeDelta > 5000 || data->speedLast == -1.0) { - speedLast = 1000.0 * dlDelta / timeDelta; - timeStart = timeNow; - dlStart = dlnow; + data->speedLast = 1000.0 * dlDelta / timeDelta; + data->timeLast = timeNow; + data->dlLast = dlnow; } - double speed = speedLast; + double speed = data->speedLast; // Eta in seconds double eta = 0; @@ -134,7 +138,7 @@ double dlnormalized = dlnow; const char* dlUnits = normalize_bytes(&dlnormalized); progressLine.AppendFmt("] %4.1f%s (%3d%%) %4.1f%s/s eta %s ", dlnormalized, dlUnits, (int) (progress * 100.0), speed, speedUnits, etaStr.GetData()); - lastSize = dlnow; + data->lastSize = dlnow; UpdaterEngine::GetSingletonPtr()->PrintOutput(progressLine); fflush(stdout); @@ -144,7 +148,6 @@ Downloader::Downloader(csRef<iVFS> _vfs, UpdaterConfig* _config) { - curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); curlerror = new char[CURL_ERROR_SIZE]; curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, curlerror); @@ -160,7 +163,6 @@ Downloader::Downloader(csRef<iVFS> _vfs) { - curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); curlerror = new char[CURL_ERROR_SIZE]; curl_easy_setopt (curl, CURLOPT_ERRORBUFFER, curlerror); @@ -240,21 +242,22 @@ return false; } - init_callback(); + progressData data; curl_easy_setopt(curl, CURLOPT_URL, url.GetData()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, file); curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, &ProgressCallback); + curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, &data); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0); curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1); CURLcode result = curl_easy_perform(curl); // Check if progress bar was shown. - if(lastSize != 0) + if(data.lastSize != 0) { UpdaterEngine::GetSingletonPtr()->PrintOutput("\n\n"); - lastSize = 0; + data.lastSize = 0; } fclose (file); Modified: trunk/src/pslaunch/pawslauncherwindow.cpp =================================================================== --- trunk/src/pslaunch/pawslauncherwindow.cpp 2010-03-04 10:24:06 UTC (rev 5649) +++ trunk/src/pslaunch/pawslauncherwindow.cpp 2010-03-07 22:17:36 UTC (rev 5650) @@ -111,11 +111,14 @@ else if(ID == PLAY_BUTTON) { // TODO: Grey out the Play button instead of doing nothing. - if(psLaunchGUI->UpdateChecked()) + if(!psLaunchGUI->UpdateChecked()) { - psLaunchGUI->ExecClient(true); - psLaunchGUI->Quit(); - } + pawsMessageTextBox* serverNews = (pawsMessageTextBox*)FindWidget("ServerNews"); + if(serverNews) + serverNews->AddMessage("Warning: Did not finish checking for updates."); + } + psLaunchGUI->ExecClient(true); + psLaunchGUI->Quit(); } else if(ID == SETTINGS_BUTTON) { Modified: trunk/src/pslaunch/pslaunch.cpp =================================================================== --- trunk/src/pslaunch/pslaunch.cpp 2010-03-04 10:24:06 UTC (rev 5649) +++ trunk/src/pslaunch/pslaunch.cpp 2010-03-07 22:17:36 UTC (rev 5650) @@ -26,6 +26,7 @@ #include <iutil/eventq.h> #include <ivideo/graph2d.h> #include <ivideo/natwin.h> +#include <curl/curl.h> #include "download.h" #include "globals.h" @@ -369,6 +370,10 @@ } } + // Must be done when no other threads are running! + curl_global_init(CURL_GLOBAL_ALL); + + if(help) { // Create new string array to make sure --help is there. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |