sc/source/ui/collab/contacts.cxx | 25 +++++++++++++++++++++---- sc/source/ui/inc/docsh.hxx | 1 + tubes/inc/tubes/manager.hxx | 8 +++++--- tubes/source/manager.cxx | 26 ++++++++++++-------------- 4 files changed, 39 insertions(+), 21 deletions(-)
New commits: commit c2412e1f2a6c78f491b55c097b3f8a70fd6343ed Author: Matúš Kukan <matus.ku...@gmail.com> Date: Sun Jul 1 23:43:33 2012 +0200 tubes: correctly set pDocFunc diff --git a/sc/source/ui/collab/contacts.cxx b/sc/source/ui/collab/contacts.cxx index bfc7710..078bcdd 100644 --- a/sc/source/ui/collab/contacts.cxx +++ b/sc/source/ui/collab/contacts.cxx @@ -74,7 +74,7 @@ class TubeContacts : public ModelessDialog boost::shared_ptr<ScDocFuncDirect> pDirect( new ScDocFuncDirect( *pScDocShell ) ); boost::shared_ptr<ScDocFuncRecv> pReceiver( new ScDocFuncRecv( pDirect ) ); pSender = new ScDocFuncSend( *pScDocShell, pReceiver ); - pDocFunc = pSender; + pScDocShell->SetDocFunc( pSender ); } // This is a hack to work around: // `error registering client handler: Name diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx index a00e98e..827a3e9 100644 --- a/sc/source/ui/inc/docsh.hxx +++ b/sc/source/ui/inc/docsh.hxx @@ -241,6 +241,7 @@ public: ScDocument* GetDocument() { return &aDocument; } ScDocFunc& GetDocFunc() { return *pDocFunc; } + void SetDocFunc( ScDocFunc *pDF ) { pDocFunc = pDF; } SfxPrinter* GetPrinter( sal_Bool bCreateIfNotExist = sal_True ); sal_uInt16 SetPrinter( SfxPrinter* pNewPrinter, sal_uInt16 nDiffFlags = SFX_PRINTER_ALL ); commit da2da6094b879157efb1f501c440e49917855971 Author: Matúš Kukan <matus.ku...@gmail.com> Date: Sat Jun 30 12:52:57 2012 +0200 tubes: make TeleManager::startGroupSession work and use it diff --git a/sc/source/ui/collab/contacts.cxx b/sc/source/ui/collab/contacts.cxx index d1f27ec..bfc7710 100644 --- a/sc/source/ui/collab/contacts.cxx +++ b/sc/source/ui/collab/contacts.cxx @@ -107,6 +107,21 @@ class TubeContacts : public ModelessDialog } } + void StartGroupSession() + { + AccountContact *pAC = NULL; + if (maList.FirstSelected()) + pAC = static_cast<AccountContact*> (maList.FirstSelected()->GetUserData()); + if (pAC) + { + TpAccount* pAccount = pAC->mpAccount; + fprintf( stderr, "picked %s\n", tp_account_get_display_name( pAccount ) ); + TeleManager *pManager = TeleManager::get(); + if (!pManager->startGroupSession( pAccount, rtl::OUString("liboroom"), rtl::OUString("conference.jabber.org") )) + fprintf( stderr, "could not start group session\n" ); + } + } + public: TubeContacts() : ModelessDialog( NULL, ScResId( RID_SCDLG_CONTACTS ) ), @@ -188,7 +203,11 @@ public: IMPL_LINK_NOARG( TubeContacts, BtnConnectHdl ) { +#if 0 StartBuddySession(); +#else + StartGroupSession(); +#endif Close(); return 0; } diff --git a/tubes/inc/tubes/manager.hxx b/tubes/inc/tubes/manager.hxx index c780fd2..326cc51 100644 --- a/tubes/inc/tubes/manager.hxx +++ b/tubes/inc/tubes/manager.hxx @@ -101,9 +101,11 @@ public: */ ContactList* getContactList() const; -#if 0 /** Start a group session in a MUC. + @param pAccount + The account to use. This must be a valid Jabber account. + @param rConferenceRoom The MUC to be created/joined, e.g. "LibreOffice". If empty, the conference's UUID is used. @@ -113,9 +115,9 @@ public: empty, only the conference's UUID is used and rConferenceRoom is ignored, hopefully resulting in a local DBus tube. */ - bool startGroupSession( const rtl::OUString& rConferenceRoom, + bool startGroupSession( TpAccount *pAccount, + const rtl::OUString& rConferenceRoom, const rtl::OUString& rConferenceServer ); -#endif /** Start a session with a buddy. diff --git a/tubes/source/manager.cxx b/tubes/source/manager.cxx index 2e0cd3e..06b1533 100644 --- a/tubes/source/manager.cxx +++ b/tubes/source/manager.cxx @@ -442,8 +442,6 @@ bool TeleManager::connect() /* TODO: setup filters for LibreOfficeCalc, LibreOfficeWriter, ... */ -/* FIXME: once we can handle MUCs, this is additional to buddy channels! */ -#if 0 // Setup client handler for MUC channels with our service. tp_base_client_take_handler_filter( pImpl->mpClient, tp_asv_new( @@ -451,7 +449,6 @@ bool TeleManager::connect() TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_ROOM, TP_PROP_CHANNEL_TYPE_DBUS_TUBE_SERVICE_NAME, G_TYPE_STRING, getFullServiceName().getStr(), NULL)); -#endif if (!tp_base_client_register( pImpl->mpClient, &pError)) { @@ -497,18 +494,16 @@ bool TeleManager::connect() } -#if 0 /* TODO: factor out common code with startBuddySession() */ -bool TeleManager::startGroupSession( const rtl::OUString& rUConferenceRoom, const rtl::OUString& rUConferenceServer ) +bool TeleManager::startGroupSession( TpAccount *pAccount, + const rtl::OUString& rUConferenceRoom, + const rtl::OUString& rUConferenceServer ) { INFO_LOGGER( "TeleManager::startGroupSession"); - if (!getMyAccount()) - return false; - OString aSessionId( TeleManager::createUuid()); - TeleConferencePtr pConference( new TeleConference( this, NULL, aSessionId)); + TeleConferencePtr pConference( new TeleConference( this, NULL, NULL, aSessionId)); maConferences.push_back( pConference); /* TODO: associate the document with this session and conference */ @@ -528,10 +523,9 @@ bool TeleManager::startGroupSession( const rtl::OUString& rUConferenceRoom, cons /* FIXME: else? bail out? we have only a session ID without server then */ } OString aTarget( aBuf.makeStringAndClear()); - pConference->setTarget( aTarget); SAL_INFO( "tubes", "TeleManager::startGroupSession: creating channel request from " - << maAccountID.getStr() << " to " << aTarget.getStr()); + << tp_account_get_path_suffix( pAccount ) << " to " << aTarget.getStr() ); // MUC request GHashTable* pRequest = tp_asv_new( @@ -542,11 +536,13 @@ bool TeleManager::startGroupSession( const rtl::OUString& rUConferenceRoom, cons NULL); TpAccountChannelRequest * pChannelRequest = tp_account_channel_request_new( - mpAccount, pRequest, TP_USER_ACTION_TIME_NOT_USER_ACTION); - g_hash_table_unref( pRequest); + pAccount, pRequest, TP_USER_ACTION_TIME_NOT_USER_ACTION); SAL_WARN_IF( !pChannelRequest, "tubes", "TeleManager::startGroupSession: no channel"); if (!pChannelRequest) + { + g_hash_table_unref( pRequest); return false; + } setChannelReadyHandlerInvoked( false); @@ -555,9 +551,11 @@ bool TeleManager::startGroupSession( const rtl::OUString& rUConferenceRoom, cons iterateLoop( &TeleManager::isChannelReadyHandlerInvoked); + g_object_unref( pChannelRequest); + g_hash_table_unref( pRequest); + return pConference->getChannel() != NULL && pConference->isTubeOpen(); } -#endif void TeleManager::ensureLegacyChannel( TpAccount* pAccount, TpContact* pBuddy ) commit ccb249ad2d1765f7e76cc687bcfd2c16319c11f3 Author: Matúš Kukan <matus.ku...@gmail.com> Date: Sat Jun 30 11:48:22 2012 +0200 tubes: use TeleManager::get() also here diff --git a/sc/source/ui/collab/contacts.cxx b/sc/source/ui/collab/contacts.cxx index 0c70585..d1f27ec 100644 --- a/sc/source/ui/collab/contacts.cxx +++ b/sc/source/ui/collab/contacts.cxx @@ -100,12 +100,10 @@ class TubeContacts : public ModelessDialog TpAccount* pAccount = pAC->mpAccount; TpContact* pContact = pAC->mpContact; fprintf( stderr, "picked %s\n", tp_contact_get_identifier( pContact ) ); - // TeleManager has to exist already, false will be ignored: - TeleManager *pManager = TeleManager::get( false ); + TeleManager *pManager = TeleManager::get(); if (!pManager->startBuddySession( pAccount, pContact )) fprintf( stderr, "could not start session with %s\n", tp_contact_get_identifier( pContact ) ); - pManager->unref(); } }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits