summaryrefslogtreecommitdiff
path: root/tubes/source
diff options
context:
space:
mode:
Diffstat (limited to 'tubes/source')
-rw-r--r--tubes/source/contact-list.cxx137
-rw-r--r--tubes/source/contacts.cxx64
-rw-r--r--tubes/source/manager.cxx95
3 files changed, 115 insertions, 181 deletions
diff --git a/tubes/source/contact-list.cxx b/tubes/source/contact-list.cxx
deleted file mode 100644
index e240ece872ad..000000000000
--- a/tubes/source/contact-list.cxx
+++ /dev/null
@@ -1,137 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * Version: MPL 1.1 / GPLv3+ / LGPLv3+
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License or as specified alternatively below. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * Major Contributor(s):
- * Copyright (C) 2012 Collabora Ltd.
- *
- * All Rights Reserved.
- *
- * For minor contributions see the git repository.
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
- * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
- * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
- * instead of those above.
- */
-#include <utility>
-#include <vector>
-
-#include <telepathy-glib/telepathy-glib.h>
-
-#include <tubes/constants.h>
-#include <tubes/contact-list.hxx>
-#include <tubes/manager.hxx>
-
-ContactList::ContactList(TpAccountManager *pAccountManager)
- : mpAccountManager(pAccountManager)
-{
- SAL_WARN_IF( !mpAccountManager, "tubes",
- "ContactList::ContactList: passed a null account manager");
- g_object_ref( mpAccountManager);
-}
-
-ContactList::~ContactList()
-{
- g_object_unref(mpAccountManager);
- mpAccountManager = NULL;
-}
-
-static bool tb_presence_is_online( const TpConnectionPresenceType& presence )
-{
- switch (presence)
- {
- case TP_CONNECTION_PRESENCE_TYPE_UNSET:
- case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
- return false;
- case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
- case TP_CONNECTION_PRESENCE_TYPE_AWAY:
- case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY:
- case TP_CONNECTION_PRESENCE_TYPE_HIDDEN:
- case TP_CONNECTION_PRESENCE_TYPE_BUSY:
- return true;
- case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
- case TP_CONNECTION_PRESENCE_TYPE_ERROR:
- default:
- return false;
- }
-}
-
-static bool tb_contact_is_online( TpContact *contact )
-{
- return tb_presence_is_online (tp_contact_get_presence_type (contact));
-}
-
-static void presence_changed_cb( TpContact* /* contact */,
- guint /* type */,
- gchar* /* status */,
- gchar* /* message */,
- gpointer /* pContactList*/ )
-{
- TeleManager::displayAllContacts();
-}
-
-AccountContactPairV ContactList::getContacts()
-{
- GList *accounts;
- AccountContactPairV pairs;
-
- for (accounts = tp_account_manager_get_valid_accounts (mpAccountManager);
- accounts != NULL;
- accounts = g_list_delete_link (accounts, accounts))
- {
- TpAccount *account = reinterpret_cast<TpAccount *>(accounts->data);
- TpConnection *connection = tp_account_get_connection (account);
- TpContact *self;
- GPtrArray *contacts;
- guint i;
-
- /* Verify account is online and received its contact list. If state is not
- * SUCCESS this means we didn't received the roster from server yet and
- * we would have to wait for the "notify:contact-list-state" signal. */
- if (connection == NULL ||
- tp_connection_get_contact_list_state (connection) !=
- TP_CONTACT_LIST_STATE_SUCCESS)
- continue;
-
- self = tp_connection_get_self_contact (connection);
- contacts = tp_connection_dup_contact_list (connection);
- for (i = 0; i < contacts->len; i++)
- {
- TpContact *contact =
- reinterpret_cast<TpContact *>(g_ptr_array_index (contacts, i));
- if (maRegistered.find (contact) == maRegistered.end())
- {
- maRegistered.insert (contact);
- g_signal_connect (contact, "presence-changed",
- G_CALLBACK (presence_changed_cb), this );
- }
-
- if (contact != self &&
- tb_contact_is_online (contact))
- {
- g_object_ref (account);
- g_object_ref (contact);
-
- AccountContactPair pair(account, contact);
- pairs.push_back(pair);
- }
- }
- g_ptr_array_unref (contacts);
- }
-
- return pairs;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tubes/source/contacts.cxx b/tubes/source/contacts.cxx
index 1017fade4b14..3c0a3322bca1 100644
--- a/tubes/source/contacts.cxx
+++ b/tubes/source/contacts.cxx
@@ -34,7 +34,6 @@
#include <tools/resid.hxx>
#include <tubes/conference.hxx>
#include <tubes/collaboration.hxx>
-#include <tubes/contact-list.hxx>
#include <tubes/manager.hxx>
#include <unotools/confignode.hxx>
#include <vcl/fixed.hxx>
@@ -196,44 +195,41 @@ public:
SAL_INFO( "tubes", "Populating contact list dialog" );
maList.Clear();
maACs.clear();
- ContactList *pContacts = TeleManager::getContactList();
- if ( pContacts )
+
+ AccountContactPairV aPairs = TeleManager::getContacts();
+ AccountContactPairV::iterator it;
+ // make sure we have enough memory to not need re-allocation
+ // which would invalidate pointers stored in maList entries
+ maACs.reserve( aPairs.size() );
+ for( it = aPairs.begin(); it != aPairs.end(); ++it )
{
- AccountContactPairV aPairs = pContacts->getContacts();
- AccountContactPairV::iterator it;
- // make sure we have enough memory to not need re-allocation
- // which would invalidate pointers stored in maList entries
- maACs.reserve( aPairs.size() );
- for( it = aPairs.begin(); it != aPairs.end(); ++it )
+ Image aImage;
+ GFile *pAvatarFile = tp_contact_get_avatar_file( it->second );
+ if( pAvatarFile )
{
- Image aImage;
- GFile *pAvatarFile = tp_contact_get_avatar_file( it->second );
- if( pAvatarFile )
+ const rtl::OUString sAvatarFileUrl = fromUTF8( g_file_get_path ( pAvatarFile ) );
+ Graphic aGraphic;
+ if( GRFILTER_OK == GraphicFilter::LoadGraphic( sAvatarFileUrl, rtl::OUString(""), aGraphic ) )
{
- const rtl::OUString sAvatarFileUrl = fromUTF8( g_file_get_path ( pAvatarFile ) );
- Graphic aGraphic;
- if( GRFILTER_OK == GraphicFilter::LoadGraphic( sAvatarFileUrl, rtl::OUString(""), aGraphic ) )
- {
- BitmapEx aBitmap = aGraphic.GetBitmapEx();
- double fScale = 30.0 / aBitmap.GetSizePixel().Height();
- aBitmap.Scale( fScale, fScale );
- aImage = Image( aBitmap );
- }
+ BitmapEx aBitmap = aGraphic.GetBitmapEx();
+ double fScale = 30.0 / aBitmap.GetSizePixel().Height();
+ aBitmap.Scale( fScale, fScale );
+ aImage = Image( aBitmap );
}
- rtl::OUStringBuffer aEntry( 128 );
- aEntry.append( sal_Unicode( '\t' ) );
- aEntry.append( fromUTF8 ( tp_contact_get_alias( it->second ) ) );
- aEntry.append( sal_Unicode( '\t' ) );
- aEntry.append( fromUTF8 ( tp_contact_get_identifier( it->second ) ) );
- aEntry.append( sal_Unicode( '\t' ) );
- SvLBoxEntry* pEntry = maList.InsertEntry( aEntry.makeStringAndClear(), aImage, aImage );
- // FIXME: ref the TpAccount, TpContact ...
- maACs.push_back( AccountContactPair( it->first, it->second ) );
- pEntry->SetUserData( &maACs.back() );
-
- g_object_unref (it->first);
- g_object_unref (it->second);
}
+ rtl::OUStringBuffer aEntry( 128 );
+ aEntry.append( sal_Unicode( '\t' ) );
+ aEntry.append( fromUTF8 ( tp_contact_get_alias( it->second ) ) );
+ aEntry.append( sal_Unicode( '\t' ) );
+ aEntry.append( fromUTF8 ( tp_contact_get_identifier( it->second ) ) );
+ aEntry.append( sal_Unicode( '\t' ) );
+ SvLBoxEntry* pEntry = maList.InsertEntry( aEntry.makeStringAndClear(), aImage, aImage );
+ // FIXME: ref the TpAccount, TpContact ...
+ maACs.push_back( AccountContactPair( it->first, it->second ) );
+ pEntry->SetUserData( &maACs.back() );
+
+ g_object_unref (it->first);
+ g_object_unref (it->second);
}
Show();
}
diff --git a/tubes/source/manager.cxx b/tubes/source/manager.cxx
index ed6a0a2a749b..fde9281da516 100644
--- a/tubes/source/manager.cxx
+++ b/tubes/source/manager.cxx
@@ -31,7 +31,6 @@
#include <tubes/collaboration.hxx>
#include <tubes/conference.hxx>
#include <tubes/constants.h>
-#include <tubes/contact-list.hxx>
#include <tubes/file-transfer-helper.h>
#include <com/sun/star/uno/Sequence.hxx>
@@ -91,7 +90,6 @@ public:
static bool mbAccountManagerReady;
static bool mbAccountManagerReadyHandlerInvoked;
static bool mbChannelReadyHandlerInvoked;
- ContactList* mpContactList;
OString msCurrentUUID;
OString msNameSuffix;
typedef std::map< OString, TeleConference* > MapStringConference;
@@ -100,6 +98,8 @@ public:
DemoConferences maDemoConferences;
typedef std::set< Collaboration* > Collaborations;
Collaborations maCollaborations;
+ typedef std::set< TpContact* > RegisteredContacts;
+ RegisteredContacts maRegisteredContacts;
TeleManagerImpl();
~TeleManagerImpl();
@@ -756,12 +756,90 @@ TeleConference* TeleManager::startBuddySession( TpAccount *pAccount, TpContact *
return pConference;
}
-ContactList* TeleManager::getContactList()
+static bool tb_presence_is_online( const TpConnectionPresenceType& presence )
{
- if (!pImpl->mpContactList)
- pImpl->mpContactList = new ContactList (pImpl->mpAccountManager);
+ switch (presence)
+ {
+ case TP_CONNECTION_PRESENCE_TYPE_UNSET:
+ case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
+ return false;
+ case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
+ case TP_CONNECTION_PRESENCE_TYPE_AWAY:
+ case TP_CONNECTION_PRESENCE_TYPE_EXTENDED_AWAY:
+ case TP_CONNECTION_PRESENCE_TYPE_HIDDEN:
+ case TP_CONNECTION_PRESENCE_TYPE_BUSY:
+ return true;
+ case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
+ case TP_CONNECTION_PRESENCE_TYPE_ERROR:
+ default:
+ return false;
+ }
+}
+
+static bool tb_contact_is_online( TpContact *contact )
+{
+ return tb_presence_is_online (tp_contact_get_presence_type (contact));
+}
+
+static void presence_changed_cb( TpContact* /* contact */,
+ guint /* type */,
+ gchar* /* status */,
+ gchar* /* message */,
+ gpointer /* pContactList*/ )
+{
+ TeleManager::displayAllContacts();
+}
+
+AccountContactPairV TeleManager::getContacts()
+{
+ GList *accounts;
+ AccountContactPairV pairs;
+
+ for (accounts = tp_account_manager_get_valid_accounts (pImpl->mpAccountManager);
+ accounts != NULL;
+ accounts = g_list_delete_link (accounts, accounts))
+ {
+ TpAccount *account = reinterpret_cast<TpAccount *>(accounts->data);
+ TpConnection *connection = tp_account_get_connection (account);
+ TpContact *self;
+ GPtrArray *contacts;
+ guint i;
+
+ /* Verify account is online and received its contact list. If state is not
+ * SUCCESS this means we didn't received the roster from server yet and
+ * we would have to wait for the "notify:contact-list-state" signal. */
+ if (connection == NULL ||
+ tp_connection_get_contact_list_state (connection) !=
+ TP_CONTACT_LIST_STATE_SUCCESS)
+ continue;
+
+ self = tp_connection_get_self_contact (connection);
+ contacts = tp_connection_dup_contact_list (connection);
+ for (i = 0; i < contacts->len; i++)
+ {
+ TpContact *contact =
+ reinterpret_cast<TpContact *>(g_ptr_array_index (contacts, i));
+ if (pImpl->maRegisteredContacts.find (contact) == pImpl->maRegisteredContacts.end())
+ {
+ pImpl->maRegisteredContacts.insert (contact);
+ g_signal_connect (contact, "presence-changed",
+ G_CALLBACK (presence_changed_cb), NULL );
+ }
+
+ if (contact != self &&
+ tb_contact_is_online (contact))
+ {
+ g_object_ref (account);
+ g_object_ref (contact);
+
+ AccountContactPair pair(account, contact);
+ pairs.push_back(pair);
+ }
+ }
+ g_ptr_array_unref (contacts);
+ }
- return pImpl->mpContactList;
+ return pairs;
}
rtl::OString TeleManager::getFullClientName()
@@ -823,8 +901,7 @@ TeleManagerImpl::TeleManagerImpl()
mpFactory( NULL),
mpClient( NULL),
mpFileTransferClient( NULL),
- mpAccountManager( NULL),
- mpContactList( NULL)
+ mpAccountManager( NULL)
{
g_type_init();
}
@@ -850,8 +927,6 @@ TeleManagerImpl::~TeleManagerImpl()
g_object_unref( mpFactory);
if (mpAccountManager)
g_object_unref( mpAccountManager);
- if (mpContactList)
- delete mpContactList;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */