extensions/clientprefs/extension.cpp
changeset 2048 2454ff4d6afb
parent 2009 1a1236dfdbb1
child 2087 c1ac266bd660
     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 +