diff options
author | George Hazan <ghazan@miranda.im> | 2020-08-11 17:21:54 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2020-08-11 17:21:54 +0300 |
commit | ca545be6f06c10b137ae0586ecdf634b29c1ee04 (patch) | |
tree | dac25ac885b969d9e7999e061152d6d713f09b2d /plugins/DbChecker/src/main.cpp | |
parent | 1c873131aae12c8fa3e74fd1515c4377fc586f36 (diff) |
fixes #2517 (Add DbChecker menu item to Main menu → Database)
Diffstat (limited to 'plugins/DbChecker/src/main.cpp')
-rw-r--r-- | plugins/DbChecker/src/main.cpp | 44 |
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; |