INT_PTR __cdecl CJabberProto::OnJoinChat( WPARAM wParam, LPARAM ) { DBVARIANT nick, jid; HANDLE hContact = ( HANDLE )wParam; if ( JGetStringT( hContact, "ChatRoomID", &jid )) return 0; if ( JGetStringT( hContact, "MyNick", &nick )) if ( JGetStringT( NULL, "Nick", &nick )) { JFreeVariant( &jid ); return 0; } TCHAR *password = JGetStringCrypt( hContact, "LoginPassword" ); if ( JGetWord( hContact, "Status", 0 ) != ID_STATUS_ONLINE ) { if ( !jabberChatDllPresent ) JabberChatDllError(); else { TCHAR* p = _tcschr( jid.ptszVal, '@' ); if ( p != NULL ) { *p++ = 0; GroupchatJoinRoom( p, jid.ptszVal, nick.ptszVal, password ); } } } mir_free( password ); JFreeVariant( &nick ); JFreeVariant( &jid ); return 0; }
INT_PTR __cdecl CJabberProto::OnLeaveChat( WPARAM wParam, LPARAM ) { DBVARIANT jid; HANDLE hContact = ( HANDLE )wParam; if ( JGetStringT( hContact, "ChatRoomID", &jid )) return 0; if ( JGetWord( hContact, "Status", 0 ) != ID_STATUS_OFFLINE ) { JABBER_LIST_ITEM* item = ListGetItemPtr( LIST_CHATROOM, jid.ptszVal ); if ( item != NULL ) GcQuit( item, 0, NULL ); } JFreeVariant( &jid ); return 0; }
int JGetAdvancedStatusIcon(WPARAM wParam, LPARAM lParam) { HANDLE hContact=(HANDLE) wParam; DBVARIANT dbv={0}; char * Transport=NULL; int res=-1; int iID=-1; if (!hContact) return -1; if (!JGetByte(hContact,"IsTransported",0)) return -1; if (JGetStringUtf(hContact,"Transport",&dbv)) return -1; iID=GetTransportProtoID(dbv.pszVal); if (iID>=0) { WORD Status=ID_STATUS_OFFLINE; Status = JGetWord(hContact,"Status",ID_STATUS_OFFLINE); if (Status<ID_STATUS_OFFLINE) Status = ID_STATUS_OFFLINE; else if (Status>ID_STATUS_INVISIBLE) Status = ID_STATUS_ONLINE; res = GetTransportStatusIconIndex(iID,Status); } DBFreeVariant(&dbv); return res; }
int JabberMenuJoinLeave( WPARAM wParam, LPARAM lParam ) { DBVARIANT dbv, jid; if ( JGetStringT(( HANDLE )wParam, "ChatRoomID", &jid )) return 0; if ( JGetStringT(( HANDLE )wParam, "MyNick", &dbv )) if ( JGetStringT( NULL, "Nick", &dbv )) { JFreeVariant( &jid ); return 0; } if ( JGetWord(( HANDLE )wParam, "Status", 0 ) != ID_STATUS_ONLINE ) { if ( !jabberChatDllPresent ) { JabberChatDllError(); goto LBL_Return; } TCHAR* p = _tcschr( jid.ptszVal, '@' ); if ( p == NULL ) goto LBL_Return; *p++ = 0; JabberGroupchatJoinRoom( p, jid.ptszVal, dbv.ptszVal, _T("")); } else { JABBER_LIST_ITEM* item = JabberListGetItemPtr( LIST_CHATROOM, jid.ptszVal ); if ( item != NULL ) JabberGcQuit( item, 0, NULL ); } LBL_Return: JFreeVariant( &dbv ); JFreeVariant( &jid ); return 0; }
int JabberMenuPrebuildContactMenu( WPARAM wParam, LPARAM lParam ) { sttEnableMenuItem( hMenuRequestAuth, FALSE ); sttEnableMenuItem( hMenuGrantAuth, FALSE ); sttEnableMenuItem( hMenuRevokeAuth, FALSE ); sttEnableMenuItem( hMenuJoinLeave, FALSE ); sttEnableMenuItem( hMenuCommands, FALSE ); sttEnableMenuItem( hMenuConvert, FALSE ); sttEnableMenuItem( hMenuRosterAdd, FALSE ); sttEnableMenuItem( hMenuLogin, FALSE ); sttEnableMenuItem( hMenuVisitGMail, FALSE ); sttEnableMenuItem( hMenuRefresh, FALSE ); sttEnableMenuItem( hMenuAddBookmark, FALSE ); HANDLE hContact; if (( hContact=( HANDLE )wParam ) == NULL ) return 0; else { DBVARIANT dbv; if ( !JGetStringT( hContact, "FakeContact", &dbv )) { if (!_tcsicmp( dbv.ptszVal, _T("GMAIL"))){ sttEnableMenuItem( hMenuVisitGMail, TRUE ); return 0; } JFreeVariant( &dbv ); } } BYTE bIsChatRoom = (BYTE)JGetByte( hContact, "ChatRoom", 0 ); BYTE bIsTransport = (BYTE)JGetByte( hContact, "IsTransport", 0 ); if ((bIsChatRoom == GCW_CHATROOM) || bIsChatRoom == 0 ) { DBVARIANT dbv; if ( !JGetStringT( hContact, bIsChatRoom?(char*)"ChatRoomID":(char*)"jid", &dbv )) { JFreeVariant( &dbv ); CLISTMENUITEM clmi = { 0 }; sttEnableMenuItem( hMenuConvert, TRUE ); clmi.cbSize = sizeof( clmi ); clmi.pszName = (char *)(bIsChatRoom ? "&Convert to Contact" : "&Convert to Chat Room"); clmi.flags = CMIM_NAME | CMIM_FLAGS; JCallService( MS_CLIST_MODIFYMENUITEM, ( WPARAM )hMenuConvert, ( LPARAM )&clmi ); } } if (!jabberOnline) return 0; if ( bIsChatRoom ) { DBVARIANT dbv; if ( !JGetStringT( hContact, "ChatRoomID", &dbv )) { if ( JabberListGetItemPtr( LIST_ROSTER, dbv.ptszVal ) == NULL ) sttEnableMenuItem( hMenuRosterAdd, TRUE ); if ( JabberListGetItemPtr( LIST_BOOKMARK, dbv.ptszVal ) == NULL ) if ( jabberThreadInfo && jabberThreadInfo->caps & CAPS_BOOKMARK ) sttEnableMenuItem( hMenuAddBookmark, TRUE ); JFreeVariant( &dbv ); } } if ( bIsChatRoom == GCW_CHATROOM ) { CLISTMENUITEM clmi = { 0 }; clmi.cbSize = sizeof( clmi ); clmi.pszName = (char *)(( JGetWord( hContact, "Status", 0 ) == ID_STATUS_ONLINE ) ? "&Leave" : "&Join"); clmi.flags = CMIM_NAME | CMIM_FLAGS; JCallService( MS_CLIST_MODIFYMENUITEM, ( WPARAM )hMenuJoinLeave, ( LPARAM )&clmi ); return 0; } if ( bIsTransport ) { sttEnableMenuItem( hMenuLogin, TRUE ); sttEnableMenuItem( hMenuRefresh, TRUE ); } DBVARIANT dbv; if ( !JGetStringT( hContact, "jid", &dbv )) { JABBER_LIST_ITEM * item; item=JabberListGetItemPtr( LIST_ROSTER, dbv.ptszVal ); if ( !bIsTransport || (( item != NULL ) && (item->cap & AGENT_CAP_ADHOC) ) ) { sttEnableMenuItem( hMenuCommands, TRUE ); } else sttEnableMenuItem( hMenuCommands, FALSE ); JFreeVariant( &dbv ); } if ( !JGetStringT( hContact, "jid", &dbv )) { JABBER_LIST_ITEM* item = JabberListGetItemPtr( LIST_ROSTER, dbv.ptszVal ); JFreeVariant( &dbv ); if ( item != NULL ) { BOOL bCtrlPressed = ( GetKeyState( VK_CONTROL)&0x8000 ) != 0; sttEnableMenuItem( hMenuRequestAuth, item->subscription == SUB_FROM || item->subscription == SUB_NONE || bCtrlPressed ); sttEnableMenuItem( hMenuGrantAuth, item->subscription == SUB_TO || item->subscription == SUB_NONE || bCtrlPressed ); sttEnableMenuItem( hMenuRevokeAuth, item->subscription == SUB_FROM || item->subscription == SUB_BOTH || bCtrlPressed ); sttEnableMenuItem( hMenuCommands, (!bIsChatRoom && (!bIsTransport || (item->cap & AGENT_CAP_ADHOC))) ); return 0; } } return 0; }