diff options
author | Gluzskiy Alexandr <sss123next@list.ru> | 2009-10-13 05:04:06 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss123next@list.ru> | 2009-10-13 05:04:06 +0300 |
commit | 227022d9ed977c75196725502847e0b371e4e879 (patch) | |
tree | 6fe79f5ae836fe4a974db459553eb6b46a1bf8eb /spamfilter/extraimg.c | |
parent | 23d6d3e482927c13294f204b34ce23c6f445e8ac (diff) |
Diffstat (limited to 'spamfilter/extraimg.c')
-rw-r--r-- | spamfilter/extraimg.c | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/spamfilter/extraimg.c b/spamfilter/extraimg.c new file mode 100644 index 0000000..59cd79e --- /dev/null +++ b/spamfilter/extraimg.c @@ -0,0 +1,118 @@ +/*
+
+"Spam Filter"-Plugin for Miranda IM
+
+Copyright 2003-2006 Heiko Herkenrath
+
+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 ("SpamFilter-License.txt"); if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+
+// -- Includes
+#include "common.h"
+
+// -- Variables: Events/Services
+HANDLE hHookExtraListRebuild = NULL;
+HANDLE hHookExtraImageApply = NULL;
+HANDLE hHookDbSettingChanged = NULL;
+
+// -- Variables
+HANDLE hSpammerImage;
+
+
+// -----------------------------------------
+
+
+void SetSpammerIcon(HANDLE hContact, BOOL bShow)
+{
+ IconExtraColumn iec;
+
+ ZeroMemory(&iec, sizeof(iec));
+ iec.cbSize = sizeof(iec);
+ iec.ColumnType = EXTRA_ICON_ADV2;
+ iec.hImage = bShow?hSpammerImage:INVALID_HANDLE_VALUE;
+
+ CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM)hContact, (LPARAM)&iec);
+}
+
+
+static int ExtraImageApply(WPARAM wParam, LPARAM lParam)
+{
+ // Assign extra icon to contact
+ if (DBGetContactSettingByte((HANDLE)wParam, DB_MODULE_NAME, DB_SETTING_ISSPAMMER, (BYTE)FALSE))
+ SetSpammerIcon((HANDLE)wParam, TRUE);
+
+ return 0;
+}
+
+
+static int ExtraImageListRebuild(WPARAM wParam, LPARAM lParam)
+{
+ HANDLE hContact;
+
+ // Add spam icon to image list of clist extra images
+ hSpammerImage = (HANDLE)CallService(MS_CLIST_EXTRA_ADD_ICON, (WPARAM)SkinGetIcon(DB_ICON_ISSPAMMER_SETTING, IDI_DEFAULT, FALSE), 0);
+
+ // Update spammer icons for all contacts in list
+ for (hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); hContact; hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0))
+ ExtraImageApply(wParam, lParam);
+
+ return 0;
+}
+
+
+static int DbSettingChanged(WPARAM wParam, LPARAM lParam)
+{
+ DBCONTACTWRITESETTING* pdcws = (DBCONTACTWRITESETTING*)lParam;
+
+ // Watch DB_SETTING_ISSPAMMER to be in sync with spammer icon
+ if (StrCmpA(pdcws->szModule, DB_MODULE_NAME) == 0)
+ if (StrCmpA(pdcws->szSetting, DB_SETTING_ISSPAMMER) == 0)
+ {
+ BOOL bIsSpammer = (pdcws->value.type==DBVT_DELETED) ? FALSE : (pdcws->value.bVal?TRUE:FALSE);
+ SetSpammerIcon((HANDLE)wParam, bIsSpammer);
+ NotifySpammerStateChanged((HANDLE)wParam, bIsSpammer);
+
+ if (IsWindow(hwndSpammersInfo))
+ PostMessage(hwndSpammersInfo, SFM_REFRESH_SPAMMERS, 0, 0);
+ }
+
+ return 0;
+}
+
+
+// ------------------------------------
+
+
+void InitExtraImg(void)
+{
+ // Enable CList extra image support (in clist clones)
+ if (ServiceExists(MS_CLIST_EXTRA_SET_ICON) && ServiceExists(MS_CLIST_EXTRA_ADD_ICON))
+ {
+ SkinAddNewIcon(DB_ICON_ISSPAMMER_SETTING, TranslateT("Spam Filter"), TranslateT("Spammer Indicator"), IDI_DEFAULT, FALSE);
+
+ hHookExtraListRebuild = HookEvent(ME_CLIST_EXTRA_LIST_REBUILD, ExtraImageListRebuild);
+ hHookExtraImageApply = HookEvent(ME_CLIST_EXTRA_IMAGE_APPLY, ExtraImageApply);
+ hHookDbSettingChanged = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, DbSettingChanged);
+ }
+}
+
+
+void UninitExtraImg(void)
+{
+ if (hHookExtraListRebuild) UnhookEvent(hHookExtraListRebuild);
+ if (hHookExtraImageApply) UnhookEvent(hHookExtraImageApply);
+ if (hHookDbSettingChanged) UnhookEvent(hHookDbSettingChanged);
+}
\ No newline at end of file |