summaryrefslogtreecommitdiff
path: root/protocols/MSN/src
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2018-03-28 16:34:30 +0300
committerGeorge Hazan <ghazan@miranda.im>2018-03-28 16:34:30 +0300
commit81ce57622c3166830b23eae534dacc6b008c659d (patch)
tree6d6ac74667f733a20b94fa27cc01c2f45688c533 /protocols/MSN/src
parentc2bb7727483b9b5620e8cc0ce6adae35ee78d0a4 (diff)
common protocol instance management code went into template
Diffstat (limited to 'protocols/MSN/src')
-rw-r--r--protocols/MSN/src/msn.cpp28
-rw-r--r--protocols/MSN/src/msn_http.cpp10
-rw-r--r--protocols/MSN/src/msn_links.cpp6
-rw-r--r--protocols/MSN/src/msn_menu.cpp37
-rw-r--r--protocols/MSN/src/msn_proto.h7
5 files changed, 28 insertions, 60 deletions
diff --git a/protocols/MSN/src/msn.cpp b/protocols/MSN/src/msn.cpp
index 71dc64eb4f..bc2d78b797 100644
--- a/protocols/MSN/src/msn.cpp
+++ b/protocols/MSN/src/msn.cpp
@@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "msn_proto.h"
#include "version.h"
+CMPlugin g_plugin;
CLIST_INTERFACE *pcli;
HINSTANCE g_hInst, g_hOpenssl = nullptr;
int hLangpack;
@@ -60,8 +61,6 @@ static int sttCompareProtocols(const CMsnProto *p1, const CMsnProto *p2)
return mir_wstrcmp(p1->m_tszUserName, p2->m_tszUserName);
}
-OBJLIST<CMsnProto> g_Instances(1, sttCompareProtocols);
-
// Main DLL function
extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID)
{
@@ -114,28 +113,3 @@ extern "C" __declspec(dllexport) const PLUGININFOEX* MirandaPluginInfoEx(DWORD)
// MirandaInterfaces - returns the protocol interface to the core
extern "C" __declspec(dllexport) const MUUID MirandaInterfaces[] = { MIID_PROTOCOL, MIID_LAST };
-
-/////////////////////////////////////////////////////////////////////////////////////////
-
-static PROTO_INTERFACE* msnProtoInit(const char *pszProtoName, const wchar_t *tszUserName)
-{
- CMsnProto *ppro = new CMsnProto(pszProtoName, tszUserName);
- g_Instances.insert(ppro);
- return ppro;
-}
-
-static int msnProtoUninit(PROTO_INTERFACE *ppro)
-{
- g_Instances.remove((CMsnProto*)ppro);
- return 0;
-}
-
-struct CMPlugin : public CMPluginBase
-{
- CMPlugin() :
- CMPluginBase("MSN")
- {
- RegisterProtocol(PROTOTYPE_PROTOCOL, msnProtoInit, msnProtoUninit);
- }
-}
- g_plugin;
diff --git a/protocols/MSN/src/msn_http.cpp b/protocols/MSN/src/msn_http.cpp
index 6acf97a6d4..5c7fb3079d 100644
--- a/protocols/MSN/src/msn_http.cpp
+++ b/protocols/MSN/src/msn_http.cpp
@@ -25,11 +25,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
static ThreadData* FindThreadConn(HNETLIBCONN hConn)
{
- ThreadData *res = nullptr;
- for (int i = 0; i < g_Instances.getCount() && res == nullptr; ++i)
- res = g_Instances[i].MSN_GetThreadByConnection(hConn);
+ for (auto &it : CMPlugin::g_arInstances) {
+ ThreadData *res = it->MSN_GetThreadByConnection(hConn);
+ if (res != nullptr)
+ return res;
+ }
- return res;
+ return nullptr;
}
//=======================================================================================
diff --git a/protocols/MSN/src/msn_links.cpp b/protocols/MSN/src/msn_links.cpp
index efbc79408b..dbfe54c4dc 100644
--- a/protocols/MSN/src/msn_links.cpp
+++ b/protocols/MSN/src/msn_links.cpp
@@ -68,10 +68,10 @@ static INT_PTR ServiceParseMsnimLink(WPARAM, LPARAM lParam)
arg = NEWWSTR_ALLOCA(arg);
- if (g_Instances.getCount() == 0) return 0;
+ if (CMPlugin::g_arInstances.getCount() == 0) return 0;
- CMsnProto *proto = &g_Instances[0];
- for (auto &it : g_Instances)
+ CMsnProto *proto = &CMPlugin::g_arInstances[0];
+ for (auto &it : CMPlugin::g_arInstances)
if (it->m_iStatus > ID_STATUS_OFFLINE) {
proto = it;
break;
diff --git a/protocols/MSN/src/msn_menu.cpp b/protocols/MSN/src/msn_menu.cpp
index 65807adcc6..397fabc8ec 100644
--- a/protocols/MSN/src/msn_menu.cpp
+++ b/protocols/MSN/src/msn_menu.cpp
@@ -186,42 +186,29 @@ void CMsnProto::MSN_EnableMenuItems(bool bEnable)
//////////////////////////////////////////////////////////////////////////////////////
-static CMsnProto* GetProtoInstanceByHContact(MCONTACT hContact)
+static INT_PTR MsnMenuBlockCommand(WPARAM hContact, LPARAM lParam)
{
- char* szProto = GetContactProto(hContact);
- if (szProto == nullptr)
- return nullptr;
-
- for (auto &it : g_Instances)
- if (!mir_strcmp(szProto, it->m_szModuleName))
- return it;
-
- return nullptr;
-}
-
-static INT_PTR MsnMenuBlockCommand(WPARAM wParam, LPARAM lParam)
-{
- CMsnProto* ppro = GetProtoInstanceByHContact(wParam);
- return (ppro) ? ppro->MsnBlockCommand(wParam, lParam) : 0;
+ CMsnProto* ppro = CMPlugin::getInstance(hContact);
+ return (ppro) ? ppro->MsnBlockCommand(hContact, lParam) : 0;
}
-static INT_PTR MsnMenuViewProfile(WPARAM wParam, LPARAM lParam)
+static INT_PTR MsnMenuViewProfile(WPARAM hContact, LPARAM lParam)
{
- CMsnProto* ppro = GetProtoInstanceByHContact(wParam);
- return (ppro) ? ppro->MsnViewProfile(wParam, lParam) : 0;
+ CMsnProto* ppro = CMPlugin::getInstance(hContact);
+ return (ppro) ? ppro->MsnViewProfile(hContact, lParam) : 0;
}
-static INT_PTR MsnMenuSendHotmail(WPARAM wParam, LPARAM lParam)
+static INT_PTR MsnMenuSendHotmail(WPARAM hContact, LPARAM lParam)
{
- CMsnProto* ppro = GetProtoInstanceByHContact(wParam);
- return (ppro) ? ppro->MsnSendHotmail(wParam, lParam) : 0;
+ CMsnProto* ppro = CMPlugin::getInstance(hContact);
+ return (ppro) ? ppro->MsnSendHotmail(hContact, lParam) : 0;
}
-static int MSN_OnPrebuildContactMenu(WPARAM wParam, LPARAM lParam)
+static int MSN_OnPrebuildContactMenu(WPARAM hContact, LPARAM lParam)
{
- CMsnProto* ppro = GetProtoInstanceByHContact(wParam);
+ CMsnProto* ppro = CMPlugin::getInstance(hContact);
if (ppro)
- ppro->OnPrebuildContactMenu(wParam, lParam);
+ ppro->OnPrebuildContactMenu(hContact, lParam);
else {
Menu_ShowItem(hBlockMenuItem, false);
Menu_ShowItem(hLiveSpaceMenuItem, false);
diff --git a/protocols/MSN/src/msn_proto.h b/protocols/MSN/src/msn_proto.h
index 511c311b0f..ece0e0d6a2 100644
--- a/protocols/MSN/src/msn_proto.h
+++ b/protocols/MSN/src/msn_proto.h
@@ -492,6 +492,11 @@ struct CMsnProto : public PROTO<CMsnProto>
void setStringUtf(MCONTACT hContact, const char* name, const char* value);
};
-extern OBJLIST<CMsnProto> g_Instances;
+struct CMPlugin : public ACCPROTOPLUGIN<CMsnProto>
+{
+ CMPlugin() :
+ ACCPROTOPLUGIN<CMsnProto>("MSN")
+ {}
+};
#endif