diff options
Diffstat (limited to 'protocols/Steam/src')
-rw-r--r-- | protocols/Steam/src/common.h | 3 | ||||
-rw-r--r-- | protocols/Steam/src/stdafx.cpp | 9 | ||||
-rw-r--r-- | protocols/Steam/src/steam_contacts.cpp | 22 | ||||
-rw-r--r-- | protocols/Steam/src/steam_pooling.cpp | 2 | ||||
-rw-r--r-- | protocols/Steam/src/steam_proto.cpp | 1 | ||||
-rw-r--r-- | protocols/Steam/src/steam_proto.h | 1 | ||||
-rw-r--r-- | protocols/Steam/src/steam_xstatus.cpp | 8 |
7 files changed, 41 insertions, 5 deletions
diff --git a/protocols/Steam/src/common.h b/protocols/Steam/src/common.h index 37822139b9..d19f25ab3e 100644 --- a/protocols/Steam/src/common.h +++ b/protocols/Steam/src/common.h @@ -27,6 +27,7 @@ #include <m_protoint.h> #include <m_idle.h> #include <m_xstatus.h> +#include <m_extraicons.h> #include <win2k.h> #include <map> @@ -42,6 +43,8 @@ class CSteamProto; extern HINSTANCE g_hInstance; +extern HANDLE hExtraXStatus; + #include "Steam\steam.h" #include "steam_proto.h" diff --git a/protocols/Steam/src/stdafx.cpp b/protocols/Steam/src/stdafx.cpp index d51a866ca3..7c6793d8cb 100644 --- a/protocols/Steam/src/stdafx.cpp +++ b/protocols/Steam/src/stdafx.cpp @@ -3,6 +3,8 @@ int hLangpack;
HINSTANCE g_hInstance;
+HANDLE hExtraXStatus;
+
PLUGININFOEX pluginInfo =
{
sizeof(PLUGININFOEX),
@@ -43,6 +45,13 @@ extern "C" int __declspec(dllexport) Load(void) pd.fnUninit = (pfnUninitProto)CSteamProto::UninitProtoInstance;
CallService(MS_PROTO_REGISTERMODULE, 0, (LPARAM)&pd);
+ char iconName[100];
+ mir_snprintf(iconName, SIZEOF(iconName), "%s_%s", MODULE, "gaming");
+
+ // extra statuses
+ HookEvent(ME_SKIN2_ICONSCHANGED, OnReloadIcons);
+ hExtraXStatus = ExtraIcon_Register("steam_game", LPGEN("Steam game"), iconName);
+
CSteamProto::InitMenus();
return 0;
diff --git a/protocols/Steam/src/steam_contacts.cpp b/protocols/Steam/src/steam_contacts.cpp index 25720b1d05..a950b8b436 100644 --- a/protocols/Steam/src/steam_contacts.cpp +++ b/protocols/Steam/src/steam_contacts.cpp @@ -4,7 +4,19 @@ void CSteamProto::SetContactStatus(MCONTACT hContact, WORD status) { WORD oldStatus = getWord(hContact, "Status", ID_STATUS_OFFLINE); if (oldStatus != status) + { setWord(hContact, "Status", status); + + // If contact is offline, clear also xstatus + if (status == ID_STATUS_OFFLINE) + { + delSetting(hContact, "XStatusId"); + delSetting(hContact, "XStatusName"); + delSetting(hContact, "XStatusMsg"); + + SetContactExtraIcon(hContact, NULL); + } + } } void CSteamProto::SetAllContactsStatus(WORD status) @@ -13,8 +25,8 @@ void CSteamProto::SetAllContactsStatus(WORD status) { if (this->isChatRoom(hContact)) continue; - //if (this->IsContactOnline(hContact)) - setWord(hContact, "Status", status); + + SetContactStatus(hContact, status); } } @@ -190,6 +202,8 @@ void CSteamProto::UpdateContact(MCONTACT hContact, JSONNODE *data) setDword(hContact, "XStatusId", gameId); setTString(hContact, "XStatusName", TranslateT("Playing")); setTString(hContact, "XStatusMsg", message); + + SetContactExtraIcon(hContact, gameId); } else { @@ -200,6 +214,8 @@ void CSteamProto::UpdateContact(MCONTACT hContact, JSONNODE *data) delSetting(hContact, "XStatusId"); delSetting(hContact, "XStatusName"); delSetting(hContact, "XStatusMsg"); + + SetContactExtraIcon(hContact, NULL); } } @@ -209,7 +225,7 @@ void CSteamProto::ContactIsRemoved(MCONTACT hContact) { setByte(hContact, "Auth", 1); setDword(hContact, "DeletedTS", ::time(NULL)); - setWord(hContact, "Status", ID_STATUS_OFFLINE); + SetContactStatus(hContact, ID_STATUS_OFFLINE); ptrT nick(getTStringA(hContact, "Nick")); TCHAR message[MAX_PATH]; diff --git a/protocols/Steam/src/steam_pooling.cpp b/protocols/Steam/src/steam_pooling.cpp index ff21a8e9c2..efdd6514f3 100644 --- a/protocols/Steam/src/steam_pooling.cpp +++ b/protocols/Steam/src/steam_pooling.cpp @@ -84,7 +84,7 @@ void CSteamProto::ParsePollData(JSONNODE *data) if (hContact == NULL) continue; // probably this is info about random player playing on same server, so we ignore it - setWord(hContact, "Status", status); + SetContactStatus(hContact, status); node = json_get(item, "persona_name"); setTString(hContact, "Nick", json_as_string(node)); diff --git a/protocols/Steam/src/steam_proto.cpp b/protocols/Steam/src/steam_proto.cpp index 2cb802c9fd..952e74b4e2 100644 --- a/protocols/Steam/src/steam_proto.cpp +++ b/protocols/Steam/src/steam_proto.cpp @@ -62,7 +62,6 @@ CSteamProto::CSteamProto(const char* protoName, const TCHAR* userName) : CreateProtoService(PS_GETCUSTOMSTATUSEX, &CSteamProto::OnGetXStatusEx); CreateProtoService(PS_GETCUSTOMSTATUSICON, &CSteamProto::OnGetXStatusIcon); CreateProtoService(PS_GETADVANCEDSTATUSICON, &CSteamProto::OnRequestAdvStatusIconIdx); - HookEvent(ME_SKIN2_ICONSCHANGED, OnReloadIcons); } CSteamProto::~CSteamProto() diff --git a/protocols/Steam/src/steam_proto.h b/protocols/Steam/src/steam_proto.h index d3c5b65b0a..0b1b2c0d20 100644 --- a/protocols/Steam/src/steam_proto.h +++ b/protocols/Steam/src/steam_proto.h @@ -292,5 +292,6 @@ protected: }; int OnReloadIcons(WPARAM wParam, LPARAM lParam); +void SetContactExtraIcon(MCONTACT hContact, int status); #endif //_STEAM_PROTO_H_
\ No newline at end of file diff --git a/protocols/Steam/src/steam_xstatus.cpp b/protocols/Steam/src/steam_xstatus.cpp index c67ddf5f6b..b157971331 100644 --- a/protocols/Steam/src/steam_xstatus.cpp +++ b/protocols/Steam/src/steam_xstatus.cpp @@ -17,6 +17,14 @@ int CSteamProto::GetContactXStatus(MCONTACT hContact) return getDword(hContact, "XStatusId", 0) ? 1 : 0; } +void SetContactExtraIcon(MCONTACT hContact, int status) +{ + char iconName[100]; + mir_snprintf(iconName, SIZEOF(iconName), "%s_%s", MODULE, "gaming"); + + ExtraIcon_SetIcon(hExtraXStatus, hContact, (status > 0) ? Skin_GetIconHandle(iconName) : NULL); +} + INT_PTR CSteamProto::OnGetXStatusEx(WPARAM wParam, LPARAM lParam) { MCONTACT hContact = (MCONTACT)wParam; |