aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Library/ml_webdev/config.cpp
blob: 6a81bb6cf559244fb381f775ffe595c400efd64e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include "main.h"
#include "./config.h"
#include "./wasabi.h"

#include <shlwapi.h>
#include <strsafe.h>

#define CONFIG_SUFFIX		L"Plugins\\webDev"

static LPCSTR Config_GetPath()
{
	static LPSTR configPath = NULL;
	if (NULL == configPath)
	{
		LPCWSTR p = (NULL != WASABI_API_APP) ? WASABI_API_APP->path_getUserSettingsPath() : NULL;
		if (NULL != p)
		{
			WCHAR szBuffer[MAX_PATH * 2] = {0};
			if (0 != PathCombine(szBuffer, p, CONFIG_SUFFIX))
			{
				OMUTILITY->EnsurePathExist(szBuffer);
				PathAppend(szBuffer, L"config.ini");
				configPath = Plugin_WideCharToMultiByte(CP_UTF8, 0, szBuffer, -1, NULL, NULL);
			}
		}
	}

	return configPath;
}

DWORD Config_ReadStr(LPCSTR lpSectionName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize)
{
	return GetPrivateProfileStringA(lpSectionName, lpKeyName, lpDefault, lpReturnedString, nSize, Config_GetPath());
}

UINT Config_ReadInt(LPCSTR lpSectionName, LPCSTR lpKeyName, INT nDefault)
{
	return GetPrivateProfileIntA(lpSectionName, lpKeyName, nDefault, Config_GetPath());
}

HRESULT Config_WriteStr(LPCSTR lpSectionName, LPCSTR lpKeyName, LPCSTR lpString)
{
	LPCSTR configPath = Config_GetPath();
	if (NULL == configPath || '\0' == *configPath) 
		return E_UNEXPECTED;
	
	if (0 != WritePrivateProfileStringA(lpSectionName, lpKeyName, lpString, configPath))
		return S_OK;

	DWORD errorCode = GetLastError();
	return HRESULT_FROM_WIN32(errorCode);
}

HRESULT Config_WriteInt(LPCSTR lpSectionName, LPCSTR lpKeyName, INT nValue)
{
	char szBuffer[32];
	HRESULT hr = StringCchPrintfA(szBuffer, ARRAYSIZE(szBuffer), "%d", nValue);
	if (FAILED(hr)) return hr;

	return Config_WriteStr(lpSectionName, lpKeyName, szBuffer);
}

HRESULT Config_WriteSection(LPCSTR lpSectionName, LPCSTR lpData)
{
	LPCSTR configPath = Config_GetPath();
	if (NULL == configPath || '\0' == *configPath) 
		return E_UNEXPECTED;
	
	if (0 == WritePrivateProfileSectionA(lpSectionName, lpData, configPath))
		return S_OK;

	DWORD errorCode = GetLastError();
	return HRESULT_FROM_WIN32(errorCode);
}