summaryrefslogtreecommitdiff
path: root/FacebookRM/process.cpp
diff options
context:
space:
mode:
authorwatcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb>2012-01-19 12:21:27 +0000
committerwatcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb>2012-01-19 12:21:27 +0000
commite94c705bb01c662d934c0096480bc9a732d0e1ec (patch)
treea07c6aa2174cf87d62ecfccdde8dbfa56185d78f /FacebookRM/process.cpp
parent9b2d93c613db59b7d47327899a0850d370d6ea5e (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.cpp108
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};