aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/General/gen_crasher/settings.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Plugins/General/gen_crasher/settings.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Plugins/General/gen_crasher/settings.cpp')
-rw-r--r--Src/Plugins/General/gen_crasher/settings.cpp251
1 files changed, 251 insertions, 0 deletions
diff --git a/Src/Plugins/General/gen_crasher/settings.cpp b/Src/Plugins/General/gen_crasher/settings.cpp
new file mode 100644
index 00000000..d37f0ce5
--- /dev/null
+++ b/Src/Plugins/General/gen_crasher/settings.cpp
@@ -0,0 +1,251 @@
+#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"");
+} \ No newline at end of file