26#include <osl/file.hxx>
27#include <rtl/ustrbuf.hxx>
30#include <com/sun/star/beans/PropertyValue.hpp>
31#include <com/sun/star/drawing/GraphicExportFilter.hpp>
32#include <com/sun/star/lang/XServiceName.hpp>
33#include <com/sun/star/presentation/XSlideShowController.hpp>
34#include <com/sun/star/presentation/XPresentationPage.hpp>
35#include <com/sun/star/text/XTextRange.hpp>
43ImagePreparer::ImagePreparer(
44 uno::Reference<presentation::XSlideShowController> _xController,
46 :
Timer(
"sd ImagePreparer"),
48 pTransmitter( aTransmitter )
50 SAL_INFO(
"sdremote",
"ImagePreparer - start" );
58 SAL_INFO(
"sdremote",
"ImagePreparer - stop" );
82 uno::Sequence<sal_Int8> aImageData =
preparePreview( aSlideNumber, 320, 240,
87 OUStringBuffer aStrBuffer;
91 aStrBuffer, RTL_TEXTENCODING_UTF8 );
94 OString
aBuffer =
"slide_preview\n" +
95 OString::number(aSlideNumber) +
96 "\n" + aEncodedShortString +
"\n\n";
103 sal_uInt32 aSlideNumber, sal_uInt32 aWidth, sal_uInt32 aHeight,
107 FileBase::createTempFile(
nullptr,
nullptr, &aFileURL );
109 uno::Reference< drawing::XGraphicExportFilter > xFilter =
110 drawing::GraphicExportFilter::create( ::comphelper::getProcessComponentContext() );
113 return uno::Sequence<sal_Int8>();
115 uno::Reference< lang::XComponent > xSourceDoc(
117 uno::UNO_QUERY_THROW );
119 xFilter->setSourceDocument( xSourceDoc );
121 uno::Sequence< beans::PropertyValue > aFilterData{
127 uno::Sequence< beans::PropertyValue > aProps{
133 xFilter->filter( aProps );
135 File aFile(aFileURL);
136 if (aFile.open(0) != osl::File::E_None)
137 return uno::Sequence<sal_Int8>();
141 aFile.getSize( rSize );
142 uno::Sequence<sal_Int8> aContents( rSize );
144 aFile.read( aContents.getArray(), rSize, aRead );
146 aContents.realloc(aRead);
149 File::remove( aFileURL );
159 if ( aNotes.isEmpty() )
168 OString::number(
static_cast<sal_Int32
>(aSlideNumber) ) +
186 uno::Reference<css::drawing::XDrawPage> aNotesPage;
187 uno::Reference< drawing::XDrawPage > xSourceDoc(
189 uno::UNO_SET_THROW );
190 uno::Reference<presentation::XPresentationPage> xPresentationPage(
191 xSourceDoc, UNO_QUERY);
192 if (xPresentationPage.is())
193 aNotesPage = xPresentationPage->getNotesPage();
197 static constexpr OUStringLiteral sNotesShapeName (
198 u"com.sun.star.presentation.NotesShape" );
199 static constexpr OUStringLiteral sTextShapeName (
200 u"com.sun.star.drawing.TextShape" );
206 sal_Int32
nCount (aNotesPage->getCount());
210 uno::Reference<lang::XServiceName> xServiceName (
211 aNotesPage->getByIndex(
nIndex), UNO_QUERY);
212 if (xServiceName.is()
213 && xServiceName->getServiceName() == sNotesShapeName)
215 uno::Reference<text::XTextRange> xText (xServiceName, UNO_QUERY);
218 aRet.append(xText->getString() +
"<br/>");
223 uno::Reference<drawing::XShapeDescriptor> xShapeDescriptor (
224 aNotesPage->getByIndex(
nIndex), UNO_QUERY);
225 if (xShapeDescriptor.is())
227 OUString
sType (xShapeDescriptor->getShapeType());
228 if (
sType == sNotesShapeName ||
sType == sTextShapeName)
230 uno::Reference<text::XTextRange> xText (
231 aNotesPage->getByIndex(
nIndex), UNO_QUERY);
234 aRet.append(xText->getString() +
"<br/>");
242 for ( sal_Int32
i = 0;
i < aRet.getLength();
i++ )
244 if ( aRet[
i] ==
'\n' )
247 aRet.insert(
i+1,
"br/>" );
void SetTimeout(sal_uInt64 nTimeoutMs)
virtual void Start(bool bStartTimer=true) override
static void encode(OUStringBuffer &aStrBuffer, const css::uno::Sequence< sal_Int8 > &aPass)
virtual void Invoke() override
void sendPreview(sal_uInt32 aSlideNumber)
virtual ~ImagePreparer() override
Transmitter * pTransmitter
void sendNotes(sal_uInt32 aSlideNumber)
css::uno::Sequence< sal_Int8 > preparePreview(sal_uInt32 aSlideNumber, sal_uInt32 aWidth, sal_uInt32 aHeight, sal_uInt64 &rSize)
sal_uInt32 mnSendingSlide
OString prepareNotes(sal_uInt32 aSlideNumber)
css::uno::Reference< css::presentation::XSlideShowController > xController
void addMessage(const OString &aMessage, const Priority aPriority)
#define SAL_INFO(area, stream)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
Reference< XController > xController
std::unique_ptr< char[]> aBuffer