aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS_TheReturn/NotificationDaemon.cs
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-02-24 21:39:46 -0500
committerMichael <[email protected]>2017-02-24 21:39:46 -0500
commit894c2275d958a83a13d8f8d4de7ba321a0721762 (patch)
tree4c510d06ba3c20739aa5e751da031992c183d46d /ShiftOS_TheReturn/NotificationDaemon.cs
parentbdd8e61600ce849d36e1b4932a01540f2575b738 (diff)
downloadshiftos_thereturn-894c2275d958a83a13d8f8d4de7ba321a0721762.tar.gz
shiftos_thereturn-894c2275d958a83a13d8f8d4de7ba321a0721762.tar.bz2
shiftos_thereturn-894c2275d958a83a13d8f8d4de7ba321a0721762.zip
Notification backend.
Diffstat (limited to 'ShiftOS_TheReturn/NotificationDaemon.cs')
-rw-r--r--ShiftOS_TheReturn/NotificationDaemon.cs88
1 files changed, 88 insertions, 0 deletions
diff --git a/ShiftOS_TheReturn/NotificationDaemon.cs b/ShiftOS_TheReturn/NotificationDaemon.cs
new file mode 100644
index 0000000..4220116
--- /dev/null
+++ b/ShiftOS_TheReturn/NotificationDaemon.cs
@@ -0,0 +1,88 @@
+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 void AddNotification(NotificationType note, object data)
+ {
+ var lst = new List<Notification>(GetAllFromFile());
+ lst.Add(new Engine.Notification(note, data));
+ WriteNotes(lst.ToArray());
+ }
+
+
+ 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,
+ }
+}