715fb7aa5b
Shows path to database (click to copy), database size, database log size, message count. Also adds a Ctrl+Shift button to wipe the database permanently. This is performed by clearing the Messages collection and then rebuilding the database, which brings it down to around 48KB on my machine (even with many messages).
144 lines
5.3 KiB
C#
Executable File
144 lines
5.3 KiB
C#
Executable File
using ChatTwo.Resources;
|
|
using ChatTwo.Util;
|
|
using Dalamud.Interface.Internal.Notifications;
|
|
using ImGuiNET;
|
|
|
|
namespace ChatTwo.Ui.SettingsTabs;
|
|
|
|
internal sealed class Database : ISettingsTab {
|
|
private Configuration Mutable { get; }
|
|
private Plugin Plugin { get; }
|
|
|
|
public string Name => Language.Options_Database_Tab + "###tabs-database";
|
|
|
|
internal Database(Configuration mutable, Plugin plugin) {
|
|
Plugin = plugin;
|
|
Mutable = mutable;
|
|
}
|
|
|
|
private bool _showAdvanced;
|
|
|
|
private long _databaseLastRefreshTicks;
|
|
private long _databaseSize;
|
|
private long _databaseLogSize;
|
|
private int _databaseMessageCount;
|
|
|
|
public void Draw(bool changed) {
|
|
if (changed) {
|
|
_showAdvanced = ImGui.GetIO().KeyShift;
|
|
}
|
|
|
|
ImGuiUtil.OptionCheckbox(ref Mutable.DatabaseBattleMessages, Language.Options_DatabaseBattleMessages_Name, Language.Options_DatabaseBattleMessages_Description);
|
|
ImGui.Spacing();
|
|
|
|
if (ImGuiUtil.OptionCheckbox(ref Mutable.LoadPreviousSession, Language.Options_LoadPreviousSession_Name, Language.Options_LoadPreviousSession_Description)) {
|
|
if (Mutable.LoadPreviousSession) {
|
|
Mutable.FilterIncludePreviousSessions = true;
|
|
}
|
|
}
|
|
|
|
ImGui.Spacing();
|
|
|
|
if (ImGuiUtil.OptionCheckbox(ref Mutable.FilterIncludePreviousSessions, Language.Options_FilterIncludePreviousSessions_Name, Language.Options_FilterIncludePreviousSessions_Description)) {
|
|
if (!Mutable.FilterIncludePreviousSessions) {
|
|
Mutable.LoadPreviousSession = false;
|
|
}
|
|
}
|
|
|
|
ImGuiUtil.OptionCheckbox(
|
|
ref Mutable.SharedMode,
|
|
Language.Options_SharedMode_Name,
|
|
string.Format(Language.Options_SharedMode_Description, Plugin.PluginName)
|
|
);
|
|
ImGuiUtil.WarningText(string.Format(Language.Options_SharedMode_Warning, Plugin.PluginName));
|
|
|
|
ImGui.Spacing();
|
|
ImGui.Separator();
|
|
ImGui.Spacing();
|
|
|
|
ImGui.Text(Language.Options_Database_Metadata_Heading);
|
|
var style = ImGui.GetStyle();
|
|
ImGui.Indent(style.IndentSpacing);
|
|
|
|
// Refresh the database size and message count every 5 seconds to avoid
|
|
// constant stat calls and spamming the database.
|
|
if (_databaseLastRefreshTicks + 5 * 1000 < Environment.TickCount64)
|
|
{
|
|
_databaseSize = Store.DatabaseSize();
|
|
_databaseLogSize = Store.DatabaseLogSize();
|
|
_databaseMessageCount = Plugin.Store.MessageCount();
|
|
_databaseLastRefreshTicks = Environment.TickCount64;
|
|
}
|
|
|
|
ImGuiUtil.HelpText(string.Format(Language.Options_Database_Metadata_Path, Store.DatabasePath()));
|
|
if (ImGui.IsItemClicked(ImGuiMouseButton.Left))
|
|
{
|
|
// Copy the directory path instead of the file path so people can
|
|
// paste it into their file explorer.
|
|
var path = Path.GetDirectoryName(Store.DatabasePath());
|
|
ImGui.SetClipboardText(path);
|
|
WrapperUtil.AddNotification(Language.Options_Database_Metadata_CopyConfigPathNotification, NotificationType.Info);
|
|
}
|
|
if (ImGui.IsItemHovered())
|
|
{
|
|
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
|
|
ImGui.BeginTooltip();
|
|
ImGui.Text(Language.Options_Database_Metadata_CopyConfigPath);
|
|
ImGui.EndTooltip();
|
|
}
|
|
|
|
ImGuiUtil.HelpText(string.Format(Language.Options_Database_Metadata_Size, StringUtil.BytesToString(_databaseSize)));
|
|
if (ImGui.IsItemHovered())
|
|
{
|
|
ImGui.BeginTooltip();
|
|
ImGui.Text(_databaseSize.ToString("N0") + "B");
|
|
ImGui.EndTooltip();
|
|
}
|
|
|
|
ImGuiUtil.HelpText(string.Format(Language.Options_Database_Metadata_LogSize, StringUtil.BytesToString(_databaseLogSize)));
|
|
if (ImGui.IsItemHovered())
|
|
{
|
|
ImGui.BeginTooltip();
|
|
ImGui.Text(_databaseLogSize.ToString("N0") + "B");
|
|
ImGui.EndTooltip();
|
|
}
|
|
|
|
ImGuiUtil.HelpText(string.Format(Language.Options_Database_Metadata_MessageCount, _databaseMessageCount, Store.MessagesLimit));
|
|
|
|
if (ImGuiUtil.CtrlShiftButton(Language.Options_ClearDatabase_Button, Language.Options_ClearDatabase_Tooltip))
|
|
{
|
|
Plugin.Log.Warning("Clearing database");
|
|
Plugin.Store.ClearDatabase();
|
|
foreach (var tab in Plugin.Config.Tabs)
|
|
{
|
|
tab.Clear();
|
|
}
|
|
// Refresh on next draw
|
|
_databaseLastRefreshTicks = 0;
|
|
WrapperUtil.AddNotification(Language.Options_ClearDatabase_Success, NotificationType.Info);
|
|
}
|
|
|
|
ImGui.Unindent(style.IndentSpacing);
|
|
ImGui.Spacing();
|
|
|
|
if (_showAdvanced && ImGui.TreeNodeEx(Language.Options_Database_Advanced))
|
|
{
|
|
ImGui.PushTextWrapPos();
|
|
ImGuiUtil.WarningText(Language.Options_Database_Advanced_Warning);
|
|
|
|
if (ImGuiUtil.CtrlShiftButton("Checkpoint", "Ctrl+Shift: Database.Checkpoint()"))
|
|
{
|
|
Plugin.Store.Database.Checkpoint();
|
|
}
|
|
|
|
if (ImGuiUtil.CtrlShiftButton("Rebuild", "Ctrl+Shift: Database.Rebuild()"))
|
|
{
|
|
Plugin.Store.Database.Rebuild();
|
|
}
|
|
|
|
ImGui.PopTextWrapPos();
|
|
ImGui.TreePop();
|
|
}
|
|
}
|
|
}
|