Screenie/Ui/Tabs/DatabaseTab.cs

73 lines
2.5 KiB
C#

using ImGuiNET;
using Newtonsoft.Json;
namespace Screenie.Ui.Tabs;
internal class DatabaseTab : ITab {
public string Label => "Database";
private Plugin Plugin { get; }
private List<SavedMetadata> Screenshots { get; } = [];
internal DatabaseTab(Plugin plugin) {
this.Plugin = plugin;
this.Update();
}
public void Dispose() {
}
public void Draw() {
if (ImGui.Button("update")) {
this.Update();
}
foreach (var meta in this.Screenshots) {
ImGui.TextUnformatted(meta.Path);
}
}
private void Update() {
using var reader = this.Plugin.Database.Query(
"""
select * from screenshots order by captured_at_utc desc
"""
);
this.Screenshots.Clear();
while (reader.Read()) {
var meta = new SavedMetadata {
Blake3Hash = reader.GetFieldValue<string>(0),
Path = reader.GetFieldValue<string>(1),
Metadata = new ScreenshotMetadata {
ActiveCharacter = JsonConvert.DeserializeObject<Character>(
reader.GetFieldValue<string>(2)
),
Location = reader.GetFieldValue<string?>(3),
LocationSub = reader.GetFieldValue<string?>(4),
Area = reader.GetFieldValue<string?>(5),
AreaSub = reader.GetFieldValue<string?>(6),
TerritoryType = (uint) reader.GetFieldValue<long>(7),
World = reader.GetFieldValue<string?>(8),
WorldId = (uint) reader.GetFieldValue<long>(9),
CapturedAtLocal = reader.GetFieldValue<DateTime>(10),
CapturedAtUtc = reader.GetFieldValue<DateTime>(11),
EorzeaTime = reader.GetFieldValue<string>(12),
Weather = reader.GetFieldValue<string?>(13),
Ward = (uint?) reader.GetFieldValue<long?>(14),
Plot = (uint?) reader.GetFieldValue<long?>(15),
VisibleCharacters = JsonConvert.DeserializeObject<Character[]>(
reader.GetFieldValue<string>(16)
) ?? [],
ModsInUse = JsonConvert.DeserializeObject<PenumbraMod[]>(
reader.GetFieldValue<string>(17)
) ?? [],
},
};
this.Screenshots.Add(meta);
}
}
}