Skip to content

Commit

Permalink
Added remove database button to delete database from file system for …
Browse files Browse the repository at this point in the history
…disabled databases
  • Loading branch information
jschick04 committed Jul 18, 2024
1 parent 385a5f6 commit 84a9e15
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 6 deletions.
3 changes: 2 additions & 1 deletion src/EventLogExpert.UI/Store/Settings/SettingsEffects.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,9 @@ public Task HandleSave(SettingsAction.Save action, IDispatcher dispatcher)
public Task HandleSaveDisabledDatabases(SettingsAction.SaveDisabledDatabases action, IDispatcher dispatcher)
{
preferencesProvider.DisabledDatabasesPreference = action.Databases;

dispatcher.Dispatch(new SettingsAction.SaveDisabledDatabasesCompleted(action.Databases));
dispatcher.Dispatch(new SettingsAction.LoadDatabases());

return Task.CompletedTask;
}
Expand Down
4 changes: 2 additions & 2 deletions src/EventLogExpert/Shared/Base/BaseModal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public abstract class BaseModal : FluxorComponent

[Inject] protected IJSRuntime JSRuntime { get; init; } = null!;

protected internal async Task Close() => await JSRuntime.InvokeVoidAsync("closeModal", ElementReference);
protected internal virtual async Task Close() => await JSRuntime.InvokeVoidAsync("closeModal", ElementReference);

protected internal async Task Open() => await JSRuntime.InvokeVoidAsync("openModal", ElementReference);
protected internal virtual async Task Open() => await JSRuntime.InvokeVoidAsync("openModal", ElementReference);
}
11 changes: 10 additions & 1 deletion src/EventLogExpert/Shared/Components/SettingsModal.razor
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,16 @@
@foreach (var database in _databases.OrderBy(x => x.name))
{
<div class="flex-space-between">
<span>@database.name</span>
<div>
<span>@database.name</span>

@if (!SettingsState.Value.LoadedDatabases.Contains(database.name))
{
<button class="button button-red" type="button" @onclick="() => RemoveDatabase(database.name)">
<i class="bi bi-dash-circle"></i>
</button>
}
</div>
<BooleanSelect Value="database.isEnabled" ValueChanged="() => ToggleDatabase(database.name)" />
</div>
}
Expand Down
42 changes: 40 additions & 2 deletions src/EventLogExpert/Shared/Components/SettingsModal.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public sealed partial class SettingsModal
{
private readonly List<(string name, bool isEnabled, bool hasChanged)> _databases = [];

private bool _databaseRemoved = false;
private SettingsModel _request = new();

[Inject] private IAlertDialogService AlertDialogService { get; init; } = null!;
Expand All @@ -29,6 +30,21 @@ public sealed partial class SettingsModal

[Inject] private IState<SettingsState> SettingsState { get; init; } = null!;

protected internal override Task Close()
{
if (_databaseRemoved)
{
Dispatcher.Dispatch(
new SettingsAction.SaveDisabledDatabases(
_databases
.Where(db => !db.isEnabled)
.Select(db => db.name)
.ToList()));
}

return base.Close();
}

protected override void OnInitialized()
{
SubscribeToAction<SettingsAction.OpenMenu>(action => Load().AndForget());
Expand Down Expand Up @@ -141,6 +157,30 @@ private async Task ReloadOpenLogs()
}
}

private async Task RemoveDatabase(string name)
{
try
{
var databaseDirectory = new DirectoryInfo(FileLocationOptions.DatabasePath);

// Using wildcard to also remove the db-shm and db-wal files
foreach (var file in databaseDirectory.GetFiles($"{name}*"))
{
file.Delete();
}

_databases.RemoveAll(db => string.Equals(db.name, name));

_databaseRemoved = true;
}
catch (Exception ex)
{
await AlertDialogService.ShowAlert("Failed to Remove Database",
$"An exception occurred while removing provider databases: {ex.Message}",
"OK");
}
}

private async Task Save()
{
if (!SettingsState.Value.Config.Equals(_request))
Expand All @@ -157,8 +197,6 @@ private async Task Save()
.Select(db => db.name)
.ToList()));

Dispatcher.Dispatch(new SettingsAction.LoadDatabases());

await ReloadOpenLogs();
}

Expand Down

0 comments on commit 84a9e15

Please sign in to comment.