From 8b437fdb2e61c4f94e01eb727f6a4c68ba12c0b7 Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Sat, 26 May 2012 17:29:10 +0000 Subject: projects cleanup db_autobackups moved from mmap_sa, coz it for all databases git-svn-id: http://svn.miranda-ng.org/main/trunk@184 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Db_autobackups/main.c | 262 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 plugins/Db_autobackups/main.c (limited to 'plugins/Db_autobackups/main.c') diff --git a/plugins/Db_autobackups/main.c b/plugins/Db_autobackups/main.c new file mode 100644 index 0000000000..7390bd9dc7 --- /dev/null +++ b/plugins/Db_autobackups/main.c @@ -0,0 +1,262 @@ +#include "headers.h" +#include "version.h" +#include "m_trigger.h" + +struct MM_INTERFACE mmi; +HINSTANCE hInst; +PLUGINLINK *pluginLink; +int hLangpack; + +HANDLE hFolder; +HANDLE hHooks[4]; +HANDLE hServices[3]; + +PLUGININFOEX pluginInfo={ + sizeof(PLUGININFOEX), + __PLUGIN_NAME, + __VERSION_DWORD, + __PLUGIN_DESC, + "chaos.persei, sje, Kildor, Billy_Bons", + "chaos.persei@gmail.com", + __COPYRIGHTS, + "http://mods.mirandaim.ru/", + UNICODE_AWARE, + 0, //doesn't replace anything built-in + // Generate your own unique id for your plugin. + // Do not use this UUID! + // Use uuidgen.exe to generate the uuuid + // {81C220A6-0226-4ad6-BFCA-217B17A16053} + { 0x81c220a6, 0x226, 0x4ad6, { 0xbf, 0xca, 0x21, 0x7b, 0x17, 0xa1, 0x60, 0x53 } } +}; + +#define MIID_DB_AUTOBACKUPS { 0x81c220a6, 0x226, 0x4ad6, { 0xbf, 0xca, 0x21, 0x7b, 0x17, 0xa1, 0x60, 0x53 } } + +struct +{ + TCHAR* szDescr; + char* szName; + int defIconID; +} +static const iconList[] = { + { _T("Backup Profile"), "backup", IDI_ICON1 }, + { _T("Save Profile As..."), "saveas", IDI_ICON1 } +}; + +INT_PTR BackupServiceTrgr(WPARAM wParam, LPARAM lParam) +{ + if(wParam & ACT_PERFORM) { + return Backup(NULL); + } + return 0; +} + +static int FoldersGetBackupPath(WPARAM wParam, LPARAM lParam) +{ + FoldersGetCustomPathT(hFolder, options.folder, MAX_PATH, DIR SUB_DIR); + return 0; +} + +static int FoldersInit(void) +{ + hFolder = (HANDLE) FoldersRegisterCustomPathT("Database Backups", "Backup Folder", DIR SUB_DIR); + hHooks[0] = HookEvent(ME_FOLDERS_PATH_CHANGED, FoldersGetBackupPath); + FoldersGetBackupPath(0, 0); + return 0; +} + +static void IcoLibInit(void) +{ + int i; + SKINICONDESC sid = {0}; + TCHAR tszFile[MAX_PATH]; + GetModuleFileName(hInst, tszFile, MAX_PATH); + + sid.cbSize = sizeof(SKINICONDESC); + sid.ptszDefaultFile = tszFile; + sid.ptszSection = _T("Database/Database Backups"); + sid.flags = SIDF_ALL_TCHAR; + + for ( i = 0; i < SIZEOF(iconList); i++ ) { + sid.pszName = iconList[i].szName; + sid.ptszDescription = iconList[i].szDescr; + sid.iDefaultIndex = -iconList[i].defIconID; + CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid); + } +} + +static void MenuInit(void) +{ + CLISTMENUITEM menu = {0}; + menu.cbSize = sizeof(menu); + menu.flags = CMIF_TCHAR; + menu.hIcon=(HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)"backup"); + menu.ptszPopupName = LPGENT("Database"); + + menu.ptszName = LPGENT("Backup Profile"); + menu.pszService = MS_AB_BACKUP; + menu.position = 500100000; + CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&menu); + + menu.hIcon=(HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)"saveas"); + menu.ptszName = LPGENT("Save Profile As..."); + menu.pszService = MS_AB_SAVEAS; + menu.position = 500100001; + CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&menu); +} + +static void TriggerActionInit(void) +{ + ACTIONREGISTER ar = {0}; + ar.cbSize = sizeof(ACTIONREGISTER); + ar.pszName = "Backup Database"; + ar.pszService = MS_AB_BACKUPTRGR; + + CallService(MS_TRIGGER_REGISTERACTION, 0, (LPARAM)&ar); +} + +static int ModulesLoad(WPARAM wParam, LPARAM lParam) +{ + profilePath = Utils_ReplaceVarsT(_T("%miranda_userdata%")); + + IcoLibInit(); + if(ServiceExists(MS_FOLDERS_REGISTER_PATH)) + FoldersInit(); + LoadOptions(); + MenuInit(); + + // register trigger action for triggerplugin + if(ServiceExists(MS_TRIGGER_REGISTERACTION)) + TriggerActionInit(); + + hHooks[1] = HookEvent(ME_OPT_INITIALISE, OptionsInit); + if(options.backup_types & BT_START) + Backup(NULL); + return 0; +} + +// can't do this on unload, since other plugins will be have already been unloaded, but their hooks +// for setting changed event not cleared. the backup on exit function will write to the db, calling those hooks. +int PreShutdown(WPARAM wParam, LPARAM lParam) { + if(options.backup_types & BT_EXIT) + { + options.disable_popups = 1; // Don't try to show popups on exit + Backup(NULL); + } + return 0; +} + +void SysInit() +{ + mir_getMMI( &mmi ); + mir_getLP( &pluginInfo ); + OleInitialize(0); + + hServices[0] = CreateServiceFunction(MS_AB_BACKUP, ABService); + hServices[1] = CreateServiceFunction(MS_AB_BACKUPTRGR, BackupServiceTrgr); + hServices[2] = CreateServiceFunction(MS_AB_SAVEAS, DBSaveAs); + + hHooks[2] = HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdown); + hHooks[3] = HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoad); +} + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + hInst=hinstDLL; + return TRUE; +} + +__declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + if ( mirandaVersion < PLUGIN_MAKE_VERSION(0,8,1,0)) { + MessageBox( NULL, _T("The ") _T(__PLUGIN_NAME_BASE) _T(" plugin cannot be loaded. It requires Miranda IM 0.8.1 or later."), _T(__PLUGIN_NAME_BASE), MB_OK|MB_ICONWARNING|MB_SETFOREGROUND|MB_TOPMOST ); + return NULL; + } + return &pluginInfo; +} + +static const MUUID interfaces[] = {MIID_DB_AUTOBACKUPS, MIID_LAST}; +__declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) +{ + return interfaces; +} + +int __declspec(dllexport) Load(PLUGINLINK *link) +{ + pluginLink=link; + SysInit(); + return 0; +} + +int __declspec(dllexport) Unload(void) +{ + int i; + + OleUninitialize(); + + for (i=0; i