mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-18 23:15:51 +01:00
120 lines
2.7 KiB
C++
120 lines
2.7 KiB
C++
|
#include "main.h"
|
||
|
#include "./config.h"
|
||
|
|
||
|
#include <strsafe.h>
|
||
|
|
||
|
#define CONFIG_SUFFIX L"Plugins\\ml"
|
||
|
#define CONFIG_FILE L"ml_devices.ini"
|
||
|
|
||
|
static const char *
|
||
|
Config_GetPath(BOOL ensureExist)
|
||
|
{
|
||
|
static const char *configPath = NULL;
|
||
|
if (NULL == configPath)
|
||
|
{
|
||
|
const wchar_t *userPath;
|
||
|
wchar_t buffer[MAX_PATH * 2] = {0};
|
||
|
|
||
|
if (NULL == WASABI_API_APP)
|
||
|
return NULL;
|
||
|
|
||
|
userPath = WASABI_API_APP->path_getUserSettingsPath();
|
||
|
if (NULL == userPath)
|
||
|
return NULL;
|
||
|
|
||
|
if (0 != PathCombine(buffer, userPath, CONFIG_SUFFIX))
|
||
|
{
|
||
|
if ((FALSE == ensureExist || SUCCEEDED(Plugin_EnsurePathExist(buffer))) &&
|
||
|
FALSE != PathAppend(buffer,CONFIG_FILE))
|
||
|
{
|
||
|
configPath = String_ToAnsi(CP_UTF8, 0, buffer, -1, NULL, NULL);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return configPath;
|
||
|
}
|
||
|
|
||
|
|
||
|
unsigned long
|
||
|
Config_ReadString(const char *section, const char *key, const char *defaultValue, char *returnedString, unsigned long size)
|
||
|
{
|
||
|
return GetPrivateProfileStringA(section, key, defaultValue, returnedString, size, Config_GetPath(FALSE));
|
||
|
}
|
||
|
|
||
|
unsigned int
|
||
|
Config_ReadInt(const char *section, const char *key, int defaultValue)
|
||
|
{
|
||
|
return GetPrivateProfileIntA(section, key, defaultValue, Config_GetPath(FALSE));
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
Config_ReadBool(const char *section, const char *key, BOOL defaultValue)
|
||
|
{
|
||
|
char buffer[32] = {0};
|
||
|
int length = Config_ReadString(section, key, NULL, buffer, ARRAYSIZE(buffer));
|
||
|
|
||
|
if (0 == length)
|
||
|
return defaultValue;
|
||
|
|
||
|
if (1 == length)
|
||
|
{
|
||
|
switch(*buffer)
|
||
|
{
|
||
|
case '0':
|
||
|
case 'n':
|
||
|
case 'f':
|
||
|
return FALSE;
|
||
|
case '1':
|
||
|
case 'y':
|
||
|
case 't':
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (CSTR_EQUAL == CompareStringA(CSTR_INVARIANT, NORM_IGNORECASE, "yes", -1, buffer, length) ||
|
||
|
CSTR_EQUAL == CompareStringA(CSTR_INVARIANT, NORM_IGNORECASE, "true", -1, buffer, length))
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
if (CSTR_EQUAL == CompareStringA(CSTR_INVARIANT, NORM_IGNORECASE, "no", -1, buffer, length) ||
|
||
|
CSTR_EQUAL == CompareStringA(CSTR_INVARIANT, NORM_IGNORECASE, "false", -1, buffer, length))
|
||
|
{
|
||
|
return FALSE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (FALSE != StrToIntExA(buffer, STIF_SUPPORT_HEX, &length))
|
||
|
return (0 != length);
|
||
|
|
||
|
return defaultValue;
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
Config_WriteString(const char *section, const char *key, const char *value)
|
||
|
{
|
||
|
const char *configPath = Config_GetPath(TRUE);
|
||
|
if (NULL == configPath || '\0' == *configPath)
|
||
|
return FALSE;
|
||
|
|
||
|
return (0 != WritePrivateProfileStringA(section, key, value, configPath));
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
Config_WriteInt(const char *section, const char *key, int value)
|
||
|
{
|
||
|
char buffer[32] = {0};
|
||
|
if (FAILED(StringCchPrintfA(buffer, ARRAYSIZE(buffer), "%d", value)))
|
||
|
return FALSE;
|
||
|
|
||
|
return Config_WriteString(section, key, buffer);
|
||
|
}
|
||
|
|
||
|
BOOL
|
||
|
Config_WriteBool(const char *section, const char *key, BOOL value)
|
||
|
{
|
||
|
return Config_WriteString(section, key, (FALSE != value) ? "yes" : "no");
|
||
|
}
|