Smb save servers, auth

This commit is contained in:
2022-02-10 11:24:04 +01:00
parent 70180b9f12
commit ec03067af1
19 changed files with 463 additions and 132 deletions

View File

@@ -12,6 +12,7 @@ using FileTime.Core.Components;
using FileTime.Core.Providers;
using FileTime.Providers.Local;
using FileTime.Core.Models;
using Microsoft.Extensions.Logging;
namespace FileTime.Avalonia.Services
{
@@ -23,22 +24,26 @@ namespace FileTime.Avalonia.Services
private readonly string _settingsPath;
private readonly IEnumerable<IContentProvider> _contentProviders;
private readonly LocalContentProvider _localContentProvider;
private readonly ILogger<StatePersistenceService> _logger;
public StatePersistenceService(
AppState appState,
ItemNameConverterService itemNameConverterService,
IEnumerable<IContentProvider> contentProviders,
LocalContentProvider localContentProvider)
LocalContentProvider localContentProvider,
ILogger<StatePersistenceService> logger)
{
_appState = appState;
_itemNameConverterService = itemNameConverterService;
_contentProviders = contentProviders;
_localContentProvider = localContentProvider;
_logger = logger;
_settingsPath = Path.Combine(Program.AppDataRoot, "savedState.json");
_jsonOptions = new JsonSerializerOptions()
{
PropertyNameCaseInsensitive = true
PropertyNameCaseInsensitive = true,
WriteIndented = true
};
}
@@ -55,7 +60,10 @@ namespace FileTime.Avalonia.Services
await RestoreTabs(state.TabStates);
}
}
catch { }
catch (Exception e)
{
_logger.LogError(e, "Unkown exception while restoring app state.");
}
}
public void SaveStates()
@@ -97,33 +105,48 @@ namespace FileTime.Avalonia.Services
foreach (var tab in tabStates.Tabs)
{
if (tab.Path == null) continue;
IItem? pathItem = null;
foreach (var contentProvider in _contentProviders)
try
{
if (contentProvider.CanHandlePath(tab.Path))
if (tab.Path == null) continue;
IItem? pathItem = null;
if (tab.Path.StartsWith(Constants.ContentProviderProtocol))
{
pathItem = await contentProvider.GetByPath(tab.Path, true);
if (pathItem != null) break;
var contentProviderName = tab.Path.Substring(Constants.ContentProviderProtocol.Length);
pathItem = _contentProviders.FirstOrDefault(c => c.Name == contentProviderName);
}
else
{
foreach (var contentProvider in _contentProviders)
{
if (contentProvider.CanHandlePath(tab.Path))
{
pathItem = await contentProvider.GetByPath(tab.Path, true);
if (pathItem != null) break;
}
}
}
var container = pathItem switch
{
IContainer c => c,
IElement e => e.GetParent(),
_ => null
};
if (container == null) continue;
var newTab = new Tab();
await newTab.Init(container);
var newTabContainer = new TabContainer(newTab, _localContentProvider, _itemNameConverterService);
await newTabContainer.Init(tab.Number);
_appState.Tabs.Add(newTabContainer);
}
var container = pathItem switch
catch (Exception e)
{
IContainer c => c,
IElement e => e.GetParent(),
_ => null
};
if (container == null) continue;
var newTab = new Tab();
await newTab.Init(container);
var newTabContainer = new TabContainer(newTab, _localContentProvider, _itemNameConverterService);
await newTabContainer.Init(tab.Number);
_appState.Tabs.Add(newTabContainer);
_logger.LogError(e, "Unkown exception while restoring tab. {0}", JsonSerializer.Serialize(tab, _jsonOptions));
}
}
if (_appState.Tabs.FirstOrDefault(t => t.TabNumber == tabStates.ActiveTabNumber) is TabContainer tabContainer)
@@ -133,7 +156,10 @@ namespace FileTime.Avalonia.Services
return true;
}
catch { }
catch (Exception e)
{
_logger.LogError(e, "Unkown exception while restoring tabs.");
}
return false;
}
}