From c857d7ad0ef6045ea344143825f23fa35157bf95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Wed, 23 May 2012 10:45:48 +0000 Subject: Updated MenuItemEx (changes from Robyer Mod) git-svn-id: http://svn.miranda-ng.org/main/trunk@144 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MenuItemEx/docs/menuex_changelog.txt | 7 +++ plugins/MenuItemEx/main.c | 93 +++++++++++++++++++++------- plugins/MenuItemEx/menuex.h | 2 + plugins/MenuItemEx/menuex.rc | 62 +++++++------------ plugins/MenuItemEx/options.c | 16 ++++- plugins/MenuItemEx/resource.h | 1 + plugins/MenuItemEx/version.h | 10 +-- 7 files changed, 123 insertions(+), 68 deletions(-) (limited to 'plugins') diff --git a/plugins/MenuItemEx/docs/menuex_changelog.txt b/plugins/MenuItemEx/docs/menuex_changelog.txt index e7932a334d..640fbb80ce 100644 --- a/plugins/MenuItemEx/docs/menuex_changelog.txt +++ b/plugins/MenuItemEx/docs/menuex_changelog.txt @@ -1,3 +1,10 @@ +Version 1.3.0.9 + +[+] Refresh contact info when contact comes online +[+] Ability to hide contact from contact list when 'Ignore All' +[+] Saving lastseen datetime of contact (as DWORD in \LogoffTS) (reset when offline) +[+] Saving logon time (as DWORD in \LogonTS) (reset when online) + Verison 1.3.0.8 [+] Added ability to copy unicode status message diff --git a/plugins/MenuItemEx/main.c b/plugins/MenuItemEx/main.c index df21a89fce..30e07e0511 100644 --- a/plugins/MenuItemEx/main.c +++ b/plugins/MenuItemEx/main.c @@ -24,7 +24,7 @@ struct MM_INTERFACE mmi; HINSTANCE hinstance; HANDLE hmenuVis,hmenuOff,hmenuHide,hmenuIgnore,hmenuProto,hmenuAdded,hmenuAuthReq; HANDLE hmenuCopyID,hmenuRecvFiles,hmenuStatusMsg,hmenuCopyIP,hmenuCopyMirVer; -static HANDLE hIgnoreItem[9], hProtoItem[MAX_PROTOS], hHooks[7], hServices[12]; +static HANDLE hIgnoreItem[9], hProtoItem[MAX_PROTOS], hHooks[8], hServices[12]; HICON hIcon[5]; BOOL bMetaContacts, bMir_08; PROTOACCOUNT **accs; @@ -918,6 +918,11 @@ int isIgnored(HANDLE hContact, int type) INT_PTR onIgnore(WPARAM wparam,LPARAM lparam) { + if (DBGetContactSettingByte(NULL, VISPLG, "ignorehide", 0) && (lparam == IGNOREEVENT_ALL)) { + DBWriteContactSettingByte((HANDLE)wparam, "CList", "Hidden", (isIgnored((HANDLE)wparam, lparam) ? (byte)0 : (byte)1)); + CallService(MS_CLUI_SORTLIST, 0, 0); + } + CallService(isIgnored((HANDLE)wparam, lparam) ? MS_IGNORE_UNIGNORE : MS_IGNORE_IGNORE, wparam, lparam); return 0; } @@ -1139,25 +1144,70 @@ static int TabsrmmButtonsInit(WPARAM wParam, LPARAM lParam) static void TabsrmmButtonsModify(HANDLE hContact) { if (!DirectoryExists(hContact)) - { - BBButton bbd = {0}; - bbd.cbSize = sizeof(BBButton); - bbd.dwButtonID = 0; - bbd.pszModuleName = MODULENAME; - bbd.bbbFlags = BBSF_DISABLED | BBSF_HIDDEN; - CallService(MS_BB_SETBUTTONSTATE, (WPARAM)hContact, (LPARAM)&bbd); - } + { + BBButton bbd = {0}; + bbd.cbSize = sizeof(BBButton); + bbd.dwButtonID = 0; + bbd.pszModuleName = MODULENAME; + bbd.bbbFlags = BBSF_DISABLED | BBSF_HIDDEN; + CallService(MS_BB_SETBUTTONSTATE, (WPARAM)hContact, (LPARAM)&bbd); + } } static int ContactWindowOpen(WPARAM wparam,LPARAM lParam) { - MessageWindowEventData *MWeventdata = (MessageWindowEventData*)lParam; + MessageWindowEventData *MWeventdata = (MessageWindowEventData*)lParam; + + if(MWeventdata->uType == MSG_WINDOW_EVT_OPENING && MWeventdata->hContact) + { + TabsrmmButtonsModify(MWeventdata->hContact); + } + return 0; +} + +static int ContactSettingChanged( WPARAM wParam, LPARAM lParam ) +{ // NSN + DBCONTACTWRITESETTING *cws = ( DBCONTACTWRITESETTING* )lParam; + WORD newStatus = 0, oldStatus = 0; + DWORD dwStatuses = 0; + time_t tCurrentTime; + char *lpzProto; + + if ( ( HANDLE )wParam == NULL || lstrcmpA( cws->szSetting, "Status" ) ) + return 0; + newStatus = cws->value.wVal; + oldStatus = DBGetContactSettingWord((HANDLE)wParam,"UserOnline","OldStatus2",ID_STATUS_OFFLINE ); + if (oldStatus == newStatus) + return 0; - if(MWeventdata->uType == MSG_WINDOW_EVT_OPENING && MWeventdata->hContact) - { - TabsrmmButtonsModify(MWeventdata->hContact); - } - return 0; + tCurrentTime = time( NULL ); + lpzProto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, ( WPARAM )wParam, 0); + + if (oldStatus == ID_STATUS_OFFLINE) + { + // set online timestamp for this contact, only when not set already + if (!DBGetContactSettingDword( ( HANDLE )wParam, lpzProto, "LogonTS", FALSE)) + DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LogonTS", ( DWORD )tCurrentTime); + + // TODO: dont reset logoff timestamp? + DBDeleteContactSetting( ( HANDLE )wParam, lpzProto, "LogoffTS"); + + // TESTING: updating user's details + CallContactService( ( HANDLE )wParam, PSS_GETINFO, 0, 0 ); + } + if (newStatus == ID_STATUS_OFFLINE) + { + // set offline timestamp for this contact + DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LogoffTS", ( DWORD )tCurrentTime); + // reset logon timestamp + DBDeleteContactSetting( ( HANDLE )wParam, lpzProto, "LogonTS"); + + // set last status for this contact + DBWriteContactSettingDword( ( HANDLE )wParam, lpzProto, "LastStatus", ( DWORD )oldStatus); + } + DBWriteContactSettingWord( ( HANDLE )wParam, "UserOnline", "OldStatus2", newStatus); + + return 0; } // called when all modules are loaded @@ -1287,13 +1337,14 @@ static int PluginInit(WPARAM wparam,LPARAM lparam) hHooks[0] = HookEvent(ME_CLIST_PREBUILDCONTACTMENU,BuildMenu); hHooks[1] = HookEvent(ME_OPT_INITIALISE,OptionsInit); + hHooks[2] = HookEvent(ME_DB_CONTACT_SETTINGCHANGED,ContactSettingChanged); if (bMir_08) - hHooks[2] = HookEvent(ME_PROTO_ACCLISTCHANGED, EnumProtoSubmenu); - hHooks[3] = HookEvent(ME_MSG_TOOLBARLOADED, TabsrmmButtonsInit); - if (hHooks[3]) + hHooks[3] = HookEvent(ME_PROTO_ACCLISTCHANGED, EnumProtoSubmenu); + hHooks[4] = HookEvent(ME_MSG_TOOLBARLOADED, TabsrmmButtonsInit); + if (hHooks[4]) { - hHooks[4] = HookEvent(ME_MSG_BUTTONPRESSED, TabsrmmButtonPressed); - hHooks[5] = HookEvent(ME_MSG_WINDOWEVENT,ContactWindowOpen); + hHooks[5] = HookEvent(ME_MSG_BUTTONPRESSED, TabsrmmButtonPressed); + hHooks[6] = HookEvent(ME_MSG_WINDOWEVENT,ContactWindowOpen); } // updater plugin support @@ -1318,7 +1369,7 @@ __declspec(dllexport)int Load(PLUGINLINK *link) pluginLink=link; mir_getMMI( &mmi ); mir_getLP(&pluginInfoEx); - hHooks[6] = HookEvent(ME_SYSTEM_MODULESLOADED,PluginInit); + hHooks[7] = HookEvent(ME_SYSTEM_MODULESLOADED,PluginInit); return 0; } diff --git a/plugins/MenuItemEx/menuex.h b/plugins/MenuItemEx/menuex.h index db5cdfc428..73428fb68d 100644 --- a/plugins/MenuItemEx/menuex.h +++ b/plugins/MenuItemEx/menuex.h @@ -10,6 +10,7 @@ #include #include "newpluginapi.h" #include "win2k.h" +#include "time.h" #include "m_system.h" #include "m_utils.h" #include "m_options.h" @@ -65,6 +66,7 @@ int OptionsInit(WPARAM,LPARAM); #define VF_SAI 0x2000 #define VF_TRIMID 0x4000 #define VF_CMV 0x8000 +#define VF_IGNH 0x10000 #define CTRL_IS_PRESSED (GetAsyncKeyState(VK_CONTROL)&0x8000) diff --git a/plugins/MenuItemEx/menuex.rc b/plugins/MenuItemEx/menuex.rc index 2609320a22..be750a05b7 100644 --- a/plugins/MenuItemEx/menuex.rc +++ b/plugins/MenuItemEx/menuex.rc @@ -18,7 +18,7 @@ #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) #ifdef _WIN32 LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#pragma code_page(1251) +#pragma code_page(1250) #endif //_WIN32 ///////////////////////////////////////////////////////////////////////////// @@ -49,15 +49,13 @@ IDI_ICON13 ICON "icons\\CopyMirVer.ico" // IDD_AUTHREQ DIALOGEX 0, 0, 186, 95 -STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | - WS_VISIBLE | WS_CAPTION +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Enter an authorization request" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN DEFPUSHBUTTON "&Send",IDOK,34,74,50,14 PUSHBUTTON "&Cancel",IDCANCEL,98,74,50,14 - EDITTEXT IDC_REASON,7,7,172,59,ES_MULTILINE | ES_AUTOVSCROLL | - ES_WANTRETURN + EDITTEXT IDC_REASON,7,7,172,59,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN END IDD_OPTIONS DIALOGEX 0, 0, 280, 183 @@ -66,41 +64,25 @@ EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN GROUPBOX "Shown menu items",IDC_STATIC,7,7,266,180 - CONTROL "Visibility",IDC_VIS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,16,18,77,10 - CONTROL "Show alpha icons",IDC_SHOWALPHAICONS,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,162,18,104,10 - CONTROL "Hide from list",IDC_HIDE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,16,30,77,10 - CONTROL "Ignore",IDC_IGNORE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,16,42,159,10 - CONTROL "Copy to Account (Ctrl+click for move to Account)", - IDC_PROTOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,54, - 192,10 - CONTROL "Send 'You were added'",IDC_ADDED,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,16,66,158,10 - CONTROL "Request Authorization",IDC_AUTHREQ,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,16,78,157,10 - CONTROL "Browse Received Files",IDC_RECVFILES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,16,90,158,10 - CONTROL "Copy IP",IDC_COPYIP,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,16,102,157,10 - CONTROL "Copy MirVer",IDC_COPYMIRVER,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,16,114,157,10 - CONTROL "Copy Status Message",IDC_STATUSMSG,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,16,126,144,10 - CONTROL "Add item name",IDC_SMNAME,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,162,126,104,10 - CONTROL "Copy ID",IDC_COPYID,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,16,138,76,10 - CONTROL "Add protocol name",IDC_COPYIDNAME,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,162,138,104,10 - CONTROL "Show ID in menu item",IDC_SHOWID,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,25,150,132,10 - CONTROL "Trim too long ID",IDC_TRIMID,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,162,150,104,10 - LTEXT "* Use Ctrl+click to see popup with the copied text", - IDC_HINT1,15,164,249,18 + CONTROL "Visibility",IDC_VIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,18,77,10 + CONTROL "Show alpha icons",IDC_SHOWALPHAICONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,18,104,10 + CONTROL "Hide from list",IDC_HIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,30,77,10 + CONTROL "Ignore",IDC_IGNORE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,42,140,10 + CONTROL "Copy to Account (Ctrl+click for move to Account)",IDC_PROTOS, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,54,192,10 + CONTROL "Send 'You were added'",IDC_ADDED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,66,158,10 + CONTROL "Request Authorization",IDC_AUTHREQ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,78,157,10 + CONTROL "Browse Received Files",IDC_RECVFILES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,90,158,10 + CONTROL "Copy IP",IDC_COPYIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,102,157,10 + CONTROL "Copy MirVer",IDC_COPYMIRVER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,114,157,10 + CONTROL "Copy Status Message",IDC_STATUSMSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,126,144,10 + CONTROL "Add item name",IDC_SMNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,126,104,10 + CONTROL "Copy ID",IDC_COPYID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,138,76,10 + CONTROL "Add protocol name",IDC_COPYIDNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,138,104,10 + CONTROL "Show ID in menu item",IDC_SHOWID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,25,150,132,10 + CONTROL "Trim too long ID",IDC_TRIMID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,150,104,10 + LTEXT "* Use Ctrl+click to see popup with the copied text",IDC_HINT1,15,164,249,18 + CONTROL "Hide contact on 'Ignore all'",IDC_IGNOREHIDE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,42,104,10 END diff --git a/plugins/MenuItemEx/options.c b/plugins/MenuItemEx/options.c index 38aff12beb..ca14de03e8 100644 --- a/plugins/MenuItemEx/options.c +++ b/plugins/MenuItemEx/options.c @@ -16,6 +16,7 @@ static const checkboxes[]={ { IDC_SHOWALPHAICONS, VF_SAI }, { IDC_HIDE, VF_HFL }, { IDC_IGNORE, VF_IGN }, + { IDC_IGNOREHIDE, VF_IGNH }, { IDC_PROTOS, VF_PROTO }, { IDC_ADDED, VF_ADD }, { IDC_AUTHREQ, VF_REQ }, @@ -40,7 +41,10 @@ INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) for (i = 0; i < SIZEOF(checkboxes); i++) { - CheckDlgButton(hdlg, checkboxes[i].idc, (flags & checkboxes[i].flag) ? BST_CHECKED : BST_UNCHECKED); + if (checkboxes[i].flag == VF_IGNH) + CheckDlgButton(hdlg, checkboxes[i].idc, (DBGetContactSettingByte(NULL, VISPLG, "ignorehide", 0)) ? BST_CHECKED : BST_UNCHECKED); + else + CheckDlgButton(hdlg, checkboxes[i].idc, (flags & checkboxes[i].flag) ? BST_CHECKED : BST_UNCHECKED); } if (ServiceExists(MS_POPUP_ADDPOPUP)) @@ -65,6 +69,8 @@ INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) EnableWindow(GetDlgItem(hdlg,IDC_SHOWALPHAICONS), IsDlgButtonChecked(hdlg,IDC_VIS) == BST_CHECKED); + EnableWindow(GetDlgItem(hdlg,IDC_IGNOREHIDE), + IsDlgButtonChecked(hdlg,IDC_IGNORE) == BST_CHECKED); EnableWindow(GetDlgItem(hdlg,IDC_COPYIDNAME), IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED); EnableWindow(GetDlgItem(hdlg,IDC_SHOWID), @@ -80,14 +86,19 @@ INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) case PSN_APPLY: { WORD mod_flags=0; + int ignh=0; for (i = 0; i < SIZEOF(checkboxes); i++) { - mod_flags |= IsDlgButtonChecked(hdlg, checkboxes[i].idc) ? checkboxes[i].flag : 0; + if (checkboxes[i].flag == VF_IGNH) + ignh = IsDlgButtonChecked(hdlg, checkboxes[i].idc); + else + mod_flags |= IsDlgButtonChecked(hdlg, checkboxes[i].idc) ? checkboxes[i].flag : 0; } //DBDeleteContactSetting(NULL,VISPLG,"flags"); DBWriteContactSettingWord(NULL,VISPLG,"flags",mod_flags); + DBWriteContactSettingByte(NULL,VISPLG,"ignorehide",ignh); return 1; } @@ -98,6 +109,7 @@ INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam) if(HIWORD(wparam)==BN_CLICKED && GetFocus()==(HWND)lparam) { SendMessage(GetParent(hdlg),PSM_CHANGED,0,0); if (LOWORD(wparam) == IDC_VIS || + LOWORD(wparam) == IDC_IGNORE || LOWORD(wparam) == IDC_COPYID || LOWORD(wparam) == IDC_STATUSMSG || LOWORD(wparam) == IDC_SHOWID) { diff --git a/plugins/MenuItemEx/resource.h b/plugins/MenuItemEx/resource.h index c2f0ffea16..888d5d46ab 100644 --- a/plugins/MenuItemEx/resource.h +++ b/plugins/MenuItemEx/resource.h @@ -36,6 +36,7 @@ #define IDC_HINT1 1016 #define IDC_SHOWID 1017 #define IDC_TRIMID 1018 +#define IDC_IGNOREHIDE 1019 #define IDC_STATIC -1 // Next default values for new objects diff --git a/plugins/MenuItemEx/version.h b/plugins/MenuItemEx/version.h index 12596016db..b2860e5ad4 100644 --- a/plugins/MenuItemEx/version.h +++ b/plugins/MenuItemEx/version.h @@ -1,5 +1,5 @@ -#define __FILEVERSION_STRING 1,3,0,8 -#define __VERSION_STRING "1.3.0.8" +#define __FILEVERSION_STRING 1,3,0,9 +#define __VERSION_STRING "1.3.0.9" #define __VERSION_DWORD 0x01030008 #if defined (_WIN64) @@ -19,9 +19,9 @@ #define __WEB "http://addons.miranda-im.org/details.php?action=viewfile&id=" #define __DESC "Adds some useful options to a contacts menu." -#define __AUTHORS "Heiko Schillinger, Baloo, Billy_Bons" -#define __EMAIL "micron@nexgo.de, baloo@bk.ru, tatarinov.sergey@gmail.com" -#define __COPYRIGHTS "© 2001-03 Heiko Schillinger, © 2006-08 Baloo, © 2009-10 Billy_Bons" +#define __AUTHORS "Heiko Schillinger, Baloo, Billy_Bons, Robert Posel" +#define __EMAIL "micron@nexgo.de, baloo@bk.ru, tatarinov.sergey@gmail.com, robyer@seznam.cz" +#define __COPYRIGHTS "© 2001-03 Heiko Schillinger, © 2006-08 Baloo, © 2009-10 Billy_Bons, © 2011-12 Robert Posel" #ifdef _UNICODE // {b1902a52-9114-4d7e-ac2e-b3a52e01d574} -- cgit v1.2.3