extensions/updater/extension.cpp
changeset 2573 9e715ee7389e
parent 2562 af4b3f9a8168
child 2575 8d1896d809f1
     1.1 --- a/extensions/updater/extension.cpp	Tue Feb 17 14:03:20 2009 -0500
     1.2 +++ b/extensions/updater/extension.cpp	Tue Feb 17 15:59:51 2009 -0500
     1.3 @@ -45,7 +45,6 @@
     1.4  
     1.5  IWebternet *webternet;
     1.6  static List<String *> update_errors;
     1.7 -static List<String *> update_messages;
     1.8  static IThreadHandle *update_thread;
     1.9  
    1.10  bool SmUpdater::SDK_OnLoad(char *error, size_t maxlength, bool late)
    1.11 @@ -85,10 +84,6 @@
    1.12  	{
    1.13  		iter = update_errors.erase(iter);
    1.14  	}
    1.15 -	while (iter != update_messages.end())
    1.16 -	{
    1.17 -		iter = update_messages.erase(iter);
    1.18 -	}
    1.19  }
    1.20  
    1.21  bool SmUpdater::QueryInterfaceDrop(SourceMod::SMInterface *pInterface)
    1.22 @@ -112,11 +107,54 @@
    1.23  	}
    1.24  }
    1.25  
    1.26 -static void LogAllMessages(void *data)
    1.27 +static void PumpUpdate(void *data)
    1.28  {
    1.29  	String *str;
    1.30  	List<String *>::iterator iter;
    1.31  
    1.32 +	char path[PLATFORM_MAX_PATH];
    1.33 +	UpdatePart *temp;
    1.34 +	UpdatePart *part = (UpdatePart*)data;
    1.35 +	while (part != NULL)
    1.36 +	{
    1.37 +		if (part->data == NULL)
    1.38 +		{
    1.39 +			smutils->BuildPath(Path_SM, path, sizeof(path), "gamedata/%s", part->file);
    1.40 +			if (libsys->IsPathDirectory(path))
    1.41 +			{
    1.42 +				continue;
    1.43 +			}
    1.44 +			if (!libsys->CreateFolder(path))
    1.45 +			{
    1.46 +				AddUpdateError("Could not create folder: %s", path);
    1.47 +			}
    1.48 +			else
    1.49 +			{
    1.50 +				smutils->LogMessage(myself, "Created folder \"%s\" from updater", path);
    1.51 +			}
    1.52 +		}
    1.53 +		else
    1.54 +		{
    1.55 +			smutils->BuildPath(Path_SM, path, sizeof(path), "gamedata/%s", part->file);
    1.56 +			FILE *fp = fopen(path, "wt");
    1.57 +			if (fp == NULL)
    1.58 +			{
    1.59 +				AddUpdateError("Could not open %s for writing", path);
    1.60 +				return;
    1.61 +			}
    1.62 +			fwrite(part->data, 1, part->length, fp);
    1.63 +			fclose(fp);
    1.64 +			smutils->LogMessage(myself,
    1.65 +				"Successfully updated gamedata file \"%s\"",
    1.66 +				part->file);
    1.67 +		}
    1.68 +		temp = part->next;
    1.69 +		free(part->data);
    1.70 +		free(part->file);
    1.71 +		delete part;
    1.72 +		part = temp;
    1.73 +	}
    1.74 +
    1.75  	if (update_errors.size())
    1.76  	{
    1.77  		smutils->LogError(myself, "--- BEGIN ERRORS FROM AUTOMATIC UPDATER ---");
    1.78 @@ -131,14 +169,6 @@
    1.79  
    1.80  		smutils->LogError(myself, "--- END ERRORS FROM AUTOMATIC UPDATER ---");
    1.81  	}
    1.82 -
    1.83 -	for (iter = update_messages.begin();
    1.84 -		 iter != update_messages.end();
    1.85 -		 iter++)
    1.86 -	{
    1.87 -		str = (*iter);
    1.88 -		smutils->LogMessage(myself, "%s", str->c_str());
    1.89 -	}
    1.90  }
    1.91  
    1.92  void SmUpdater::RunThread(IThreadHandle *pHandle)
    1.93 @@ -147,28 +177,13 @@
    1.94  
    1.95  	ur.PerformUpdate();
    1.96  
    1.97 -	if (update_errors.size() || update_messages.size())
    1.98 -	{
    1.99 -		smutils->AddFrameAction(LogAllMessages, NULL);
   1.100 -	}
   1.101 +	smutils->AddFrameAction(PumpUpdate, ur.DetachParts());
   1.102  }
   1.103  
   1.104  void SmUpdater::OnTerminate(IThreadHandle *pHandle, bool cancel)
   1.105  {
   1.106  }
   1.107  
   1.108 -void AddUpdateMessage(const char *fmt, ...)
   1.109 -{
   1.110 -	va_list ap;
   1.111 -	char buffer[2048];
   1.112 -
   1.113 -	va_start(ap, fmt);
   1.114 -	smutils->FormatArgs(buffer, sizeof(buffer), fmt, ap);
   1.115 -	va_end(ap);
   1.116 -
   1.117 -	update_messages.push_back(new String(buffer));
   1.118 -}
   1.119 -
   1.120  void AddUpdateError(const char *fmt, ...)
   1.121  {
   1.122  	va_list ap;