summaryrefslogtreecommitdiff
path: root/tubes
diff options
context:
space:
mode:
Diffstat (limited to 'tubes')
-rw-r--r--tubes/CppunitTest_tubes_test.mk5
-rw-r--r--tubes/Library_tubes.mk1
-rw-r--r--tubes/inc/tubes/contact-list.hxx62
-rw-r--r--tubes/inc/tubes/manager.hxx14
-rw-r--r--tubes/qa/test_manager.cxx3
-rw-r--r--tubes/source/contact-list.cxx137
-rw-r--r--tubes/source/contacts.cxx64
-rw-r--r--tubes/source/manager.cxx95
8 files changed, 126 insertions, 255 deletions
diff --git a/tubes/CppunitTest_tubes_test.mk b/tubes/CppunitTest_tubes_test.mk
index f40f0f41ce98..f60a1b0fd174 100644
--- a/tubes/CppunitTest_tubes_test.mk
+++ b/tubes/CppunitTest_tubes_test.mk
@@ -30,11 +30,6 @@ $(eval $(call gb_CppunitTest_add_exception_objects,tubes_test, \
tubes/qa/test_manager \
))
-$(eval $(call gb_CppunitTest_set_include,tubes_test, \
- -I$(SRCDIR)/tubes/inc \
- $$(INCLUDE) \
-))
-
$(eval $(call gb_CppunitTest_use_libraries,tubes_test, \
sal \
tubes \
diff --git a/tubes/Library_tubes.mk b/tubes/Library_tubes.mk
index 1c20e2b29b74..5ef4cb407980 100644
--- a/tubes/Library_tubes.mk
+++ b/tubes/Library_tubes.mk
@@ -60,7 +60,6 @@ $(eval $(call gb_Library_use_externals,tubes,\
$(eval $(call gb_Library_add_exception_objects,tubes,\
tubes/source/collaboration \
tubes/source/conference \
- tubes/source/contact-list \
tubes/source/contacts \
tubes/source/manager \
))
diff --git a/tubes/inc/tubes/contact-list.hxx b/tubes/inc/tubes/contact-list.hxx
deleted file mode 100644
index cc4ba29bc28f..000000000000
--- a/tubes/inc/tubes/contact-list.hxx
+++ /dev/null
@@ -1,62 +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.
- */
-
-#ifndef INCLUDED_TUBES_CONTACT_LIST_HXX
-#define INCLUDED_TUBES_CONTACT_LIST_HXX
-
-#include <tubes/tubesdllapi.h>
-
-#include <set>
-#include <utility>
-#include <vector>
-
-typedef struct _TpAccount TpAccount;
-typedef struct _TpContact TpContact;
-typedef struct _TpAccountManager TpAccountManager;
-
-typedef ::std::pair< TpAccount *, TpContact * > AccountContactPair;
-typedef ::std::vector< AccountContactPair > AccountContactPairV;
-
-class ContactList
-{
-public:
- ContactList(TpAccountManager *pAccountManager);
- ~ContactList();
-
- // exported for unit test
- TUBES_DLLPUBLIC AccountContactPairV getContacts();
-
-private:
- TpAccountManager* mpAccountManager;
- std::set< TpContact* > maRegistered;
-
-};
-
-#endif // INCLUDED_TUBES_CONTACT_LIST_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/tubes/inc/tubes/manager.hxx b/tubes/inc/tubes/manager.hxx
index 032f5390f8d8..27dcec7bb585 100644
--- a/tubes/inc/tubes/manager.hxx
+++ b/tubes/inc/tubes/manager.hxx
@@ -33,6 +33,9 @@
#include <tubes/tubesdllapi.h>
#include <rtl/ustring.hxx>
+#include <utility>
+#include <vector>
+
// For testing purposes, we might need more in future.
#define LIBO_TUBES_DBUS_INTERFACE "org.libreoffice.calc"
#define LIBO_TUBES_DBUS_MSG_METHOD "LibOMsg"
@@ -40,12 +43,15 @@
namespace osl { class Mutex; }
class Collaboration;
-class ContactList;
class TeleConference;
class TeleManagerImpl;
typedef struct _TpAccount TpAccount;
typedef struct _TpContact TpContact;
+typedef ::std::pair< TpAccount *, TpContact * > AccountContactPair;
+typedef ::std::vector< AccountContactPair > AccountContactPairV;
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
/** Interface to Telepathy DBus Tubes.
Fragile, not working yet.
@@ -78,11 +84,11 @@ public:
/** Setup client handlers. */
static bool registerClients();
- /** Fetches the contact list. Returns 0 before connect() is called successfully.
- Is non-functional until prepareAccountManager().
+ /** Fetches the contact list.
+ Is non-functional until createAccountManager().
*/
// exported for unit test
- TUBES_DLLPUBLIC static ContactList* getContactList();
+ TUBES_DLLPUBLIC static AccountContactPairV getContacts();
/** Start a demo session where all local documents are shared to each other */
static TeleConference* startDemoSession();
diff --git a/tubes/qa/test_manager.cxx b/tubes/qa/test_manager.cxx
index 2e5543ee81d9..545947de159e 100644
--- a/tubes/qa/test_manager.cxx
+++ b/tubes/qa/test_manager.cxx
@@ -36,7 +36,6 @@
#include <rtl/string.hxx>
#include <rtl/ustring.hxx>
#include <tubes/collaboration.hxx>
-#include <tubes/contact-list.hxx>
#include <tubes/manager.hxx>
#include <unotools/localfilehelper.hxx>
@@ -137,7 +136,7 @@ void TestTeleTubes::testInitTeleManager()
void TestTeleTubes::testContactList()
{
- AccountContactPairV pairs = TeleManager::getContactList()->getContacts();
+ AccountContactPairV pairs = TeleManager::getContacts();
/* Both our accounts are meant to be signed in, and they both should be
* capable of LibreOffice tubes because this test runs after we register
* our handler. */
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: */