Fix no tab on first start

This commit is contained in:
2022-05-24 19:37:50 +02:00
parent 518cc350ad
commit cb5260da5d

View File

@@ -80,26 +80,7 @@ public class TabPersistenceService : ITabPersistenceService
private async Task LoadStatesAsync() private async Task LoadStatesAsync()
{ {
if (!File.Exists(_settingsPath)) return; if (!File.Exists(_settingsPath))
try
{
await using var stateReader = File.OpenRead(_settingsPath);
var state = await JsonSerializer.DeserializeAsync<PersistenceRoot>(stateReader);
if (state != null)
{
await RestoreTabs(state.TabStates);
}
}
catch (Exception e)
{
_logger.LogError(e, "Unknown exception while restoring app state");
}
}
private async Task RestoreTabs(TabStates? tabStates)
{
if (tabStates == null
|| tabStates.Tabs == null)
{ {
CreateEmptyTab(); CreateEmptyTab();
return; return;
@@ -107,7 +88,40 @@ public class TabPersistenceService : ITabPersistenceService
try try
{ {
await using var stateReader = File.OpenRead(_settingsPath);
var state = await JsonSerializer.DeserializeAsync<PersistenceRoot>(stateReader);
if (state != null)
{
if (await RestoreTabs(state.TabStates)) return;
}
}
catch (Exception e)
{
_logger.LogError(e, "Unknown exception while restoring app state");
}
CreateEmptyTab();
void CreateEmptyTab()
{
var tab = _serviceProvider.GetInitableResolver<IContainer>(_localContentProvider)
.GetRequiredService<ITab>();
var tabViewModel = _serviceProvider.GetInitableResolver(tab, 1).GetRequiredService<ITabViewModel>();
_appState.AddTab(tabViewModel);
}
}
private async Task<bool> RestoreTabs(TabStates? tabStates)
{
if (tabStates == null
|| tabStates.Tabs == null)
{
return false;
}
try
{
foreach (var tab in tabStates.Tabs) foreach (var tab in tabStates.Tabs)
{ {
try try
@@ -120,12 +134,16 @@ public class TabPersistenceService : ITabPersistenceService
{ {
try try
{ {
var pathItem = await _timelessContentProvider.GetItemByFullNameAsync(path, PointInTime.Present); var pathItem =
await _timelessContentProvider.GetItemByFullNameAsync(path, PointInTime.Present);
container = pathItem switch container = pathItem switch
{ {
IContainer c => c, IContainer c => c,
IElement e => e.Parent?.ResolveAsync() as IContainer, IElement e =>
e.Parent is null
? null
: await e.Parent.ResolveAsync() as IContainer,
_ => null _ => null
}; };
break; break;
@@ -144,39 +162,30 @@ public class TabPersistenceService : ITabPersistenceService
var tabToLoad = _serviceProvider.GetInitableResolver(container) var tabToLoad = _serviceProvider.GetInitableResolver(container)
.GetRequiredService<ITab>(); .GetRequiredService<ITab>();
var tabViewModel = _serviceProvider.GetInitableResolver(tabToLoad, tab.Number).GetRequiredService<ITabViewModel>(); var tabViewModel = _serviceProvider.GetInitableResolver(tabToLoad, tab.Number)
.GetRequiredService<ITabViewModel>();
_appState.AddTab(tabViewModel); _appState.AddTab(tabViewModel);
} }
catch (Exception e) catch (Exception e)
{ {
_logger.LogError(e, "Unkown exception while restoring tab. {TabState}", JsonSerializer.Serialize(tab, _jsonOptions)); _logger.LogError(e, "Unknown exception while restoring tab. {TabState}",
JsonSerializer.Serialize(tab, _jsonOptions));
} }
} }
} }
catch (Exception e) catch (Exception e)
{ {
_logger.LogError(e, "Unkown exception while restoring tabs."); _logger.LogError(e, "Unknown exception while restoring tabs");
return false;
} }
if (_appState.Tabs.Count == 0) if (_appState.Tabs.Count == 0) return false;
{
CreateEmptyTab();
}
else
{
var tabToActivate = _appState.Tabs.FirstOrDefault(t => t.TabNumber == tabStates.ActiveTabNumber);
if (tabToActivate is not null) _appState.SetSelectedTab(tabToActivate);
}
void CreateEmptyTab() var tabToActivate = _appState.Tabs.FirstOrDefault(t => t.TabNumber == tabStates.ActiveTabNumber);
{ if (tabToActivate is not null) _appState.SetSelectedTab(tabToActivate);
var tab = _serviceProvider.GetInitableResolver<IContainer>(_localContentProvider)
.GetRequiredService<ITab>();
var tabViewModel = _serviceProvider.GetInitableResolver(tab, 1).GetRequiredService<ITabViewModel>();
_appState.AddTab(tabViewModel); return true;
}
} }
public void SaveStates() public void SaveStates()
@@ -185,7 +194,8 @@ public class TabPersistenceService : ITabPersistenceService
{ {
TabStates = SerializeTabStates() TabStates = SerializeTabStates()
}; };
var settingsDirectory = new DirectoryInfo(string.Join(Path.DirectorySeparatorChar, _settingsPath.Split(Path.DirectorySeparatorChar)[0..^1])); var settingsDirectory = new DirectoryInfo(string.Join(Path.DirectorySeparatorChar,
_settingsPath.Split(Path.DirectorySeparatorChar)[0..^1]));
if (!settingsDirectory.Exists) settingsDirectory.Create(); if (!settingsDirectory.Exists) settingsDirectory.Create();
var serializedData = JsonSerializer.Serialize(state, _jsonOptions); var serializedData = JsonSerializer.Serialize(state, _jsonOptions);
File.WriteAllText(_settingsPath, serializedData); File.WriteAllText(_settingsPath, serializedData);