Kaydet (Commit) 53720694 authored tarafından Michael Meeks's avatar Michael Meeks Kaydeden (comit) Matúš Kukan

tubes: add hooks for send / recv file (untested)

üst cbe4cb77
......@@ -31,9 +31,11 @@
#include <tubes/conference.hxx>
#include <tubes/contact-list.hxx>
ScCollaboration::ScCollaboration( const Link& rLink )
ScCollaboration::ScCollaboration( const Link& rLinkPacket,
const Link& rLinkFile )
:
maLink( rLink),
maLinkPacket( rLinkPacket ),
maLinkFile( rLinkFile ),
mpAccount( NULL),
mpContact( NULL),
mpManager( NULL)
......@@ -51,11 +53,28 @@ ScCollaboration::~ScCollaboration()
}
void ScCollaboration::receivedFile( rtl::OUString &rFileURL )
{
fprintf( stderr, "file recieved '%s'\n",
rtl::OUStringToOString( rFileURL, RTL_TEXTENCODING_UTF8 ).getStr() );
if ( maLinkFile.IsSet() )
maLinkFile.Call( &rFileURL );
}
extern "C" {
void file_recv_cb( rtl::OUString &localUri, void* pUserData )
{
ScCollaboration *pCollab = reinterpret_cast<ScCollaboration *>( pUserData );
pCollab->receivedFile( localUri );
}
}
bool ScCollaboration::initManager()
{
mpManager = new TeleManager( maLink);
mpManager = new TeleManager( maLinkPacket );
bool bOk = mpManager->connect();
mpManager->prepareAccountManager();
mpManager->setFileReceivedCallback( file_recv_cb, (void *)this );
return bOk;
}
......@@ -97,4 +116,16 @@ bool ScCollaboration::recvPacket( rtl::OString& rString, TeleConference* pConfer
return bOk;
}
extern "C" {
static void file_sent_cb( bool aSuccess, void* /* pUserData */ )
{
fprintf( stderr, "File send %s\n", aSuccess ? "success" : "failed" );
}
}
void ScCollaboration::sendFile( rtl::OUString &rFileURL )
{
mpManager->sendFile( rFileURL, file_sent_cb, NULL );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -37,9 +37,12 @@
#include <tubes/conference.hxx>
// new file send/recv fun ...
#include <com/sun/star/uno/Sequence.hxx>
#include <unotools/tempfile.hxx>
#include <unotools/localfilehelper.hxx>
#include <comphelper/mediadescriptor.hxx>
#include <com/sun/star/frame/XLoadable.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/document/XDocumentRecovery.hpp>
namespace css = ::com::sun::star;
......@@ -253,6 +256,7 @@ public:
}
DECL_LINK( ReceiverCallback, TeleConference* );
DECL_LINK( ReceiveFileCallback, rtl::OUString * );
void RecvMessage( const rtl::OString &rString )
{
......@@ -299,6 +303,38 @@ IMPL_LINK( ScDocFuncRecv, ReceiverCallback, TeleConference*, pConference )
return 0;
}
IMPL_LINK( ScDocFuncRecv, ReceiveFileCallback, rtl::OUString *, pStr )
{
fprintf( stderr, "incoming file '%s'\n",
rtl::OUStringToOString( *pStr, RTL_TEXTENCODING_UTF8 ).getStr() );
css::uno::Sequence < css::beans::PropertyValue > aLoadArgs(5);
aLoadArgs[0].Name = rtl::OUString( "URL" );
aLoadArgs[0].Value <<= (*pStr);
aLoadArgs[1].Name = rtl::OUString( "FilterName" );
aLoadArgs[1].Value <<= rtl::OUString( "calc8" );
aLoadArgs[2].Name = rtl::OUString( "Referer" );
aLoadArgs[2].Value <<= rtl::OUString( "" );
// no interaction handler ?
aLoadArgs[3].Name = rtl::OUString( "MacroExecutionMode" );
aLoadArgs[3].Value <<= sal_Int32( 3 );
aLoadArgs[4].Name = rtl::OUString( "UpdateDocMode" );
aLoadArgs[4].Value <<= sal_Int32( 2 );
try
{
css::uno::Reference < css::frame::XLoadable > xLoad(
rDocShell.GetBaseModel(), css::uno::UNO_QUERY_THROW );
xLoad->load( aLoadArgs );
}
catch ( css::uno::Exception& )
{
fprintf( stderr, "exception when loading !\n" );
}
return 0;
}
class ScDocFuncSend : public ScDocFunc
{
ScDocFuncRecv *mpChain;
......@@ -337,7 +373,9 @@ class ScDocFuncSend : public ScDocFunc
fprintf( stderr, "Temp file is '%s'\n",
rtl::OUStringToOString( aFileURL, RTL_TEXTENCODING_UTF8 ).getStr() );
}
mpCollab->sendFile( aFileURL );
}
public:
// FIXME: really ScDocFunc should be an abstract base, so
......@@ -478,7 +516,9 @@ SC_DLLPRIVATE ScDocFunc *ScDocShell::CreateDocFunc()
ScDocFuncRecv* pReceiver = new ScDocFuncRecv( *this, new ScDocFuncDirect( *this ) );
ScDocFuncSend* pSender = new ScDocFuncSend( *this, pReceiver );
bool bOk = true;
ScCollaboration* pCollab = new ScCollaboration( LINK( pReceiver, ScDocFuncRecv, ReceiverCallback));
ScCollaboration* pCollab = new ScCollaboration(
LINK( pReceiver, ScDocFuncRecv, ReceiverCallback),
LINK( pReceiver, ScDocFuncRecv, ReceiveFileCallback) );
bOk = bOk && pCollab->initManager();
bOk = bOk && pCollab->initAccountContact();
bOk = bOk && pCollab->startCollaboration();
......
......@@ -36,7 +36,7 @@ typedef struct _TpContact TpContact;
typedef struct _TpAccount TpAccount;
class TeleManager;
class TeleConference;
namespace rtl { class OString; }
namespace rtl { class OString; class OUString; }
class ScCollaboration
{
......@@ -44,8 +44,11 @@ public:
/** @param rLink
Callback when a packet is received, called with TeleConference*
@param rLink
Callback when a file is received, called with TeleConference*
*/
ScCollaboration( const Link& rLink );
ScCollaboration( const Link& rLinkPacket,
const Link& rLinkFile );
~ScCollaboration();
bool initManager();
......@@ -53,10 +56,13 @@ public:
bool startCollaboration();
bool sendPacket( const rtl::OString& rString );
bool recvPacket( rtl::OString& rString, TeleConference* pConference );
void sendFile( rtl::OUString &rFileURL );
void receivedFile( rtl::OUString &rFileURL );
private:
Link maLink;
Link maLinkPacket;
Link maLinkFile;
TpAccount* mpAccount;
TpContact* mpContact;
TeleManager* mpManager;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment