From 83fa989e4ec503c4a8e82c097d4d464ff5495184 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 20 Nov 2012 14:33:10 +0000 Subject: - PS_GETCUSTOMSTATUSEX service for Jabber; - further code cleaning. git-svn-id: http://svn.miranda-ng.org/main/trunk@2393 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/JabberG/src/jabber.h | 2 + protocols/JabberG/src/jabber_chat.cpp | 6 +- protocols/JabberG/src/jabber_db_utils.h | 2 +- protocols/JabberG/src/jabber_disco.cpp | 2 +- protocols/JabberG/src/jabber_events.cpp | 2 +- protocols/JabberG/src/jabber_icolib.cpp | 2 +- protocols/JabberG/src/jabber_iq_handlers.cpp | 8 +- protocols/JabberG/src/jabber_iqid.cpp | 14 +-- protocols/JabberG/src/jabber_misc.cpp | 2 +- protocols/JabberG/src/jabber_opt.cpp | 6 +- protocols/JabberG/src/jabber_privacy.cpp | 14 +-- protocols/JabberG/src/jabber_proto.cpp | 6 +- protocols/JabberG/src/jabber_proto.h | 5 +- protocols/JabberG/src/jabber_std.cpp | 6 +- protocols/JabberG/src/jabber_thread.cpp | 8 +- protocols/JabberG/src/jabber_vcard.cpp | 16 ++-- protocols/JabberG/src/jabber_xstatus.cpp | 128 ++++++++++++++++++++------- protocols/JabberG/src/ui_utils.cpp | 4 +- 18 files changed, 149 insertions(+), 84 deletions(-) (limited to 'protocols/JabberG') diff --git a/protocols/JabberG/src/jabber.h b/protocols/JabberG/src/jabber.h index f40352c2b4..b8e7a1f4d5 100644 --- a/protocols/JabberG/src/jabber.h +++ b/protocols/JabberG/src/jabber.h @@ -167,6 +167,8 @@ protected: #define WM_JABBER_ADD_TO_BOOKMARKS (WM_PROTO_LAST + 116) #define WM_JABBER_REFRESH_VCARD (WM_PROTO_LAST + 117) +#define STATUS_TITLE_MAX 16 +#define STATUS_DESC_MAX 64 // Error code #define JABBER_ERROR_REDIRECT 302 diff --git a/protocols/JabberG/src/jabber_chat.cpp b/protocols/JabberG/src/jabber_chat.cpp index 6db767c192..76772609f9 100644 --- a/protocols/JabberG/src/jabber_chat.cpp +++ b/protocols/JabberG/src/jabber_chat.cpp @@ -388,7 +388,7 @@ void CJabberProto::GcQuit(JABBER_LIST_ITEM* item, int code, HXML reason) DBVARIANT dbvMessage; if ( !DBGetContactSettingTString(NULL, m_szModuleName, "GcMsgQuit", &dbvMessage)) { szMessage = NEWTSTR_ALLOCA(dbvMessage.ptszVal); - DBFreeVariant(&dbvMessage); + db_free(&dbvMessage); } else szMessage = TranslateTS(JABBER_GC_MSG_QUIT); } @@ -399,7 +399,7 @@ void CJabberProto::GcQuit(JABBER_LIST_ITEM* item, int code, HXML reason) CallServiceSync(MS_GC_EVENT, SESSION_OFFLINE, (LPARAM)&gce); } - DBDeleteContactSetting(HContactFromJID(item->jid), "CList", "Hidden"); + db_unset(HContactFromJID(item->jid), "CList", "Hidden"); item->bChatActive = FALSE; if (m_bJabberOnline) { @@ -1109,7 +1109,7 @@ static void sttNickListHook(CJabberProto* ppro, JABBER_LIST_ITEM* item, GCHOOK* << XCHILD(_T("body"), buf)); if (szMessage == dbv.ptszVal) - DBFreeVariant(&dbv); + db_free(&dbv); } break; } diff --git a/protocols/JabberG/src/jabber_db_utils.h b/protocols/JabberG/src/jabber_db_utils.h index 4b09bac744..60becf5ad9 100644 --- a/protocols/JabberG/src/jabber_db_utils.h +++ b/protocols/JabberG/src/jabber_db_utils.h @@ -145,7 +145,7 @@ public: if ( !DBGetContactSettingTString(NULL, m_proto->m_szModuleName, m_szSetting, &dbv)) { result = dbv.ptszVal; - DBFreeVariant(&dbv); + db_free(&dbv); } return result; } diff --git a/protocols/JabberG/src/jabber_disco.cpp b/protocols/JabberG/src/jabber_disco.cpp index 8b37a6677d..b6322ea0c6 100644 --- a/protocols/JabberG/src/jabber_disco.cpp +++ b/protocols/JabberG/src/jabber_disco.cpp @@ -1461,7 +1461,7 @@ void CJabberProto::ServiceDiscoveryShowMenu(CJabberSDNode *pNode, HTREELISTITEM case SD_ACT_ROSTER: { HANDLE hContact = DBCreateContact(pNode->GetJid(), pNode->GetName(), FALSE, FALSE); - DBDeleteContactSetting(hContact, "CList", "NotOnList"); + db_unset(hContact, "CList", "NotOnList"); JABBER_LIST_ITEM* item = ListAdd(LIST_VCARD_TEMP, pNode->GetJid()); item->bUseResource = TRUE; break; diff --git a/protocols/JabberG/src/jabber_events.cpp b/protocols/JabberG/src/jabber_events.cpp index 2ac6da3a18..4af605937f 100644 --- a/protocols/JabberG/src/jabber_events.cpp +++ b/protocols/JabberG/src/jabber_events.cpp @@ -188,7 +188,7 @@ void __cdecl CJabberProto::OnAddContactForever(DBCONTACTWRITESETTING* cws, HANDL SendGetVcard(jid.ptszVal); mir_free(nick); - DBDeleteContactSetting(hContact, "CList", "Hidden"); + db_unset(hContact, "CList", "Hidden"); db_free(&jid); } diff --git a/protocols/JabberG/src/jabber_icolib.cpp b/protocols/JabberG/src/jabber_icolib.cpp index 30f00fae86..84981edb0f 100644 --- a/protocols/JabberG/src/jabber_icolib.cpp +++ b/protocols/JabberG/src/jabber_icolib.cpp @@ -480,7 +480,7 @@ INT_PTR __cdecl CJabberProto::JGetAdvancedStatusIcon(WPARAM wParam, LPARAM) return -1; int iID = GetTransportProtoID(dbv.ptszVal); - DBFreeVariant(&dbv); + db_free(&dbv); if (iID >= 0) { WORD Status = ID_STATUS_OFFLINE; Status = JGetWord(hContact, "Status", ID_STATUS_OFFLINE); diff --git a/protocols/JabberG/src/jabber_iq_handlers.cpp b/protocols/JabberG/src/jabber_iq_handlers.cpp index 11052adb22..760267d5ee 100644 --- a/protocols/JabberG/src/jabber_iq_handlers.cpp +++ b/protocols/JabberG/src/jabber_iq_handlers.cpp @@ -606,13 +606,13 @@ BOOL CJabberProto::OnRosterPushRequest(HXML, CJabberIqInfo *pInfo) if (_tcscmp(nick, dbnick.ptszVal) != 0) db_set_ts(hContact, "CList", "MyHandle", nick); else - DBDeleteContactSetting(hContact, "CList", "MyHandle"); + db_unset(hContact, "CList", "MyHandle"); db_free(&dbnick); } else db_set_ts(hContact, "CList", "MyHandle", nick); } - else DBDeleteContactSetting(hContact, "CList", "MyHandle"); + else db_unset(hContact, "CList", "MyHandle"); if ( !m_options.IgnoreRosterGroups) { @@ -621,7 +621,7 @@ BOOL CJabberProto::OnRosterPushRequest(HXML, CJabberIqInfo *pInfo) db_set_ts(hContact, "CList", "Group", item->group); } else - DBDeleteContactSetting(hContact, "CList", "Group"); + db_unset(hContact, "CList", "Group"); } } mir_free(nick); @@ -642,7 +642,7 @@ BOOL CJabberProto::OnRosterPushRequest(HXML, CJabberIqInfo *pInfo) ListRemove(LIST_ROSTER, jid); } } else if (JGetByte(hContact, "ChatRoom", 0)) - DBDeleteContactSetting(hContact, "CList", "Hidden"); + db_unset(hContact, "CList", "Hidden"); else UpdateSubscriptionInfo(hContact, item); } } diff --git a/protocols/JabberG/src/jabber_iqid.cpp b/protocols/JabberG/src/jabber_iqid.cpp index 6d5988145c..b043e7fcb3 100644 --- a/protocols/JabberG/src/jabber_iqid.cpp +++ b/protocols/JabberG/src/jabber_iqid.cpp @@ -458,13 +458,13 @@ void CJabberProto::OnIqResultGetRoster(HXML iqNode, CJabberIqInfo* pInfo) if (lstrcmp(nick, dbNick.ptszVal) != 0) db_set_ts(hContact, "CList", "MyHandle", nick); else - DBDeleteContactSetting(hContact, "CList", "MyHandle"); + db_unset(hContact, "CList", "MyHandle"); db_free(&dbNick); } else db_set_ts(hContact, "CList", "MyHandle", nick); } - else DBDeleteContactSetting(hContact, "CList", "MyHandle"); + else db_unset(hContact, "CList", "MyHandle"); if (JGetByte(hContact, "ChatRoom", 0)) { GCSESSION gcw = {0}; @@ -481,7 +481,7 @@ void CJabberProto::OnIqResultGetRoster(HXML iqNode, CJabberIqInfo* pInfo) CallServiceSync(MS_GC_NEWSESSION, 0, (LPARAM)&gcw); - DBDeleteContactSetting(hContact, "CList", "Hidden"); + db_unset(hContact, "CList", "Hidden"); chatRooms.insert(hContact); } else { @@ -502,7 +502,7 @@ void CJabberProto::OnIqResultGetRoster(HXML iqNode, CJabberIqInfo* pInfo) else db_set_ts(hContact, "CList", "Group", item->group); } else - DBDeleteContactSetting(hContact, "CList", "Group"); + db_unset(hContact, "CList", "Group"); } if (hContact != NULL) { @@ -1111,7 +1111,7 @@ void CJabberProto::OnIqResultGetVcard(HXML iqNode) else { char text[ 100 ]; sprintf(text, "e-mail%d", nEmail-1); - if (DBGetContactSettingString(hContact, m_szModuleName, text, &dbv)) break; + if ( DBGetContactSettingString(hContact, m_szModuleName, text, &dbv)) break; db_free(&dbv); JDeleteSetting(hContact, text); } @@ -1122,7 +1122,7 @@ void CJabberProto::OnIqResultGetVcard(HXML iqNode) while (true) { char text[ 100 ]; sprintf(text, "e-mail%d", nEmail); - if (DBGetContactSettingString(NULL, m_szModuleName, text, &dbv)) break; + if ( DBGetContactSettingString(NULL, m_szModuleName, text, &dbv)) break; db_free(&dbv); JDeleteSetting(NULL, text); sprintf(text, "e-mailFlag%d", nEmail); @@ -1155,7 +1155,7 @@ void CJabberProto::OnIqResultGetVcard(HXML iqNode) while (true) { char text[ 100 ]; sprintf(text, "Phone%d", nPhone); - if (DBGetContactSettingString(NULL, m_szModuleName, text, &dbv)) break; + if ( DBGetContactSettingString(NULL, m_szModuleName, text, &dbv)) break; db_free(&dbv); JDeleteSetting(NULL, text); sprintf(text, "PhoneFlag%d", nPhone); diff --git a/protocols/JabberG/src/jabber_misc.cpp b/protocols/JabberG/src/jabber_misc.cpp index 3884a47568..ba6a104413 100644 --- a/protocols/JabberG/src/jabber_misc.cpp +++ b/protocols/JabberG/src/jabber_misc.cpp @@ -77,7 +77,7 @@ static void JabberContactListCreateClistGroup(TCHAR* groupName) for (i=0;;i++) { _itoa(i, str, 10); - if (DBGetContactSettingTString(NULL, "CListGroups", str, &dbv)) + if ( DBGetContactSettingTString(NULL, "CListGroups", str, &dbv)) break; TCHAR* name = dbv.ptszVal; if (name[0]!='\0' && !_tcscmp(name+1, groupName)) { diff --git a/protocols/JabberG/src/jabber_opt.cpp b/protocols/JabberG/src/jabber_opt.cpp index 6e0b6537f0..4f2dd2060f 100644 --- a/protocols/JabberG/src/jabber_opt.cpp +++ b/protocols/JabberG/src/jabber_opt.cpp @@ -1086,18 +1086,18 @@ void CJabberProto::_RosterHandleGetRequest(HXML node) DBVARIANT dbvtemp; if ( !DBGetContactSettingTString(hContact, "CList", "MyHandle", &dbvtemp)) { name = mir_tstrdup(dbvtemp.ptszVal); - DBFreeVariant(&dbvtemp); + db_free(&dbvtemp); } if ( !DBGetContactSettingTString(hContact, "CList", "Group", &dbvtemp)) { group = mir_tstrdup(dbvtemp.ptszVal); - DBFreeVariant(&dbvtemp); + db_free(&dbvtemp); } _RosterInsertListItem(hList, jid, name, group, NULL, FALSE); if (jid) mir_free(jid); if (name) mir_free(name); if (group) mir_free(group); } - DBFreeVariant(&dbv); + db_free(&dbv); } } hContact = db_find_next(hContact); diff --git a/protocols/JabberG/src/jabber_privacy.cpp b/protocols/JabberG/src/jabber_privacy.cpp index 7c879920d3..c5754fcd0d 100644 --- a/protocols/JabberG/src/jabber_privacy.cpp +++ b/protocols/JabberG/src/jabber_privacy.cpp @@ -479,11 +479,11 @@ public: for (int i = 0; ; i++) { mir_snprintf(buf, 20, "%d", i); - if (DBGetContactSettingTString(NULL, "CListGroups", buf, &dbv)) + if ( DBGetContactSettingTString(NULL, "CListGroups", buf, &dbv)) break; SendDlgItemMessage(m_hwnd, IDC_COMBO_VALUES, CB_ADDSTRING, 0, (LPARAM)&dbv.ptszVal[1]); - DBFreeVariant(&dbv); + db_free(&dbv); } // FIXME: ugly code :) @@ -1387,7 +1387,7 @@ bool CJabberDlgPrivacyLists::CListIsGroup(HANDLE hGroup) DBVARIANT dbv; bool result = DBGetContactSettingTString(NULL, "CListGroups", idstr, &dbv) == 0; if (result) - DBFreeVariant(&dbv); + db_free(&dbv); return result; } @@ -1403,13 +1403,13 @@ HANDLE CJabberDlgPrivacyLists::CListFindGroupByName(TCHAR *name) { _itoa(i, idstr, 10); - if (DBGetContactSettingTString(NULL, "CListGroups", idstr, &dbv)) + if ( DBGetContactSettingTString(NULL, "CListGroups", idstr, &dbv)) break; if ( !_tcscmp(dbv.ptszVal + 1, name)) hGroup = (HANDLE)(i+1); - DBFreeVariant(&dbv); + db_free(&dbv); } return hGroup; @@ -1610,7 +1610,7 @@ void CJabberDlgPrivacyLists::CListBuildList(HWND hwndList, CPrivacyList *pList) char idstr[33]; _itoa(iGroup-1, idstr, 10); DBVARIANT dbv = {0}; - if (DBGetContactSettingTString(NULL, "CListGroups", idstr, &dbv)) + if ( DBGetContactSettingTString(NULL, "CListGroups", idstr, &dbv)) break; hItem = m_clcClist.FindGroup((HANDLE)iGroup); @@ -1621,7 +1621,7 @@ void CJabberDlgPrivacyLists::CListBuildList(HWND hwndList, CPrivacyList *pList) if (dwPackets = CListGetPackets(hwndList, hItem, false)) pList->AddRule(Group, szJid, FALSE, dwOrder++, dwPackets); - DBFreeVariant(&dbv); + db_free(&dbv); } hItem = clc_info.hItemSubBoth; diff --git a/protocols/JabberG/src/jabber_proto.cpp b/protocols/JabberG/src/jabber_proto.cpp index d74ca56df1..2a10f808a9 100644 --- a/protocols/JabberG/src/jabber_proto.cpp +++ b/protocols/JabberG/src/jabber_proto.cpp @@ -120,8 +120,7 @@ CJabberProto::CJabberProto(const char* aProtoName, const TCHAR *aUserName) : JCreateService(PS_JOINCHAT, &CJabberProto::OnJoinChat); JCreateService(PS_LEAVECHAT, &CJabberProto::OnLeaveChat); - // not needed anymore and therefore commented out - // JCreateService(PS_GETXSTATUSEX, &CJabberProto::OnGetXStatusEx); + JCreateService(PS_GETCUSTOMSTATUSEX, &CJabberProto::OnGetXStatusEx); JCreateService(PS_SETCUSTOMSTATUSEX, &CJabberProto::OnSetXStatusEx); JCreateService(PS_GETCUSTOMSTATUSICON, &CJabberProto::OnGetXStatusIcon); JCreateService(PS_GETADVANCEDSTATUSICON, &CJabberProto::JGetAdvancedStatusIcon); @@ -215,7 +214,6 @@ CJabberProto::~CJabberProto() { WsUninit(); IqUninit(); - XStatusUninit(); SerialUninit(); ConsoleUninit(); GlobalMenuUninit(); @@ -503,7 +501,7 @@ int CJabberProto::Authorize(HANDLE hDbEvent) if ((hContact = AddToListByJID(newJid, 0)) != NULL) { // Trigger actual add by removing the "NotOnList" added by AddToListByJID() // See AddToListByJID() and JabberDbSettingChanged(). - DBDeleteContactSetting(hContact, "CList", "NotOnList"); + db_unset(hContact, "CList", "NotOnList"); } } } mir_free(newJid); diff --git a/protocols/JabberG/src/jabber_proto.h b/protocols/JabberG/src/jabber_proto.h index 5606a3bfd1..9ab3c99164 100644 --- a/protocols/JabberG/src/jabber_proto.h +++ b/protocols/JabberG/src/jabber_proto.h @@ -261,9 +261,6 @@ struct CJabberProto : public PROTO_INTERFACE, public MZeroedObject JABBER_MODEMSGS m_modeMsgs; BOOL m_bModeMsgStatusChangePending; - HANDLE m_hHookExtraIconsRebuild; - HANDLE m_hHookExtraIconsApply; - BOOL m_bChangeStatusMessageOnly; BOOL m_bSendKeepAlive; BOOL m_bPepSupported; @@ -956,6 +953,7 @@ struct CJabberProto : public PROTO_INTERFACE, public MZeroedObject INT_PTR __cdecl OnSetListeningTo(WPARAM wParam, LPARAM lParams); INT_PTR __cdecl OnGetXStatusIcon(WPARAM wParam, LPARAM lParams); + INT_PTR __cdecl OnGetXStatusEx(WPARAM wParam, LPARAM lParams); INT_PTR __cdecl OnSetXStatusEx(WPARAM wParam, LPARAM lParams); HICON GetXStatusIcon(int bStatus, UINT flags); @@ -969,7 +967,6 @@ struct CJabberProto : public PROTO_INTERFACE, public MZeroedObject BOOL SendPepTune(TCHAR* szArtist, TCHAR* szLength, TCHAR* szSource, TCHAR* szTitle, TCHAR* szTrack, TCHAR* szUri); void XStatusInit(void); - void XStatusUninit(void); void SetContactTune(HANDLE hContact, LPCTSTR szArtist, LPCTSTR szLength, LPCTSTR szSource, LPCTSTR szTitle, LPCTSTR szTrack); diff --git a/protocols/JabberG/src/jabber_std.cpp b/protocols/JabberG/src/jabber_std.cpp index 376cb21bd1..8c0a8ac683 100644 --- a/protocols/JabberG/src/jabber_std.cpp +++ b/protocols/JabberG/src/jabber_std.cpp @@ -67,7 +67,7 @@ HANDLE CJabberProto::JForkThreadEx(JThreadFunc pFunc, void *param, UINT* threadI void CJabberProto::JDeleteSetting(HANDLE hContact, const char* valueName) { - DBDeleteContactSetting(hContact, m_szModuleName, valueName); + db_unset(hContact, m_szModuleName, valueName); } /* DWORD CJabberProto::JGetByte(const char* valueName, int parDefltValue) @@ -220,14 +220,14 @@ TCHAR* CJabberProto::JGetStringCrypt(HANDLE hContact, char *valueName) { DBVARIANT dbv; - if (DBGetContactSettingString(hContact, m_szModuleName, valueName, &dbv)) + if ( DBGetContactSettingString(hContact, m_szModuleName, valueName, &dbv)) return NULL; sttCryptString(dbv.pszVal); WCHAR *res = mir_utf8decodeW(dbv.pszVal); - DBFreeVariant(&dbv); + db_free(&dbv); return res; } diff --git a/protocols/JabberG/src/jabber_thread.cpp b/protocols/JabberG/src/jabber_thread.cpp index 12bb41479a..e4c946a2ad 100644 --- a/protocols/JabberG/src/jabber_thread.cpp +++ b/protocols/JabberG/src/jabber_thread.cpp @@ -911,7 +911,7 @@ void CJabberProto::OnProcessSuccess(HXML node, ThreadData* info) } Log("Success: Logged-in."); - if (DBGetContactSettingString(NULL, m_szModuleName, "Nick", &dbv)) + if ( DBGetContactSettingString(NULL, m_szModuleName, "Nick", &dbv)) JSetStringT(NULL, "Nick", info->username); else db_free(&dbv); @@ -1570,7 +1570,7 @@ void CJabberProto::UpdateJidDbSettings(const TCHAR *jid) if (item->itemResource.statusMessage) db_set_ts(hContact, "CList", "StatusMsg", item->itemResource.statusMessage); else - DBDeleteContactSetting(hContact, "CList", "StatusMsg"); + db_unset(hContact, "CList", "StatusMsg"); } // Determine status to show for the contact based on the remaining resources @@ -1594,7 +1594,7 @@ void CJabberProto::UpdateJidDbSettings(const TCHAR *jid) if (item->resource[nSelectedResource].statusMessage) db_set_ts(hContact, "CList", "StatusMsg", item->resource[nSelectedResource].statusMessage); else - DBDeleteContactSetting(hContact, "CList", "StatusMsg"); + db_unset(hContact, "CList", "StatusMsg"); UpdateMirVer(hContact, &item->resource[nSelectedResource]); } else JDeleteSetting(hContact, DBSETTING_DISPLAY_UID); @@ -1799,7 +1799,7 @@ void CJabberProto::OnProcessPresence(HXML node, ThreadData* info) if ((hContact=AddToListByJID(from, 0)) != NULL) { // Trigger actual add by removing the "NotOnList" added by AddToListByJID() // See AddToListByJID() and JabberDbSettingChanged(). - DBDeleteContactSetting(hContact, "CList", "NotOnList"); + db_unset(hContact, "CList", "NotOnList"); } } } RebuildInfoFrame(); } diff --git a/protocols/JabberG/src/jabber_vcard.cpp b/protocols/JabberG/src/jabber_vcard.cpp index 70b4ee433c..2e6570dd3f 100644 --- a/protocols/JabberG/src/jabber_vcard.cpp +++ b/protocols/JabberG/src/jabber_vcard.cpp @@ -589,7 +589,7 @@ static INT_PTR CALLBACK EditEmailDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, if (dat->id < 0) { for (dat->id=0;;dat->id++) { mir_snprintf(idstr, SIZEOF(idstr), "e-mail%d", dat->id); - if (DBGetContactSettingString(NULL, dat->ppro->m_szModuleName, idstr, &dbv)) break; + if ( DBGetContactSettingString(NULL, dat->ppro->m_szModuleName, idstr, &dbv)) break; db_free(&dbv); } } GetDlgItemText(hwndDlg, IDC_EMAIL, text, SIZEOF(text)); @@ -663,7 +663,7 @@ static INT_PTR CALLBACK EditPhoneDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, if (dat->id < 0) { for (dat->id=0;;dat->id++) { wsprintfA(idstr, "Phone%d", dat->id); - if (DBGetContactSettingString(NULL, dat->ppro->m_szModuleName, idstr, &dbv)) break; + if ( DBGetContactSettingString(NULL, dat->ppro->m_szModuleName, idstr, &dbv)) break; db_free(&dbv); } } @@ -746,7 +746,7 @@ static INT_PTR CALLBACK ContactDlgProc(HWND hwndDlg, UINT msg, WPARAM, LPARAM lP lvi.iItem = 0; for (i=0;;i++) { wsprintfA(idstr, "e-mail%d", i); - if (DBGetContactSettingTString(NULL, ppro->m_szModuleName, idstr, &dbv)) break; + if ( DBGetContactSettingTString(NULL, ppro->m_szModuleName, idstr, &dbv)) break; wsprintf(number, _T("%d"), i+1); lvi.pszText = number; lvi.lParam = (LPARAM)i; @@ -765,7 +765,7 @@ static INT_PTR CALLBACK ContactDlgProc(HWND hwndDlg, UINT msg, WPARAM, LPARAM lP lvi.iItem = 0; for (i=0;;i++) { wsprintfA(idstr, "Phone%d", i); - if (DBGetContactSettingTString(NULL, ppro->m_szModuleName, idstr, &dbv)) break; + if ( DBGetContactSettingTString(NULL, ppro->m_szModuleName, idstr, &dbv)) break; wsprintf(number, _T("%d"), i+1); lvi.pszText = number; lvi.lParam = (LPARAM)i; @@ -872,7 +872,7 @@ static INT_PTR CALLBACK ContactDlgProc(HWND hwndDlg, UINT msg, WPARAM, LPARAM lP WORD nFlag; wsprintfA(idstr, szIdTemplate, i+1); - if (DBGetContactSettingString(NULL, ppro->m_szModuleName, idstr, &dbv)) break; + if ( DBGetContactSettingString(NULL, ppro->m_szModuleName, idstr, &dbv)) break; wsprintfA(idstr,szIdTemplate,i); ppro->JSetString(NULL, idstr, dbv.pszVal); wsprintfA(idstr, szFlagTemplate, i+1); @@ -1020,7 +1020,7 @@ void CJabberProto::AppendVcardFromDB(HXML n, char* tag, char* key) return; DBVARIANT dbv; - if (DBGetContactSettingTString(NULL, m_szModuleName, key, &dbv)) + if ( DBGetContactSettingTString(NULL, m_szModuleName, key, &dbv)) n << XCHILD(_A2T(tag)); else { n << XCHILD(_A2T(tag), dbv.ptszVal); @@ -1057,7 +1057,7 @@ void CJabberProto::SetServerVcard(BOOL bPhotoChanged, TCHAR* szPhotoFileName) for (i=0;;i++) { wsprintfA(idstr, "e-mail%d", i); - if (DBGetContactSettingTString(NULL, m_szModuleName, idstr, &dbv)) + if ( DBGetContactSettingTString(NULL, m_szModuleName, idstr, &dbv)) break; HXML e = v << XCHILD(_T("EMAIL"), dbv.ptszVal); @@ -1105,7 +1105,7 @@ void CJabberProto::SetServerVcard(BOOL bPhotoChanged, TCHAR* szPhotoFileName) for (i=0;;i++) { wsprintfA(idstr, "Phone%d", i); - if (DBGetContactSettingTString(NULL, m_szModuleName, idstr, &dbv)) break; + if ( DBGetContactSettingTString(NULL, m_szModuleName, idstr, &dbv)) break; db_free(&dbv); n = v << XCHILD(_T("TEL")); diff --git a/protocols/JabberG/src/jabber_xstatus.cpp b/protocols/JabberG/src/jabber_xstatus.cpp index 7a1d656cb7..b9b1a17e0a 100644 --- a/protocols/JabberG/src/jabber_xstatus.cpp +++ b/protocols/JabberG/src/jabber_xstatus.cpp @@ -1154,7 +1154,7 @@ void CPepActivity::ShowSetDialog(BYTE bQuiet) HICON CJabberProto::GetXStatusIcon(int bStatus, UINT flags) { - CPepMood *pepMood = (CPepMood *)m_pepServices.Find(_T(JABBER_FEAT_USER_MOOD)); + CPepMood *pepMood = (CPepMood*)m_pepServices.Find(_T(JABBER_FEAT_USER_MOOD)); HICON icon = g_MoodIcons.GetIcon(g_arrMoods[bStatus].szTag, (flags & LR_BIGICON) != 0); return (flags & LR_SHARED) ? icon : CopyIcon(icon); } @@ -1171,7 +1171,7 @@ INT_PTR __cdecl CJabberProto::OnGetXStatusIcon(WPARAM wParam, LPARAM lParam) return 0; if ( !wParam) - wParam = ((CPepMood *)m_pepServices.Find(_T(JABBER_FEAT_USER_MOOD)))->m_mode; + wParam = ((CPepMood*)m_pepServices.Find(_T(JABBER_FEAT_USER_MOOD)))->m_mode; if (wParam < 1 || wParam >= SIZEOF(g_arrMoods)) return 0; @@ -1341,28 +1341,101 @@ void CJabberProto::XStatusInit() RegisterAdvStatusSlot(ADVSTATUS_ACTIVITY); } -void CJabberProto::XStatusUninit() -{ - if (m_hHookExtraIconsRebuild) - UnhookEvent(m_hHookExtraIconsRebuild); - - if (m_hHookExtraIconsApply) - UnhookEvent(m_hHookExtraIconsApply); -} - ///////////////////////////////////////////////////////////////////////////////////////// // JabberSetXStatus - sets the extended status info (mood) -INT_PTR __cdecl CJabberProto::OnSetXStatusEx(WPARAM wParam, LPARAM lParam) +INT_PTR __cdecl CJabberProto::OnGetXStatusEx(WPARAM wParam, LPARAM lParam) { + if ( !m_bPepSupported || !m_bJabberOnline) + return 1; + CUSTOM_STATUS *pData = (CUSTOM_STATUS*)lParam; + if (pData->cbSize < sizeof(CUSTOM_STATUS)) + return 1; + + CPepMood *pepMood = (CPepMood*)m_pepServices.Find(_T(JABBER_FEAT_USER_MOOD)); + if (pepMood == NULL) + return 1; + + HANDLE hContact = (HANDLE)wParam; + + // fill status member + if (pData->flags & CSSF_MASK_STATUS) + *pData->status = pepMood->m_mode; + + // fill status name member + if (pData->flags & CSSF_MASK_NAME) { + if (pData->flags & CSSF_DEFAULT_NAME) { + DWORD dwXStatus = (pData->wParam == NULL) ? pepMood->m_mode : *pData->wParam; + if (dwXStatus >= SIZEOF(g_arrMoods)) + return 1; + + if (pData->flags & CSSF_UNICODE) + lstrcpynW(pData->pwszName, g_arrMoods[dwXStatus].szName, (STATUS_TITLE_MAX+1)); + else { + size_t dwStatusTitleSize = lstrlenW( g_arrMoods[dwXStatus].szName ); + if (dwStatusTitleSize > STATUS_TITLE_MAX) + dwStatusTitleSize = STATUS_TITLE_MAX; + + WideCharToMultiByte(CP_ACP, 0, g_arrMoods[dwXStatus].szName, (DWORD)dwStatusTitleSize, pData->pszName, MAX_PATH, NULL, NULL); + pData->pszName[dwStatusTitleSize] = 0; + } + } + else { + *pData->ptszName = 0; + if (pData->flags & CSSF_UNICODE) { + mir_ptr title( ReadAdvStatusT(hContact, ADVSTATUS_MOOD, ADVSTATUS_VAL_TITLE)); + if (title) + _tcsncpy(pData->ptszName, title, STATUS_TITLE_MAX); + } + else { + mir_ptr title( ReadAdvStatusA(hContact, ADVSTATUS_MOOD, ADVSTATUS_VAL_TITLE)); + if (title) + strncpy(pData->pszName, title, STATUS_TITLE_MAX); + } + } + } + + // fill status message member + if (pData->flags & CSSF_MASK_MESSAGE) { + *pData->pszMessage = 0; + if (pData->flags & CSSF_UNICODE) { + mir_ptr title( ReadAdvStatusT(hContact, ADVSTATUS_MOOD, ADVSTATUS_VAL_TEXT)); + if (title) + _tcsncpy(pData->ptszMessage, title, STATUS_TITLE_MAX); + } + else { + mir_ptr title( ReadAdvStatusA(hContact, ADVSTATUS_MOOD, ADVSTATUS_VAL_TEXT)); + if (title) + strncpy(pData->pszMessage, title, STATUS_TITLE_MAX); + } + } + + if (pData->flags & CSSF_DISABLE_UI) + if (pData->wParam) + *pData->wParam = true; + + if (pData->flags & CSSF_STATUSES_COUNT) + if (pData->wParam) + *pData->wParam = SIZEOF(g_arrMoods); + if (pData->flags & CSSF_STR_SIZES) { + if (pData->wParam) *pData->wParam = STATUS_TITLE_MAX; + if (pData->lParam) *pData->lParam = STATUS_DESC_MAX; + } + return 0; +} + +INT_PTR __cdecl CJabberProto::OnSetXStatusEx(WPARAM wParam, LPARAM lParam) +{ if ( !m_bPepSupported || !m_bJabberOnline) return 1; - if (pData->cbSize < sizeof(CUSTOM_STATUS)) return 1; // Failure + CUSTOM_STATUS *pData = (CUSTOM_STATUS*)lParam; + if (pData->cbSize < sizeof(CUSTOM_STATUS)) + return 1; - CPepMood *pepMood = (CPepMood *)m_pepServices.Find(_T(JABBER_FEAT_USER_MOOD)); + CPepMood *pepMood = (CPepMood*)m_pepServices.Find(_T(JABBER_FEAT_USER_MOOD)); int status = *pData->status; if (status > 0 && status < SIZEOF(g_arrMoods)) { @@ -1397,24 +1470,19 @@ void CJabberProto::RegisterAdvStatusSlot(const char *pszSlot) } void CJabberProto::ResetAdvStatus(HANDLE hContact, const char *pszSlot) -{ // set empty text before DBDeleteContactSetting to make resident setting manager happy +{ char szSetting[128]; - mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/id", m_szModuleName, pszSlot); - db_set_s(hContact, "AdvStatus", szSetting, ""); - DBDeleteContactSetting(hContact, "AdvStatus", szSetting); + db_unset(hContact, "AdvStatus", szSetting); mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/icon", m_szModuleName, pszSlot); - db_set_s(hContact, "AdvStatus", szSetting, ""); - DBDeleteContactSetting(hContact, "AdvStatus", szSetting); + db_unset(hContact, "AdvStatus", szSetting); mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/title", m_szModuleName, pszSlot); - db_set_s(hContact, "AdvStatus", szSetting, ""); - DBDeleteContactSetting(hContact, "AdvStatus", szSetting); + db_unset(hContact, "AdvStatus", szSetting); mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/text", m_szModuleName, pszSlot); - db_set_s(hContact, "AdvStatus", szSetting, ""); - DBDeleteContactSetting(hContact, "AdvStatus", szSetting); + db_unset(hContact, "AdvStatus", szSetting); } void CJabberProto::WriteAdvStatus(HANDLE hContact, const char *pszSlot, const TCHAR *pszMode, const char *pszIcon, const TCHAR *pszTitle, const TCHAR *pszText) @@ -1434,9 +1502,9 @@ void CJabberProto::WriteAdvStatus(HANDLE hContact, const char *pszSlot, const TC if (pszText) db_set_ts(hContact, "AdvStatus", szSetting, pszText); else { - // set empty text before DBDeleteContactSetting to make resident setting manager happy + // set empty text before db_unset to make resident setting manager happy db_set_s(hContact, "AdvStatus", szSetting, ""); - DBDeleteContactSetting(hContact, "AdvStatus", szSetting); + db_unset(hContact, "AdvStatus", szSetting); } } @@ -1446,11 +1514,11 @@ char *CJabberProto::ReadAdvStatusA(HANDLE hContact, const char *pszSlot, const c mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/%s", m_szModuleName, pszSlot, pszValue); DBVARIANT dbv; - if (DBGetContactSettingString(hContact, "AdvStatus", szSetting, &dbv)) + if ( DBGetContactSettingString(hContact, "AdvStatus", szSetting, &dbv)) return NULL; char *res = mir_strdup(dbv.pszVal); - DBFreeVariant(&dbv); + db_free(&dbv); return res; } @@ -1460,11 +1528,11 @@ TCHAR *CJabberProto::ReadAdvStatusT(HANDLE hContact, const char *pszSlot, const mir_snprintf(szSetting, SIZEOF(szSetting), "%s/%s/%s", m_szModuleName, pszSlot, pszValue); DBVARIANT dbv; - if (DBGetContactSettingTString(hContact, "AdvStatus", szSetting, &dbv)) + if ( DBGetContactSettingTString(hContact, "AdvStatus", szSetting, &dbv)) return NULL; TCHAR *res = mir_tstrdup(dbv.ptszVal); - DBFreeVariant(&dbv); + db_free(&dbv); return res; } diff --git a/protocols/JabberG/src/ui_utils.cpp b/protocols/JabberG/src/ui_utils.cpp index da8a4531f1..ac7bde98e0 100644 --- a/protocols/JabberG/src/ui_utils.cpp +++ b/protocols/JabberG/src/ui_utils.cpp @@ -2395,7 +2395,7 @@ CDbLink::~CDbLink() mir_free(m_szSetting); mir_free(m_szDefault); if (dbv.type != DBVT_DELETED) - DBFreeVariant(&dbv); + db_free(&dbv); } DWORD CDbLink::LoadUnsigned() @@ -2429,7 +2429,7 @@ void CDbLink::SaveInt(DWORD value) TCHAR* CDbLink::LoadText() { - if (dbv.type != DBVT_DELETED) DBFreeVariant(&dbv); + if (dbv.type != DBVT_DELETED) db_free(&dbv); if ( !DBGetContactSettingTString(NULL, m_szModule, m_szSetting, &dbv)) { if (dbv.type == DBVT_TCHAR) -- cgit v1.2.3