20#include <com/sun/star/io/XActiveDataSink.hpp>
21#include <com/sun/star/beans/NamedValue.hpp>
22#include <com/sun/star/container/XNamed.hpp>
23#include <com/sun/star/container/XChild.hpp>
24#include <com/sun/star/container/XNameContainer.hpp>
25#include <com/sun/star/util/XChangesBatch.hpp>
26#include <com/sun/star/uno/XComponentContext.hpp>
27#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
28#include <com/sun/star/lang/XSingleServiceFactory.hpp>
32#include <osl/file.hxx>
54ZipPackageHelper::ZipPackageHelper(
56 const OUString& sPackageURL)
67 mxContext->getServiceManager()->createInstanceWithArgumentsAndContext(
68 "com.sun.star.packages.comp.ZipPackage",
84 return Uri::encode( rURI, rtl_UriCharClassUric, rtl_UriEncodeCheckEscapes, RTL_TEXTENCODING_UTF8 );
93 const OUString& rName )
95 if ( rName ==
".." || rName ==
"." )
96 throw lang::IllegalArgumentException();
102 if( xNamed.is() && xChild.is() )
105 xNamed->setName(
aName );
106 xChild->setParent( xRootFolder );
114 if (rDirURL.isEmpty())
117 osl::Directory aDirectory(rDirURL);
119 if (aDirectory.open() != osl::FileBase::E_None)
122 osl::DirectoryItem aDirectoryItem;
124 while (osl::FileBase::E_None == aDirectory.getNextItem(aDirectoryItem))
126 osl::FileStatus aFileStatus(osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileURL | osl_FileStatus_Mask_FileName);
128 if (osl::FileBase::E_None == aDirectoryItem.getFileStatus(aFileStatus))
130 if (aFileStatus.isDirectory())
132 const OUString aFileName(aFileStatus.getFileName());
134 if (!aFileName.isEmpty())
140 else if (aFileStatus.isRegular())
142 addFile(xRootFolder, aFileStatus.getFileURL());
149 const OUString& rSourceFileURL )
163 xSink->setInputStream( xInput );
170 xBatch->commitChanges();
static OUString encodeZipUri(const OUString &rURI)
css::uno::Reference< css::lang::XSingleServiceFactory > mxFactory
void addFolderWithContent(css::uno::Reference< css::uno::XInterface > const &xRootFolder, const OUString &rDirURL)
css::uno::Reference< css::container::XHierarchicalNameAccess > mxHNameAccess
css::uno::Reference< css::uno::XInterface > mxRootFolder
css::uno::Reference< css::uno::XInterface > addFolder(css::uno::Reference< css::uno::XInterface > const &xRootFolder, const OUString &rName)
void addFile(css::uno::Reference< css::uno::XInterface > const &xRootFolder, const OUString &rSourceFile)
css::uno::Reference< css::uno::XInterface > & getRootFolder()
css::uno::Reference< css::uno::XComponentContext > mxContext
Reference< XSingleServiceFactory > xFactory
Sequence< PropertyValue > aArguments
tools::SvRef< SvBaseLink > xSink
constexpr OUStringLiteral ZIP_STORAGE_FORMAT_STRING