mirror of
https://github.com/chylex/Discord-History-Tracker.git
synced 2025-07-15 23:51:01 +03:00
Compare commits
3 Commits
277e241183
...
90dac674eb
Author | SHA1 | Date | |
---|---|---|---|
|
90dac674eb | ||
|
1ebf15b039 | ||
|
86acef1a22 |
1
.idea/Discord-History-Tracker.iml
generated
1
.idea/Discord-History-Tracker.iml
generated
@ -8,6 +8,7 @@
|
||||
<excludeFolder url="file://$MODULE_DIR$/.vscode" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/bld" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/lib" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/app" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.8" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
|
@ -15,5 +15,11 @@
|
||||
<Expander Header="Internal Server Configuration" IsExpanded="True">
|
||||
<controls:ServerConfigurationPanel DataContext="{Binding ServerConfigurationModel}" />
|
||||
</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>
|
||||
</UserControl>
|
||||
|
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using Avalonia.Controls;
|
||||
using DHT.Desktop.Dialogs.Message;
|
||||
using DHT.Desktop.Main.Controls;
|
||||
using DHT.Desktop.Server;
|
||||
using DHT.Server.Database;
|
||||
@ -9,19 +10,30 @@ namespace DHT.Desktop.Main.Pages {
|
||||
sealed class AdvancedPageModel : BaseModel, IDisposable {
|
||||
public ServerConfigurationPanelModel ServerConfigurationModel { get; }
|
||||
|
||||
[Obsolete("Designer")]
|
||||
public AdvancedPageModel() : this(null!, new ServerManager(DummyDatabaseFile.Instance)) {}
|
||||
private readonly Window window;
|
||||
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);
|
||||
}
|
||||
|
||||
public void Initialize() {
|
||||
ServerConfigurationModel.Initialize();
|
||||
}
|
||||
|
||||
|
||||
public void 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; }
|
||||
|
||||
public DebugPage? DebugPage { get; }
|
||||
|
||||
|
||||
#if DEBUG
|
||||
public bool HasDebugPage => true;
|
||||
private DebugPageModel DebugPageModel { get; }
|
||||
@ -66,7 +66,7 @@ namespace DHT.Desktop.Main.Screens {
|
||||
ViewerPageModel = new ViewerPageModel(window, db);
|
||||
ViewerPage = new ViewerPage { DataContext = ViewerPageModel };
|
||||
|
||||
AdvancedPageModel = new AdvancedPageModel(window, serverManager);
|
||||
AdvancedPageModel = new AdvancedPageModel(window, db, serverManager);
|
||||
AdvancedPage = new AdvancedPage { DataContext = AdvancedPageModel };
|
||||
|
||||
#if DEBUG
|
||||
@ -75,7 +75,7 @@ namespace DHT.Desktop.Main.Screens {
|
||||
#else
|
||||
DebugPage = null;
|
||||
#endif
|
||||
|
||||
|
||||
StatusBarModel = new StatusBarModel(db.Statistics);
|
||||
|
||||
AdvancedPageModel.ServerConfigurationModel.ServerStatusChanged += OnServerStatusChanged;
|
||||
|
@ -41,6 +41,8 @@ namespace DHT.Server.Database {
|
||||
|
||||
public void RemoveMessages(MessageFilter filter, MessageFilterRemovalMode mode) {}
|
||||
|
||||
public void Vacuum() {}
|
||||
|
||||
public void Dispose() {}
|
||||
}
|
||||
}
|
||||
|
@ -21,5 +21,7 @@ namespace DHT.Server.Database {
|
||||
int CountMessages(MessageFilter? filter = null);
|
||||
List<Message> GetMessages(MessageFilter? filter = null);
|
||||
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;
|
||||
}
|
||||
|
||||
public void Vacuum() {
|
||||
using var conn = pool.Take();
|
||||
using var cmd = conn.Command("VACUUM");
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
private void UpdateServerStatistics(ISqliteConnection conn) {
|
||||
Statistics.TotalServers = conn.SelectScalar("SELECT COUNT(*) FROM servers") as long? ?? 0;
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -128,7 +128,77 @@ code {
|
||||
padding-left: 12px;
|
||||
}
|
||||
|
||||
.downloads {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin: -6px;
|
||||
}
|
||||
|
||||
.downloads a {
|
||||
flex: 1 1 0;
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
min-width: 225px;
|
||||
margin: 6px;
|
||||
padding: 11px 16px;
|
||||
opacity: 0.825;
|
||||
color: #fff;
|
||||
background-color: #4e5a5e;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
transition: opacity .125s ease;
|
||||
}
|
||||
|
||||
.downloads a:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.downloads a span {
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
.downloads a span.arch {
|
||||
margin: 0 2px;
|
||||
font-size: 14px;
|
||||
color: #eaeaea;
|
||||
}
|
||||
|
||||
.downloads svg {
|
||||
margin: 1px 4px;
|
||||
vertical-align: -25%;
|
||||
}
|
||||
|
||||
.downloads svg.icon-large {
|
||||
margin-top: 0;
|
||||
vertical-align: -20%;
|
||||
}
|
||||
|
||||
.icon {
|
||||
display: inline-block;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
stroke-width: 0;
|
||||
stroke: currentColor;
|
||||
fill: currentColor;
|
||||
}
|
||||
|
||||
.links {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
footer {
|
||||
color: #d0d0d0;
|
||||
font-size: 17px;
|
||||
margin-top: 36px;
|
||||
padding-top: 8px;
|
||||
border-top: 1px dashed #b2b2b2;
|
||||
}
|
||||
|
||||
footer p {
|
||||
margin: 4px 0;
|
||||
}
|
||||
|
||||
#svg-definitions {
|
||||
display: none;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user