[Libreoffice-commits] .: Branch 'feature/remote' - android/sdremote sd/CppunitTest_sd_uimpress.mk sd/Library_sd.mk sd/source

Andrzej J.R. Hunt ajrhunt at kemper.freedesktop.org
Wed Jul 11 09:46:50 PDT 2012


 android/sdremote/src/org/libreoffice/impressremote/TestClient.java                  |    1 
 android/sdremote/src/org/libreoffice/impressremote/communication/Client.java        |   92 +++-
 android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java |   10 
 android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java      |   12 
 sd/CppunitTest_sd_uimpress.mk                                                       |    1 
 sd/Library_sd.mk                                                                    |    1 
 sd/source/ui/remotecontrol/Listener.cxx                                             |  112 ++++++
 sd/source/ui/remotecontrol/Listener.hxx                                             |   48 ++
 sd/source/ui/remotecontrol/Receiver.cxx                                             |  185 +++++++---
 sd/source/ui/remotecontrol/Receiver.hxx                                             |   20 -
 sd/source/ui/remotecontrol/RemoteDialog.cxx                                         |    9 
 sd/source/ui/remotecontrol/RemoteDialog.hxx                                         |    9 
 sd/source/ui/remotecontrol/Server.cxx                                               |   16 
 sd/source/ui/remotecontrol/Server.hxx                                               |   14 
 14 files changed, 444 insertions(+), 86 deletions(-)

New commits:
commit b184da96cceac33da76ae8e9fc34564a772f07dc
Author: Andrzej J. R. Hunt <andrzej at ahunt.org>
Date:   Wed Jul 11 17:44:41 2012 +0100

    Image export, encoding and decoding. Protocol improvements.
    
    Change-Id: Ibbc7ac02c5946a49c1cd777abc2853fe7e158009

