From ff7f3e307695442889801f3bd9afbe14075da6d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Fri, 9 Nov 2012 13:58:09 +0000 Subject: Added MobileState plugin. git-svn-id: http://svn.miranda-ng.org/main/trunk@2256 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MobileState/src/commonheaders.h | 42 +++++++++ plugins/MobileState/src/main.cpp | 150 ++++++++++++++++++++++++++++++++ plugins/MobileState/src/resource.h | 16 ++++ plugins/MobileState/src/version.h | 20 +++++ 4 files changed, 228 insertions(+) create mode 100644 plugins/MobileState/src/commonheaders.h create mode 100644 plugins/MobileState/src/main.cpp create mode 100644 plugins/MobileState/src/resource.h create mode 100644 plugins/MobileState/src/version.h (limited to 'plugins/MobileState/src') diff --git a/plugins/MobileState/src/commonheaders.h b/plugins/MobileState/src/commonheaders.h new file mode 100644 index 0000000000..811c50f07f --- /dev/null +++ b/plugins/MobileState/src/commonheaders.h @@ -0,0 +1,42 @@ +/* + Mobile State plugin for Miranda NG (www.miranda-ng.org) + (c) 2012 by Robert Pösel + + 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 +*/ + +#ifndef COMMHEADERS_H +#define COMMHEADERS_H + +#define MIRANDA_VER 0x0A00 + +#include + +// Miranda API headers +#include +#include +#include +#include +#include +#include + +#include "resource.h" +#include "Version.h" + +#define MODULENAME "MobileState" + +extern HINSTANCE g_hInst; + +#endif //COMMHEADERS_H diff --git a/plugins/MobileState/src/main.cpp b/plugins/MobileState/src/main.cpp new file mode 100644 index 0000000000..0ea50726ad --- /dev/null +++ b/plugins/MobileState/src/main.cpp @@ -0,0 +1,150 @@ +/* + Mobile State plugin for Miranda NG (www.miranda-ng.org) + (c) 2012 by Robert Pösel + + 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 +*/ + +#include "commonheaders.h" + +HINSTANCE g_hInst; +static HANDLE hHookModulesLoaded = NULL; +static HANDLE hHookExtraIconsApply = NULL, hContactSettingChanged = NULL; +HANDLE hExtraIcon = NULL; +int hLangpack; + +PLUGININFOEX pluginInfo = { + sizeof(PLUGININFOEX), + __PLUGIN_NAME, + PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM), + __DESCRIPTION, + __AUTHOR, + __AUTHOREMAIL, + __COPYRIGHT, + __AUTHORWEB, + UNICODE_AWARE, + // {F0BA32D0-CD07-4A9C-926B-5A1FF21C3C10} + {0xf0ba32d0, 0xcd07, 0x4a9c, { 0x92, 0x6b, 0x5a, 0x1f, 0xf2, 0x1c, 0x3c, 0x10 }} +}; + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + g_hInst = hinstDLL; + return TRUE; +} + +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + return &pluginInfo; +} + +bool hasMobileClient(HANDLE hContact, LPARAM lParam) +{ + char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0); + bool ret = false; + + DBVARIANT dbv; + if (!DBGetContactSettingTString(hContact, proto, "MirVer", &dbv)) + { + if (_tcsstr(dbv.ptszVal, _T("Android")) || _tcsstr(dbv.ptszVal, _T("android")) || _tcsstr(dbv.ptszVal, _T("Mobile")) || _tcsstr(dbv.ptszVal, _T("mobile"))) + ret = true; + + DBFreeVariant(&dbv); + } + + return ret; +} + +int ExtraIconsApply(WPARAM wParam, LPARAM lParam) +{ + if (wParam == NULL) + return 0; + + const char *icon = hasMobileClient((HANDLE) wParam, lParam) ? "mobile_icon" : NULL; + + ExtraIcon_SetIcon(hExtraIcon, (HANDLE)wParam, icon); + return 0; +} + +int onContactSettingChanged(WPARAM wParam,LPARAM lParam) +{ + DBCONTACTWRITESETTING *cws=(DBCONTACTWRITESETTING*)lParam; + char *proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0); + if (!proto) + return 0; + + if (!lstrcmpA(cws->szModule,proto)) + if (!lstrcmpA(cws->szSetting, "MirVer")) + ExtraIconsApply(wParam, 1); + + return 0; +} + +int onModulesLoaded(WPARAM wParam,LPARAM lParam) +{ + // IcoLib support + TCHAR szFile[MAX_PATH]; + GetModuleFileName(g_hInst, szFile, MAX_PATH); + + SKINICONDESC sid = {0}; + sid.cbSize = sizeof(sid); + sid.flags = SIDF_ALL_TCHAR; + + sid.ptszSection = _T("Mobile State"); + sid.ptszDefaultFile = szFile; + + sid.ptszDescription = _T("Mobile State"); + sid.pszName = "mobile_icon"; + sid.iDefaultIndex = -IDI_MOBILE; + Skin_AddIcon(&sid); + + // extra icons + hExtraIcon = ExtraIcon_Register("mobilestate", "Mobile State", "mobile_icon"); + + // Set initial value for all contacts + HANDLE hContact = db_find_first(); + while (hContact != NULL) { + ExtraIconsApply((WPARAM)hContact, 1); + hContact = db_find_next(hContact); + } + + return 0; +} + +int onSystemOKToExit(WPARAM wParam,LPARAM lParam) +{ + + return 0; +} + +extern "C" int __declspec(dllexport) Load(void) +{ + mir_getLP(&pluginInfo); + + hHookModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, onModulesLoaded); + hContactSettingChanged = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, onContactSettingChanged); + hHookExtraIconsApply = HookEvent(ME_CLIST_EXTRA_IMAGE_APPLY, ExtraIconsApply); + + return 0; +} + +extern "C" int __declspec(dllexport) Unload(void) +{ + UnhookEvent(hHookModulesLoaded); + UnhookEvent(hHookExtraIconsApply); + UnhookEvent(hContactSettingChanged); + + return 0; +} diff --git a/plugins/MobileState/src/resource.h b/plugins/MobileState/src/resource.h new file mode 100644 index 0000000000..23a3832222 --- /dev/null +++ b/plugins/MobileState/src/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Z:\Myranda\trunk\plugins\MobileState\res\mobilestate.rc +// +#define IDI_MOBILE 105 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1010 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/plugins/MobileState/src/version.h b/plugins/MobileState/src/version.h new file mode 100644 index 0000000000..06b775380e --- /dev/null +++ b/plugins/MobileState/src/version.h @@ -0,0 +1,20 @@ +#define __MAJOR_VERSION 0 +#define __MINOR_VERSION 0 +#define __RELEASE_NUM 1 +#define __BUILD_NUM 0 + +#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM +#define __FILEVERSION_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM + +#define __STRINGIFY_IMPL(x) #x +#define __STRINGIFY(x) __STRINGIFY_IMPL(x) +#define __VERSION_STRING __STRINGIFY(__FILEVERSION_DOTS) + +#define __PLUGIN_NAME "Mobile State" +#define __INTERNAL_NAME "MobileState" +#define __FILENAME "MobileState.dll" +#define __DESCRIPTION "Plugin shows mobile icon in contact list next to contacts which are using mobile client." +#define __AUTHOR "Robert Pösel" +#define __AUTHOREMAIL "robyer@seznam.cz" +#define __AUTHORWEB "http://miranda-ng.org/" +#define __COPYRIGHT "© 2012 Robert Pösel" -- cgit v1.2.3