mirror of
https://github.com/chylex/Discord-History-Tracker.git
synced 2025-04-12 23:07:13 +03:00
Add option to Advanced tab to vacuum the database
This commit is contained in:
parent
277e241183
commit
86acef1a22
@ -15,5 +15,11 @@
|
|||||||
<Expander Header="Internal Server Configuration" IsExpanded="True">
|
<Expander Header="Internal Server Configuration" IsExpanded="True">
|
||||||
<controls:ServerConfigurationPanel DataContext="{Binding ServerConfigurationModel}" />
|
<controls:ServerConfigurationPanel DataContext="{Binding ServerConfigurationModel}" />
|
||||||
</Expander>
|
</Expander>
|
||||||
|
<Expander Header="Database Tools" IsExpanded="True">
|
||||||
|
<StackPanel Orientation="Vertical" Spacing="10">
|
||||||
|
<TextBlock TextWrapping="Wrap">Recreates the database to remove any traces of deleted data, which frees up space and prevents forensic recovery.</TextBlock>
|
||||||
|
<Button Command="{Binding VacuumDatabase}">Vacuum Database</Button>
|
||||||
|
</StackPanel>
|
||||||
|
</Expander>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</UserControl>
|
</UserControl>
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using DHT.Desktop.Dialogs.Message;
|
||||||
using DHT.Desktop.Main.Controls;
|
using DHT.Desktop.Main.Controls;
|
||||||
using DHT.Desktop.Server;
|
using DHT.Desktop.Server;
|
||||||
using DHT.Server.Database;
|
using DHT.Server.Database;
|
||||||
@ -9,19 +10,30 @@ namespace DHT.Desktop.Main.Pages {
|
|||||||
sealed class AdvancedPageModel : BaseModel, IDisposable {
|
sealed class AdvancedPageModel : BaseModel, IDisposable {
|
||||||
public ServerConfigurationPanelModel ServerConfigurationModel { get; }
|
public ServerConfigurationPanelModel ServerConfigurationModel { get; }
|
||||||
|
|
||||||
[Obsolete("Designer")]
|
private readonly Window window;
|
||||||
public AdvancedPageModel() : this(null!, new ServerManager(DummyDatabaseFile.Instance)) {}
|
private readonly IDatabaseFile db;
|
||||||
|
|
||||||
|
[Obsolete("Designer")]
|
||||||
|
public AdvancedPageModel() : this(null!, DummyDatabaseFile.Instance, new ServerManager(DummyDatabaseFile.Instance)) {}
|
||||||
|
|
||||||
|
public AdvancedPageModel(Window window, IDatabaseFile db, ServerManager serverManager) {
|
||||||
|
this.window = window;
|
||||||
|
this.db = db;
|
||||||
|
|
||||||
public AdvancedPageModel(Window window, ServerManager serverManager) {
|
|
||||||
ServerConfigurationModel = new ServerConfigurationPanelModel(window, serverManager);
|
ServerConfigurationModel = new ServerConfigurationPanelModel(window, serverManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize() {
|
public void Initialize() {
|
||||||
ServerConfigurationModel.Initialize();
|
ServerConfigurationModel.Initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose() {
|
public void Dispose() {
|
||||||
ServerConfigurationModel.Dispose();
|
ServerConfigurationModel.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async void VacuumDatabase() {
|
||||||
|
db.Vacuum();
|
||||||
|
await Dialog.ShowOk(window, "Vacuum Database", "Done.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ namespace DHT.Desktop.Main.Screens {
|
|||||||
private AdvancedPageModel AdvancedPageModel { get; }
|
private AdvancedPageModel AdvancedPageModel { get; }
|
||||||
|
|
||||||
public DebugPage? DebugPage { get; }
|
public DebugPage? DebugPage { get; }
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
public bool HasDebugPage => true;
|
public bool HasDebugPage => true;
|
||||||
private DebugPageModel DebugPageModel { get; }
|
private DebugPageModel DebugPageModel { get; }
|
||||||
@ -66,7 +66,7 @@ namespace DHT.Desktop.Main.Screens {
|
|||||||
ViewerPageModel = new ViewerPageModel(window, db);
|
ViewerPageModel = new ViewerPageModel(window, db);
|
||||||
ViewerPage = new ViewerPage { DataContext = ViewerPageModel };
|
ViewerPage = new ViewerPage { DataContext = ViewerPageModel };
|
||||||
|
|
||||||
AdvancedPageModel = new AdvancedPageModel(window, serverManager);
|
AdvancedPageModel = new AdvancedPageModel(window, db, serverManager);
|
||||||
AdvancedPage = new AdvancedPage { DataContext = AdvancedPageModel };
|
AdvancedPage = new AdvancedPage { DataContext = AdvancedPageModel };
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@ -75,7 +75,7 @@ namespace DHT.Desktop.Main.Screens {
|
|||||||
#else
|
#else
|
||||||
DebugPage = null;
|
DebugPage = null;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
StatusBarModel = new StatusBarModel(db.Statistics);
|
StatusBarModel = new StatusBarModel(db.Statistics);
|
||||||
|
|
||||||
AdvancedPageModel.ServerConfigurationModel.ServerStatusChanged += OnServerStatusChanged;
|
AdvancedPageModel.ServerConfigurationModel.ServerStatusChanged += OnServerStatusChanged;
|
||||||
|
@ -41,6 +41,8 @@ namespace DHT.Server.Database {
|
|||||||
|
|
||||||
public void RemoveMessages(MessageFilter filter, MessageFilterRemovalMode mode) {}
|
public void RemoveMessages(MessageFilter filter, MessageFilterRemovalMode mode) {}
|
||||||
|
|
||||||
|
public void Vacuum() {}
|
||||||
|
|
||||||
public void Dispose() {}
|
public void Dispose() {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,5 +21,7 @@ namespace DHT.Server.Database {
|
|||||||
int CountMessages(MessageFilter? filter = null);
|
int CountMessages(MessageFilter? filter = null);
|
||||||
List<Message> GetMessages(MessageFilter? filter = null);
|
List<Message> GetMessages(MessageFilter? filter = null);
|
||||||
void RemoveMessages(MessageFilter filter, MessageFilterRemovalMode mode);
|
void RemoveMessages(MessageFilter filter, MessageFilterRemovalMode mode);
|
||||||
|
|
||||||
|
void Vacuum();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -436,6 +436,12 @@ LEFT JOIN replied_to rt ON m.message_id = rt.message_id" + filter.GenerateWhereC
|
|||||||
return dict;
|
return dict;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Vacuum() {
|
||||||
|
using var conn = pool.Take();
|
||||||
|
using var cmd = conn.Command("VACUUM");
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateServerStatistics(ISqliteConnection conn) {
|
private void UpdateServerStatistics(ISqliteConnection conn) {
|
||||||
Statistics.TotalServers = conn.SelectScalar("SELECT COUNT(*) FROM servers") as long? ?? 0;
|
Statistics.TotalServers = conn.SelectScalar("SELECT COUNT(*) FROM servers") as long? ?? 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user