diff options
author | watcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb> | 2012-01-19 12:21:27 +0000 |
---|---|---|
committer | watcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb> | 2012-01-19 12:21:27 +0000 |
commit | e94c705bb01c662d934c0096480bc9a732d0e1ec (patch) | |
tree | a07c6aa2174cf87d62ecfccdde8dbfa56185d78f /FacebookRM/process.cpp | |
parent | 9b2d93c613db59b7d47327899a0850d370d6ea5e (diff) |
FacebookRM: Version bump
Version 0.0.7.0
+ Support for group chats (EXPERIMENTAL!) - enable it in options
! Fixed loading contact list
! Fixed potential freeze.
Total downloads: (None or statistics not available yet)
Version 0.0.6.1a
Reuploaded.
Total downloads: (None or statistics not available yet)
Version 0.0.6.1
+ Returned option to close chat windows (on website)
+ New option to map non-standard statuses to Invisible (insetad of Online)
+ New option to load contacts, which have "On the Phone" status
! Fixed changing chat visibility
! Very long messages are no longer received duplicitely
! Changes and fixes related to multiuser messages and messages from people, which are not in server-list
Total downloads: (None or statistics not available yet)
git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@261 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb
Diffstat (limited to 'FacebookRM/process.cpp')
-rw-r--r-- | FacebookRM/process.cpp | 108 |
1 files changed, 96 insertions, 12 deletions
diff --git a/FacebookRM/process.cpp b/FacebookRM/process.cpp index e6c965c..48430df 100644 --- a/FacebookRM/process.cpp +++ b/FacebookRM/process.cpp @@ -70,14 +70,32 @@ void FacebookProto::ProcessBuddyList( void* data ) if (!fbu->handle) { // just been added
fbu->handle = AddToContactList(fbu);
- DBWriteContactSettingUTF8String(fbu->handle,m_szModuleName,FACEBOOK_KEY_NAME,fbu->real_name.c_str());
- DBWriteContactSettingUTF8String(fbu->handle,m_szModuleName,"Nick",fbu->real_name.c_str());
+ if (!fbu->real_name.empty()) {
+ DBWriteContactSettingUTF8String(fbu->handle,m_szModuleName,FACEBOOK_KEY_NAME,fbu->real_name.c_str());
+ DBWriteContactSettingUTF8String(fbu->handle,m_szModuleName,FACEBOOK_KEY_NICK,fbu->real_name.c_str());
+ }
+ }
+
+ if (DBGetContactSettingWord(fbu->handle,m_szModuleName,"Status", 0) != fbu->status_id ) {
+ DBWriteContactSettingWord(fbu->handle,m_szModuleName,"Status", fbu->status_id );
}
- if (DBGetContactSettingWord(fbu->handle,m_szModuleName,"Status", 0) != ID_STATUS_ONLINE) {
- DBWriteContactSettingWord(fbu->handle,m_szModuleName,"Status", ID_STATUS_ONLINE );
+ if (DBGetContactSettingByte(fbu->handle,m_szModuleName,FACEBOOK_KEY_CONTACT_TYPE, 0)) {
+ DBDeleteContactSetting(fbu->handle,m_szModuleName,FACEBOOK_KEY_CONTACT_TYPE); // Set type "on server-list" contact
}
+ // Wasn't contact removed from "server-list" someday?
+ if ( DBGetContactSettingDword(fbu->handle, m_szModuleName, FACEBOOK_KEY_DELETED, 0) ) {
+ DBDeleteContactSetting(fbu->handle, m_szModuleName, FACEBOOK_KEY_DELETED);
+
+ std::string url = FACEBOOK_URL_PROFILE + fbu->user_id;
+
+ TCHAR* szTitle = mir_a2t_cp(fbu->real_name.c_str(), CP_UTF8);
+ TCHAR* szUrl = mir_a2t_cp(url.c_str(), CP_UTF8);
+ NotifyEvent(szTitle, TranslateT("Contact is back on server-list."), fbu->handle, FACEBOOK_EVENT_OTHER, szUrl);
+ mir_free( szTitle );
+ // mir_free( szUrl ); // url is free'd in popup procedure
+ }
// Check avatar change
CheckAvatarChange(fbu->handle, fbu->image_url);
@@ -96,6 +114,66 @@ exit: delete resp;
}
+void FacebookProto::ProcessFacepiles( void* data )
+{
+ if ( data == NULL )
+ return;
+
+ send_chat *resp = static_cast<send_chat*>(data);
+
+ if ( isOffline() )
+ goto exit;
+
+ LOG("***** Starting processing facepiles");
+
+ CODE_BLOCK_TRY
+
+ std::map< std::string, std::string > facepiles;
+
+ facebook_json_parser* p = new facebook_json_parser( this );
+ p->parse_facepiles( &(resp->msg), &facepiles );
+ delete p;
+
+ std::map< std::string, std::string >::iterator iter;
+
+ char *chat_users = this->GetChatUsers(resp->chat_id.c_str());
+ std::string users = chat_users;
+ mir_free(chat_users);
+
+ std::vector<std::string> users_list;
+ utils::text::explode(users, " ", &users_list);
+
+ for( std::vector<std::string>::size_type i=0; i<users_list.size( ); i++) {
+ iter = facepiles.find( users_list[i] );
+ if (iter == facepiles.end()) {
+ // Contact is now offline, remove him from chat
+ this->RemoveChatContact(resp->chat_id.c_str(), users_list[i].c_str());
+ LOG(" Now offline facepile (%s): [%s]", resp->chat_id.c_str(), users_list[i].c_str());
+ } else {
+ facepiles.erase(iter);
+ }
+ }
+
+ for ( iter = facepiles.begin( ); iter != facepiles.end(); ++iter )
+ {
+ // These contacts are newly online, add them...
+ this->AddChatContact(resp->chat_id.c_str(), iter->first.c_str(), iter->second.c_str());
+ LOG(" Now online facepile (%s): [%s] %s", resp->chat_id.c_str(), iter->first.c_str(), iter->second.c_str());
+ }
+
+ LOG("***** Facepiles processed");
+
+ CODE_BLOCK_CATCH
+
+ LOG("***** Error processing facepiles: %s", e.what());
+
+ CODE_BLOCK_END
+
+exit:
+ delete resp;
+}
+
+
void FacebookProto::ProcessFriendList( void* data )
{
if ( data == NULL )
@@ -151,7 +229,11 @@ void FacebookProto::ProcessFriendList( void* data ) if ( update_required )
{
DBWriteContactSettingUTF8String(hContact, m_szModuleName, FACEBOOK_KEY_NAME, fbu->real_name.c_str());
- DBWriteContactSettingUTF8String(hContact, m_szModuleName, "Nick", fbu->real_name.c_str());
+ DBWriteContactSettingUTF8String(hContact, m_szModuleName, FACEBOOK_KEY_NICK, fbu->real_name.c_str());
+ }
+
+ if (DBGetContactSettingByte(fbu->handle,m_szModuleName,FACEBOOK_KEY_CONTACT_TYPE, 0)) {
+ DBDeleteContactSetting(fbu->handle,m_szModuleName,FACEBOOK_KEY_CONTACT_TYPE); // Has type "on server-list" contact
}
// Wasn't contact removed from "server-list" someday?
@@ -162,7 +244,7 @@ void FacebookProto::ProcessFriendList( void* data ) TCHAR* szTitle = mir_a2t_cp(fbu->real_name.c_str(), CP_UTF8);
TCHAR* szUrl = mir_a2t_cp(url.c_str(), CP_UTF8);
- NotifyEvent(szTitle, TranslateT("Contact is back on server-list."), hContact, FACEBOOK_EVENT_CLIENT, szUrl);
+ NotifyEvent(szTitle, TranslateT("Contact is back on server-list."), hContact, FACEBOOK_EVENT_OTHER, szUrl);
mir_free( szTitle );
// mir_free( szUrl ); // url is free'd in popup procedure
}
@@ -176,7 +258,9 @@ void FacebookProto::ProcessFriendList( void* data ) // Contact was removed from "server-list", notify it
// Wasnt we already been notified about this contact?
- if ( !DBGetContactSettingDword(hContact, m_szModuleName, FACEBOOK_KEY_DELETED, 0) ) {
+ if ( !DBGetContactSettingDword(hContact, m_szModuleName, FACEBOOK_KEY_DELETED, 0)
+ && !DBGetContactSettingByte(hContact, m_szModuleName, FACEBOOK_KEY_CONTACT_TYPE, 0) ) { // And is this contact "on-server" contact?
+
DBWriteContactSettingDword(hContact, m_szModuleName, FACEBOOK_KEY_DELETED, ::time(NULL));
std::string contactname = id;
@@ -189,7 +273,7 @@ void FacebookProto::ProcessFriendList( void* data ) TCHAR* szTitle = mir_a2t_cp(contactname.c_str(), CP_UTF8);
TCHAR* szUrl = mir_a2t_cp(url.c_str(), CP_UTF8);
- NotifyEvent(szTitle, TranslateT("Contact is no longer on server-list."), hContact, FACEBOOK_EVENT_CLIENT, szUrl);
+ NotifyEvent(szTitle, TranslateT("Contact is no longer on server-list."), hContact, FACEBOOK_EVENT_OTHER, szUrl);
mir_free( szTitle );
// mir_free( szUrl ); // url is free'd in popup procedure
}
@@ -206,7 +290,7 @@ void FacebookProto::ProcessFriendList( void* data ) DBWriteContactSettingByte(hContact, m_szModuleName, "Gender", fbu->gender );
DBWriteContactSettingUTF8String(hContact, m_szModuleName, FACEBOOK_KEY_NAME, fbu->real_name.c_str());
- DBWriteContactSettingUTF8String(hContact, m_szModuleName, "Nick", fbu->real_name.c_str());
+ DBWriteContactSettingUTF8String(hContact, m_szModuleName, FACEBOOK_KEY_NICK, fbu->real_name.c_str());
DBWriteContactSettingString(hContact, m_szModuleName, FACEBOOK_KEY_AV_URL, fbu->image_url.c_str());
// DBWriteContactSettingWord(hContact, m_szModuleName, "Status", ID_STATUS_OFFLINE );
}
@@ -266,7 +350,7 @@ void FacebookProto::ProcessUnreadMessages( void* ) std::string user_id = utils::text::source_get_value( &messageslist, 2, "single_thread_id\":", "," );
if (user_id.empty()) {
- LOG(" !! !! Thread id is empty - this is groupchat message."); // todo remove as this is not such 'error'
+ LOG(" !! !! Thread id is empty - this is groupchat message."); // TODO: remove as this is not such 'error'
continue;
}
@@ -336,8 +420,8 @@ void FacebookProto::ProcessMessages( void* data ) facebook_user fbu;
fbu.user_id = messages[i]->user_id;
- HANDLE hContact = AddToContactList(&fbu);
-
+ HANDLE hContact = AddToContactList(&fbu, false, messages[i]->sender_name.c_str());
+
PROTORECVEVENT recv = {0};
CCSDATA ccs = {0};
|