summaryrefslogtreecommitdiff
path: root/plugins/UserInfoEx/src/init.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/UserInfoEx/src/init.cpp')
-rw-r--r--plugins/UserInfoEx/src/init.cpp315
1 files changed, 315 insertions, 0 deletions
diff --git a/plugins/UserInfoEx/src/init.cpp b/plugins/UserInfoEx/src/init.cpp
new file mode 100644
index 0000000000..3b7b0b8249
--- /dev/null
+++ b/plugins/UserInfoEx/src/init.cpp
@@ -0,0 +1,315 @@
+/*
+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 "version.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,
+ MIID_UIUSERINFOEX
+};
+
+static HANDLE ghModulesLoadedHook = NULL;
+static HANDLE ghTopToolBarLoaded = NULL;
+static HANDLE ghModernToolBarLoaded = NULL;
+static HANDLE ghShutdownHook = NULL;
+static HANDLE ghPrebuildStatusMenu = NULL;
+int hLangpack;
+
+/*
+============================================================================================
+ 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)
+{
+ DlgAnniversaryListOnTopToolBarLoaded();
+ SvcReminderOnTopToolBarLoaded();
+ 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)
+{
+ 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
+ INT_PTR 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);
+
+ // 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);
+ 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);
+
+
+ bOk *= (GetVersion() & 0x80000000) == 0;
+ bOk *= strstr(szVer, "unicode") != 0;
+
+
+ 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)
+{
+ myGlobals.mirandaVersion = mirandaVersion;
+ return &pluginInfo;
+}
+
+/**
+ * This function returns the provided interfaces.
+ *
+ * @return array of interfaces
+ **/
+
+extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = {
+ 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
+};
+
+/**
+ * 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(void)
+{
+ mir_getLP(&pluginInfo);
+ if ( !CoreCheck())
+ return 1;
+
+ // init common controls
+ INITCOMMONCONTROLSEX ccEx;
+ ccEx.dwSize = sizeof(ccEx);
+ ccEx.dwICC = ICC_WIN95_CLASSES|ICC_DATE_CLASSES;
+ InitCommonControlsEx(&ccEx);
+
+ ZeroMemory(&myGlobals, sizeof(MGLOBAL));
+
+ // 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);
+ ghShutdownHook = HookEvent(ME_SYSTEM_SHUTDOWN, OnShutdown);
+ return 0;
+}
+
+/**
+ * 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;
+}