251 lines
6.6 KiB
C++
251 lines
6.6 KiB
C++
|
#include ".\settings.h"
|
||
|
#include <shlwapi.h>
|
||
|
#include <strsafe.h>
|
||
|
|
||
|
Settings::Settings(void)
|
||
|
{
|
||
|
dumpPath = NULL;
|
||
|
logPath = NULL;
|
||
|
smtpServer = NULL;
|
||
|
smtpUser = NULL;
|
||
|
smtpPwd = NULL;
|
||
|
path = NULL;
|
||
|
smtpAddress = NULL;
|
||
|
updatePath = TRUE;
|
||
|
createDMP = TRUE;
|
||
|
createLOG = TRUE;
|
||
|
autoRestart = FALSE;
|
||
|
silentMode = TRUE;
|
||
|
sendData = TRUE;
|
||
|
zipData = TRUE;
|
||
|
zipPath = NULL;
|
||
|
sendByClient = TRUE;
|
||
|
sendBySMTP = FALSE;
|
||
|
smtpPort = 25;
|
||
|
smtpAuth = TRUE;
|
||
|
dumpType = 0;
|
||
|
logSystem = TRUE;
|
||
|
logRegistry = TRUE;
|
||
|
logStack = TRUE;
|
||
|
logModule = TRUE;
|
||
|
}
|
||
|
|
||
|
Settings::~Settings(void)
|
||
|
{
|
||
|
if (dumpPath) free(dumpPath);
|
||
|
if (logPath) free(logPath);
|
||
|
if (smtpServer) free(smtpServer);
|
||
|
if (smtpUser) free(smtpUser);
|
||
|
if (smtpPwd) free(smtpPwd);
|
||
|
if (path) free(path);
|
||
|
if (smtpAddress) free(smtpAddress);
|
||
|
}
|
||
|
|
||
|
void Settings::SetPath(wchar_t *iniPath)
|
||
|
{
|
||
|
size_t size = lstrlen(iniPath);
|
||
|
if (path) free(path);
|
||
|
path = NULL;
|
||
|
path = (wchar_t*)malloc((size + 1) * sizeof(wchar_t));
|
||
|
StringCchCopy(path, size+1, iniPath);
|
||
|
wchar_t iniFile[MAX_PATH*2] = {0};
|
||
|
size += 14 * sizeof(wchar_t);
|
||
|
CreateDirectory(iniPath, NULL);
|
||
|
StringCchPrintf(iniFile, size, L"%s\\feedback.ini", iniPath);
|
||
|
cfg.SetIniFile(iniFile);
|
||
|
}
|
||
|
|
||
|
const wchar_t* Settings::GetPath(void)
|
||
|
{
|
||
|
return path;
|
||
|
}
|
||
|
|
||
|
BOOL Settings::Load(void)
|
||
|
{
|
||
|
if (!cfg.IsFileExist()) return FALSE;
|
||
|
cfg.SetSection(L"General");
|
||
|
updatePath = cfg.ReadInt(L"UpdatePath", TRUE);
|
||
|
if (updatePath) return FALSE;
|
||
|
createDMP = cfg.ReadInt(L"CreateDmp", TRUE);
|
||
|
createLOG = cfg.ReadInt(L"CreateLog", TRUE);
|
||
|
autoRestart = cfg.ReadInt(L"AutoRestart", FALSE);
|
||
|
silentMode = cfg.ReadInt(L"SilentMode", TRUE);
|
||
|
sendData = cfg.ReadInt(L"SendData", TRUE);
|
||
|
|
||
|
cfg.SetSection(L"Send");
|
||
|
sendByClient = cfg.ReadInt(L"UseClient", TRUE);
|
||
|
sendBySMTP = cfg.ReadInt(L"UseSMTP", FALSE);
|
||
|
smtpPort = cfg.ReadInt(L"Port", 25);
|
||
|
smtpAuth = cfg.ReadInt(L"ReqAuth", TRUE);
|
||
|
CreateStrCopy(&smtpAddress, cfg.ReadStringW(L"Address", L"bug@winamp.com"));
|
||
|
CreateStrCopy(&smtpServer, cfg.ReadStringW(L"Server", NULL));
|
||
|
CreateStrCopy(&smtpUser, cfg.ReadStringW(L"User", NULL));
|
||
|
CreateStrCopy(&smtpPwd, cfg.ReadStringW(L"Pwd", NULL));
|
||
|
|
||
|
cfg.SetSection(L"Zip");
|
||
|
zipData = cfg.ReadInt(L"ZipData", TRUE);
|
||
|
CreateStrCopy(&zipPath, cfg.ReadStringW(L"Path", NULL));
|
||
|
|
||
|
cfg.SetSection(L"Dump");
|
||
|
dumpType = cfg.ReadInt(L"Type", 0);
|
||
|
CreateStrCopy(&dumpPath, cfg.ReadStringW(L"Path", NULL));
|
||
|
|
||
|
cfg.SetSection(L"Log");
|
||
|
logSystem = cfg.ReadInt(L"System", TRUE);
|
||
|
logRegistry = cfg.ReadInt(L"Registry", TRUE);
|
||
|
logStack = cfg.ReadInt(L"Stack", TRUE);
|
||
|
logModule = cfg.ReadInt(L"Module", TRUE);
|
||
|
CreateStrCopy(&logPath, cfg.ReadStringW(L"Path", NULL));
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
void Settings::CreateStrCopy(wchar_t **dest, const wchar_t* source)
|
||
|
{
|
||
|
if (*dest) free(*dest);
|
||
|
*dest = NULL;
|
||
|
if (source)
|
||
|
{
|
||
|
size_t len = lstrlen(source) + 1;
|
||
|
*dest = (wchar_t*) malloc(len*sizeof(wchar_t));
|
||
|
StringCchCopy(*dest, len, source);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL Settings::Save(void)
|
||
|
{
|
||
|
BOOL error = FALSE;
|
||
|
if (FALSE == cfg.SetSection(L"General")) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"UpdatePath", FALSE)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"CreateDmp", createDMP)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"CreateLog", createLOG)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"AutoRestart", autoRestart)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"SilentMode", silentMode)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"SendData", sendData)) error = TRUE;
|
||
|
if (FALSE == cfg.SetSection(L"Send")) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"UseClient", sendByClient)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"UseSMTP", sendBySMTP)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Port", smtpPort)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Server", smtpServer)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Address", smtpAddress)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"ReqAuth", smtpAuth)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"User", smtpUser)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Pwd", smtpPwd)) error = TRUE;
|
||
|
if (FALSE == cfg.SetSection(L"Zip")) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"ZipData", zipData)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Path", zipPath)) error = TRUE;
|
||
|
if (FALSE == cfg.SetSection(L"Dump")) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Type", dumpType)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Path", dumpPath)) error = TRUE;
|
||
|
if (FALSE == cfg.SetSection(L"Log")) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"System", logSystem)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Registry", logRegistry)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Stack", logStack)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Module", logModule)) error = TRUE;
|
||
|
if (FALSE == cfg.Write(L"Path", logPath)) error = TRUE;
|
||
|
return !error;
|
||
|
}
|
||
|
|
||
|
BOOL Settings::CreateDefault(wchar_t* iniPath)
|
||
|
{
|
||
|
wchar_t temp[MAX_PATH] = {0};
|
||
|
int len;
|
||
|
|
||
|
createDMP = TRUE;
|
||
|
createLOG = TRUE;
|
||
|
autoRestart = FALSE;
|
||
|
silentMode = TRUE;
|
||
|
sendData = TRUE;
|
||
|
// zip
|
||
|
PathCombine(temp, iniPath, L"report.zip");
|
||
|
len = (int)wcslen(temp) + 1;
|
||
|
zipData = TRUE;
|
||
|
zipPath = (wchar_t*) malloc(len*2);
|
||
|
StringCchCopy(zipPath, len, temp);
|
||
|
// send
|
||
|
sendByClient = TRUE;
|
||
|
sendBySMTP = FALSE;
|
||
|
smtpPort = 25;
|
||
|
smtpAddress = (wchar_t*) malloc(32*2);
|
||
|
StringCchCopy(smtpAddress, 32, L"bug@winamp.com");
|
||
|
smtpAuth = TRUE;
|
||
|
smtpServer = NULL;
|
||
|
smtpUser = NULL;
|
||
|
smtpPwd = NULL;
|
||
|
// dump
|
||
|
PathCombine(temp, iniPath, L"_crash.dmp");
|
||
|
len = (int)wcslen(temp) + 1;
|
||
|
dumpType = NULL;
|
||
|
dumpPath = (wchar_t*) malloc(len*2);
|
||
|
StringCchCopy(dumpPath, len, temp);
|
||
|
// log
|
||
|
logSystem = TRUE;
|
||
|
logRegistry = TRUE;
|
||
|
logStack = TRUE;
|
||
|
logModule = TRUE;
|
||
|
PathCombine(temp, iniPath, L"_crash.log");
|
||
|
len = (int)wcslen(temp) + 1;
|
||
|
logPath = (wchar_t*) malloc(len*2);
|
||
|
StringCchCopy(logPath, len, temp);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
BOOL Settings::IsOk(void)
|
||
|
{
|
||
|
return (logPath != NULL && dumpPath != NULL);
|
||
|
}
|
||
|
|
||
|
void Settings::ClearTempData(void)
|
||
|
{
|
||
|
cfg.Write(L"Temp", L"TS", L"");
|
||
|
cfg.Write(L"Temp", L"LOG", L"0");
|
||
|
cfg.Write(L"Temp", L"DMP", L"0");
|
||
|
}
|
||
|
|
||
|
void Settings::WriteErrorTS(const wchar_t *time)
|
||
|
{
|
||
|
cfg.Write(L"Temp", L"TS", time);
|
||
|
}
|
||
|
|
||
|
void Settings::WriteLogCollectResult(BOOL result)
|
||
|
{
|
||
|
cfg.Write(L"Temp", L"LOG", result);
|
||
|
}
|
||
|
|
||
|
void Settings::WriteDmpCollectResult(BOOL result)
|
||
|
{
|
||
|
cfg.Write(L"Temp", L"DMP", result);
|
||
|
}
|
||
|
|
||
|
void Settings::WriteWinamp(const wchar_t *winamp)
|
||
|
{
|
||
|
cfg.Write(L"Temp", L"WA", winamp);
|
||
|
}
|
||
|
|
||
|
const wchar_t* Settings::ReadErrorTS(void)
|
||
|
{
|
||
|
return cfg.ReadStringW(L"Temp", L"TS", L"");
|
||
|
}
|
||
|
|
||
|
BOOL Settings::ReadLogCollectResult(void)
|
||
|
{
|
||
|
return cfg.ReadInt(L"Temp", L"LOG", 0);
|
||
|
}
|
||
|
BOOL Settings::ReadDmpCollectResult(void)
|
||
|
{
|
||
|
return cfg.ReadInt(L"Temp", L"DMP", 0);
|
||
|
}
|
||
|
|
||
|
const wchar_t* Settings::ReadWinamp(void)
|
||
|
{
|
||
|
return cfg.ReadStringW(L"Temp", L"WA", L"");
|
||
|
}
|
||
|
|
||
|
void Settings::WriteBody(const wchar_t *body)
|
||
|
{
|
||
|
cfg.Write(L"Temp", L"Body", body);
|
||
|
}
|
||
|
|
||
|
const wchar_t* Settings::ReadBody(void)
|
||
|
{
|
||
|
return cfg.ReadStringW(L"Temp", L"Body", L"");
|
||
|
}
|