diff options
author | pescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7> | 2011-10-10 01:39:18 +0000 |
---|---|---|
committer | pescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7> | 2011-10-10 01:39:18 +0000 |
commit | e9bf8a6e2d782dc480fb97cb59928c8cfe1dd777 (patch) | |
tree | 12bb8ebaab13ef1476ce9343482796c901ee0130 /Plugins/smr/smr.cpp | |
parent | f574681d9b6fee0d05319af1831620e48cc8492f (diff) |
Moved files from BerliOS
git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@229 c086bb3d-8645-0410-b8da-73a8550f86e7
Diffstat (limited to 'Plugins/smr/smr.cpp')
-rw-r--r-- | Plugins/smr/smr.cpp | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/Plugins/smr/smr.cpp b/Plugins/smr/smr.cpp new file mode 100644 index 0000000..94f4a9e --- /dev/null +++ b/Plugins/smr/smr.cpp @@ -0,0 +1,276 @@ +/*
+Copyright (C) 2006 Ricardo Pescuma Domenecci
+
+This is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this file; see the file license.txt. If
+not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+*/
+
+
+#include "commons.h"
+
+
+// Prototypes ///////////////////////////////////////////////////////////////////////////
+
+
+PLUGININFOEX pluginInfo={
+ sizeof(PLUGININFOEX),
+ "Status Message Retriever",
+ PLUGIN_MAKE_VERSION(1,0,0,7),
+ "Retrieve status message based on timer / status change",
+ "Ricardo Pescuma Domenecci, Tomasz Słotwiński",
+ "",
+ "© 2007 Ricardo Pescuma Domenecci, Tomasz Słotwiński",
+ "http://pescuma.mirandaim.ru/miranda/smr",
+ 0,
+ 0, //doesn't replace anything built-in
+ { 0x800a5c24, 0x737b, 0x499f, { 0x96, 0xa2, 0x40, 0x46, 0xda, 0xa8, 0x41, 0xb1 } } // {800A5C24-737B-499f-96A2-4046DAA841B1}
+};
+
+
+HINSTANCE hInst;
+PLUGINLINK *pluginLink;
+
+HANDLE hEnableMenu = NULL;
+HANDLE hDisableMenu = NULL;
+HANDLE hModulesLoaded = NULL;
+HANDLE hPreBuildCMenu = NULL;
+
+int ModulesLoaded(WPARAM wParam, LPARAM lParam);
+
+int PreBuildContactMenu(WPARAM wParam,LPARAM lParam);
+
+int EnableContactMsgRetrieval(WPARAM wParam,LPARAM lParam);
+int DisableContactMsgRetrieval(WPARAM wParam,LPARAM lParam);
+int MsgRetrievalEnabledForUser(WPARAM wParam, LPARAM lParam);
+int MsgRetrievalEnabledForProtocol(WPARAM wParam, LPARAM lParam);
+
+
+// Functions ////////////////////////////////////////////////////////////////////////////
+
+
+extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ hInst = hinstDLL;
+ return TRUE;
+}
+
+
+extern "C" __declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+{
+ pluginInfo.cbSize = sizeof(PLUGININFO);
+ return (PLUGININFO*) &pluginInfo;
+}
+
+
+extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ pluginInfo.cbSize = sizeof(PLUGININFOEX);
+ return &pluginInfo;
+}
+
+
+static const MUUID interfaces[] = { MIID_STATUS_MESSAGE_RETRIEVER, MIID_LAST };
+extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
+
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link) {
+ pluginLink = link;
+
+ init_mir_malloc();
+ init_list_interface();
+
+ CreateServiceFunction(MS_SMR_DISABLE_CONTACT, DisableContactMsgRetrieval);
+ CreateServiceFunction(MS_SMR_ENABLE_CONTACT, EnableContactMsgRetrieval);
+ CreateServiceFunction(MS_SMR_ENABLED_FOR_PROTOCOL, MsgRetrievalEnabledForProtocol);
+ CreateServiceFunction(MS_SMR_ENABLED_FOR_CONTACT, MsgRetrievalEnabledForUser);
+
+ // Add menu item to enable/disable status message check
+ CLISTMENUITEM mi = {0};
+ mi.cbSize = sizeof(mi);
+ mi.flags = 0;
+ mi.pszPopupName = NULL;
+
+ mi.position = 1000100020;
+ mi.ptszName = TranslateT("Disable Status Message Check");
+ mi.pszService = MS_SMR_DISABLE_CONTACT;
+ hDisableMenu = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi);
+
+ mi.position = 1000100020;
+ mi.ptszName = TranslateT("Enable Status Message Check");
+ mi.pszService = MS_SMR_ENABLE_CONTACT;
+ hEnableMenu = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM)&mi);
+
+ // hooks
+ hModulesLoaded = HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
+
+ // prebuild contact menu
+ hPreBuildCMenu = HookEvent(ME_CLIST_PREBUILDCONTACTMENU, PreBuildContactMenu);
+
+ return 0;
+}
+
+extern "C" int __declspec(dllexport) Unload(void)
+{
+ FreeStatus();
+ FreeStatusMsgs();
+ FreePoll();
+ DeInitOptions();
+
+ UnhookEvent(hModulesLoaded);
+ UnhookEvent(hPreBuildCMenu);
+ return 0;
+}
+
+
+// Called when all the modules are loaded
+int ModulesLoaded(WPARAM wParam, LPARAM lParam)
+{
+ InitPoll();
+ InitStatusMsgs();
+ InitStatus();
+ InitOptions();
+
+ // add our modules to the KnownModules list
+ CallService("DBEditorpp/RegisterSingleModule", (WPARAM) MODULE_NAME, 0);
+
+ // updater plugin support
+ if(ServiceExists(MS_UPDATE_REGISTER))
+ {
+ Update upd = {0};
+ char szCurrentVersion[30];
+
+ upd.cbSize = sizeof(upd);
+ upd.szComponentName = pluginInfo.shortName;
+
+ upd.szUpdateURL = UPDATER_AUTOREGISTER;
+
+ upd.szBetaVersionURL = "http://pescuma.org/miranda/smr_version.txt";
+ upd.szBetaChangelogURL = "http://pescuma.org/miranda/smr#Changelog";
+ upd.pbBetaVersionPrefix = (BYTE *)"Status Message Retriever ";
+ upd.cpbBetaVersionPrefix = strlen((char *)upd.pbBetaVersionPrefix);
+ upd.szBetaUpdateURL = "http://pescuma.org/miranda/smr.zip";
+
+ upd.pbVersion = (BYTE *)CreateVersionStringPlugin((PLUGININFO*) &pluginInfo, szCurrentVersion);
+ upd.cpbVersion = strlen((char *)upd.pbVersion);
+
+ CallService(MS_UPDATE_REGISTER, 0, (LPARAM)&upd);
+ }
+
+ return 0;
+}
+
+
+int EnableContactMsgRetrieval(WPARAM wParam,LPARAM lParam)
+{
+ HANDLE hContact = (HANDLE) wParam;
+
+ if (hContact != NULL)
+ DBWriteContactSettingByte(hContact, MODULE_NAME, OPT_CONTACT_GETMSG, TRUE);
+
+ return 0;
+}
+
+
+int DisableContactMsgRetrieval(WPARAM wParam,LPARAM lParam)
+{
+ HANDLE hContact = (HANDLE) wParam;
+
+ if (hContact != NULL)
+ DBWriteContactSettingByte(hContact, MODULE_NAME, OPT_CONTACT_GETMSG, FALSE);
+
+ return 0;
+}
+
+
+int PreBuildContactMenu(WPARAM wParam,LPARAM lParam)
+{
+ HANDLE hContact = (HANDLE) wParam;
+ char *proto = (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
+
+ if (proto == NULL || !PollCheckProtocol(proto))
+ {
+ // Hide both
+
+ CLISTMENUITEM clmi = {0};
+ clmi.cbSize = sizeof(clmi);
+ clmi.flags = CMIM_FLAGS | CMIF_HIDDEN;
+
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM) hEnableMenu, (LPARAM)&clmi);
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM) hDisableMenu, (LPARAM) &clmi);
+ }
+ else
+ {
+ // See what to show
+
+ CLISTMENUITEM clmi = {0};
+ clmi.cbSize = sizeof(clmi);
+
+ if (DBGetContactSettingByte(hContact, MODULE_NAME, OPT_CONTACT_GETMSG, TRUE))
+ {
+ clmi.flags = CMIM_FLAGS | CMIF_HIDDEN;
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM) hEnableMenu, (LPARAM) &clmi);
+
+ clmi.flags = CMIM_FLAGS | CMIM_ICON;
+ clmi.hIcon = LoadSkinnedProtoIcon(proto, ID_STATUS_OFFLINE);
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM) hDisableMenu, (LPARAM) &clmi);
+ }
+ else
+ {
+ clmi.flags = CMIM_FLAGS | CMIF_HIDDEN;
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM) hDisableMenu, (LPARAM) &clmi);
+
+ clmi.flags = CMIM_FLAGS | CMIM_ICON;
+ clmi.hIcon = LoadSkinnedProtoIcon(proto, ID_STATUS_ONLINE);
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM) hEnableMenu, (LPARAM) &clmi);
+ }
+ }
+
+ return 0;
+}
+
+
+/*
+Return TRUE is smr is enabled for this contact and its protocol (smr can be disabled per user,
+if protocol is enabled)
+If is enabled, status message is kept under CList\StatusMsg db key in user data
+
+wParam: hContact
+lParam: ignored
+*/
+int MsgRetrievalEnabledForUser(WPARAM wParam, LPARAM lParam)
+{
+ char *proto = (char*) CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
+
+ return proto != NULL && PollCheckProtocol(proto) && PollCheckContact((HANDLE) wParam);
+}
+
+
+/*
+Return TRUE is smr is enabled for this protocol
+If is enabled, status message is kept under CList\StatusMsg db key in user data
+
+wParam: protocol name
+lParam: ignored
+*/
+int MsgRetrievalEnabledForProtocol(WPARAM wParam, LPARAM lParam)
+{
+ char *proto = (char *) wParam;
+
+ return proto != NULL && PollCheckProtocol(proto);
+}
+
|