1.1 --- a/extensions/clientprefs/extension.cpp Mon May 12 02:05:57 2008 +0000
1.2 +++ b/extensions/clientprefs/extension.cpp Mon May 12 08:06:47 2008 +0000
1.3 @@ -43,6 +43,9 @@
1.4 HandleType_t g_CookieType = 0;
1.5 CookieTypeHandler g_CookieTypeHandler;
1.6
1.7 +HandleType_t g_CookieIterator = 0;
1.8 +CookieIteratorHandler g_CookieIteratorHandler;
1.9 +
1.10
1.11 int driver = 0;
1.12
1.13 @@ -100,44 +103,9 @@
1.14 return false;
1.15 }
1.16
1.17 - if (driver == DRIVER_SQLITE)
1.18 - {
1.19 - Query_InsertCookie = Database->PrepareQuery("INSERT OR IGNORE INTO sm_cookies(name, description) VALUES(?, ?)", error, maxlength);
1.20 - }
1.21 - else
1.22 - {
1.23 - Query_InsertCookie = Database->PrepareQuery("INSERT IGNORE INTO sm_cookies(name, description) VALUES(?, ?)", error, maxlength);
1.24 - }
1.25 -
1.26 - if (Query_InsertCookie == NULL)
1.27 - {
1.28 - return false;
1.29 - }
1.30 -
1.31 - Query_SelectData = Database->PrepareQuery("SELECT sm_cookies.name, sm_cookie_cache.value, sm_cookies.description FROM sm_cookies JOIN sm_cookie_cache ON sm_cookies.id = sm_cookie_cache.cookie_id WHERE player = ?", error, maxlength);
1.32 -
1.33 - if (Query_SelectData == NULL)
1.34 - {
1.35 - return false;
1.36 - }
1.37 -
1.38 - if (driver == DRIVER_SQLITE)
1.39 - {
1.40 - Query_InsertData = Database->PrepareQuery("INSERT OR REPLACE INTO sm_cookie_cache(player,cookie_id, value, timestamp) VALUES(?, ?, ?, ?)", error, maxlength);
1.41 - }
1.42 - else
1.43 - {
1.44 - Query_InsertData = Database->PrepareQuery("INSERT INTO sm_cookie_cache(player,cookie_id, value, timestamp) VALUES(?, ?, ?, ?) ON DUPLICATE KEY UPDATE value = ?, timestamp = ?", error, maxlength);
1.45 - }
1.46 -
1.47 - if (Query_InsertData == NULL)
1.48 - {
1.49 - return false;
1.50 - }
1.51 -
1.52 sharesys->AddNatives(myself, g_ClientPrefNatives);
1.53 sharesys->RegisterLibrary(myself, "clientprefs");
1.54 - g_CookieManager.cookiesLoadedForward = forwards->CreateForward("OnClientCookiesLoaded", ET_Ignore, 1, NULL, Param_Cell);
1.55 + g_CookieManager.cookieDataLoadedForward = forwards->CreateForward("OnClientCookiesCached", ET_Ignore, 1, NULL, Param_Cell);
1.56
1.57 g_CookieType = handlesys->CreateType("Cookie",
1.58 &g_CookieTypeHandler,
1.59 @@ -147,6 +115,25 @@
1.60 myself->GetIdentity(),
1.61 NULL);
1.62
1.63 + g_CookieIterator = handlesys->CreateType("CookieIterator",
1.64 + &g_CookieIteratorHandler,
1.65 + 0,
1.66 + NULL,
1.67 + NULL,
1.68 + myself->GetIdentity(),
1.69 + NULL);
1.70 +
1.71 + IMenuStyle *style = menus->GetDefaultStyle();
1.72 + g_CookieManager.clientMenu = style->CreateMenu(&g_Handler, NULL);
1.73 + g_CookieManager.clientMenu->SetDefaultTitle("Client Settings:");
1.74 +
1.75 + plsys->AddPluginsListener(&g_CookieManager);
1.76 +
1.77 + phrases = translator->CreatePhraseCollection();
1.78 + phrases->AddPhraseFile("clientprefs.phrases");
1.79 + phrases->AddPhraseFile("common.phrases");
1.80 +
1.81 +
1.82 return true;
1.83 }
1.84
1.85 @@ -161,13 +148,78 @@
1.86
1.87 g_CookieManager.Unload();
1.88
1.89 - Query_InsertCookie->Destroy();
1.90 - Query_InsertData->Destroy();
1.91 - Query_SelectData->Destroy();
1.92 -
1.93 Database->Close();
1.94
1.95 - forwards->ReleaseForward(g_CookieManager.cookiesLoadedForward);
1.96 + forwards->ReleaseForward(g_CookieManager.cookieDataLoadedForward);
1.97 +
1.98 + g_CookieManager.clientMenu->Destroy();
1.99 +}
1.100 +
1.101 +size_t UTIL_Format(char *buffer, size_t maxlength, const char *fmt, ...)
1.102 +{
1.103 + va_list ap;
1.104 + va_start(ap, fmt);
1.105 + size_t len = vsnprintf(buffer, maxlength, fmt, ap);
1.106 + va_end(ap);
1.107 +
1.108 + if (len >= maxlength)
1.109 + {
1.110 + buffer[maxlength - 1] = '\0';
1.111 + return (maxlength - 1);
1.112 + }
1.113 + else
1.114 + {
1.115 + return len;
1.116 + }
1.117 +}
1.118 +
1.119 +bool Translate(char *buffer,
1.120 + size_t maxlength,
1.121 + const char *format,
1.122 + unsigned int numparams,
1.123 + size_t *pOutLength,
1.124 + ...)
1.125 +{
1.126 + va_list ap;
1.127 + unsigned int i;
1.128 + const char *fail_phrase;
1.129 + void *params[MAX_TRANSLATE_PARAMS];
1.130 +
1.131 + if (numparams > MAX_TRANSLATE_PARAMS)
1.132 + {
1.133 + assert(false);
1.134 + return false;
1.135 + }
1.136 +
1.137 + va_start(ap, pOutLength);
1.138 + for (i = 0; i < numparams; i++)
1.139 + {
1.140 + params[i] = va_arg(ap, void *);
1.141 + }
1.142 + va_end(ap);
1.143 +
1.144 + if (!g_ClientPrefs.phrases->FormatString(buffer,
1.145 + maxlength,
1.146 + format,
1.147 + params,
1.148 + numparams,
1.149 + pOutLength,
1.150 + &fail_phrase))
1.151 + {
1.152 + if (fail_phrase != NULL)
1.153 + {
1.154 + g_pSM->LogError(myself, "[SM] Could not find core phrase: %s", fail_phrase);
1.155 + }
1.156 + else
1.157 + {
1.158 + g_pSM->LogError(myself, "[SM] Unknown fatal error while translating a core phrase.");
1.159 + }
1.160 +
1.161 + return false;
1.162 + }
1.163 +
1.164 + return true;
1.165 }
1.166
1.167
1.168 +