diff --git a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java b/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
index e275efb..ff25d0f 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
@@ -77,6 +77,7 @@ public class TestClient extends Activity {
 	}
 
 	void doUnbindService() {
+		mCommunicationService.disconnect();
 		mCommunicationService.setActivityMessenger(null);
 		if (mIsBound) {
 			unbindService(mConnection);
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Client.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Client.java
index 7014d78..049950a 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Client.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Client.java
@@ -29,48 +29,70 @@ public abstract class Client {
 	private Receiver mReceiver;
 
 	public void setReceiver(Receiver aReceiver) {
-		aReceiver = mReceiver;
+		mReceiver = aReceiver;
 	}
 
-	private void listen() {
-		ByteArrayBuffer aBuffer = new ByteArrayBuffer(10);
-		byte aTemp;
+	protected void startListening() {
 
-		try {
-			while ((aTemp = (byte) mInputStream.read()) != 0x0d) {
-				aBuffer.append(aTemp);
-			}
-		} catch (IOException e1) {
-			// TODO stream couldn't be opened.
-			e1.printStackTrace();
-		}
+		Thread t = new Thread() {
+			public void run() {
+				listen();
+			};
 
-		String aLengthString;
-		try {
-			aLengthString = new String(aBuffer.toByteArray(), CHARSET);
-		} catch (UnsupportedEncodingException e1) {
-			throw new Error("Specified network encoding [" + CHARSET
-					+ " not available.");
-		}
+		};
+		t.start();
+	}
 
-		int aLength = Integer.parseInt(aLengthString);
+	private void listen() {
+		while (true) {
+			ByteArrayBuffer aBuffer = new ByteArrayBuffer(0);
+			int aTemp;
+			System.out.println("Now listening");
+			try {
+				while ((aTemp =  mInputStream.read()) != 0x0a) {
+					if (aTemp == -1) {
+						System.out.println("EOF Reached!!!");
+					}
+					System.out.println("Char: " + aTemp);
+					aBuffer.append((byte) aTemp);
+				}
+			} catch (IOException e1) {
+				// TODO stream couldn't be opened.
+				e1.printStackTrace();
+			}
+			System.out.println("Escaped the loop!");
+			String aLengthString;
+			try {
+				aLengthString = new String(aBuffer.toByteArray(), CHARSET);
+			} catch (Exception e1) {
+				e1.printStackTrace();
+				throw new Error("Specified network encoding [" + CHARSET
+						+ " not available.");
+			}
 
-		byte[] aCommand = new byte[aLength];
-		try {
-			mInputStream.read(aCommand, 0, aLength);
-		} catch (IOException e) {
-			// TODO close and notify that the connection has closed
-			e.printStackTrace();
-		}
-		String aCommandString;
-		try {
-			aCommandString = new String(aCommand, CHARSET);
-		} catch (UnsupportedEncodingException e) {
-			throw new Error("Specified network encoding [" + CHARSET
-					+ " not available.");
+			int aLength = Integer.parseInt(aLengthString);
+			System.out.println("Lenth = " + aLength);
+			byte[] aCommand = new byte[aLength];
+			try {
+				int readIn = 0;
+				while (readIn < aLength) {
+					readIn += mInputStream.read(aCommand, 0, aLength - readIn);
+//					System.out.println("Read in :" + readIn + " of : "
+//							+ aLength);
+				}
+			} catch (IOException e) {
+				// TODO close and notify that the connection has closed
+				e.printStackTrace();
+			}
+			String aCommandString;
+			try {
+				aCommandString = new String(aCommand, CHARSET);
+			} catch (UnsupportedEncodingException e) {
+				throw new Error("Specified network encoding [" + CHARSET
+						+ " not available.");
+			}
+			mReceiver.parseCommand(aCommandString);
 		}
-		mReceiver.parseCommand(aCommandString);
-
 	}
 
 	private void parseCommand(String aCommand) {
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java b/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
index b51711d..3a2b4bf 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
@@ -4,6 +4,8 @@ import java.io.IOException;
 import java.net.Socket;
 import java.net.UnknownHostException;
 
+import android.os.StrictMode;
+
 /**
  * Standard Network client. Connects to a server using Sockets.
  *
@@ -16,13 +18,16 @@ public class NetworkClient extends Client {
 	private Socket mSocket;
 
 	public NetworkClient(String ipAddress) {
-
+		StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
+				.permitAll().build();
+		StrictMode.setThreadPolicy(policy);
 		System.out.println("Attempting to open port.");
 		try {
 			mSocket = new Socket(ipAddress, PORT);
 			System.out.println("We seem to have opened.");
 			mInputStream = mSocket.getInputStream();
 			mOutputStream = mSocket.getOutputStream();
+			startListening();
 		} catch (UnknownHostException e) {
 			// TODO Tell the user we have a problem
 			e.printStackTrace();
@@ -36,7 +41,8 @@ public class NetworkClient extends Client {
 	@Override
 	public void closeConnection() {
 		try {
-			mSocket.close();
+			if (mSocket != null)
+				mSocket.close();
 		} catch (IOException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
index b6a3c97..a46cd4f 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
@@ -30,6 +30,16 @@ public class Receiver {
 			return;
 		}
 		try {
+//			int aPrinted = 0;
+//			while (aPrinted < aJSONCommandString.length()) {
+//				if (aPrinted + 100 < aJSONCommandString.length())
+//					System.out.println(aJSONCommandString.substring(aPrinted,
+//							aPrinted + 100));
+//				else
+//					System.out.println(aJSONCommandString.substring(aPrinted));
+//				aPrinted += 100;
+//			}
+
 			JSONObject aJSONCommand = new JSONObject(aJSONCommandString);
 			String aInstruction = aJSONCommand.getString("command");
 			if (aInstruction.equals("slide_updated")) {
@@ -47,7 +57,7 @@ public class Receiver {
 				}
 			} else if (aInstruction.equals("slide_preview")) {
 				int aSlideNumber = aJSONCommand.getInt("slide_number");
-				String aImageString = aJSONCommand.getString("image");
+				String aImageString = aJSONCommand.getString("image_preview");
 				byte[] aImage = Base64.decode(aImageString, Base64.DEFAULT);
 				Message aMessage = Message.obtain(null,
 						CommunicationService.MSG_SLIDE_PREVIEW);
diff --git a/sd/CppunitTest_sd_uimpress.mk b/sd/CppunitTest_sd_uimpress.mk
index d7e7f15..1880c3f 100644
--- a/sd/CppunitTest_sd_uimpress.mk
+++ b/sd/CppunitTest_sd_uimpress.mk
@@ -60,6 +60,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sd_uimpress,\
     i18nisolang1 \
     msfilter \
     sal \
+    sax \
     salhelper \
     sb \
     sfx \
diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk
index da17bcd..2f2c4c5 100644
--- a/sd/Library_sd.mk
+++ b/sd/Library_sd.mk
@@ -331,6 +331,7 @@ $(eval $(call gb_Library_add_exception_objects,sd,\
     sd/source/ui/presenter/SlideRenderer \
     sd/source/ui/remotecontrol/Server \
     sd/source/ui/remotecontrol/Receiver \
+    sd/source/ui/remotecontrol/Listener \
     sd/source/ui/slideshow/PaneHider \
     sd/source/ui/slideshow/SlideShowRestarter \
     sd/source/ui/slideshow/showwin \
diff --git a/sd/source/ui/remotecontrol/Listener.cxx b/sd/source/ui/remotecontrol/Listener.cxx
new file mode 100644
index 0000000..699d7a6
--- /dev/null
+++ b/sd/source/ui/remotecontrol/Listener.cxx
@@ -0,0 +1,112 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <cstring>
+
+#include "Listener.hxx"
+
+#include <glib-object.h>
+#include <json-glib/json-glib.h>
+
+using namespace sd;
+using namespace ::com::sun::star::presentation;
+using rtl::OString;
+
+
+Listener::Listener( const css::uno::Reference<XSlideShowController>& rxSlideShowController,
+    osl::StreamSocket aSocket )
+    : ::cppu::WeakComponentImplHelper1< XSlideShowListener >( m_aMutex ),
+      mxSlideShowController(rxSlideShowController),
+      mStreamSocket( aSocket )
+{
+    g_type_init();
+
+
+    if( mxSlideShowController.is() )
+    {
+        // Listen for events from the slide show controller.
+        mxSlideShowController->addSlideShowListener(static_cast<XSlideShowListener*>(this));
+    }
+
+}
+
+Listener::~Listener()
+{
+
+
+}
+
+//----- XSlideShowListener ----------------------------------------------------
+
+void SAL_CALL Listener::paused (void)
+    throw (com::sun::star::uno::RuntimeException)
+{
+}
+
+void SAL_CALL Listener::resumed (void)
+    throw (css::uno::RuntimeException)
+{
+}
+
+void SAL_CALL Listener::slideEnded (sal_Bool bReverse)
+    throw (css::uno::RuntimeException)
+{
+    JsonBuilder *aBuilder = json_builder_new();
+
+
+    json_builder_begin_object( aBuilder );
+    json_builder_set_member_name( aBuilder, "slide_numer");
+    json_builder_add_int_value( aBuilder, 2 );
+    // FIXME: get the slide number
+    json_builder_end_object( aBuilder );
+
+    JsonGenerator *aGen = json_generator_new();
+    JsonNode *aRoot = json_builder_get_root( aBuilder );
+    json_generator_set_root( aGen, aRoot );
+    char *aCommand = json_generator_to_data( aGen, NULL);
+
+    json_node_free( aRoot );
+    g_object_unref ( aGen );
+    g_object_unref ( aBuilder );
+
+    sal_Int32 aLen = strlen( aCommand );
+
+    OString aLengthString = OString::valueOf( aLen );
+    const char *aLengthChar = aLengthString.getStr();
+
+    sal_Int32 aLengthLength = aLengthString.getLength();
+
+    mStreamSocket.write( aLengthChar, aLengthLength );
+    mStreamSocket.write( "\n", 1 );
+    mStreamSocket.write( aCommand, aLen );
+    // Transmit here.
+
+    g_free( aCommand );
+}
+
+void SAL_CALL Listener::hyperLinkClicked (const rtl::OUString &)
+    throw (css::uno::RuntimeException)
+{
+}
+
+void SAL_CALL Listener::slideTransitionStarted (void)
+    throw (css::uno::RuntimeException)
+{
+}
+
+void SAL_CALL Listener::slideTransitionEnded (void)
+    throw (css::uno::RuntimeException)
+{
+}
+
+void SAL_CALL Listener::slideAnimationsEnded (void)
+    throw (css::uno::RuntimeException)
+{
+}
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/sd/source/ui/remotecontrol/Listener.hxx b/sd/source/ui/remotecontrol/Listener.hxx
new file mode 100644
index 0000000..2009074
--- /dev/null
+++ b/sd/source/ui/remotecontrol/Listener.hxx
@@ -0,0 +1,48 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#ifndef _SD_IMPRESSREMOTE_LISTENER_HXX
+#define _SD_IMPRESSREMOTE_LISTENER_HXX
+
+#include <sal/config.h>
+#include <com/sun/star/presentation/XSlideShowListener.hpp>
+#include <com/sun/star/presentation/XSlideShowController.hpp>
+
+#include <cppuhelper/compbase1.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <osl/socket.hxx>
+
+namespace css = ::com::sun::star;
+//using namespace ::com::sun::star::presentation;
+
+namespace sd {
+class Listener
+    : protected ::cppu::BaseMutex,
+      public ::cppu::WeakComponentImplHelper1< css::presentation::XSlideShowListener >
+{
+public:
+    Listener( const css::uno::Reference<css::presentation::XSlideShowController>& rxSlideShowController,
+        osl::StreamSocket aSocket );
+    ~Listener();
+
+    // XSlideShowListener
+    virtual void SAL_CALL paused(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL resumed(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL slideTransitionStarted(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL slideTransitionEnded(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL slideAnimationsEnded(  ) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL slideEnded(sal_Bool bReverse) throw (::com::sun::star::uno::RuntimeException);
+    virtual void SAL_CALL hyperLinkClicked( const ::rtl::OUString& hyperLink ) throw (::com::sun::star::uno::RuntimeException);
+
+private:
+    css::uno::Reference<css::presentation::XSlideShowController> mxSlideShowController;
+    osl::StreamSocket mStreamSocket;
+};
+}
+#endif // _SD_IMPRESSREMOTE_LISTENER_HXX
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/sd/source/ui/remotecontrol/Receiver.cxx b/sd/source/ui/remotecontrol/Receiver.cxx
index a2120b1..9015d79 100644
--- a/sd/source/ui/remotecontrol/Receiver.cxx
+++ b/sd/source/ui/remotecontrol/Receiver.cxx
@@ -1,38 +1,34 @@
-/*************************************************************************
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
  *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2012 Andrzej J.R. Hunt
- *
- * LibreOffice - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * LibreOffice is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * Libreoffice is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with LibreOffice.  If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
 #include "Receiver.hxx"
-#include <cstring>
+#include <string.h>
 #include <com/sun/star/frame/XFramesSupplier.hpp>
+#include <com/sun/star/document/XFilter.hpp>
+#include <com/sun/star/document/XExporter.hpp>
 #include <com/sun/star/uno/RuntimeException.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+
 #include <comphelper/processfactory.hxx>
+#include <osl/file.hxx>
+#include <xmlsec/base64.h>
+#include <rtl/ustrbuf.hxx>
+#include <sax/tools/converter.hxx>
 using namespace sd;
 using namespace ::com::sun::star::presentation;
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::frame;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::document;
+using rtl::OUString;
+using rtl::OString;
+using namespace ::osl;
+
 Receiver::Receiver()
 {
     g_type_init ();
@@ -65,7 +61,7 @@ void Receiver::executeCommand( JsonObject *aObject, Reference<XSlideShowControll
 
 }
 
-void Receiver::parseCommand( const char* aCommand, sal_Int32 size, XSlideShowController *aController )
+void Receiver::parseCommand( const char* aCommand, sal_Int32 size, osl::StreamSocket &aStreamSocket )
 {
     Reference<XSlideShowController> xSlideShowController;
     try {
@@ -78,6 +74,7 @@ void Receiver::parseCommand( const char* aCommand, sal_Int32 size, XSlideShowCon
         Reference<XPresentation2> xPresentation(xPS->getPresentation(), UNO_QUERY_THROW);
         // Throws an exception if now slideshow running
        xSlideShowController =  Reference<XSlideShowController>( xPresentation->getController(), UNO_QUERY_THROW );
+       sendPreview( 1, xSlideShowController, aStreamSocket );
     }
     catch ( com::sun::star::uno::RuntimeException &e )
     {
@@ -107,18 +104,128 @@ void Receiver::parseCommand( const char* aCommand, sal_Int32 size, XSlideShowCon
 
 }
 
-// void preparePreview(sal_Int32 aSlideNumber, Reference<SlideShowController> aController)
-// {
-//     uno::Reference< XDrawPage > aSlide( aController->getSlideByIndex( aSlideNumber ) );
-//
-//     uno::Reference< lang::XMultiServiceFactory > xServiceManager(
-//             ::comphelper::getProcessServiceFactory(), uno::UNO_QUERY_THROW );
-//
-//     uno::Reference< XGraphicExportFilter > xGraphicExportFilter( xServiceManager->createInstance(
-//         "com.sun.star.drawing.GraphicExportFilter" ) , UNO_QUERY_THROW );
-//
-//     xGraphicExportFilter->setSource( aSlide );
 
+void sendPreview(sal_uInt32 aSlideNumber, Reference<XSlideShowController> xSlideShowController, osl::StreamSocket &mStreamSocket )
+{
+
+    sal_uInt64 aSize;
+
+    uno::Sequence<sal_Int8> aData = preparePreview( aSlideNumber, xSlideShowController, 320, 240, aSize );
+
+    rtl::OUStringBuffer aStrBuffer;
+//     char* aDataEncoded = (char*) xmlSecBase64Encode( (xmlSecByte *) aData, aSize, 0 );
+    ::sax::Converter::encodeBase64( aStrBuffer, aData );
+
+    OUString aEncodedString = aStrBuffer.makeStringAndClear();
+    OString aEncodedShortString = rtl::OUStringToOString( aEncodedString, RTL_TEXTENCODING_UTF8 );
+//     aEncodedString.convertToString( &aEncodedShortString, RTL_TEXTENCODING_UTF8 , 0);
+
+    JsonBuilder *aBuilder = json_builder_new();
+
+
+    json_builder_begin_object( aBuilder );
+
+    json_builder_set_member_name( aBuilder, "command" );
+    json_builder_add_string_value( aBuilder, "slide_preview" );
+
+    json_builder_set_member_name( aBuilder, "slide_number" );
+    json_builder_add_int_value( aBuilder, 2 );
+
+    json_builder_set_member_name( aBuilder, "image_preview" );
+    json_builder_add_string_value( aBuilder, aEncodedShortString.getStr() );
+
+    // FIXME: get the slide number
+    json_builder_end_object( aBuilder );
+
+    JsonGenerator *aGen = json_generator_new();
+    JsonNode *aRoot = json_builder_get_root( aBuilder );
+    json_generator_set_root( aGen, aRoot );
+    char *aCommand = json_generator_to_data( aGen, NULL);
+
+    json_node_free( aRoot );
+    g_object_unref ( aGen );
+    g_object_unref ( aBuilder );
+
+    sal_Int32 aLen = strlen( aCommand );
+
+    OString aLengthString = OString::valueOf( aLen );
+    const char *aLengthChar = aLengthString.getStr();
+
+    sal_Int32 aLengthLength = aLengthString.getLength();
+
+    fprintf( stderr, "%s\n", aCommand );
+
+    mStreamSocket.write( aLengthChar, aLengthLength );
+    mStreamSocket.write( "\n", 1 );
+    mStreamSocket.write( aCommand, aLen );
+    // Transmit here.
+
+    g_free( aCommand );
+
+}
+
+Sequence<sal_Int8> preparePreview(sal_uInt32 aSlideNumber, Reference<XSlideShowController> xSlideShowController, sal_uInt32 aWidth, sal_uInt32 aHeight, sal_uInt64 &rSize )
+{
+
+    // Create temp file
+    OUString aFileURL;
+    FileBase::createTempFile( 0, 0, &aFileURL );
+
+
+    uno::Reference< lang::XMultiServiceFactory > xServiceManager(
+            ::comphelper::getProcessServiceFactory(), uno::UNO_QUERY_THROW );
+
+    uno::Reference< XFilter > xFilter( xServiceManager->createInstance(
+        "com.sun.star.drawing.GraphicExportFilter"  ) , UNO_QUERY_THROW );
+
+    uno::Reference< XExporter > xExporter( xFilter, uno::UNO_QUERY_THROW );
+
+
+    uno::Reference< lang::XComponent > xSourceDoc(
+        xSlideShowController->getSlideByIndex( aSlideNumber ) , uno::UNO_QUERY_THROW );
+
+    xExporter->setSourceDocument( xSourceDoc );
+
+    Sequence< beans::PropertyValue > aFilterData(3);
+    aFilterData[0].Name = "PixelWidth";
+    aFilterData[0].Value <<= 2000;
+    aFilterData[1].Name = "PixelHeight";
+    aFilterData[1].Value <<= 2000;
+
+    // Add quality if jpg "Quality" [1-100]
+    // FIXME: is setting color mode needed.
+    aFilterData[2].Name = "ColorMode";
+    aFilterData[2].Value <<= 0; // Color
+
+    uno::Sequence< beans::PropertyValue > aProps(3);
+    aProps[0].Name = "MediaType";
+    aProps[0].Value <<= OUString( "image/png" );
+
+    aProps[1].Name = "URL";
+    aProps[1].Value <<= aFileURL;
+
+    aProps[2].Name = "FilterData";
+    aProps[2].Value <<= aFilterData;
+
+    xFilter->filter( aProps );
+
+    fprintf( stderr, "%s\n", rtl::OUStringToOString( aFileURL , RTL_TEXTENCODING_UTF8 ).getStr() );
+
+    // FIXME: error handling.
+
+    File aFile( aFileURL );
+    aFile.open(0);
+    sal_uInt64 aRead;
+    rSize = 0;
+    aFile.getSize( rSize );
+    uno::Sequence<sal_Int8> aContents( rSize );
+
+    aFile.read( aContents.getArray(), rSize, aRead );
+    aFile.close();
+    File::remove( aFileURL );
+    return aContents;
+
+}
 
 
-// }
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/sd/source/ui/remotecontrol/Receiver.hxx b/sd/source/ui/remotecontrol/Receiver.hxx
index d4087e4..4590cde 100644
--- a/sd/source/ui/remotecontrol/Receiver.hxx
+++ b/sd/source/ui/remotecontrol/Receiver.hxx
@@ -1,12 +1,20 @@
-
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
 #ifndef _SD_IMPRESSREMOTE_RECEIVER_HXX
 #define _SD_IMPRESSREMOTE_RECEIVER_HXX
 
+#include <com/sun/star/presentation/XSlideShowListener.hpp>
 #include <com/sun/star/presentation/XSlideShowController.hpp>
 #include <com/sun/star/presentation/XPresentationSupplier.hpp>
 #include <com/sun/star/presentation/XPresentation.hpp>
 #include <com/sun/star/presentation/XPresentation2.hpp>
-
+#include <osl/socket.hxx>
 #include <stdlib.h>
 #include <glib-object.h>
 #include <json-glib/json-glib.h>
@@ -21,7 +29,8 @@ class Receiver
 public:
     Receiver();
     ~Receiver();
-    void parseCommand( const char* aCommand, sal_Int32 size, XSlideShowController *aController );
+    void parseCommand( const char* aCommand, sal_Int32 size, osl::StreamSocket &aSocket );
+
 
 private:
     void executeCommand( JsonObject *aObject, Reference<XSlideShowController> aController );
@@ -30,4 +39,9 @@ private:
 
 }
 
+Sequence<sal_Int8> preparePreview(sal_uInt32 aSlideNumber, Reference<XSlideShowController> xSlideShowController, sal_uInt32 aWidth, sal_uInt32 aHeight, sal_uInt64 &aSize );
+
+void sendPreview(sal_uInt32 aSlideNumber, Reference<XSlideShowController> xSlideShowController, osl::StreamSocket &mStreamSocket );
+
 #endif // _SD_IMPRESSREMOTE_RECEIVER_HXX
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/sd/source/ui/remotecontrol/RemoteDialog.cxx b/sd/source/ui/remotecontrol/RemoteDialog.cxx
index 3aac753..e2cbc6a 100644
--- a/sd/source/ui/remotecontrol/RemoteDialog.cxx
+++ b/sd/source/ui/remotecontrol/RemoteDialog.cxx
@@ -1,3 +1,11 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
 #include "RemoteDialog.hxx"
 
 
@@ -9,3 +17,4 @@ RemoteDialog::~RemoteDialog()
 {
 }
 
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/sd/source/ui/remotecontrol/RemoteDialog.hxx b/sd/source/ui/remotecontrol/RemoteDialog.hxx
index 1f1e962..417c155 100644
--- a/sd/source/ui/remotecontrol/RemoteDialog.hxx
+++ b/sd/source/ui/remotecontrol/RemoteDialog.hxx
@@ -1,3 +1,11 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
 // SERVER
 #include <stdio.h>
 #include <stdlib.h>
@@ -18,3 +26,4 @@ namespace sd
         };
     }
 }
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/sd/source/ui/remotecontrol/Server.cxx b/sd/source/ui/remotecontrol/Server.cxx
index b4c0613..d838b67 100644
--- a/sd/source/ui/remotecontrol/Server.cxx
+++ b/sd/source/ui/remotecontrol/Server.cxx
@@ -1,4 +1,11 @@
-
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
 #include <stdlib.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
@@ -18,7 +25,6 @@ using rtl::OString;
 Server::Server()
 :  Thread( "ServerThread" ), mSocket(), mReceiver()
 {
-
 }
 
 Server::~Server()
@@ -60,7 +66,7 @@ void Server::listenThread()
         aTempStr = OString( aMessage ); //, (sal_Int32) aLen, CHARSET, 0u
         const sal_Char* aCommandChar = aTempStr.getStr();
 
-        mReceiver.parseCommand( aCommandChar, aTempStr.getLength(), NULL );
+        mReceiver.parseCommand( aCommandChar, aTempStr.getLength(), mStreamSocket );
         delete [] aMessage;
 
         // TODO: deal with transmision errors gracefully.
@@ -82,6 +88,7 @@ void Server::execute()
     }
     while ( true )
     {
+        fprintf( stderr, "Awaiting a connection.\n" );
         mSocket.acceptConnection( mStreamSocket );
         fprintf( stderr, "Accepted a connection!\n" );
         listenThread();
@@ -89,6 +96,8 @@ void Server::execute()
 
 }
 
+
+
 Server *sd::Server::spServer = NULL;
 
 void Server::setup()
@@ -106,3 +115,4 @@ void SdDLL::RegisterRemotes()
   sd::Server::setup();
 
 }
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
diff --git a/sd/source/ui/remotecontrol/Server.hxx b/sd/source/ui/remotecontrol/Server.hxx
index 65b416b..ba6f8cd 100644
--- a/sd/source/ui/remotecontrol/Server.hxx
+++ b/sd/source/ui/remotecontrol/Server.hxx
@@ -1,4 +1,11 @@
-
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
 #ifndef _SD_IMPRESSREMOTE_SERVER_HXX
 #define _SD_IMPRESSREMOTE_SERVER_HXX
 
@@ -8,10 +15,10 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/types.h>
-#include <sys/socket.h>
 #include <netinet/in.h>
 #include <osl/socket.hxx>
 //#include <com/sun/star/presentation/AnimationEffect.hpp>
+#include <com/sun/star/presentation/XSlideShowListener.hpp>
 
 #include <salhelper/thread.hxx>
 
@@ -34,7 +41,7 @@ namespace sd
         private:
             Server();
             ~Server();
-	    static Server *spServer;
+            static Server *spServer;
             osl::AcceptorSocket mSocket;
             osl::StreamSocket mStreamSocket;
             void listenThread();
@@ -44,3 +51,4 @@ namespace sd
 }
 
 #endif // _SD_IMPRESSREMOTE_SERVER_HXX
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file


More information about the Libreoffice-commits mailing list