BOOL OnIqSetGoogleSharedStatus(IJabberInterface *ji, HXML iqNode, void *) { GoogleTalkAcc *gta = isGoogle(LPARAM(ji)); if (gta == NULL) return FALSE; if (mir_tstrcmp(xi.getAttrValue(iqNode, ATTRNAME_TYPE), IQTYPE_SET)) return FALSE; if (gta->m_bGoogleSharedStatusLock) return TRUE; int status; HXML query = xi.getChildByPath(iqNode, NODENAME_QUERY, 0); HXML node = xi.getChildByPath(query, _T("invisible"), 0); if (0 == _tcsicmp(_T("true"), xi.getAttrValue(node, _T("value")))) status = ID_STATUS_INVISIBLE; else { LPCTSTR txt = xi.getText(xi.getChildByPath(query, _T("show"), 0)); if (txt && 0 == _tcsicmp(_T("dnd"), txt)) status = ID_STATUS_DND; else if (gta->m_pa->ppro->m_iStatus == ID_STATUS_DND || gta->m_pa->ppro->m_iStatus == ID_STATUS_INVISIBLE) status = ID_STATUS_ONLINE; else status = gta->m_pa->ppro->m_iStatus; } if (status != gta->m_pa->ppro->m_iStatus) CallProtoService(gta->m_pa->szModuleName, PS_SETSTATUS, status, 0); return TRUE; }
BOOL SendHandler(IJabberInterface *ji, HXML node, void *) { GoogleTalkAcc *gta = isGoogle(LPARAM(ji)); if (gta == NULL) return FALSE; HXML queryNode = xi.getChildByAttrValue(node, NODENAME_QUERY, ATTRNAME_XMLNS, DISCOVERY_XMLNS); if (queryNode) { LPCTSTR ptszId = xi.getAttrValue(node, ATTRNAME_ID); if (ptszId) ji->AddTemporaryIqHandler(DiscoverHandler, JABBER_IQ_TYPE_RESULT, _ttoi(ptszId + 4), NULL, RESPONSE_TIMEOUT, 500); } if (!mir_tstrcmp(xi.getName(node), _T("presence")) && xi.getAttrValue(node, ATTRNAME_TO) == 0) { if (!gta->m_bGoogleSharedStatus) return FALSE; HXML statNode = xi.getChildByPath(node, _T("status"), 0); HXML showNode = xi.getChildByPath(node, _T("show"), 0); if (statNode) { LPCTSTR status = xi.getText(showNode); LPCTSTR msg = xi.getText(statNode); gta->SendIqGoogleSharedStatus(status, msg); } } return FALSE; }
int OnExtListInit(WPARAM wParam, LPARAM lParam) { GoogleTalkAcc *gta = isGoogle(lParam); if (gta != NULL) { LIST<TCHAR> *pList = (LIST<TCHAR>*)wParam; pList->insert(JABBER_EXT_GTALK_PMUC); } return 0; }
BOOL OnIqResultGoogleSharedStatus(IJabberInterface *ji, HXML node, void *) { GoogleTalkAcc *gta = isGoogle(LPARAM(ji)); if (gta != NULL) { gta->m_bGoogleSharedStatus = mir_tstrcmp(xi.getAttrValue(node, ATTRNAME_TYPE), IQTYPE_RESULT) == 0; gta->m_bGoogleSharedStatusLock = FALSE; } return FALSE; }
int InitMenus(WPARAM wParam, LPARAM lParam) { GoogleTalkAcc *pga = isGoogle(lParam); if (pga != NULL) { LPCSTR szModuleName = pga->m_japi->GetModuleName(); char szServiceName[100]; mir_snprintf(szServiceName, "%s/%s", szModuleName, MS_GTALKEXT_OPENMAILBOX); CreateServiceFunctionParam(szServiceName, OpenMailboxMenuHandler, (LPARAM)szModuleName); CMenuItem mi; mi.root = HGENMENU(wParam); mi.hIcolibItem = g_hPopupIcon; mi.position = 200101; mi.name.a = LPGEN("Open mailbox"); mi.pszService = szServiceName; Menu_AddProtoMenuItem(&mi); } return 0; }
int OnServerDiscoInfo(WPARAM wParam, LPARAM lParam) { GoogleTalkAcc *gta = isGoogle(lParam); if (gta == NULL) return FALSE; // m_ThreadInfo->jabberServerCaps |= JABBER_CAPS_PING; JABBER_DISCO_FIELD *fld = (JABBER_DISCO_FIELD*)wParam; if (!mir_tstrcmp(fld->category, _T("server")) && !mir_tstrcmp(fld->type, _T("im")) && !mir_tstrcmp(fld->name, _T("Google Talk"))) { HXML iq = xi.createNode(NODENAME_IQ, NULL, FALSE); xi.addAttr(iq, ATTRNAME_TYPE, IQTYPE_GET); HXML query = xi.addChild(iq, NODENAME_QUERY, NULL); xi.addChild(query, ATTRNAME_XMLNS, JABBER_FEAT_GTALK_SHARED_STATUS); xi.addAttrInt(query, _T("version"), 2); gta->m_japi->SendXmlNode(iq); xi.destroyNode(iq); } return 0; }