summaryrefslogtreecommitdiff
path: root/plugins/DbChecker/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/DbChecker/src/main.cpp')
-rw-r--r--plugins/DbChecker/src/main.cpp44
1 files changed, 40 insertions, 4 deletions
diff --git a/plugins/DbChecker/src/main.cpp b/plugins/DbChecker/src/main.cpp
index eb59131e86..25214e05e9 100644
--- a/plugins/DbChecker/src/main.cpp
+++ b/plugins/DbChecker/src/main.cpp
@@ -57,14 +57,12 @@ static INT_PTR ServiceMode(WPARAM, LPARAM)
{
auto *opts = new DbToolOptions();
opts->db = db_get_current();
- db_setCurrent(nullptr);
- wcsncpy_s(opts->filename, VARSW(L"%miranda_userdata%\\%miranda_profilename%.dat"), _TRUNCATE);
-
opts->dbChecker = opts->db->GetChecker();
if (opts->dbChecker == nullptr) {
delete opts;
return SERVICE_FAILED;
}
+ wcsncpy_s(opts->filename, VARSW(L"%miranda_userdata%\\%miranda_profilename%.dat"), _TRUNCATE);
DialogBoxParamW(g_plugin.getInst(), MAKEINTRESOURCE(IDD_WIZARD), nullptr, WizardDlgProc, LPARAM(opts));
return SERVICE_FAILED;
@@ -74,12 +72,50 @@ static INT_PTR CheckProfile(WPARAM wParam, LPARAM lParam)
{
auto *opts = new DbToolOptions();
opts->bAutoExit = lParam == 2;
- wcsncpy(opts->filename, (wchar_t*)wParam, _countof(opts->filename));
+
+ if (wParam) {
+ wcsncpy(opts->filename, (wchar_t *)wParam, _countof(opts->filename));
+ opts->bOwnsDb = true;
+ }
+ else {
+ opts->db = db_get_current();
+ opts->dbChecker = opts->db->GetChecker();
+ if (opts->dbChecker == nullptr) {
+ delete opts;
+ return 2;
+ }
+
+ wcsncpy_s(opts->filename, VARSW(L"%miranda_userdata%\\%miranda_profilename%.dat"), _TRUNCATE);
+ }
+
return DialogBoxParamW(g_plugin.getInst(), MAKEINTRESOURCE(IDD_WIZARD), nullptr, WizardDlgProc, LPARAM(opts));
}
+static int OnModulesLoaded(WPARAM, LPARAM)
+{
+ CMenuItem mi(&g_plugin);
+ mi.root = g_plugin.addRootMenu(MO_MAIN, LPGENW("Database"), 500100000);
+
+ // Main menu items
+ SET_UID(mi, 0x371f9e52, 0x39f5, 0x4fee, 0x84, 0xbb, 0xfe, 0x9c, 0xf, 0xd6, 0x85, 0x79); // {371F9E52-39F5-4FEE-84BB-FE9C0FD68579}
+ mi.name.a = LPGEN("Check database");
+ mi.pszService = MS_DB_CHECKPROFILE;
+ mi.hIcolibItem = g_plugin.getIconHandle(IDI_DBTOOL);
+ mi.position = 500000003;
+ Menu_AddMainMenuItem(&mi);
+ return 0;
+}
+
+static IconItem iconList[] = {
+ { LPGEN("Check database"), "DbChecker", IDI_DBTOOL },
+};
+
int CMPlugin::Load(void)
{
+ g_plugin.registerIcon("DbChecker", iconList);
+
+ HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
+
CreateServiceFunction(MS_DB_CHECKPROFILE, CheckProfile);
hService = CreateServiceFunction(MS_SERVICEMODE_LAUNCH, ServiceMode);
return 0;