diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp index 38e0d31949b..34e00950d30 100644 --- a/src/cmd/cmd.cpp +++ b/src/cmd/cmd.cpp @@ -131,7 +131,7 @@ void sync(const SyncCTX &ctx) selectiveSyncFixup(db, selectiveSyncList); } - SyncOptions opt { QSharedPointer(createVfsFromPlugin(Vfs::Off).release()) }; + SyncOptions opt { QSharedPointer(VfsPluginManager::instance().createVfsFromPlugin(Vfs::Off).release()) }; opt.fillFromEnvironmentVariables(); opt.verifyChunkSizes(); auto engine = new SyncEngine( diff --git a/src/common/vfs.cpp b/src/common/vfs.cpp index c1e230cedd4..55bb39352f3 100644 --- a/src/common/vfs.cpp +++ b/src/common/vfs.cpp @@ -153,46 +153,58 @@ static QString modeToPluginName(Vfs::Mode mode) Q_LOGGING_CATEGORY(lcPlugin, "plugins", QtInfoMsg) -bool OCC::isVfsPluginAvailable(Vfs::Mode mode) -{ - // TODO: cache plugins available? - auto name = modeToPluginName(mode); - if (name.isEmpty()) - return false; - auto pluginPath = pluginFileName(QStringLiteral("vfs"), name); - QPluginLoader loader(pluginPath); +OCC::VfsPluginManager *OCC::VfsPluginManager::_instance = nullptr; - auto basemeta = loader.metaData(); - if (basemeta.isEmpty() || !basemeta.contains(QStringLiteral("IID"))) { - qCDebug(lcPlugin) << "Plugin doesn't exist" << loader.fileName(); - return false; - } - if (basemeta[QStringLiteral("IID")].toString() != QLatin1String("org.owncloud.PluginFactory")) { - qCWarning(lcPlugin) << "Plugin has wrong IID" << loader.fileName() << basemeta[QStringLiteral("IID")]; - return false; +bool OCC::VfsPluginManager::isVfsPluginAvailable(Vfs::Mode mode) const +{ + { + auto result = _pluginCache.constFind(mode); + if (result != _pluginCache.cend()) { + return *result; + } } + const bool out = [mode] { + const QString name = modeToPluginName(mode); + if (!OC_ENSURE_NOT(name.isEmpty())) { + return false; + } + auto pluginPath = pluginFileName(QStringLiteral("vfs"), name); + QPluginLoader loader(pluginPath); - auto metadata = basemeta[QStringLiteral("MetaData")].toObject(); - if (metadata[QStringLiteral("type")].toString() != QLatin1String("vfs")) { - qCWarning(lcPlugin) << "Plugin has wrong type" << loader.fileName() << metadata[QStringLiteral("type")]; - return false; - } - if (metadata[QStringLiteral("version")].toString() != OCC::Version::version().toString()) { - qCWarning(lcPlugin) << "Plugin has wrong version" << loader.fileName() << metadata[QStringLiteral("version")]; - return false; - } + auto basemeta = loader.metaData(); + if (basemeta.isEmpty() || !basemeta.contains(QStringLiteral("IID"))) { + qCDebug(lcPlugin) << "Plugin doesn't exist" << loader.fileName(); + return false; + } + if (basemeta[QStringLiteral("IID")].toString() != QLatin1String("org.owncloud.PluginFactory")) { + qCWarning(lcPlugin) << "Plugin has wrong IID" << loader.fileName() << basemeta[QStringLiteral("IID")]; + return false; + } - // Attempting to load the plugin is essential as it could have dependencies that - // can't be resolved and thus not be available after all. - if (!loader.load()) { - qCWarning(lcPlugin) << "Plugin failed to load:" << loader.errorString(); - return false; - } + auto metadata = basemeta[QStringLiteral("MetaData")].toObject(); + if (metadata[QStringLiteral("type")].toString() != QLatin1String("vfs")) { + qCWarning(lcPlugin) << "Plugin has wrong type" << loader.fileName() << metadata[QStringLiteral("type")]; + return false; + } + if (metadata[QStringLiteral("version")].toString() != OCC::Version::version().toString()) { + qCWarning(lcPlugin) << "Plugin has wrong version" << loader.fileName() << metadata[QStringLiteral("version")]; + return false; + } - return true; + // Attempting to load the plugin is essential as it could have dependencies that + // can't be resolved and thus not be available after all. + if (!loader.load()) { + qCWarning(lcPlugin) << "Plugin failed to load:" << loader.errorString(); + return false; + } + + return true; + }(); + _pluginCache[mode] = out; + return out; } -Vfs::Mode OCC::bestAvailableVfsMode() +Vfs::Mode OCC::VfsPluginManager::bestAvailableVfsMode() const { if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { return Vfs::WindowsCfApi; @@ -204,7 +216,7 @@ Vfs::Mode OCC::bestAvailableVfsMode() Q_UNREACHABLE(); } -std::unique_ptr OCC::createVfsFromPlugin(Vfs::Mode mode) +std::unique_ptr OCC::VfsPluginManager::createVfsFromPlugin(Vfs::Mode mode) const { auto name = modeToPluginName(mode); if (name.isEmpty()) @@ -238,3 +250,11 @@ std::unique_ptr OCC::createVfsFromPlugin(Vfs::Mode mode) qCInfo(lcPlugin) << "Created VFS instance from plugin" << pluginPath; return vfs; } + +const VfsPluginManager &VfsPluginManager::instance() +{ + if (!_instance) { + _instance = new VfsPluginManager(); + } + return *_instance; +} diff --git a/src/common/vfs.h b/src/common/vfs.h index 1143b6fb67e..e7c69c42729 100644 --- a/src/common/vfs.h +++ b/src/common/vfs.h @@ -113,11 +113,10 @@ class OCSYNC_EXPORT Vfs : public QObject * * Currently plugins and modes are one-to-one but that's not required. */ - enum Mode - { + enum Mode { Off, WithSuffix, - WindowsCfApi, + WindowsCfApi }; Q_ENUM(Mode) enum class ConvertToPlaceholderResult { @@ -276,13 +275,27 @@ public slots: friend class OwncloudPropagator; }; -/// Check whether the plugin for the mode is available. -OCSYNC_EXPORT bool isVfsPluginAvailable(Vfs::Mode mode); +class OCSYNC_EXPORT VfsPluginManager +{ +public: + /// Check whether the plugin for the mode is available. + bool isVfsPluginAvailable(Vfs::Mode mode) const; + + /// Return the best available VFS mode. + Vfs::Mode bestAvailableVfsMode() const; + + /// Create a VFS instance for the mode, returns nullptr on failure. + std::unique_ptr createVfsFromPlugin(Vfs::Mode mode) const; -/// Return the best available VFS mode. -OCSYNC_EXPORT Vfs::Mode bestAvailableVfsMode(); + static const VfsPluginManager &instance(); -/// Create a VFS instance for the mode, returns nullptr on failure. -OCSYNC_EXPORT std::unique_ptr createVfsFromPlugin(Vfs::Mode mode); +protected: + VfsPluginManager() = default; + +private: + static VfsPluginManager *_instance; + + mutable QMap _pluginCache; +}; } // namespace OCC diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 3779bf7b395..42d4b8b6f2f 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -385,7 +385,7 @@ void AccountSettings::slotCustomContextMenuRequested(const QPoint &pos) if (Theme::instance()->showVirtualFilesOption() && !folder->virtualFilesEnabled() && FolderMan::instance()->checkVfsAvailability(folder->path())) { - const auto mode = bestAvailableVfsMode(); + const auto mode = VfsPluginManager::instance().bestAvailableVfsMode(); if (mode == Vfs::WindowsCfApi || (Theme::instance()->enableExperimentalFeatures() && mode != Vfs::Off)) { ac = menu->addAction(tr("Enable virtual file support%1...").arg(mode == Vfs::WindowsCfApi ? QString() : tr(" (experimental)"))); @@ -557,7 +557,7 @@ void AccountSettings::slotEnableVfsCurrentFolder() // no need to show the message box on Windows // as a little shortcut, we just re-use the message box's accept handler - if (bestAvailableVfsMode() == Vfs::WindowsCfApi) { + if (VfsPluginManager::instance().bestAvailableVfsMode() == Vfs::WindowsCfApi) { Q_EMIT messageBox->accepted(); } else { messageBox->show(); diff --git a/src/gui/application.cpp b/src/gui/application.cpp index df42cce5a57..0ee43cad99c 100644 --- a/src/gui/application.cpp +++ b/src/gui/application.cpp @@ -271,12 +271,12 @@ Application::Application(int &argc, char **argv, Platform *platform) qCInfo(lcApplication) << "Plugin search paths:" << libraryPaths(); // Check vfs plugins - if (Theme::instance()->showVirtualFilesOption() && bestAvailableVfsMode() == Vfs::Off) { + if (Theme::instance()->showVirtualFilesOption() && VfsPluginManager::instance().bestAvailableVfsMode() == Vfs::Off) { qCWarning(lcApplication) << "Theme wants to show vfs mode, but no vfs plugins are available"; } - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) qCInfo(lcApplication) << "VFS windows plugin is available"; - if (isVfsPluginAvailable(Vfs::WithSuffix)) + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WithSuffix)) qCInfo(lcApplication) << "VFS suffix plugin is available"; if (!configVersionMigration()) { @@ -294,12 +294,12 @@ Application::Application(int &argc, char **argv, Platform *platform) } // Check vfs plugins - if (Theme::instance()->showVirtualFilesOption() && bestAvailableVfsMode() == Vfs::Off) { + if (Theme::instance()->showVirtualFilesOption() && VfsPluginManager::instance().bestAvailableVfsMode() == Vfs::Off) { qCWarning(lcApplication) << "Theme wants to show vfs mode, but no vfs plugins are available"; } - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) qCInfo(lcApplication) << "VFS windows plugin is available"; - if (isVfsPluginAvailable(Vfs::WithSuffix)) + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WithSuffix)) qCInfo(lcApplication) << "VFS suffix plugin is available"; if (_quitInstance) { diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 4fbd6f80f11..6475e1f7cf3 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -170,8 +170,8 @@ Folder::Folder(const FolderDefinition &definition, OC_ENFORCE(_vfs); if (_definition.virtualFilesMode == Vfs::WithSuffix && _definition.upgradeVfsMode) { - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { - if (auto winvfs = createVfsFromPlugin(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (auto winvfs = VfsPluginManager::instance().createVfsFromPlugin(Vfs::WindowsCfApi)) { // Wipe the existing suffix files from fs and journal SyncEngine::wipeVirtualFiles(path(), _journal, *_vfs); @@ -779,7 +779,7 @@ void Folder::setVirtualFilesEnabled(bool enabled) { Vfs::Mode newMode = _definition.virtualFilesMode; if (enabled && _definition.virtualFilesMode == Vfs::Off) { - newMode = bestAvailableVfsMode(); + newMode = VfsPluginManager::instance().bestAvailableVfsMode(); } else if (!enabled && _definition.virtualFilesMode != Vfs::Off) { newMode = Vfs::Off; } @@ -795,7 +795,7 @@ void Folder::setVirtualFilesEnabled(bool enabled) disconnect(&_engine->syncFileStatusTracker(), nullptr, _vfs.data(), nullptr); _vfsIsReady = false; - _vfs.reset(createVfsFromPlugin(newMode).release()); + _vfs.reset(VfsPluginManager::instance().createVfsFromPlugin(newMode).release()); _definition.virtualFilesMode = newMode; startVfs(); diff --git a/src/gui/folderman.cpp b/src/gui/folderman.cpp index be23990f0d9..f14c04ede6f 100644 --- a/src/gui/folderman.cpp +++ b/src/gui/folderman.cpp @@ -357,7 +357,7 @@ void FolderMan::setupFoldersHelper(QSettings &settings, AccountStatePtr account, SyncJournalDb::maybeMigrateDb(folderDefinition.localPath(), folderDefinition.absoluteJournalPath()); } - auto vfs = createVfsFromPlugin(folderDefinition.virtualFilesMode); + auto vfs = VfsPluginManager::instance().createVfsFromPlugin(folderDefinition.virtualFilesMode); if (!vfs) { // TODO: Must do better error handling qFatal("Could not load plugin"); @@ -886,7 +886,7 @@ Folder *FolderMan::addFolder(const AccountStatePtr &accountState, const FolderDe return nullptr; } - auto vfs = createVfsFromPlugin(folderDefinition.virtualFilesMode); + auto vfs = VfsPluginManager::instance().createVfsFromPlugin(folderDefinition.virtualFilesMode); if (!vfs) { qCWarning(lcFolderMan) << "Could not load plugin for mode" << folderDefinition.virtualFilesMode; return nullptr; @@ -1383,7 +1383,7 @@ Folder *FolderMan::addFolderFromWizard(const AccountStatePtr &accountStatePtr, c folderDefinition.ignoreHiddenFiles = ignoreHiddenFiles(); if (useVfs) { - folderDefinition.virtualFilesMode = bestAvailableVfsMode(); + folderDefinition.virtualFilesMode = VfsPluginManager::instance().bestAvailableVfsMode(); } auto newFolder = addFolder(accountStatePtr, folderDefinition); diff --git a/src/gui/folderman.h b/src/gui/folderman.h index 1e3e32aad3e..5bc8fd72ecf 100644 --- a/src/gui/folderman.h +++ b/src/gui/folderman.h @@ -252,7 +252,7 @@ class FolderMan : public QObject void setDirtyNetworkLimits(); /** Whether or not vfs is supported in the location. */ - bool checkVfsAvailability(const QString &path, Vfs::Mode mode = bestAvailableVfsMode()) const; + bool checkVfsAvailability(const QString &path, Vfs::Mode mode = VfsPluginManager::instance().bestAvailableVfsMode()) const; /** If the folder configuration is no longer supported this will return an error string */ Result unsupportedConfiguration(const QString &path) const; diff --git a/src/gui/folderwizard/folderwizard.cpp b/src/gui/folderwizard/folderwizard.cpp index 221a12f8d76..3619986e630 100644 --- a/src/gui/folderwizard/folderwizard.cpp +++ b/src/gui/folderwizard/folderwizard.cpp @@ -149,7 +149,7 @@ const AccountStatePtr &FolderWizardPrivate::accountState() bool FolderWizardPrivate::useVirtualFiles() const { - const auto mode = bestAvailableVfsMode(); + const auto mode = VfsPluginManager::instance().bestAvailableVfsMode(); const bool useVirtualFiles = (Theme::instance()->forceVirtualFilesOption() && mode == Vfs::WindowsCfApi) || (_folderWizardSelectiveSyncPage->useVirtualFiles()); if (useVirtualFiles) { const auto availability = Vfs::checkAvailability(initialLocalPath(), mode); diff --git a/src/gui/folderwizard/folderwizardselectivesync.cpp b/src/gui/folderwizard/folderwizardselectivesync.cpp index 2c38ad87390..c664ce57a49 100644 --- a/src/gui/folderwizard/folderwizardselectivesync.cpp +++ b/src/gui/folderwizard/folderwizardselectivesync.cpp @@ -43,7 +43,7 @@ FolderWizardSelectiveSync::FolderWizardSelectiveSync(FolderWizardPrivate *parent _selectiveSync = new SelectiveSyncWidget(folderWizardPrivate()->accountState()->account(), this); layout->addWidget(_selectiveSync); - const auto vfsMode = bestAvailableVfsMode(); + const auto vfsMode = VfsPluginManager::instance().bestAvailableVfsMode(); if (Theme::instance()->forceVirtualFilesOption() && vfsMode == Vfs::WindowsCfApi) { // using an else if to make the condition not even more complex... } else if (Theme::instance()->showVirtualFilesOption() && vfsMode != Vfs::Off && (vfsMode == Vfs::WindowsCfApi || Theme::instance()->enableExperimentalFeatures())) { @@ -100,7 +100,7 @@ void FolderWizardSelectiveSync::virtualFilesCheckboxClicked() // no need to show the message box on Windows // as a little shortcut, we just re-use the message box's accept handler - if (bestAvailableVfsMode() == Vfs::WindowsCfApi) { + if (VfsPluginManager::instance().bestAvailableVfsMode() == Vfs::WindowsCfApi) { Q_EMIT messageBox->accepted(); } else { messageBox->show(); diff --git a/src/gui/generalsettings.cpp b/src/gui/generalsettings.cpp index a55b8ac8879..6c5529dff7c 100644 --- a/src/gui/generalsettings.cpp +++ b/src/gui/generalsettings.cpp @@ -136,7 +136,7 @@ GeneralSettings::GeneralSettings(QWidget *parent) if (!Theme::instance()->aboutShowCopyright()) { _ui->copyrightLabel->hide(); } - if (Theme::instance()->forceVirtualFilesOption() && bestAvailableVfsMode() == Vfs::WindowsCfApi) { + if (Theme::instance()->forceVirtualFilesOption() && VfsPluginManager::instance().bestAvailableVfsMode() == Vfs::WindowsCfApi) { _ui->groupBox_non_vfs->hide(); } } diff --git a/src/gui/newwizard/states/accountconfiguredsetupwizardstate.cpp b/src/gui/newwizard/states/accountconfiguredsetupwizardstate.cpp index 50bd9759214..a74d80e94b8 100644 --- a/src/gui/newwizard/states/accountconfiguredsetupwizardstate.cpp +++ b/src/gui/newwizard/states/accountconfiguredsetupwizardstate.cpp @@ -29,7 +29,7 @@ AccountConfiguredSetupWizardState::AccountConfiguredSetupWizardState(SetupWizard bool enableVfsByDefault = false; bool vfsModeIsExperimental = false; - switch (bestAvailableVfsMode()) { + switch (VfsPluginManager::instance().bestAvailableVfsMode()) { case Vfs::WindowsCfApi: vfsIsAvailable = true; enableVfsByDefault = true; diff --git a/src/libsync/theme.cpp b/src/libsync/theme.cpp index 79d76415fb6..afa0fc09c3f 100644 --- a/src/libsync/theme.cpp +++ b/src/libsync/theme.cpp @@ -433,7 +433,7 @@ QString Theme::aboutVersions(Theme::VersionFormat format) const _version, qtVersionString, QSslSocket::sslLibraryVersionString(), - Vfs::modeToString(bestAvailableVfsMode()), + Vfs::modeToString(VfsPluginManager::instance().bestAvailableVfsMode()), QSysInfo::productType() % QLatin1Char('-') % QSysInfo::kernelVersion(), br, gitUrl, diff --git a/test/testblacklist.cpp b/test/testblacklist.cpp index c0e73d8c3c2..6868fc1e010 100644 --- a/test/testblacklist.cpp +++ b/test/testblacklist.cpp @@ -30,7 +30,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testdatabaseerror.cpp b/test/testdatabaseerror.cpp index b581d0da47f..de66a686388 100644 --- a/test/testdatabaseerror.cpp +++ b/test/testdatabaseerror.cpp @@ -24,7 +24,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testdownload.cpp b/test/testdownload.cpp index 3faf74836f7..e29b4ccc75c 100644 --- a/test/testdownload.cpp +++ b/test/testdownload.cpp @@ -73,7 +73,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testlocaldiscovery.cpp b/test/testlocaldiscovery.cpp index 3564921be9e..f6d507a1bbb 100644 --- a/test/testlocaldiscovery.cpp +++ b/test/testlocaldiscovery.cpp @@ -27,7 +27,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testlockedfiles.cpp b/test/testlockedfiles.cpp index 939b232de06..0be2a491507 100644 --- a/test/testlockedfiles.cpp +++ b/test/testlockedfiles.cpp @@ -48,7 +48,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testpermissions.cpp b/test/testpermissions.cpp index fa8bc3d46bf..20abc214fad 100644 --- a/test/testpermissions.cpp +++ b/test/testpermissions.cpp @@ -76,7 +76,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testremotediscovery.cpp b/test/testremotediscovery.cpp index 52eac321f8f..befea4d75a7 100644 --- a/test/testremotediscovery.cpp +++ b/test/testremotediscovery.cpp @@ -55,7 +55,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testsyncconflict.cpp b/test/testsyncconflict.cpp index 55931a12bf3..cbf2a1204fa 100644 --- a/test/testsyncconflict.cpp +++ b/test/testsyncconflict.cpp @@ -93,7 +93,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testsyncdelete.cpp b/test/testsyncdelete.cpp index f48ef741a4c..b93263d2177 100644 --- a/test/testsyncdelete.cpp +++ b/test/testsyncdelete.cpp @@ -23,7 +23,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index a3a9c708fe5..a34ea72cf77 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -50,7 +50,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testsyncmove.cpp b/test/testsyncmove.cpp index dca7ebd0b14..a9e2ed416f1 100644 --- a/test/testsyncmove.cpp +++ b/test/testsyncmove.cpp @@ -67,7 +67,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. @@ -976,8 +976,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off; QTest::newRow("Vfs::WithSuffix") << Vfs::WithSuffix; #ifdef Q_OS_WIN32 - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) - { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi") << Vfs::WindowsCfApi; } else { QWARN("Skipping Vfs::WindowsCfApi"); @@ -1007,7 +1006,7 @@ private slots: if (vfsMode != Vfs::Off) { - auto vfs = QSharedPointer(createVfsFromPlugin(vfsMode).release()); + auto vfs = QSharedPointer(VfsPluginManager::instance().createVfsFromPlugin(vfsMode).release()); QVERIFY(vfs); fakeFolder.switchToVfs(vfs); fakeFolder.syncJournal().internalPinStates().setForPath("", PinState::OnlineOnly); diff --git a/test/testsyncvirtualfiles.cpp b/test/testsyncvirtualfiles.cpp index a87cead2e3f..d7b230d2d6b 100644 --- a/test/testsyncvirtualfiles.cpp +++ b/test/testsyncvirtualfiles.cpp @@ -56,7 +56,7 @@ void markForDehydration(FakeFolder &folder, const QByteArray &path) QSharedPointer setupVfs(FakeFolder &folder) { - auto suffixVfs = QSharedPointer(createVfsFromPlugin(Vfs::WithSuffix).release()); + auto suffixVfs = QSharedPointer(VfsPluginManager::instance().createVfsFromPlugin(Vfs::WithSuffix).release()); folder.switchToVfs(suffixVfs); // Using this directly doesn't recursively unpin everything and instead leaves @@ -894,7 +894,7 @@ private slots: QVERIFY(fakeFolder.currentLocalState().find("A/a3" DVSUFFIX)); QVERIFY(!fakeFolder.currentLocalState().find("A/B/b1" DVSUFFIX)); - fakeFolder.switchToVfs(QSharedPointer(createVfsFromPlugin(Vfs::Off).release())); + fakeFolder.switchToVfs(QSharedPointer(VfsPluginManager::instance().createVfsFromPlugin(Vfs::Off).release())); QVERIFY(fakeFolder.applyLocalModificationsAndSync()); QVERIFY(!fakeFolder.currentRemoteState().find("A/a3" DVSUFFIX)); // regular upload QVERIFY(fakeFolder.currentLocalState() != fakeFolder.currentRemoteState()); diff --git a/test/testuploadreset.cpp b/test/testuploadreset.cpp index bc69b192c19..2e4177997a9 100644 --- a/test/testuploadreset.cpp +++ b/test/testuploadreset.cpp @@ -26,7 +26,7 @@ private slots: QTest::newRow("Vfs::Off") << Vfs::Off << false; - if (isVfsPluginAvailable(Vfs::WindowsCfApi)) { + if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::WindowsCfApi)) { QTest::newRow("Vfs::WindowsCfApi dehydrated") << Vfs::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. diff --git a/test/testutils/syncenginetestutils.cpp b/test/testutils/syncenginetestutils.cpp index 653083ff468..49dff9c1697 100644 --- a/test/testutils/syncenginetestutils.cpp +++ b/test/testutils/syncenginetestutils.cpp @@ -943,7 +943,7 @@ FakeFolder::FakeFolder(const FileInfo &fileTemplate, OCC::Vfs::Mode vfsMode, boo // TODO: davUrl _syncEngine.reset(new OCC::SyncEngine(_account, _account->davUrl(), localPath(), QString(), _journalDb.get())); - _syncEngine->setSyncOptions(OCC::SyncOptions { QSharedPointer(OCC::createVfsFromPlugin(vfsMode).release()) }); + _syncEngine->setSyncOptions(OCC::SyncOptions { QSharedPointer(OCC::VfsPluginManager::instance().createVfsFromPlugin(vfsMode).release()) }); // Ignore temporary files from the download. (This is in the default exclude list, but we don't load it) _syncEngine->excludedFiles().addManualExclude(QStringLiteral("]*.~*")); @@ -957,7 +957,7 @@ FakeFolder::FakeFolder(const FileInfo &fileTemplate, OCC::Vfs::Mode vfsMode, boo auto vfs = _syncEngine->syncOptions()._vfs; if (vfsMode != vfs->mode()) { - vfs.reset(createVfsFromPlugin(vfsMode).release()); + vfs.reset(OCC::VfsPluginManager::instance().createVfsFromPlugin(vfsMode).release()); Q_ASSERT(vfs); }