diff options
| author | lempamo <[email protected]> | 2017-02-25 08:21:55 -0500 |
|---|---|---|
| committer | lempamo <[email protected]> | 2017-02-25 08:21:55 -0500 |
| commit | cc4b3c6f091828f2b44ffa3688f551ed09557ec6 (patch) | |
| tree | 5edd08769817553e9b17a8a6caaad269d83eeb3e /ShiftOS_TheReturn | |
| parent | 0b65949e74b225603e04971ccba8430bded90769 (diff) | |
| parent | 5573e82ca48bb891bbaf6c2f05215dba8e441ce8 (diff) | |
| download | shiftos_thereturn-cc4b3c6f091828f2b44ffa3688f551ed09557ec6.tar.gz shiftos_thereturn-cc4b3c6f091828f2b44ffa3688f551ed09557ec6.tar.bz2 shiftos_thereturn-cc4b3c6f091828f2b44ffa3688f551ed09557ec6.zip | |
Merge remote-tracking branch 'refs/remotes/shiftos-game/master'
Diffstat (limited to 'ShiftOS_TheReturn')
| -rw-r--r-- | ShiftOS_TheReturn/NotificationDaemon.cs | 91 | ||||
| -rw-r--r-- | ShiftOS_TheReturn/ShiftOS.Engine.csproj | 1 |
2 files changed, 92 insertions, 0 deletions
diff --git a/ShiftOS_TheReturn/NotificationDaemon.cs b/ShiftOS_TheReturn/NotificationDaemon.cs new file mode 100644 index 0000000..3a2e96a --- /dev/null +++ b/ShiftOS_TheReturn/NotificationDaemon.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; +using ShiftOS.Objects.ShiftFS; + +namespace ShiftOS.Engine +{ + public static class NotificationDaemon + { + public static Notification[] GetAllFromFile() + { + Notification[] notes = { }; + if (Utils.FileExists(Paths.GetPath("notifications.dat"))) + { + notes = JsonConvert.DeserializeObject<Notification[]>(Utils.ReadAllText(Paths.GetPath("notifications.dat"))); + } + return notes; + } + + internal static void WriteNotes(Notification[] notes) + { + Utils.WriteAllText(Paths.GetPath("notifications.dat"), JsonConvert.SerializeObject(notes, Formatting.Indented)); + } + + public static event Action<Notification> NotificationMade; + + public static void AddNotification(NotificationType note, object data) + { + var lst = new List<Notification>(GetAllFromFile()); + lst.Add(new Engine.Notification(note, data)); + WriteNotes(lst.ToArray()); + NotificationMade?.Invoke(lst[lst.Count - 1]); + } + + + public static void MarkRead(int note) + { + var notes = GetAllFromFile(); + if (note >= notes.Length || note < 0) + throw new ArgumentOutOfRangeException("note", new Exception("You cannot mark a notification that does not exist as read.")); + + notes[note].Read = true; + WriteNotes(notes); + } + } + + public struct Notification + { + public Notification(NotificationType t, object data) + { + Type = t; + Data = data; + Read = false; + Timestamp = DateTime.Now; + } + + public bool Read { get; internal set; } + public NotificationType Type { get; private set; } + public object Data { get; private set; } + public DateTime Timestamp { get; private set; } + } + + public enum NotificationType : byte + { + Generic = 0x00, + MemoReceived = 0x10, + MemoSent = 0x11, + DownloadStarted = 0x20, + DownloadComplete = 0x21, + CodepointsReceived = 0x30, + CodepointsSent = 0x31, + ShopPurchase = 0x40, + LegionInvite = 0x50, + LegionKick = 0x51, + LegionBan = 0x52, + ChatBan = 0x60, + MUDAnnouncement = 0x70, + MUDMaintenance = 0x71, + NewShiftOSUnstable = 0x72, + NewShiftOSStable = 0x73, + NewAppveyor = 0x74, + CriticalBugwatch = 0x75, + NewDeveloper = 0x76, + NewShiftOSVideo = 0x77, + NewShiftOSStream = 0x78, + SavePurge = 0x79, + } +} diff --git a/ShiftOS_TheReturn/ShiftOS.Engine.csproj b/ShiftOS_TheReturn/ShiftOS.Engine.csproj index a8c041d..735d046 100644 --- a/ShiftOS_TheReturn/ShiftOS.Engine.csproj +++ b/ShiftOS_TheReturn/ShiftOS.Engine.csproj @@ -132,6 +132,7 @@ <Compile Include="Infobox.cs" /> <Compile Include="IShiftOSWindow.cs" /> <Compile Include="Localization.cs" /> + <Compile Include="NotificationDaemon.cs" /> <Compile Include="OutOfBoxExperience.cs" /> <Compile Include="Paths.cs" /> <Compile Include="Program.cs" /> |
