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;