コード例 #1
0
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;
}
コード例 #2
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;
}
コード例 #3
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;
}
コード例 #4
0
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;
}
コード例 #5
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;
}