Vfs: Remove VfsDefaults

That just complicated things. It's ok if Vfs is not a fully abstract
interface class.

The pinstate-in-db methods are instead provided directly on Vfs and
VfsSuffix and VfsOff use them to implement pin states.

The start() method is simply non-virtual and calls into startImpl() for
the plugin-specific startup code.
This commit is contained in:
Christian Kamm 2019-02-06 10:41:33 +01:00 committed by Kevin Ottens
parent e9cbe13598
commit 6a977edeee
No known key found for this signature in database
GPG key ID: 074BBBCB8DECC9E2
4 changed files with 45 additions and 35 deletions

View file

@ -60,17 +60,13 @@ Optional<Vfs::Mode> Vfs::modeFromString(const QString &str)
return {}; return {};
} }
VfsDefaults::VfsDefaults(QObject *parent) void Vfs::start(const VfsSetupParams &params)
: Vfs(parent)
{
}
void VfsDefaults::start(const VfsSetupParams &params)
{ {
_setupParams = params; _setupParams = params;
startImpl(params);
} }
bool VfsDefaults::setPinState(const QString &folderPath, PinState state) bool Vfs::setPinStateInDb(const QString &folderPath, PinState state)
{ {
auto path = folderPath.toUtf8(); auto path = folderPath.toUtf8();
_setupParams.journal->internalPinStates().wipeForPathAndBelow(path); _setupParams.journal->internalPinStates().wipeForPathAndBelow(path);
@ -78,13 +74,13 @@ bool VfsDefaults::setPinState(const QString &folderPath, PinState state)
return true; return true;
} }
Optional<PinState> VfsDefaults::pinState(const QString &folderPath) Optional<PinState> Vfs::pinStateInDb(const QString &folderPath)
{ {
return _setupParams.journal->internalPinStates().effectiveForPath(folderPath.toUtf8()); return _setupParams.journal->internalPinStates().effectiveForPath(folderPath.toUtf8());
} }
VfsOff::VfsOff(QObject *parent) VfsOff::VfsOff(QObject *parent)
: VfsDefaults(parent) : Vfs(parent)
{ {
} }

View file

@ -108,17 +108,15 @@ public:
/// For WithSuffix modes: the suffix (including the dot) /// For WithSuffix modes: the suffix (including the dot)
virtual QString fileSuffix() const = 0; virtual QString fileSuffix() const = 0;
/// Access to the parameters the instance was start()ed with.
const VfsSetupParams &params() const { return _setupParams; }
/** Initializes interaction with the VFS provider. /** Initializes interaction with the VFS provider.
* *
* For example, the VFS provider might monitor files to be able to start a file * The plugin-specific work is done in startImpl().
* hydration (download of a file's remote contents) when the user wants to open
* it.
*
* Usually some registration needs to be done with the backend. This function
* should take care of it if necessary.
*/ */
virtual void start(const VfsSetupParams &params) = 0; void start(const VfsSetupParams &params);
/// Stop interaction with VFS provider. Like when the client application quits. /// Stop interaction with VFS provider. Like when the client application quits.
virtual void stop() = 0; virtual void stop() = 0;
@ -221,29 +219,29 @@ signals:
void beginHydrating(); void beginHydrating();
/// Emitted when the hydration ends /// Emitted when the hydration ends
void doneHydrating(); void doneHydrating();
};
class OCSYNC_EXPORT VfsDefaults : public Vfs
{
public:
explicit VfsDefaults(QObject* parent = nullptr);
// stores the params
void start(const VfsSetupParams &params) override;
// use the journal to back the pinstates
bool setPinState(const QString &folderPath, PinState state) override;
Optional<PinState> pinState(const QString &folderPath) override;
// access initial setup data
const VfsSetupParams &params() const { return _setupParams; }
protected: protected:
/** Setup the plugin for the folder.
*
* For example, the VFS provider might monitor files to be able to start a file
* hydration (download of a file's remote contents) when the user wants to open
* it.
*
* Usually some registration needs to be done with the backend. This function
* should take care of it if necessary.
*/
virtual void startImpl(const VfsSetupParams &params) = 0;
// Db-backed pin state handling. Derived classes may use it to implement pin states.
bool setPinStateInDb(const QString &folderPath, PinState state);
Optional<PinState> pinStateInDb(const QString &folderPath);
// the parameters passed to start()
VfsSetupParams _setupParams; VfsSetupParams _setupParams;
}; };
/// Implementation of Vfs for Vfs::Off mode - does nothing /// Implementation of Vfs for Vfs::Off mode - does nothing
class OCSYNC_EXPORT VfsOff : public VfsDefaults class OCSYNC_EXPORT VfsOff : public Vfs
{ {
Q_OBJECT Q_OBJECT
@ -269,8 +267,16 @@ public:
bool isDehydratedPlaceholder(const QString &) override { return false; } bool isDehydratedPlaceholder(const QString &) override { return false; }
bool statTypeVirtualFile(csync_file_stat_t *, void *) override { return false; } bool statTypeVirtualFile(csync_file_stat_t *, void *) override { return false; }
bool setPinState(const QString &folderPath, PinState state) override
{ return setPinStateInDb(folderPath, state); }
Optional<PinState> pinState(const QString &folderPath) override
{ return pinStateInDb(folderPath); }
public slots: public slots:
void fileStatusChanged(const QString &, SyncFileStatus) override {} void fileStatusChanged(const QString &, SyncFileStatus) override {}
protected:
void startImpl(const VfsSetupParams &) override {}
}; };
/// Check whether the plugin for the mode is available. /// Check whether the plugin for the mode is available.

View file

@ -22,7 +22,7 @@
namespace OCC { namespace OCC {
VfsSuffix::VfsSuffix(QObject *parent) VfsSuffix::VfsSuffix(QObject *parent)
: VfsDefaults(parent) : Vfs(parent)
{ {
} }

View file

@ -21,7 +21,7 @@
namespace OCC { namespace OCC {
class VfsSuffix : public VfsDefaults class VfsSuffix : public Vfs
{ {
Q_OBJECT Q_OBJECT
@ -47,8 +47,16 @@ public:
bool isDehydratedPlaceholder(const QString &filePath) override; bool isDehydratedPlaceholder(const QString &filePath) override;
bool statTypeVirtualFile(csync_file_stat_t *stat, void *stat_data) override; bool statTypeVirtualFile(csync_file_stat_t *stat, void *stat_data) override;
bool setPinState(const QString &folderPath, PinState state) override
{ return setPinStateInDb(folderPath, state); }
Optional<PinState> pinState(const QString &folderPath) override
{ return pinStateInDb(folderPath); }
public slots: public slots:
void fileStatusChanged(const QString &, SyncFileStatus) override {} void fileStatusChanged(const QString &, SyncFileStatus) override {}
protected:
void startImpl(const VfsSetupParams &) override {}
}; };
class SuffixVfsPluginFactory : public QObject, public DefaultPluginFactory<VfsSuffix> class SuffixVfsPluginFactory : public QObject, public DefaultPluginFactory<VfsSuffix>