From 087bc906cf601c49b22f57cb7a9569c1051e74af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Sat, 19 Feb 2022 23:41:00 +0100 Subject: [PATCH] Fixes --- src/Core/FileTime.Core/Providers/ContentProviderBase.cs | 8 +++++++- src/Providers/FileTime.Providers.Sftp/SftpFolder.cs | 2 +- src/Providers/FileTime.Providers.Sftp/SftpServer.cs | 6 +++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Core/FileTime.Core/Providers/ContentProviderBase.cs b/src/Core/FileTime.Core/Providers/ContentProviderBase.cs index fdb5fee..9225454 100644 --- a/src/Core/FileTime.Core/Providers/ContentProviderBase.cs +++ b/src/Core/FileTime.Core/Providers/ContentProviderBase.cs @@ -53,6 +53,8 @@ namespace FileTime.Core.Providers protected void SetRootContainers(IEnumerable newRootContainers) => RootContainers = newRootContainers.OrderBy(c => c.Name).ToList().AsReadOnly(); + protected void ClearRootContainers() => RootContainers = new List().AsReadOnly(); + public override async Task?> GetContainers(CancellationToken token = default) { await InitIfNeeded(); @@ -102,7 +104,11 @@ namespace FileTime.Core.Providers } } - protected virtual Task Init() { return Task.CompletedTask; } + protected virtual Task Init() + { + if (RootContainers == null) ClearRootContainers(); + return Task.CompletedTask; + } public override Task> RefreshItems(CancellationToken token = default) { throw new NotImplementedException($"{nameof(RefreshItems)} should not be called in {nameof(ContentProviderBase)}."); } diff --git a/src/Providers/FileTime.Providers.Sftp/SftpFolder.cs b/src/Providers/FileTime.Providers.Sftp/SftpFolder.cs index 371888d..68cb3f4 100644 --- a/src/Providers/FileTime.Providers.Sftp/SftpFolder.cs +++ b/src/Providers/FileTime.Providers.Sftp/SftpFolder.cs @@ -34,7 +34,7 @@ namespace FileTime.Providers.Sftp throw new NotImplementedException(); } - public override async Task> RefreshItems(CancellationToken token = default) => await _server.ListDirectory(FullName![(_server.FullName!.Length + 1)..]); + public override async Task> RefreshItems(CancellationToken token = default) => await _server.ListDirectory(this, FullName![(_server.FullName!.Length + 1)..]); public override Task Rename(string newName) { diff --git a/src/Providers/FileTime.Providers.Sftp/SftpServer.cs b/src/Providers/FileTime.Providers.Sftp/SftpServer.cs index fde945c..916f82b 100644 --- a/src/Providers/FileTime.Providers.Sftp/SftpServer.cs +++ b/src/Providers/FileTime.Providers.Sftp/SftpServer.cs @@ -34,7 +34,7 @@ namespace FileTime.Providers.Sftp CanDelete = SupportsDelete.True; } - public override async Task> RefreshItems(CancellationToken token = default) => await ListDirectory(""); + public override async Task> RefreshItems(CancellationToken token = default) => await ListDirectory(this, ""); public override Task CloneAsync() => Task.FromResult((IContainer)this); @@ -149,7 +149,7 @@ namespace FileTime.Providers.Sftp return true; } - public async Task> ListDirectory(string path) + public async Task> ListDirectory(IContainer parent, string path) { return await _sftpClientContext.RunWithSftpClientAsync(client => { @@ -160,7 +160,7 @@ namespace FileTime.Providers.Sftp { if (file.IsDirectory) { - var container = new SftpFolder(Provider, this, this, file.Name); + var container = new SftpFolder(Provider, this, parent, file.Name); containers.Add(container); } }