#define _CSYNC_VIO_LOCAL_H
struct csync_vio_handle_t;
+namespace OCC {
+class Vfs;
+}
csync_vio_handle_t OCSYNC_EXPORT *csync_vio_local_opendir(const QString &name);
int OCSYNC_EXPORT csync_vio_local_closedir(csync_vio_handle_t *dhandle);
-std::unique_ptr<csync_file_stat_t> OCSYNC_EXPORT csync_vio_local_readdir(CSYNC *ctx, csync_vio_handle_t *dhandle);
+std::unique_ptr<csync_file_stat_t> OCSYNC_EXPORT csync_vio_local_readdir(csync_vio_handle_t *dhandle, OCC::Vfs *vfs);
int OCSYNC_EXPORT csync_vio_local_stat(const char *uri, csync_file_stat_t *buf);
#include "csync_util.h"
#include "vio/csync_vio_local.h"
-#include "common/vfsplugin.h"
+#include "common/vfs.h"
#include <QtCore/QLoggingCategory>
#include <QtCore/QFile>
return rc;
}
-std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(CSYNC *ctx, csync_vio_handle_t *handle) {
+std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *handle, OCC::Vfs *vfs) {
struct _tdirent *dirent = NULL;
std::unique_ptr<csync_file_stat_t> file_stat;
}
// Override type for virtual files if desired
- if (ctx->vfs)
- ctx->vfs->statTypeVirtualFile(file_stat.get(), nullptr);
+ if (vfs)
+ vfs->statTypeVirtualFile(file_stat.get(), nullptr);
return file_stat;
}
}
}
-std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(CSYNC *ctx, csync_vio_handle_t *handle) {
+std::unique_ptr<csync_file_stat_t> csync_vio_local_readdir(csync_vio_handle_t *handle, OCC::Vfs *vfs) {
std::unique_ptr<csync_file_stat_t> file_stat;
DWORD rem;
}
auto path = c_utf8_from_locale(handle->ffd.cFileName);
if (path == "." || path == "..")
- return csync_vio_local_readdir(ctx, handle);
+ return csync_vio_local_readdir(handle, vfs);
file_stat = std::make_unique<csync_file_stat_t>();
file_stat->path = path;
- if (ctx->vfs && ctx->vfs->statTypeVirtualFile(file_stat.get(), &handle->ffd)) {
+ if (vfs && vfs->statTypeVirtualFile(file_stat.get(), &handle->ffd)) {
// all good
} else if (handle->ffd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) {
// Detect symlinks, and treat junctions as symlinks too.
return;
}
// Turn new remote files into virtual files if the option is enabled.
- if (!localEntry.isValid() && _discoveryData->_syncOptions._newFilesAreVirtual && item->_type == ItemTypeFile) {
+ auto vfs = _discoveryData->_syncOptions._vfs;
+ if (!localEntry.isValid() && vfs && vfs->mode() == Vfs::WithSuffix && item->_type == ItemTypeFile) {
item->_type = ItemTypeVirtualFile;
addVirtualFileSuffix(path._original);
}
void ProcessDirectoryJob::addVirtualFileSuffix(QString &str) const
{
- str.append(_discoveryData->_syncOptions._virtualFileSuffix);
+ if (auto vfs = _discoveryData->_syncOptions._vfs)
+ str.append(vfs->fileSuffix());
}
bool ProcessDirectoryJob::hasVirtualFileSuffix(const QString &str) const
{
- return str.endsWith(_discoveryData->_syncOptions._virtualFileSuffix);
+ if (auto vfs = _discoveryData->_syncOptions._vfs)
+ return str.endsWith(vfs->fileSuffix());
+ return false;
}
void ProcessDirectoryJob::chopVirtualFileSuffix(QString &str) const
bool hasSuffix = hasVirtualFileSuffix(str);
ASSERT(hasSuffix);
if (hasSuffix)
- str.chop(_discoveryData->_syncOptions._virtualFileSuffix.size());
+ str.chop(_discoveryData->_syncOptions._vfs->fileSuffix().size());
}
DiscoverySingleDirectoryJob *ProcessDirectoryJob::startAsyncServerQuery()
return false;
}
errno = 0;
- while (auto dirent = csync_vio_local_readdir(dh)) {
+ while (auto dirent = csync_vio_local_readdir(dh, _discoveryData->_syncOptions._vfs)) {
if (dirent->type == ItemTypeSkip)
continue;
LocalInfo i;
dh = csync_vio_local_opendir(dir);
assert_non_null(dh);
- while( (dirent = csync_vio_local_readdir(dh)) ) {
+ OCC::Vfs *vfs = nullptr;
+ while( (dirent = csync_vio_local_readdir(dh, vfs)) ) {
assert_non_null(dirent.get());
if (!dirent->original_path.isEmpty()) {
sv->ignored_dir = c_strdup(dirent->original_path);