20 #include <config_features.h>
25 #include <strings.hrc>
30 #include <rtl/ustrbuf.hxx>
31 #include <rtl/string.hxx>
32 #include <rtl/uri.hxx>
33 #include <rtl/bootstrap.hxx>
37 #include <osl/diagnose.h>
38 #include <osl/file.hxx>
39 #include <osl/security.hxx>
45 #include <com/sun/star/lang/IllegalArgumentException.hpp>
46 #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
47 #include <com/sun/star/beans/UnknownPropertyException.hpp>
48 #include <com/sun/star/logging/LogLevel.hpp>
49 #include <com/sun/star/logging/FileHandler.hpp>
50 #include <com/sun/star/logging/SimpleTextFormatter.hpp>
51 #include <com/sun/star/logging/XLogger.hpp>
52 #include <com/sun/star/util/XUpdatable.hpp>
53 #include <com/sun/star/sdbc/XResultSet.hpp>
54 #include <com/sun/star/sdbc/XRow.hpp>
55 #include <com/sun/star/ucb/CommandAbortedException.hpp>
56 #include <com/sun/star/ucb/CommandFailedException.hpp>
57 #include <com/sun/star/ucb/ContentCreationException.hpp>
58 #include <com/sun/star/ucb/XContentAccess.hpp>
59 #include <com/sun/star/ucb/NameClash.hpp>
60 #include <com/sun/star/deployment/DeploymentException.hpp>
61 #include <com/sun/star/deployment/InvalidRemovedParameterException.hpp>
62 #include <com/sun/star/deployment/Prerequisites.hpp>
63 #include <com/sun/star/ucb/UnsupportedCommandException.hpp>
87 explicit MatchTempDir( OUString
const & str ) : m_str( str ) {}
88 bool operator () ( ActivePackages::Entries::value_type
const & v )
const {
89 return v.second.temporaryName.equalsIgnoreAsciiCase( m_str );
93 OUString getExtensionFolder(OUString
const & parentFolder,
94 Reference<ucb::XCommandEnvironment>
const & xCmdEnv,
98 Reference<sdbc::XResultSet> xResultSet(
102 if (xResultSet->next())
104 title = Reference<sdbc::XRow>(
105 xResultSet, UNO_QUERY_THROW )->
getString(1 ) ;
124 Reference<sdbc::XResultSet> xResultSet(
127 while (xResultSet->next())
129 Reference<sdbc::XRow>
xRow( xResultSet, UNO_QUERY_THROW );
130 OUString title( xRow->getString( 1 ) );
132 if ( title ==
"this_is_a_dummy_stream_just_there_as_a_workaround_for_a_temporary_limitation_of_the_storage_api_implementation" )
134 if ( title ==
"META-INF" )
138 Reference<XContentAccess>(
139 xResultSet, UNO_QUERY_THROW )->queryContent(),
144 if (!mediaType.isEmpty())
148 Sequence<css::beans::NamedValue>(),mediaType, sourceContent,
171 dbName = m_activePackages_expanded +
".pmap";
187 Reference<sdbc::XResultSet> xResultSet(
188 StrTitle::createCursor (tempFolder,
192 std::vector<OUString> tempEntries;
193 std::vector<OUString> removedEntries;
194 while (xResultSet->next())
197 Reference<sdbc::XRow>(
198 xResultSet, UNO_QUERY_THROW )->
getString(
200 if (title.endsWith(
"removed", &title))
203 removedEntries.push_back(::rtl::Uri::encode(
204 title, rtl_UriCharClassPchar,
205 rtl_UriEncodeIgnoreEscapes,
206 RTL_TEXTENCODING_UTF8 ) );
210 tempEntries.push_back( ::rtl::Uri::encode(
211 title, rtl_UriCharClassPchar,
212 rtl_UriEncodeIgnoreEscapes,
213 RTL_TEXTENCODING_UTF8 ) );
218 for (
const OUString & tempEntry : tempEntries)
220 const MatchTempDir
match( tempEntry );
221 if (std::none_of( id2temp.begin(), id2temp.end(), match ))
224 makeURL(m_activePackages_expanded, tempEntry ) );
230 if (std::find(removedEntries.begin(), removedEntries.end(), tempEntry) ==
231 removedEntries.end())
247 ::osl::Security aSecurity;
248 aSecurity.getUserName( aUserName );
252 OString osData(reinterpret_cast<const char*>(data.data()),
254 OUString sData = OStringToOUString(
255 osData, RTL_TEXTENCODING_UTF8);
256 if (sData != aUserName)
290 if (e != osl::FileBase::E_NOENT) {
294 if (!o.removeSegment()) {
295 return osl::FileBase::E_INVAL;
298 if (e != osl::FileBase::E_None && e != osl::FileBase::E_EXIST) {
304 bool isMacroURLReadOnly(
const OUString &rMacro )
306 OUString aDirURL( rMacro );
307 ::rtl::Bootstrap::expandMacros( aDirURL );
310 if ( aErr == ::osl::FileBase::E_None )
312 if ( aErr != ::osl::FileBase::E_EXIST )
316 sal_uInt64 nWritten = 0;
317 OUString aFileURL( aDirURL +
"/stamp.sys" );
318 ::osl::File aFile( aFileURL );
320 bError = aFile.open( osl_File_OpenFlag_Read |
321 osl_File_OpenFlag_Write |
322 osl_File_OpenFlag_Create ) != ::osl::FileBase::E_None;
324 bError = aFile.write(
"1", 1, nWritten ) != ::osl::FileBase::E_None;
325 if (aFile.close() != ::osl::FileBase::E_None)
327 if (osl::File::remove( aFileURL ) != ::osl::FileBase::E_None)
331 "desktop.deployment",
332 "local url '" << rMacro <<
"' -> '" << aFileURL <<
"' "
333 << (bError ?
"is" :
"is not") <<
" readonly\n");
341 OUString
const & context )
344 xComponentContext, context );
345 Reference<deployment::XPackageManager> xPackageManager( that );
347 OUString logFile, stamp;
348 if ( context ==
"user" ) {
349 that->
m_activePackages =
"vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/uno_packages";
351 that->
m_registryCache =
"vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/registry";
352 logFile =
"$UNO_USER_PACKAGES_CACHE/log.txt";
364 stamp =
"$UNO_USER_PACKAGES_CACHE";
366 else if ( context ==
"shared" ) {
367 that->
m_activePackages =
"vnd.sun.star.expand:$UNO_SHARED_PACKAGES_CACHE/uno_packages";
369 that->
m_registryCache =
"vnd.sun.star.expand:$SHARED_EXTENSIONS_USER/registry";
370 logFile =
"$SHARED_EXTENSIONS_USER/log.txt";
371 #if !HAVE_FEATURE_READONLY_INSTALLSET
374 stamp =
"$UNO_SHARED_PACKAGES_CACHE";
377 else if ( context ==
"bundled" ) {
380 that->
m_registryCache =
"vnd.sun.star.expand:$BUNDLED_EXTENSIONS_USER/registry";
381 logFile =
"$BUNDLED_EXTENSIONS_USER/log.txt";
385 else if ( context ==
"tmp" ) {
388 that->
m_registryCache =
"vnd.sun.star.expand:$TMP_EXTENSIONS/registry";
389 stamp =
"$TMP_EXTENSIONS";
391 else if (context ==
"bak") {
394 that->
m_registryCache =
"vnd.sun.star.expand:$BAK_EXTENSIONS/registry";
395 stamp =
"$BAK_EXTENSIONS";
398 else if (! context.match(
"vnd.sun.star.tdoc:/")) {
399 throw lang::IllegalArgumentException(
400 "invalid context given: " + context,
401 Reference<XInterface>(), static_cast<sal_Int16>(-1) );
408 if (!stamp.isEmpty())
409 that->
m_readOnly = isMacroURLReadOnly( stamp );
414 rtl::Bootstrap::expandMacros(logFile);
416 const Reference<XLogger> xLogger(logger.
getLogger());
419 Reference<XLogHandler> xFileHandler(css::logging::FileHandler::createWithSettings(xComponentContext, aSeq2));
420 xFileHandler->setLevel(LogLevel::WARNING);
421 xLogger->addLogHandler(xFileHandler);
425 ->createInstanceWithArgumentsAndContext(
426 "com.sun.star.comp.deployment.ProgressLog",
436 return xPackageManager;
444 throw lang::WrappedTargetRuntimeException(
445 (
"[context=\"" + context +
"\"] caught unexpected "
446 + exc.getValueType().getTypeName() +
": " + e.Message),
447 Reference<XInterface>(), exc );
461 if (pContainer !=
nullptr) {
462 pContainer->
forEach<util::XModifyListener>(
463 [
this] (uno::Reference<util::XModifyListener>
const& xListener)
464 {
return xListener->modified(lang::EventObject(static_cast<OWeakObject *>(
this))); });
481 t_pm_helper::disposing();
489 throw lang::WrappedTargetRuntimeException(
490 "caught unexpected exception while disposing...",
491 static_cast<OWeakObject *>(
this), exc );
501 WeakComponentImplHelperBase::dispose();
506 Reference<lang::XEventListener>
const & xListener )
510 WeakComponentImplHelperBase::addEventListener( xListener );
515 Reference<lang::XEventListener>
const & xListener )
519 WeakComponentImplHelperBase::removeEventListener( xListener );
531 Sequence< Reference<deployment::XPackageTypeInfo> >
542 return new AbortChannel;
548 Reference<util::XModifyListener>
const & xListener )
551 rBHelper.addListener(
cppu::UnoType<decltype(xListener)>::
get(), xListener );
556 Reference<util::XModifyListener>
const & xListener )
559 rBHelper.removeListener(
cppu::UnoType<decltype(xListener)>::
get(), xListener );
567 OUString url( ucbContent.
getURL() );
569 if (url.match(
"vnd.sun.star.tdoc:" ) || url.match(
"vnd.sun.star.pkg:" ))
574 catch (
const beans::UnknownPropertyException &) {
576 OSL_ENSURE( !mediaType.isEmpty(),
"### no media-type?!" );
578 if (mediaType.isEmpty())
581 Reference<deployment::XPackage> xPackage(
584 const Reference<deployment::XPackageTypeInfo> xPackageType(
585 xPackage->getPackageType() );
586 OSL_ASSERT( xPackageType.is() );
587 if (xPackageType.is())
588 mediaType = xPackageType->getMediaType();
590 catch (
const lang::IllegalArgumentException &) {
612 OUString tempEntry = aTemp.
GetURL();
613 tempEntry = tempEntry.copy(tempEntry.lastIndexOf(
'/') + 1);
621 if (mediaType.matchIgnoreAsciiCase(
"application/vnd.sun.star.package-bundle") ||
623 mediaType.matchIgnoreAsciiCase(
"application/vnd.sun.star.legacy-package-bundle"))
629 buf.append(
"vnd.sun.star.zip://" );
630 buf.append( ::rtl::Uri::encode( sourceContent.
getURL(),
631 rtl_UriCharClassRegName,
632 rtl_UriEncodeIgnoreEscapes,
633 RTL_TEXTENCODING_UTF8 ) );
638 buf.append(sourceContent.
getURL());
646 title, NameClash::OVERWRITE );
654 DescriptionInfoset info =
659 dbData->
version = info.getVersion();
672 const ::osl::MutexGuard guard(
getMutex() );
681 Reference<deployment::XPackage>
const &
package)
684 OUString fn(package->getName());
685 bool bInstalled =
false;
696 Reference<deployment::XPackage>
const & extension,
697 Reference<task::XAbortChannel>
const & xAbortChannel,
701 OUString(), xAbortChannel, xCmdEnv_);
708 OUString
const & url,
709 css::uno::Sequence<css::beans::NamedValue>
const &
properties,
710 OUString
const & mediaType_,
711 Reference<task::XAbortChannel>
const & xAbortChannel,
719 message =
"You need write permissions to install a shared extension!";
721 message =
"You need write permissions to install this extension!";
722 throw deployment::DeploymentException(
723 message, static_cast<OWeakObject *>(
this),
Any() );
729 xCmdEnv.set( xCmdEnv_ );
734 const OUString title( StrTitle::getTitle( sourceContent ) );
735 const OUString title_enc( ::rtl::Uri::encode(
736 title, rtl_UriCharClassPchar,
737 rtl_UriEncodeIgnoreEscapes,
738 RTL_TEXTENCODING_UTF8 ) );
741 OUString mediaType(mediaType_);
742 if (mediaType.isEmpty())
745 Reference<deployment::XPackage> xPackage;
748 DpResId(RID_STR_COPYING_PACKAGE) + title, xCmdEnv );
771 catch (
const UnsupportedCommandException &) {
776 properties, mediaType, sourceContent, title, &dbData );
785 makeURL( destFolder, title_enc ), mediaType,
false, OUString(), xCmdEnv );
787 OSL_ASSERT( xPackage.is() );
790 bool install =
false;
822 catch (
const CommandFailedException & exc) {
826 catch (
const CommandAbortedException & exc) {
830 catch (
const deployment::DeploymentException & exc) {
837 throw deployment::DeploymentException(
838 DpResId(RID_STR_ERROR_WHILE_ADDING) + url,
839 static_cast<OWeakObject *>(
this), exc );
843 Reference<deployment::XPackage>
const & xPackage,
844 OUString
const & destFolder)
853 OUString url = destFolder.copy(0, destFolder.getLength() - 1);
860 OUString
const &
id, OUString
const & fileName,
861 Reference<task::XAbortChannel>
const & ,
870 xCmdEnv.set( xCmdEnv_ );
873 Reference<deployment::XPackage> xPackage;
875 const ::osl::MutexGuard guard(
getMutex());
900 ::osl::Security aSecurity;
901 aSecurity.getUserName( aUserName );
904 Reference<css::io::XInputStream> xData(
906 reinterpret_cast<sal_Int8 const *>(stamp.getStr()),
907 stamp.getLength() ) );
912 m_xRegistry->packageRemoved(xPackage->getURL(), xPackage->getPackageType()->getMediaType());
921 catch (
const CommandFailedException & exc) {
925 catch (
const CommandAbortedException & exc) {
929 catch (
const deployment::DeploymentException & exc) {
936 throw deployment::DeploymentException(
937 DpResId(RID_STR_ERROR_WHILE_REMOVING) +
id,
938 static_cast<OWeakObject *>(
this), exc );
953 buf.append( ::rtl::Uri::encode( data.
fileName, rtl_UriCharClassPchar,
954 rtl_UriEncodeIgnoreEscapes,
955 RTL_TEXTENCODING_UTF8 ) );
962 OUString
const &
id, OUString
const & fileName,
970 throw lang::IllegalArgumentException(
971 DpResId(RID_STR_NO_SUCH_PACKAGE) +
id,
972 static_cast<OWeakObject *>(
this), static_cast<sal_Int16>(-1) );
977 std::u16string_view
id, ActivePackages::Data
const & data,
980 if (ignoreAlienPlatforms)
982 OUString
type, subType;
986 auto const iter = params.find(OString(
"platform"));
987 if (iter != params.end() && !
platform_fits(iter->second.m_sValue))
988 throw lang::IllegalArgumentException(
989 DpResId(RID_STR_NO_SUCH_PACKAGE) + id,
990 static_cast<OWeakObject *
>(
this),
991 static_cast<sal_Int16>(-1) );
994 Reference<deployment::XPackage> xExtension;
999 if (data.failedPrerequisites ==
"0")
1002 getDeployPath( data ), data.mediaType,
false, OUString(), xCmdEnv );
1005 catch (
const deployment::InvalidRemovedParameterException& e)
1007 xExtension = e.Extension;
1013 Sequence< Reference<deployment::XPackage> >
1017 std::vector< Reference<deployment::XPackage> >
packages;
1019 for (
auto const& elem : id2temp)
1021 if (elem.second.failedPrerequisites !=
"0")
1026 elem.first, elem.second, xCmdEnv,
1030 catch (
const lang::IllegalArgumentException &) {
1034 catch (
const deployment::DeploymentException&) {
1044 OUString
const &
id, OUString
const & fileName,
1052 xCmdEnv.set( xCmdEnv_ );
1055 const ::osl::MutexGuard guard(
getMutex() );
1061 catch (
const CommandFailedException & exc) {
1065 catch (
const deployment::DeploymentException & exc) {
1072 throw deployment::DeploymentException(
1074 "error while accessing deployed package: " +
id,
1075 static_cast<OWeakObject *>(
this), exc );
1080 Sequence< Reference<deployment::XPackage> >
1082 Reference<task::XAbortChannel>
const &,
1090 xCmdEnv.set( xCmdEnv_ );
1093 const ::osl::MutexGuard guard(
getMutex() );
1099 catch (
const CommandFailedException & exc) {
1103 catch (
const CommandAbortedException & exc) {
1107 catch (
const deployment::DeploymentException & exc) {
1114 throw deployment::DeploymentException(
1116 "error while getting all deployed packages: " +
m_context,
1117 static_cast<OWeakObject *>(
this), exc );
1125 sal_Bool force, Reference<task::XAbortChannel>
const & ,
1131 "You must close any running Office process before reinstalling packages!",
1132 static_cast<OWeakObject *>(
this) );
1138 xCmdEnv.set( xCmdEnv_ );
1141 ProgressLevel progress(
1142 xCmdEnv,
"Reinstalling all deployed packages..." );
1149 Reference<util::XUpdatable> xUpdatable(
m_xRegistry, UNO_QUERY );
1150 if (xUpdatable.is())
1151 xUpdatable->update();
1158 catch (
const CommandFailedException & exc) {
1162 catch (
const CommandAbortedException & exc) {
1166 catch (
const deployment::DeploymentException & exc) {
1173 throw deployment::DeploymentException(
1174 "Error while reinstalling all previously deployed packages of context " +
m_context,
1175 static_cast<OWeakObject *>(
this), exc );
1185 Reference<task::XAbortChannel>
const & xAbortChannel,
1192 bool bModified =
false;
1197 for (
auto const& elem : id2temp)
1207 bool bRemoved =
false;
1212 &contentExtension, url,
1222 if (!bRemoved && bShared)
1229 elem.second.temporaryName +
"removed",
1242 "Extension Manager: bundled and shared extensions "
1243 "must have an identifier and a version");
1247 || elem.second.version != infoset.
getVersion()))
1255 Reference<deployment::XPackage> xPackage =
m_xRegistry->bindPackage(
1256 url, elem.second.mediaType,
true, elem.first, xCmdEnv );
1257 OSL_ASSERT(xPackage.is());
1258 xPackage->revokePackage(
true, xAbortChannel, xCmdEnv);
1259 removePackage(xPackage->getIdentifier().Value, xPackage->getName(),
1260 xAbortChannel, xCmdEnv);
1264 catch(
const uno::Exception & )
1274 Reference<task::XAbortChannel>
const & xAbortChannel,
1277 bool bModified =
false;
1289 catch (
const css::ucb::ContentCreationException&)
1298 Reference<sdbc::XResultSet> xResultSet(
1299 StrTitle::createCursor( tempFolder,
1302 while (xResultSet->next())
1307 Reference<sdbc::XRow>(
1308 xResultSet, UNO_QUERY_THROW )->
getString(
1312 OUString title2 = title;
1316 OSL_ASSERT(title2.endsWith(
"_"));
1317 title2 = title2.copy(0, title2.getLength() -1);
1319 OUString titleEncoded = ::rtl::Uri::encode(
1320 title2, rtl_UriCharClassPchar,
1321 rtl_UriEncodeIgnoreEscapes,
1322 RTL_TEXTENCODING_UTF8);
1327 const MatchTempDir
match(titleEncoded);
1328 if (std::none_of( id2temp.begin(), id2temp.end(), match ))
1334 OUString sExtFolder;
1343 sExtFolder = getExtensionFolder(
1349 Reference<deployment::XPackage> xPackage =
m_xRegistry->bindPackage(
1350 url, OUString(),
false, OUString(), xCmdEnv );
1363 dbData.
mediaType = xPackage->getPackageType()->getMediaType();
1364 dbData.
version = xPackage->getVersion();
1366 dbData.
version.isEmpty(),
"desktop.deployment",
1367 "bundled/shared extension " <<
id <<
" at <" << url
1368 <<
"> has no explicit version");
1377 DescriptionInfoset info =
1379 ::std::optional<dp_misc::SimpleLicenseAttributes>
1380 attr = info.getSimpleLicenseAttributes();
1382 bool bNoLicense =
false;
1386 Reference<ucb::XCommandEnvironment> licCmdEnv(
1389 sal_Int32 failedPrereq = xPackage->checkPrerequisites(
1390 xAbortChannel, licCmdEnv,
false);
1401 catch (
const uno::Exception &)
1411 Reference<task::XAbortChannel>
const & xAbortChannel,
1415 bool bModified =
false;
1426 Reference<ucb::XCommandEnvironment>
const & xCmdEnv)
1428 std::vector<Reference<deployment::XPackage> > vec;
1432 const ::osl::MutexGuard guard(
getMutex() );
1438 for (
auto const& elem : id2temp)
1445 if (failedPrereq ^ deployment::Prerequisites::LICENSE)
1453 Reference<deployment::XPackage>
p =
m_xRegistry->bindPackage(
1454 url, OUString(),
false, OUString(), xCmdEnv );
1460 return ::comphelper::containerToSequence(vec);
1462 catch (
const deployment::DeploymentException &)
1472 Any exc = ::cppu::getCaughtException();
1473 deployment::DeploymentException de(
1474 "PackageManagerImpl::getExtensionsWithUnacceptedLicenses",
1475 static_cast<OWeakObject*>(
this), exc);
1477 ::cppu::throwException(exc);
1480 return ::comphelper::containerToSequence(vec);
1484 css::uno::Reference<css::deployment::XPackage>
const & extension,
1485 css::uno::Reference<css::task::XAbortChannel>
const & xAbortChannel,
1486 css::uno::Reference<css::ucb::XCommandEnvironment>
const & xCmdEnv )
1490 if (!extension.is())
1492 if (
m_context != extension->getRepositoryName())
1493 throw lang::IllegalArgumentException(
1494 "PackageManagerImpl::checkPrerequisites: extension is not from this repository.",
1501 throw lang::IllegalArgumentException(
1502 "PackageManagerImpl::checkPrerequisites: unknown extension",
1507 Reference<ucb::XCommandEnvironment> _xCmdEnv = xCmdEnv;
1509 if ( !(prereq & deployment::Prerequisites::LICENSE))
1512 sal_Int32 failedPrereq = extension->checkPrerequisites(
1513 xAbortChannel, _xCmdEnv,
false);
1518 catch (
const deployment::DeploymentException& ) {
1520 }
catch (
const ucb::CommandFailedException & ) {
1522 }
catch (
const ucb::CommandAbortedException & ) {
1524 }
catch (
const lang::IllegalArgumentException &) {
1526 }
catch (
const uno::RuntimeException &) {
1529 uno::Any excOccurred = ::cppu::getCaughtException();
1530 deployment::DeploymentException exc(
1531 "PackageManagerImpl::checkPrerequisites: exception ",
1532 static_cast<OWeakObject*>(
this), excOccurred);
1548 if (xUserCmdEnv.is()) {
1556 Reference<task::XInteractionHandler>
1559 return m_xUserInteractionHandler;
1575 if (m_xUserProgress.is())
1576 m_xUserProgress->push( Status );
1584 if (m_xUserProgress.is())
1585 m_xUserProgress->update( Status );
1593 if (m_xUserProgress.is())
1594 m_xUserProgress->pop();
::osl::Mutex & getMutex() const
virtual void SAL_CALL dispose() override
virtual void SAL_CALL reinstallDeployedPackages(sal_Bool force, css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
INCLUDE_FOLDERS_AND_DOCUMENTS
const css::uno::Reference< css::logging::XLogger > & getLogger() const
void progressUpdate(OUString const &status, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv)
virtual css::uno::Reference< css::task::XAbortChannel > SAL_CALL createAbortChannel() override
css::uno::Reference< css::deployment::XPackageRegistry > m_xRegistry
virtual sal_Int32 SAL_CALL checkPrerequisites(css::uno::Reference< css::deployment::XPackage > const &extension, css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
exports com.sun.star. packages
bool isSuppressedLicense() const
virtual ~PackageManagerImpl() override
virtual ~CmdEnvWrapperImpl() override
void logIntern(css::uno::Any const &status)
virtual ::sal_Bool SAL_CALL synchronize(css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
css::uno::Any getPropertyValue(const OUString &rPropertyName)
virtual void SAL_CALL removeEventListener(css::uno::Reference< css::lang::XEventListener > const &xListener) override
virtual void SAL_CALL pop() override
OUString makeURL(OUString const &baseURL, OUString const &relPath_)
appends a relative path to a url.
OUString makeURLAppendSysPathSegment(OUString const &baseURL, OUString const &segment)
appends a relative path to a url.
OUString detectMediaType(::ucbhelper::Content const &ucbContent, bool throw_exc=true)
OUString failedPrerequisites
css::uno::Reference< css::deployment::XPackageRegistry > create(css::uno::Reference< css::deployment::XPackageRegistry > const &xRootRegistry, OUString const &context, OUString const &cachePath, css::uno::Reference< css::uno::XComponentContext > const &xComponentContext)
virtual void SAL_CALL removePackage(OUString const &id, OUString const &fileName, css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC std::vector< sal_Int8 > readFile(::ucbhelper::Content &ucb_content)
static bool parse(OUString const &rMediaType, OUString &rType, OUString &rSubType, INetContentTypeParameterList *pParameters=nullptr)
bool match(const sal_Unicode *pWild, const sal_Unicode *pStr, const sal_Unicode cEscape)
OUString getVersion() const
Return the textual version representation.
static void deletePackageFromCache(css::uno::Reference< css::deployment::XPackage > const &xPackage, OUString const &destFolder)
Any SAL_CALL getCaughtException()
std::vector< std::pair< OUString, Data > > Entries
void insertToActivationLayerDB(OUString const &id, ActivePackages::Data const &dbData)
virtual css::uno::Sequence< css::uno::Reference< css::deployment::XPackage > > SAL_CALL getDeployedPackages(css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
uno::Reference< sdbc::XRow > xRow
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
virtual ::sal_Bool SAL_CALL isReadOnly() override
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC DescriptionInfoset getDescriptionInfoset(std::u16string_view sExtensionFolderURL)
creates a DescriptionInfoset object.
std::unique_ptr< ActivePackages > m_activePackagesDB
const css::uno::Reference< css::ucb::XCommandEnvironment > & getCommandEnvironment() const
css::uno::Reference< css::task::XInteractionHandler > m_xUserInteractionHandler
virtual void SAL_CALL push(css::uno::Any const &Status) override
Reference< io::XInputStream > createInputStream(std::vector< sal_Int8 > const &rInData)
OUString m_activePackages
#define TOOLS_WARN_EXCEPTION(area, stream)
bool isInstalled(css::uno::Reference< css::deployment::XPackage > const &package)
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC bool platform_fits(OUString const &platform_string)
css::uno::Reference< css::uno::XComponentContext > m_xComponentContext
OUString const & GetURL() const
virtual css::uno::Reference< css::task::XInteractionHandler > SAL_CALL getInteractionHandler() override
void initRegistryBackends()
OUString m_activePackages_expanded
::std::optional< OUString > getIdentifier() const
Return the identifier.
const OUString & getURL() const
virtual void SAL_CALL addEventListener(css::uno::Reference< css::lang::XEventListener > const &xListener) override
virtual css::uno::Reference< css::ucb::XProgressHandler > SAL_CALL getProgressHandler() override
css::uno::Reference< css::deployment::XPackage > getDeployedPackage_(OUString const &id, OUString const &fileName, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv)
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC bool create_ucb_content(::ucbhelper::Content *ucb_content, OUString const &url, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv, bool throw_exc=true)
this class is for use in XPackageManager::checkPrerequisites
exports com.sun.star.chart2. data
OString exceptionToString(const css::uno::Any &caught)
OUString expandUnoRcUrl(OUString const &url)
static uno::Reference< css::uno::XComponentContext > xContext
void try_dispose(css::uno::Reference< css::uno::XInterface > const &x)
CmdEnvWrapperImpl(css::uno::Reference< css::ucb::XCommandEnvironment > const &xUserCmdEnv, css::uno::Reference< css::ucb::XProgressHandler > const &xLogFile)
css::uno::Reference< css::ucb::XProgressHandler > m_xUserProgress
#define SAL_WARN_IF(condition, area, stream)
virtual css::uno::Reference< css::deployment::XPackage > SAL_CALL importExtension(css::uno::Reference< css::deployment::XPackage > const &extension, css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
#define SAL_INFO(area, stream)
virtual css::uno::Reference< css::deployment::XPackage > SAL_CALL addPackage(OUString const &url, css::uno::Sequence< css::beans::NamedValue > const &properties, OUString const &mediaType, css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
virtual void SAL_CALL addModifyListener(css::uno::Reference< css::util::XModifyListener > const &xListener) override
static css::uno::Reference< css::deployment::XPackageManager > create(css::uno::Reference< css::uno::XComponentContext > const &xComponentContext, OUString const &context)
void transferContent(const Content &rSourceContent, InsertOperation eOperation, const OUString &rTitle, const sal_Int32 nNameClashAction, const OUString &rMimeType=OUString(), bool bMajorVersion=false, const OUString &rCommentVersion=OUString(), OUString *pResultURL=nullptr, const OUString &rDocumentId=OUString()) const
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC bool erase_path(OUString const &url, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv, bool throw_exc=true)
std::unordered_map< OString, INetContentTypeParameter > INetContentTypeParameterList
bool synchronizeAddedExtensions(css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv)
virtual OUString SAL_CALL getContext() override
bool createDirectory(OUString const &rURL)
css::uno::Any setPropertyValue(const OUString &rPropertyName, const css::uno::Any &rValue)
virtual css::uno::Sequence< css::uno::Reference< css::deployment::XPackageTypeInfo > > SAL_CALL getSupportedPackageTypes() override
OUString DpResId(const char *pId)
#define SAL_WARN(area, stream)
css::uno::Any executeCommand(const OUString &rCommandName, const css::uno::Any &rCommandArgument)
void forEach(FuncT const &func)
OUString getDeployPath(ActivePackages::Data const &data)
PackageManagerImpl(css::uno::Reference< css::uno::XComponentContext > const &xComponentContext, OUString const &context)
void writeStream(const css::uno::Reference< css::io::XInputStream > &rStream, bool bReplaceExisting)
OUString getString(const Any &_rAny)
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC OUString getIdentifier(css::uno::Reference< css::deployment::XPackage > const &package)
Gets the identifier of a package.
virtual void SAL_CALL removeModifyListener(css::uno::Reference< css::util::XModifyListener > const &xListener) override
DESKTOP_DEPLOYMENTMISC_DLLPUBLIC bool create_folder(::ucbhelper::Content *ucb_content, OUString const &url, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv, bool throw_exc=true)
bool synchronizeRemovedExtensions(css::uno::Reference< css::task::XAbortChannel > const &xAbortChannel, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv)
OUString insertToActivationLayer(css::uno::Sequence< css::beans::NamedValue > const &properties, OUString const &mediaType,::ucbhelper::Content const &sourceContent, OUString const &title, ActivePackages::Data *dbData)
virtual void SAL_CALL update(css::uno::Any const &Status) override
void initActivationLayer(css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv)
OUString m_registrationData_expanded
OUString m_registrationData
virtual css::uno::Sequence< css::uno::Reference< css::deployment::XPackage > > SAL_CALL getExtensionsWithUnacceptedLicenses(css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
this class is for use in XPackageManager::synchronize.
css::uno::Reference< css::ucb::XProgressHandler > m_xLogFile
virtual css::uno::Reference< css::deployment::XPackage > SAL_CALL getDeployedPackage(OUString const &id, OUString const &fileName, css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv) override
css::uno::Sequence< css::uno::Reference< css::deployment::XPackage > > getDeployedPackages_(css::uno::Reference< css::ucb::XCommandEnvironment > const &xCmdEnv)
css::uno::Reference< css::deployment::XPackageRegistry > create(OUString const &context, OUString const &cachePath, css::uno::Reference< css::uno::XComponentContext > const &xComponentContext)
virtual void SAL_CALL disposing() override
Access to the content of an XML description element.
bool hasDescription() const