99 lines
2.6 KiB
C#
99 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
using Avalonia.Threading;
|
|
|
|
namespace kawwa;
|
|
|
|
public class BinkPost
|
|
{
|
|
[JsonPropertyName("user")]
|
|
public required string User { get; set; }
|
|
[JsonPropertyName("body")]
|
|
public required string Body { get; set; }
|
|
[JsonPropertyName("time")]
|
|
public required long Time { get; set; }
|
|
public string TimeString { get; set; } = string.Empty;
|
|
}
|
|
|
|
public static class Bink
|
|
{
|
|
private static DispatcherTimer? timer = null;
|
|
public static readonly ObservableCollection<BinkPost> LoadedBinks = [];
|
|
private static List<BinkPost>? BinkData = null;
|
|
|
|
public static void Initialize()
|
|
{
|
|
if (timer == null)
|
|
StartTimer();
|
|
if (BinkData == null)
|
|
{
|
|
BinkData = AllBinks();
|
|
if (BinkData != null)
|
|
{
|
|
foreach (var bink in BinkData)
|
|
{
|
|
SetBinkDateString(bink);
|
|
LoadedBinks.Add(bink);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void PostBink(string message)
|
|
{
|
|
SshConnection.RunCommandWithInput("town bink --pipe", message);
|
|
}
|
|
|
|
public static List<BinkPost>? AllBinks()
|
|
{
|
|
return JsonSerializer.Deserialize<List<BinkPost>>(SshConnection.RunCommand("town bink --dump"));
|
|
}
|
|
|
|
public static List<BinkPost>? BinksBefore(long TimeStamp)
|
|
{
|
|
return JsonSerializer.Deserialize<List<BinkPost>>(SshConnection.RunCommand($"town bink --dump-before {TimeStamp}"));
|
|
}
|
|
|
|
public static List<BinkPost>? BinksAfter(long TimeStamp)
|
|
{
|
|
return JsonSerializer.Deserialize<List<BinkPost>>(SshConnection.RunCommand($"town bink --dump-after {TimeStamp}"));
|
|
}
|
|
|
|
public static void SetBinkDateString(BinkPost bink)
|
|
{
|
|
var date = DateTimeOffset.FromUnixTimeSeconds(bink.Time / 1000000000).DateTime.ToLocalTime();
|
|
bink.TimeString = date.ToString("HH:mm (dddd, MMMM dd, yyyy)");
|
|
}
|
|
|
|
public static void GetNewBinks()
|
|
{
|
|
var BinkList = BinksAfter(LoadedBinks[0].Time);
|
|
if (BinkList != null)
|
|
{
|
|
BinkList.Reverse();
|
|
foreach (var bink in BinkList)
|
|
{
|
|
SetBinkDateString(bink);
|
|
LoadedBinks.Insert(0, bink);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void StartTimer()
|
|
{
|
|
timer = new DispatcherTimer();
|
|
timer.Interval = TimeSpan.FromSeconds(20);
|
|
timer.Tick += Timer_Tick;
|
|
timer.Start();
|
|
}
|
|
|
|
private static void Timer_Tick(object? sender, object? e)
|
|
{
|
|
GetNewBinks();
|
|
}
|
|
}
|
|
|