summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2020-06-29 18:03:10 +0300
committerGeorge Hazan <ghazan@miranda.im>2020-06-29 18:03:10 +0300
commit8b654ebcea0e70b228513b45bedfda08042cfb7b (patch)
tree4a4cfa3ea1d819694f359cd058a83320ed7e2dcd
parentee16115cdef84af098a62a6ce46515af6a109d12 (diff)
"Load server history" menu items gathered in one stub not to create zillions of duplicate menu items
-rw-r--r--include/m_protosvc.h7
-rw-r--r--protocols/Discord/src/menus.cpp8
-rw-r--r--protocols/Discord/src/proto.cpp1
-rw-r--r--protocols/ICQ-WIM/src/proto.cpp14
-rw-r--r--protocols/SkypeWeb/res/Icons/sync_history.icobin5430 -> 0 bytes
-rw-r--r--protocols/SkypeWeb/res/resource.rc1
-rw-r--r--protocols/SkypeWeb/src/resource.h1
-rw-r--r--protocols/SkypeWeb/src/skype_icons.cpp1
-rw-r--r--protocols/SkypeWeb/src/skype_menus.cpp9
-rw-r--r--protocols/SkypeWeb/src/skype_menus.h1
-rw-r--r--protocols/SkypeWeb/src/skype_proto.cpp1
-rw-r--r--src/mir_app/src/proto_interface.cpp23
12 files changed, 34 insertions, 33 deletions
diff --git a/include/m_protosvc.h b/include/m_protosvc.h
index b44732fa18..134765700c 100644
--- a/include/m_protosvc.h
+++ b/include/m_protosvc.h
@@ -565,6 +565,13 @@ struct PROTOFILERESUME
#define PS_MENU_REVOKEAUTH "/RevokeAuth"
///////////////////////////////////////////////////////////////////////////////
+// Gets called when a user clicks the "Load server history" menu item
+// wParam = hContact
+// lParam = 0
+
+#define PS_MENU_LOADHISTORY "/LoadServerHistory"
+
+///////////////////////////////////////////////////////////////////////////////
// SENDING SERVICES
// these should be called with CallContactService()
diff --git a/protocols/Discord/src/menus.cpp b/protocols/Discord/src/menus.cpp
index 1a47a62ebe..434e99792b 100644
--- a/protocols/Discord/src/menus.cpp
+++ b/protocols/Discord/src/menus.cpp
@@ -180,13 +180,5 @@ void CDiscordProto::InitMenus()
mi.hIcolibItem = Skin_GetIconHandle(SKINICON_CHAT_JOIN);
m_hMenuToggleSync = Menu_AddContactMenuItem(&mi, m_szModuleName);
- mi.pszService = "/LoadHistory";
- CreateProtoService(mi.pszService, &CDiscordProto::OnMenuLoadHistory);
- SET_UID(mi, 0x6EF11AD6, 0x6111, 0x4E29, 0xBA, 0x8B, 0xA7, 0xB2, 0xE0, 0x22, 0xE1, 0x90);
- mi.name.a = LPGEN("Load server history");
- mi.position = -200001004;
- mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_HISTORY);
- Menu_AddContactMenuItem(&mi, m_szModuleName);
-
HookProtoEvent(ME_CLIST_PREBUILDCONTACTMENU, &CDiscordProto::OnMenuPrebuild);
}
diff --git a/protocols/Discord/src/proto.cpp b/protocols/Discord/src/proto.cpp
index 097dd3e2fe..3eb222f68e 100644
--- a/protocols/Discord/src/proto.cpp
+++ b/protocols/Discord/src/proto.cpp
@@ -63,6 +63,7 @@ CDiscordProto::CDiscordProto(const char *proto_name, const wchar_t *username) :
CreateProtoService(PS_SETMYAVATAR, &CDiscordProto::SetMyAvatar);
CreateProtoService(PS_MENU_REQAUTH, &CDiscordProto::RequestFriendship);
+ CreateProtoService(PS_MENU_LOADHISTORY, &CDiscordProto::OnMenuLoadHistory);
CreateProtoService(PS_VOICE_CAPS, &CDiscordProto::VoiceCaps);
diff --git a/protocols/ICQ-WIM/src/proto.cpp b/protocols/ICQ-WIM/src/proto.cpp
index 7a468d414c..615dbfd8f5 100644
--- a/protocols/ICQ-WIM/src/proto.cpp
+++ b/protocols/ICQ-WIM/src/proto.cpp
@@ -62,12 +62,15 @@ CIcqProto::CIcqProto(const char *aProtoName, const wchar_t *aUserName) :
// services
CreateProtoService(PS_CREATEACCMGRUI, &CIcqProto::CreateAccMgrUI);
+
CreateProtoService(PS_GETAVATARCAPS, &CIcqProto::GetAvatarCaps);
CreateProtoService(PS_GETAVATARINFO, &CIcqProto::GetAvatarInfo);
CreateProtoService(PS_GETMYAVATAR, &CIcqProto::GetAvatar);
+ CreateProtoService(PS_SETMYAVATAR, &CIcqProto::SetAvatar);
+
+ CreateProtoService(PS_MENU_LOADHISTORY, &CIcqProto::OnMenuLoadHistory);
CreateProtoService(PS_GETUNREADEMAILCOUNT, &CIcqProto::GetEmailCount);
CreateProtoService(PS_GOTO_INBOX, &CIcqProto::GotoInbox);
- CreateProtoService(PS_SETMYAVATAR, &CIcqProto::SetAvatar);
// events
HookProtoEvent(ME_CLIST_GROUPCHANGE, &CIcqProto::OnGroupChange);
@@ -125,15 +128,6 @@ void CIcqProto::OnModulesLoaded()
gcr.pszModule = m_szModuleName;
Chat_Register(&gcr);
- CMenuItem mi(&g_plugin);
- SET_UID(mi, 0xffe2c8fc, 0x9c4d, 0x4faf, 0xa2, 0x34, 0x3d, 0x19, 0x43, 0x0d, 0x31, 0x04);
- mi.pszService = "/LoadHistory";
- mi.name.a = LPGEN("Load server history");
- mi.position = -200001004;
- mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_HISTORY);
- Menu_AddContactMenuItem(&mi, m_szModuleName);
- CreateProtoService(mi.pszService, &CIcqProto::OnMenuLoadHistory);
-
HookProtoEvent(ME_USERINFO_INITIALISE, &CIcqProto::OnUserInfoInit);
}
diff --git a/protocols/SkypeWeb/res/Icons/sync_history.ico b/protocols/SkypeWeb/res/Icons/sync_history.ico
deleted file mode 100644
index d6ac6546f2..0000000000
--- a/protocols/SkypeWeb/res/Icons/sync_history.ico
+++ /dev/null
Binary files differ
diff --git a/protocols/SkypeWeb/res/resource.rc b/protocols/SkypeWeb/res/resource.rc
index bfd65f1872..97dd7297eb 100644
--- a/protocols/SkypeWeb/res/resource.rc
+++ b/protocols/SkypeWeb/res/resource.rc
@@ -28,7 +28,6 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_DEFAULT
// remains consistent on all systems.
IDI_SKYPE ICON "Icons\\skype.ico"
IDI_CONFERENCE ICON "Icons\\conference.ico"
-IDI_SYNCHISTORY ICON "Icons\\sync_history.ico"
IDI_BLOCKUSER ICON "Icons\\user_block.ico"
IDI_UNBLOCKUSER ICON "Icons\\user_unblock.ico"
IDI_CALL ICON "Icons\\call.ico"
diff --git a/protocols/SkypeWeb/src/resource.h b/protocols/SkypeWeb/src/resource.h
index 194e0275f5..031daa51b0 100644
--- a/protocols/SkypeWeb/src/resource.h
+++ b/protocols/SkypeWeb/src/resource.h
@@ -13,7 +13,6 @@
#define IDD_GC_CREATE 111
#define IDD_GC_INVITE 112
#define IDI_CONFERENCE 114
-#define IDI_SYNCHISTORY 117
#define IDI_BLOCKUSER 118
#define IDI_UNBLOCKUSER 119
#define IDI_CALL 120
diff --git a/protocols/SkypeWeb/src/skype_icons.cpp b/protocols/SkypeWeb/src/skype_icons.cpp
index ded5516548..b99a12baa3 100644
--- a/protocols/SkypeWeb/src/skype_icons.cpp
+++ b/protocols/SkypeWeb/src/skype_icons.cpp
@@ -21,7 +21,6 @@ static IconItem iconList[] =
{
{ LPGEN("Protocol icon"), "main", IDI_SKYPE },
{ LPGEN("Create new chat icon"), "conference", IDI_CONFERENCE },
- { LPGEN("Sync history icon"), "synchistory", IDI_SYNCHISTORY },
{ LPGEN("Block user icon"), "user_block", IDI_BLOCKUSER },
{ LPGEN("Unblock user icon"), "user_unblock", IDI_UNBLOCKUSER },
{ LPGEN("Incoming call icon"), "inc_call", IDI_CALL },
diff --git a/protocols/SkypeWeb/src/skype_menus.cpp b/protocols/SkypeWeb/src/skype_menus.cpp
index 31fffc92f6..a0d96be1ca 100644
--- a/protocols/SkypeWeb/src/skype_menus.cpp
+++ b/protocols/SkypeWeb/src/skype_menus.cpp
@@ -40,7 +40,6 @@ int CSkypeProto::OnPrebuildContactMenu(WPARAM hContact, LPARAM)
Menu_ShowItem(ContactMenuItems[CMI_BLOCK], true);
Menu_ShowItem(ContactMenuItems[CMI_UNBLOCK], isCtrlPressed || isBlocked);
- Menu_ShowItem(ContactMenuItems[CMI_GETSERVERHISTORY], true);
return 0;
}
@@ -61,14 +60,6 @@ void CSkypeProto::InitMenus()
CMenuItem mi(&g_plugin);
mi.flags = CMIF_UNICODE;
- mi.pszService = MODULE"/GetHistory";
- mi.name.w = LPGENW("Get server history");
- mi.position = CMI_POSITION + CMI_GETSERVERHISTORY;
- mi.hIcolibItem = g_plugin.getIconHandle(IDI_SYNCHISTORY);
- SET_UID(mi, 0xc9a64e98, 0x9257, 0x4b52, 0x98, 0xdd, 0x7f, 0x56, 0xb3, 0x90, 0xe3, 0xde);
- ContactMenuItems[CMI_GETSERVERHISTORY] = Menu_AddContactMenuItem(&mi);
- CreateServiceFunction(mi.pszService, GlobalService<&CSkypeProto::GetContactHistory>);
-
mi.pszService = MODULE"/BlockContact";
mi.name.w = LPGENW("Block contact");
mi.position = CMI_POSITION + CMI_BLOCK;
diff --git a/protocols/SkypeWeb/src/skype_menus.h b/protocols/SkypeWeb/src/skype_menus.h
index 61f4560e49..a6d1e9449a 100644
--- a/protocols/SkypeWeb/src/skype_menus.h
+++ b/protocols/SkypeWeb/src/skype_menus.h
@@ -22,7 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
enum
{
- CMI_GETSERVERHISTORY,
CMI_BLOCK,
CMI_UNBLOCK,
CMI_MAX // this item shall be the last one
diff --git a/protocols/SkypeWeb/src/skype_proto.cpp b/protocols/SkypeWeb/src/skype_proto.cpp
index e590729a4e..3a423559ef 100644
--- a/protocols/SkypeWeb/src/skype_proto.cpp
+++ b/protocols/SkypeWeb/src/skype_proto.cpp
@@ -38,6 +38,7 @@ CSkypeProto::CSkypeProto(const char* protoName, const wchar_t* userName) :
CreateProtoService(PS_MENU_REQAUTH, &CSkypeProto::OnRequestAuth);
CreateProtoService(PS_MENU_GRANTAUTH, &CSkypeProto::OnGrantAuth);
+ CreateProtoService(PS_MENU_LOADHISTORY, &CSkypeProto::GetContactHistory);
HookProtoEvent(ME_OPT_INITIALISE, &CSkypeProto::OnOptionsInit);
HookProtoEvent(ME_DB_EVENT_MARKED_READ, &CSkypeProto::OnDbEventRead);
diff --git a/src/mir_app/src/proto_interface.cpp b/src/mir_app/src/proto_interface.cpp
index c4b978a13f..d72b71fb4c 100644
--- a/src/mir_app/src/proto_interface.cpp
+++ b/src/mir_app/src/proto_interface.cpp
@@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "stdafx.h"
-static HGENMENU hReqAuth = nullptr, hGrantAuth = nullptr, hRevokeAuth = nullptr;
+static HGENMENU hReqAuth = nullptr, hGrantAuth = nullptr, hRevokeAuth = nullptr, hServerHist = nullptr;
/////////////////////////////////////////////////////////////////////////////////////////
// protocol constructor & destructor
@@ -281,11 +281,22 @@ static INT_PTR __cdecl stubRevokeAuth(WPARAM hContact, LPARAM)
return 0;
}
-static int __cdecl ProtoPrebuildContactMenu(WPARAM, LPARAM)
+static INT_PTR __cdecl stubLoadHistory(WPARAM hContact, LPARAM)
+{
+ const char *szProto = Proto_GetBaseAccountName(hContact);
+ if (szProto)
+ ProtoCallService(szProto, PS_MENU_LOADHISTORY, hContact, 0);
+ return 0;
+}
+
+static int __cdecl ProtoPrebuildContactMenu(WPARAM hContact, LPARAM)
{
Menu_ShowItem(hReqAuth, false);
Menu_ShowItem(hGrantAuth, false);
Menu_ShowItem(hRevokeAuth, false);
+
+ const char *szProto = Proto_GetBaseAccountName(hContact);
+ Menu_ShowItem(hRevokeAuth, ProtoServiceExists(szProto, PS_MENU_LOADHISTORY));
return 0;
}
@@ -317,5 +328,13 @@ void InitProtoMenus(void)
mi.hIcolibItem = Skin_GetIconHandle(SKINICON_AUTH_REVOKE);
hRevokeAuth = Menu_AddContactMenuItem(&mi);
+ SET_UID(mi, 0xd15b841d, 0xb0fc, 0x4ab5, 0x96, 0x94, 0xcf, 0x6c, 0x6e, 0x99, 0x4b, 0x3c); // {D15B841D-B0FC-4AB5-9694-CF6C6E994B3C}
+ mi.pszService = "Proto/Menu/LoadHistory";
+ mi.name.a = LPGEN("Load server history");
+ mi.position = -200001004;
+ mi.hIcolibItem = Skin_GetIconHandle(SKINICON_OTHER_HISTORY);
+ hServerHist = Menu_AddContactMenuItem(&mi);
+ CreateServiceFunction(mi.pszService, stubLoadHistory);
+
HookEvent(ME_CLIST_PREBUILDCONTACTMENU, ProtoPrebuildContactMenu);
}