summaryrefslogtreecommitdiff
path: root/filter/source/config/cache/filterfactory.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'filter/source/config/cache/filterfactory.cxx')
-rw-r--r--filter/source/config/cache/filterfactory.cxx73
1 files changed, 27 insertions, 46 deletions
diff --git a/filter/source/config/cache/filterfactory.cxx b/filter/source/config/cache/filterfactory.cxx
index 8832330d5a04..9b0793b94e1e 100644
--- a/filter/source/config/cache/filterfactory.cxx
+++ b/filter/source/config/cache/filterfactory.cxx
@@ -55,9 +55,9 @@ FilterCache& GetTheFilterCache()
FilterFactory::FilterFactory(const css::uno::Reference< css::uno::XComponentContext >& rxContext)
: m_xContext(rxContext)
{
- BaseContainer::init(rxContext ,
- "com.sun.star.comp.filter.config.FilterFactory" ,
- { "com.sun.star.document.FilterFactory" },
+ static const css::uno::Sequence<OUString> sServiceNames { "com.sun.star.document.FilterFactory" };
+ BaseContainer::init("com.sun.star.comp.filter.config.FilterFactory" ,
+ sServiceNames,
FilterCache::E_FILTER );
}
@@ -77,7 +77,7 @@ css::uno::Reference< css::uno::XInterface > SAL_CALL FilterFactory::createInstan
const css::uno::Sequence< css::uno::Any >& lArguments)
{
// SAFE ->
- osl::MutexGuard aLock(m_aLock);
+ std::unique_lock aLock(m_aMutex);
auto & cache = GetTheFilterCache();
@@ -103,7 +103,7 @@ css::uno::Reference< css::uno::XInterface > SAL_CALL FilterFactory::createInstan
aFilter >> lConfig;
::std::vector< css::uno::Any > stlArguments(comphelper::sequenceToContainer< ::std::vector< css::uno::Any > >(lArguments));
- stlArguments.insert(stlArguments.begin(), css::uno::makeAny(lConfig));
+ stlArguments.insert(stlArguments.begin(), css::uno::Any(lConfig));
xInit->initialize(comphelper::containerToSequence(stlArguments));
}
@@ -121,14 +121,13 @@ css::uno::Sequence< OUString > SAL_CALL FilterFactory::getAvailableServiceNames(
Of course we can't check for corrupted service names here. We can check
for empty strings only...
*/
- CacheItem lIProps;
- CacheItem lEProps;
- lEProps[PROPNAME_FILTERSERVICE] <<= OUString();
+ css::beans::NamedValue lEProps[] {
+ { PROPNAME_FILTERSERVICE, css::uno::Any(OUString()) } };
std::vector<OUString> lUNOFilters;
try
{
- lUNOFilters = GetTheFilterCache().getMatchingItemsByProps(FilterCache::E_FILTER, lIProps, lEProps);
+ lUNOFilters = GetTheFilterCache().getMatchingItemsByProps(FilterCache::E_FILTER, {}, lEProps);
}
catch(const css::uno::RuntimeException&)
{ throw; }
@@ -153,8 +152,7 @@ css::uno::Reference< css::container::XEnumeration > SAL_CALL FilterFactory::crea
if (pos != -1)
{
OSL_FAIL("DEPRECATED!\nPlease use new query format: 'matchByDocumentService=...'");
- OUString sPatchedQuery(OUString::Concat("matchByDocumentService=") + sNewQuery.subView(7));
- sNewQuery = sPatchedQuery;
+ sNewQuery = OUString::Concat("matchByDocumentService=") + sNewQuery.subView(7);
}
// analyze query and split it into its tokens
@@ -167,10 +165,10 @@ css::uno::Reference< css::container::XEnumeration > SAL_CALL FilterFactory::crea
{
// SAFE -> ----------------------
{
- osl::MutexGuard aLock(m_aLock);
+ std::unique_lock aLock(m_aMutex);
// May be not all filters was loaded ...
// But we need it now!
- impl_loadOnDemand();
+ impl_loadOnDemand(aLock);
}
// <- SAFE ----------------------
@@ -187,8 +185,7 @@ css::uno::Reference< css::container::XEnumeration > SAL_CALL FilterFactory::crea
// pack list of item names as an enum list
// Attention: Do not return empty reference for empty list!
// The outside check "hasMoreElements()" should be enough, to detect this state :-)
- css::uno::Sequence< OUString > lSet = comphelper::containerToSequence(lEnumSet);
- return new ::comphelper::OEnumerationByName(this, lSet);
+ return new ::comphelper::OEnumerationByName(this, std::move(lEnumSet));
}
@@ -253,10 +250,10 @@ std::vector<OUString> FilterFactory::impl_queryMatchByDocumentService(const Quer
nEFlags = pIt->second.toInt32();
// SAFE -> ----------------------
- osl::ClearableMutexGuard aLock(m_aLock);
+ std::unique_lock aLock(m_aMutex);
// search suitable filters
- FilterCache* pCache = impl_getWorkingCache();
+ FilterCache* pCache = impl_getWorkingCache(aLock);
std::vector<OUString> lFilterNames = pCache->getItemNames(FilterCache::E_FILTER);
std::vector<OUString> lResult ;
@@ -314,7 +311,7 @@ std::vector<OUString> FilterFactory::impl_queryMatchByDocumentService(const Quer
{ continue; }
}
- aLock.clear();
+ aLock.unlock();
// <- SAFE ----------------------
return lResult;
@@ -391,7 +388,7 @@ std::vector<OUString> FilterFactory::impl_getSortedFilterList(const QueryTokeniz
{
// more complex search for all filters
// We check first, which office modules are installed...
- std::vector<OUString> lModules = impl_getListOfInstalledModules();
+ const css::uno::Sequence<OUString> lModules = impl_getListOfInstalledModules();
for (auto const& module : lModules)
{
std::vector<OUString> lFilters4Module = impl_getSortedFilterListForModule(module, nIFlags, nEFlags);
@@ -406,17 +403,10 @@ std::vector<OUString> FilterFactory::impl_getSortedFilterList(const QueryTokeniz
}
-std::vector<OUString> FilterFactory::impl_getListOfInstalledModules() const
+css::uno::Sequence<OUString> FilterFactory::impl_getListOfInstalledModules()
{
- // SAFE -> ----------------------
- osl::ClearableMutexGuard aLock(m_aLock);
- css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
- aLock.clear();
- // <- SAFE ----------------------
-
- css::uno::Reference< css::container::XNameAccess > xModuleConfig = officecfg::Setup::Office::Factories::get(xContext);
- std::vector<OUString> lModules(comphelper::sequenceToContainer< std::vector<OUString> >(xModuleConfig->getElementNames()));
- return lModules;
+ css::uno::Reference< css::container::XNameAccess > xModuleConfig = officecfg::Setup::Office::Factories::get();
+ return xModuleConfig->getElementNames();
}
@@ -427,14 +417,13 @@ std::vector<OUString> FilterFactory::impl_getSortedFilterListForModule(const OUS
std::vector<OUString> lSortedFilters = impl_readSortedFilterListFromConfig(sModule);
// get all filters for the requested module
- CacheItem lIProps;
- lIProps[PROPNAME_DOCUMENTSERVICE] <<= sModule;
+ css::beans::NamedValue lIProps[] { { PROPNAME_DOCUMENTSERVICE, css::uno::Any(sModule) } };
// SAFE -> ----------------------
- osl::ClearableMutexGuard aLock(m_aLock);
- FilterCache* pCache = impl_getWorkingCache();
+ std::unique_lock aLock(m_aMutex);
+ FilterCache* pCache = impl_getWorkingCache(aLock);
std::vector<OUString> lOtherFilters = pCache->getMatchingItemsByProps(FilterCache::E_FILTER, lIProps);
- aLock.clear();
+ aLock.unlock();
// <- SAFE ----------------------
// bring "other" filters in an alphabetical order
@@ -453,13 +442,11 @@ std::vector<OUString> FilterFactory::impl_getSortedFilterListForModule(const OUS
// remove all filters from this merged list, which does not fit the flag specification
if (nIFlags != -1)
{
- auto pItToErase = ::std::remove_if(lMergedFilters.begin(), lMergedFilters.end(), stlcomp_removeIfMatchFlags(pCache, nIFlags, true));
- lMergedFilters.erase(pItToErase, lMergedFilters.end());
+ std::erase_if(lMergedFilters, stlcomp_removeIfMatchFlags(pCache, nIFlags, true));
}
if (nEFlags != -1)
{
- auto pItToErase = ::std::remove_if(lMergedFilters.begin(), lMergedFilters.end(), stlcomp_removeIfMatchFlags(pCache, nEFlags, false));
- lMergedFilters.erase(pItToErase, lMergedFilters.end());
+ std::erase_if(lMergedFilters, stlcomp_removeIfMatchFlags(pCache, nEFlags, false));
}
// sort the default filter to the front of this list
@@ -469,17 +456,11 @@ std::vector<OUString> FilterFactory::impl_getSortedFilterListForModule(const OUS
}
-std::vector<OUString> FilterFactory::impl_readSortedFilterListFromConfig(const OUString& sModule) const
+std::vector<OUString> FilterFactory::impl_readSortedFilterListFromConfig(const OUString& sModule)
{
- // SAFE -> ----------------------
- osl::ClearableMutexGuard aLock(m_aLock);
- css::uno::Reference< css::uno::XComponentContext > xContext = m_xContext;
- aLock.clear();
- // <- SAFE ----------------------
-
try
{
- css::uno::Reference< css::container::XNameAccess > xUISortConfig = officecfg::TypeDetection::UISort::ModuleDependendFilterOrder::get(xContext);
+ css::uno::Reference< css::container::XNameAccess > xUISortConfig = officecfg::TypeDetection::UISort::ModuleDependendFilterOrder::get();
// don't check the module name here. If it does not exists, an exception is thrown and caught below.
// We return an empty list as result then.
css::uno::Reference< css::container::XNameAccess > xModule;