using DiscordRPC.Logging; using DiscordRPC; using MetaBrainz.ListenBrainz; using MetaBrainz.MusicBrainz; using IniParser; using IniParser.Model; using Topshelf; using System.Web; using MetaBrainz.MusicBrainz.Interfaces.Entities; using MetaBrainz.MusicBrainz.Interfaces.Searches; public class LbzRpcService { DiscordRpcClient? client = null; ListenBrainz? listenBrainz = null; readonly Thread t; bool running = false; public LbzRpcService() { t = new Thread(MainThread); } public void Start() { running = true; t.Start(); } public void Stop() { running = false; client?.Dispose(); listenBrainz?.Dispose(); } public void MainThread() { FileIniDataParser config = new FileIniDataParser(); if (!File.Exists("config.ini")) { throw new ApplicationException("Configuration file not found. Please create a config.ini file with your tokens and user information."); } IniData data = config.ReadFile("config.ini"); listenBrainz = new ListenBrainz(); client = new DiscordRpcClient(data["general"]["discord_token"]); void InitializeDiscordRpc() { client.Logger = new ConsoleLogger() { Level = LogLevel.Warning }; client.SkipIdenticalPresence = true; client.OnReady += (sender, e) => { Console.WriteLine("Received Ready from user {0}", e.User.Username); }; client.Initialize(); } bool connected = false; client.OnConnectionEstablished += (sender, e) => { Console.WriteLine("Connected to Discord"); connected = true; }; InitializeDiscordRpc(); string? lastRecording = null; List