Newer
Older
Qwilight / Qwilight / System / PlatformSystem.cs
@Taehui Taehui on 20 Aug 2 KB 2024-08-20 오후 5:48
using DiscordRPC;
using Qwilight.Utilities;
using Qwilight.ViewModel;
using System.IO;

namespace Qwilight
{
    public sealed class PlatformSystem
    {
        static readonly string FaultEntryPath = Path.Combine(QwilightComponent.FaultEntryPath, nameof(PlatformSystem));

        public static readonly PlatformSystem Instance = new();

        readonly Timestamps _time = Timestamps.Now;

        public void HandleSystem()
        {
            var mainViewModel = ViewModels.Instance.MainValue;
            var time = new Timestamps();
            var data = new RichPresence
            {
                Assets = new()
                {
                    LargeImageKey = "qwilight",
                }
            };
            while (true)
            {
                try
                {
                    using var targetSystem = new DiscordRpcClient(QwilightComponent.AssetsClientJSON.platform);
                    if (targetSystem.Initialize())
                    {
                        while (true)
                        {
                            var defaultComputer = mainViewModel.Computer;
                            switch (mainViewModel.ModeValue)
                            {
                                case MainViewModel.Mode.NoteFile:
                                    var autoComputer = mainViewModel.AutoComputer;
                                    data.State = LanguageSystem.Instance.PlatformNoteFileMode;
                                    data.Details = autoComputer?.IsHandling == true ? autoComputer.PlatformText128 : "Idle";
                                    data.Timestamps = _time;
                                    break;
                                case MainViewModel.Mode.Computing:
                                    data.State = defaultComputer.PlatformVarietyContents;
                                    data.Details = defaultComputer.PlatformText128;
                                    time.StartUnixMilliseconds = (ulong)(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - Math.Clamp(defaultComputer.LoopingCounter, 0, defaultComputer.Length));
                                    data.Timestamps = time;
                                    break;
                                case MainViewModel.Mode.Quit:
                                    data.State = LanguageSystem.Instance.PlatformQuitMode;
                                    data.Details = defaultComputer.PlatformText128;
                                    data.Timestamps = _time;
                                    break;
                            }
                            targetSystem.SetPresence(data);

                            Thread.Sleep(1000);
                        }
                    }
                }
                catch (Exception e)
                {
                    Utility.SaveFaultFile(FaultEntryPath, e);

                    Thread.Sleep(1000);
                }
            }
        }
    }
}