20 #include <config_folders.h>
30 #include <osl/file.hxx>
31 #include <rtl/ref.hxx>
32 #include <com/sun/star/util/theMacroExpander.hpp>
43 OUString aNormalizedURL;
44 if ( osl::FileBase::getAbsoluteFileURL( OUString(),
47 == osl::DirectoryItem::E_None )
49 osl::DirectoryItem aDirItem;
50 if ( osl::DirectoryItem::get( aNormalizedURL, aDirItem )
51 == osl::DirectoryItem::E_None )
53 osl::FileStatus aFileStatus( osl_FileStatus_Mask_FileURL );
55 if ( aDirItem.getFileStatus( aFileStatus )
56 == osl::DirectoryItem::E_None )
58 aNormalizedURL = aFileStatus.getFileURL();
60 if ( !aNormalizedURL.isEmpty() )
62 if ( !aNormalizedURL.endsWith(
"/") )
63 rURL = aNormalizedURL;
66 .copy( 0, aNormalizedURL.getLength() - 1 );
81 OfficeInstallationDirectories::OfficeInstallationDirectories(
82 const uno::Reference< uno::XComponentContext > & xCtx )
120 if ( !URL.isEmpty() )
124 OUString aCanonicalURL( URL );
131 aCanonicalURL.replaceAt( nIndex,
137 nIndex = aCanonicalURL.indexOf( *
m_xUserDir );
141 aCanonicalURL.replaceAt( nIndex,
155 if ( !URL.isEmpty() )
163 URL.replaceAt( nIndex,
175 URL.replaceAt( nIndex,
192 return "com.sun.star.comp.util.OfficeInstallationDirectories";
203 uno::Sequence< OUString > SAL_CALL
206 return {
"com.sun.star.util.OfficeInstallationDirectories" };
218 uno::Reference< util::XMacroExpander > xExpander = util::theMacroExpander::get(
m_xCtx);
223 "Unable to obtain office brand installation directory!" );
228 xExpander->expandMacros(
229 "${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER
"/" SAL_CONFIGFILE(
"bootstrap" )
":UserInstallation}" );
232 "Unable to obtain office user data directory!" );
243 css::uno::Reference<css::uno::XComponentContext>
const & context):
244 instance(static_cast<
cppu::OWeakObject *>(
245 new
comphelper::OfficeInstallationDirectories(context)))
252 public rtl::StaticWithArg<
253 Instance, css::uno::Reference<css::uno::XComponentContext>, Singleton>
258 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
260 css::uno::XComponentContext *context,
261 css::uno::Sequence<css::uno::Any>
const &)
263 return cppu::acquire(static_cast<cppu::OWeakObject *>(
264 Singleton::get(context).instance.get()));
virtual OUString SAL_CALL getOfficeInstallationDirectoryURL() override
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
css::uno::Reference< css::uno::XComponentContext > m_xCtx
virtual OUString SAL_CALL makeAbsoluteURL(const OUString &URL) override
constexpr OUStringLiteral g_aOfficeBrandDirMacro(u"$(brandbaseurl)")
virtual OUString SAL_CALL getImplementationName() override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual OUString SAL_CALL getOfficeUserDataDirectoryURL() override
std::optional< OUString > m_xOfficeBrandDir
std::optional< OUString > m_xUserDir
Reference< XComponentContext > m_xCtx
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
constexpr OUStringLiteral g_aUserDirMacro(u"$(userdataurl)")
#define SAL_CONFIGFILE(name)
static bool makeCanonicalFileURL(OUString &rURL)
virtual ~OfficeInstallationDirectories() override
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_util_OfficeInstallationDirectories(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
COMPHELPER_DLLPUBLIC bool isFileUrl(OUString const &url)
virtual OUString SAL_CALL makeRelocatableURL(const OUString &URL) override