Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
466edaa9
Kaydet (Commit)
466edaa9
authored
Agu 20, 2012
tarafından
Matúš Kukan
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
tubes: move getContacts() to TeleManager where it belongs, I believe
Change-Id: I69ca3bde24890d809d8fad60398687c54aa1ca54
üst
f72ff01d
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
126 additions
and
255 deletions
+126
-255
CppunitTest_tubes_test.mk
tubes/CppunitTest_tubes_test.mk
+0
-5
Library_tubes.mk
tubes/Library_tubes.mk
+0
-1
contact-list.hxx
tubes/inc/tubes/contact-list.hxx
+0
-62
manager.hxx
tubes/inc/tubes/manager.hxx
+10
-4
test_manager.cxx
tubes/qa/test_manager.cxx
+1
-2
contact-list.cxx
tubes/source/contact-list.cxx
+0
-137
contacts.cxx
tubes/source/contacts.cxx
+30
-34
manager.cxx
tubes/source/manager.cxx
+85
-10
No files found.
tubes/CppunitTest_tubes_test.mk
Dosyayı görüntüle @
466edaa9
...
...
@@ -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 \
...
...
tubes/Library_tubes.mk
Dosyayı görüntüle @
466edaa9
...
...
@@ -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 \
))
...
...
tubes/inc/tubes/contact-list.hxx
deleted
100644 → 0
Dosyayı görüntüle @
f72ff01d
/* -*- 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: */
tubes/inc/tubes/manager.hxx
Dosyayı görüntüle @
466edaa9
...
...
@@ -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
prepar
eAccountManager().
/** Fetches the contact list.
Is non-functional until
creat
eAccountManager().
*/
// 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
();
...
...
tubes/qa/test_manager.cxx
Dosyayı görüntüle @
466edaa9
...
...
@@ -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
::
getContact
List
()
->
getContact
s
();
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. */
...
...
tubes/source/contact-list.cxx
deleted
100644 → 0
Dosyayı görüntüle @
f72ff01d
/* -*- 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: */
tubes/source/contacts.cxx
Dosyayı görüntüle @
466edaa9
...
...
@@ -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
;
G
File
*
pAvatarFile
=
tp_contact_get_avatar_file
(
it
->
second
)
;
if
(
pAvatarFile
)
const
rtl
::
OUString
sAvatarFileUrl
=
fromUTF8
(
g_file_get_path
(
pAvatarFile
)
)
;
G
raphic
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
();
}
...
...
tubes/source/manager.cxx
Dosyayı görüntüle @
466edaa9
...
...
@@ -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: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment