From f04d64869f3b1de54fb343f28f955584780001b8 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Sat, 26 Nov 2011 15:41:10 +0000 Subject: Project folders rename part 3 git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@215 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- UserInfoEx/init.cpp | 401 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 401 insertions(+) create mode 100644 UserInfoEx/init.cpp (limited to 'UserInfoEx/init.cpp') diff --git a/UserInfoEx/init.cpp b/UserInfoEx/init.cpp new file mode 100644 index 0000000..6c08852 --- /dev/null +++ b/UserInfoEx/init.cpp @@ -0,0 +1,401 @@ +/* +UserinfoEx plugin for Miranda IM + +Copyright: +© 2006-2010 DeathAxe, Yasnovidyashii, Merlin, K. Romanov, Kreol + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +=============================================================================== + +File name : $HeadURL: https://userinfoex.googlecode.com/svn/trunk/init.cpp $ +Revision : $Revision: 210 $ +Last change on : $Date: 2010-10-02 22:27:36 +0400 (Сб, 02 окт 2010) $ +Last change by : $Author: ing.u.horn $ + +=============================================================================== +*/ +#include "commonheaders.h" +#include "res/version.h" +#include "m_updater.h" + +#include "mir_menuitems.h" +#include "ctrl_base.h" +#include "ctrl_button.h" +#include "ctrl_contact.h" +#include "dlg_propsheet.h" +#include "dlg_anniversarylist.h" +#include "psp_options.h" +#include "ex_import/svc_ExImport.h" +//#include "ex_import/svc_ExImVCF.h" +#include "svc_avatar.h" +#include "svc_contactinfo.h" +#include "svc_email.h" +#include "svc_gender.h" +#include "svc_homepage.h" +#include "svc_phone.h" +#include "svc_refreshci.h" +#include "svc_reminder.h" +#include "svc_timezone.h" +#include "svc_timezone_old.h" +#include "flags/svc_flags.h" + +static PLUGININFOEX pluginInfo = { + sizeof(PLUGININFOEX), + __PLUGIN_DISPLAY_NAME, + __VERSION_DWORD, + __DESC, + __AUTHOR, + __AUTHOREMAIL, + __COPYRIGHT, + __AUTHORWEB, + UNICODE_AWARE, + DEFMOD_UIUSERINFO, + MIID_UIUSERINFOEX +}; + +static HANDLE ghModulesLoadedHook = NULL; +static HANDLE ghTopToolBarLoaded = NULL; +static HANDLE ghModernToolBarLoaded = NULL; +static HANDLE ghShutdownHook = NULL; +static HANDLE ghPrebuildStatusMenu = NULL; + +/* +============================================================================================ + event hooks +============================================================================================ +*/ + +/** + * This function is called by the ME_TTB_MODULELOADED event. + * It adds a set of buttons to the TopToolbar plugin. + * + * @param wParam - not used + * @param lParam - not used + * + * @return always 0 + **/ +static INT OnTopToolBarLoaded(WPARAM wParam, LPARAM lParam) +{ + UnhookEvent(ghTopToolBarLoaded); + DlgAnniversaryListOnTopToolBarLoaded(); + SvcReminderOnTopToolBarLoaded(); + return 0; +} + +/** + * This function is called by the ME_TB_MODULELOADED event. + * It adds a set of buttons to the Toolbar of the Modern Contact List. + * + * @param wParam - not used + * @param lParam - not used + * + * @return always 0 + **/ +static INT OnModernToolBarLoaded(WPARAM wParam, LPARAM lParam) +{ + UnhookEvent(ghModernToolBarLoaded); + DlgAnniversaryListOnToolBarLoaded(); + SvcReminderOnToolBarLoaded(); + return 0; +} + +/** + * This function is called by Miranda just after loading all system modules. + * + * @param wParam - not used + * @param lParam - not used + * + * @return always 0 + **/ +static INT OnModulesLoaded(WPARAM wParam, LPARAM lParam) +{ +#ifdef _DEBUG + #define new DEBUG_NEW; + int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); + tmpFlag |= _CRTDBG_LEAK_CHECK_DF; + _CrtSetDbgFlag(tmpFlag); +// _CrtSetBreakAlloc(4852); +#endif + INT_PTR ptr; + + UnhookEvent(ghModulesLoadedHook); + + myGlobals.HaveCListExtraIcons = ServiceExists(MS_CLIST_EXTRA_SET_ICON); + myGlobals.ExtraIconsServiceExist = ServiceExists(MS_EXTRAICON_REGISTER); + myGlobals.PopUpActionsExist = ServiceExists(MS_POPUP_REGISTERACTIONS); + myGlobals.MsgAddIconExist = ServiceExists(MS_MSG_ADDICON); + + // init meta contacts + ptr = CallService(MS_MC_GETPROTOCOLNAME, 0, 0); + myGlobals.szMetaProto = (ptr != CALLSERVICE_NOTFOUND) ? (LPCSTR)ptr : NULL; + + // options + OptionsLoadModule(); + // create services to receive string lists of languages and timezones + SvcConstantsLoadModule(); + // load module to remind user about birthday and a anniversary + SvcReminderOnModulesLoaded(); + // load extended intagration services + SvcEMailOnModulesLoaded(); + SvcHomepageLoadModule(); + SvcPhoneLoadModule(); + SvcGenderLoadModule(); + SvcFlagsOnModulesLoaded(); + +#ifdef _DEBUG // new feature, not in release jet + NServices::NAvatar::OnModulesLoaded(); +#endif + + // build contact's menuitems + RebuildMenu(); + ghPrebuildStatusMenu = HookEvent( ME_CLIST_PREBUILDSTATUSMENU, (MIRANDAHOOK)RebuildAccount); + + // finally register for updater + if (ServiceExists(MS_UPDATE_REGISTER)) + { + Update update = {0}; + CHAR szVersion[16]; + update.cbSize = sizeof(Update); + update.szComponentName = pluginInfo.shortName; + update.pbVersion = (BYTE *)CreateVersionString(pluginInfo.version, szVersion); + update.cpbVersion = (INT)strlen((LPSTR)update.pbVersion); + + update.szUpdateURL = UPDATER_AUTOREGISTER; + + update.szBetaVersionURL = "http://userinfoex.googlecode.com/svn/trunk/changelog.txt"; + // bytes occuring in VersionURL before the version, used to locate the version information within the URL data + // e.g. change '[0.8.1.0 (in work)]' to 'UserinfoEx: 0.8.1.0' for beta versions bump + update.pbBetaVersionPrefix = (BYTE *)"UserinfoEx: "; + update.cpbBetaVersionPrefix = (INT)strlen((LPSTR)update.pbBetaVersionPrefix); + +#ifdef _WIN64 + #ifdef _UNICODE + update.szBetaUpdateURL = "http://userinfoex.googlecode.com/files/uinfoex64.zip"; + #endif +#else + #ifdef _UNICODE + update.szBetaUpdateURL = "http://userinfoex.googlecode.com/files/uinfoexW.zip"; + #else + update.szBetaUpdateURL = "http://userinfoex.googlecode.com/files/uinfoex.zip"; + #endif +#endif + + // url for displaying changelog for beta versions + update.szBetaChangelogURL = "http://userinfoex.googlecode.com/svn/trunk/changelog.txt"; + + CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update); + } + // install known modules strings to database + DB::Setting::WriteAString(NULL, "KnownModules", MODULELONGNAME, USERINFO","MODNAME","MOD_MBIRTHDAY","MODNAMEFLAGS); + + return 0; +} + +static INT OnShutdown(WPARAM wParam, LPARAM lParam) +{ + UnhookEvent(ghShutdownHook); + services.destroy(); + DlgContactInfoUnLoadModule(); + SvcReminderUnloadModule(); + + // uninitialize classes + CtrlContactUnLoadModule(); + CtrlButtonUnloadModule(); + + SvcConstantsUnloadModule(); + UnhookEvent(ghPrebuildStatusMenu); + SvcEMailUnloadModule(); + SvcFlagsUnloadModule(); + SvcGenderUnloadModule(); + SvcHomepageUnloadModule(); + SvcPhoneUnloadModule(); + + mir_free(hMenuItemAccount); + return 0; +} + +static BOOL CoreCheck() +{ + BOOL bOk = TRUE; + CHAR szVer[260]; + TCHAR tszExePath[1024]; + + GetModuleFileName(GetModuleHandle(NULL), tszExePath, SIZEOF(tszExePath)); + CallService(MS_SYSTEM_GETVERSIONTEXT, SIZEOF(szVer), (LPARAM)szVer); + + strlwr(szVer); + _tcslwr(tszExePath); + +#ifdef _UNICODE + bOk *= (GetVersion() & 0x80000000) == 0; + bOk *= strstr(szVer, "unicode") != 0; +#else + bOk *= strstr(szVer, "unicode") == 0; +#endif + + bOk *= _tcsstr(_tcsrchr(tszExePath, '\\'), _T("miranda")) != 0; + bOk *= !strstr(szVer, "coffee") && strncmp(szVer, "1.", 2) && !strstr(szVer, " 1."); + bOk *= myGlobals.mirandaVersion < PLUGIN_MAKE_VERSION(1,0,0,0); + return bOk; +} + +/* +============================================================================================ + plugin interface & DllEntrypoint +============================================================================================ +*/ + +/** + * This function is called by Miranda to get some information about this plugin. + * + * @return pointer to pluginInfo struct + **/ +extern "C" __declspec(dllexport) PLUGININFOEX *MirandaPluginInfoEx(DWORD mirandaVersion) +{ + if (mirandaVersion < PLUGIN_MAKE_VERSION(0,8,0,45)) + { + return NULL; + } + myGlobals.mirandaVersion = mirandaVersion; + return &pluginInfo; +} + +/** + * This function returns the provided interfaces. + * + * @return array of interfaces + **/ +extern "C" __declspec(dllexport) const MUUID *MirandaPluginInterfaces() +{ + static const MUUID interfaces[] = { + MIID_UIUSERINFOEX, // this is just me + MIID_UIUSERINFO, // replace the default userinfo module + MIID_CONTACTINFO, // indicate, that MS_CONTACT_GETCONTACTINFO service is provided + MIID_REMINDER, // indicate an Reminder of being provided + MIID_SREMAIL, // Send/Receive E-Mail service is provided + MIID_LAST + }; + return interfaces; +} + +/** + * This function is called by Miranda just to make it possible to unload some memory, ... + * + * @return 0 + **/ +extern "C" INT __declspec(dllexport) Unload(VOID) +{ + return 0; +} + +/** + * This function is called by Miranda to initialize the plugin. + * + * @return 0 + **/ +extern "C" INT __declspec(dllexport) Load(PLUGINLINK *link) +{ + INITCOMMONCONTROLSEX ccEx; + + pluginLink = link; + if (link && CoreCheck()) + { + // init common controls + ccEx.dwSize = sizeof(ccEx); + ccEx.dwICC = ICC_WIN95_CLASSES|ICC_DATE_CLASSES; + InitCommonControlsEx(&ccEx); + + ZeroMemory(&myGlobals, sizeof(MGLOBAL)); + + // init miranda's memory interface + if (!mir_getMMI(&mmi) && !mir_getLI(&li) && !mir_getUTFI(&utfi) /*&& mir_getXI(&xi)*/) + { + + // init clist interface + pcli = (CLIST_INTERFACE*)CallService(MS_CLIST_RETRIEVE_INTERFACE, 0, (LPARAM)0); + + // init new miranda timezone interface + mir_getTMI(&tmi); + + // init freeimage interface + INT_PTR result = CALLSERVICE_NOTFOUND; + if(ServiceExists(MS_IMG_GETINTERFACE)) + result = CallService(MS_IMG_GETINTERFACE, FI_IF_VERSION, (LPARAM)&FIP); + + if(FIP == NULL || result != S_OK) { + MessageBoxEx(NULL, TranslateT("Fatal error, image services not found. Flags Module will be disabled."), _T("Error"), MB_OK | MB_ICONERROR | MB_APPLMODAL, 0); + return 1; + } + + if (IsWinVerVistaPlus()) + { + HMODULE hDwmApi = LoadLibraryA("dwmapi.dll"); + if (hDwmApi) + { + dwmIsCompositionEnabled = (pfnDwmIsCompositionEnabled)GetProcAddress(hDwmApi,"DwmIsCompositionEnabled"); + } + } + + // check for dbx_tree + myGlobals.UseDbxTree = ServiceExists("DBT/Entity/GetRoot"); + + // load icon library + IcoLib_LoadModule(); + + SvcFlagsLoadModule(); + tmi.getTimeZoneTime ? SvcTimezoneLoadModule() : SvcTimezoneLoadModule_old(); + SvcContactInfoLoadModule(); + SvcEMailLoadModule(); + SvcRefreshContactInfoLoadModule(); + + CtrlContactLoadModule(); + // load my button class + CtrlButtonLoadModule(); + // initializes the Ex/Import Services + SvcExImport_LoadModule(); + // load the UserInfoPropertySheet module + DlgContactInfoLoadModule(); + + // Anniversary stuff + DlgAnniversaryListLoadModule(); + SvcReminderLoadModule(); + + // Now the module is loaded! Start initializing certain things + ghModulesLoadedHook = HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded); + ghTopToolBarLoaded = HookEvent(ME_TTB_MODULELOADED, OnTopToolBarLoaded); + ghModernToolBarLoaded = HookEvent(ME_TB_MODULELOADED, OnModernToolBarLoaded); + ghShutdownHook = HookEvent(ME_SYSTEM_SHUTDOWN, OnShutdown); + return 0; + } + } + return 1; +} + +/** + * Windows needs it for loading. + * + * @return TRUE + **/ +BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID lpvReserved) +{ + switch (fdwReason) { + case DLL_PROCESS_ATTACH: + ghInst = hinst; + break; + } + return TRUE; +} + -- cgit v1.2.3