using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Linq; using System.Security; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Newtonsoft.Json; namespace Models { /// /// Modelliert eine App-Liste /// [JsonObject(MemberSerialization.OptOut)] public class AppList { /// /// Gibt den enthaltenen App-Typen in der Auflistung an /// [JsonProperty("type")] public AppType Type { get; set; } = AppType.Favorites; /// /// Die Auflistung der Apps /// [JsonProperty("apps")] public List Apps { get; set; } = new List(); } /// /// Eine Sammlung von Neuigkeiten für die Titelleiste /// [JsonObject(MemberSerialization.OptOut)] public class NewsFeed { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("enable")] public bool Enable { get; set; } [JsonProperty("icon")] public string Icon { get; set; } [JsonProperty("title")] public string Title { get; set; } [JsonProperty("begin")] public Date Begin { get; set; } [JsonProperty("end")] public Date End { get; set; } public class Date { [JsonProperty("day")] public int Day { get; set; } [JsonProperty("month")] public int Month { get; set; } } public override string ToString() { return string.Join("\n", GetType().GetProperties().Select(prop => $@"{prop.Name}: {prop.GetValue(this, null)}")); } } /// /// Modelliert die Attribute eines App-Rankings /// [JsonObject(MemberSerialization.OptOut)] public class Prevalence { /// /// Beliebtheit der Menü-Apps /// [JsonProperty("menu")] public List Menu { get; set; } = new List(); /// /// Beliebtheit der Admin-Apps /// [JsonProperty("admin")] public List Admin { get; set; } = new List(); /// /// Beliebtheit der User-Apps /// [JsonProperty("user")] public List User { get; set; } = new List(); /// /// Beliebtheit der Citrix-Apps /// [JsonProperty("citrix")] public List Citrix { get; set; } = new List(); /// /// Beliebtheit der Favoriten-Apps /// [JsonProperty("favorites")] public List Favorites { get; set; } = new List(); [JsonObject(MemberSerialization.OptOut)] public class AppPrevalenceProperties { /// /// Die eindeutige Identifikationsnummer der ausgeführten App /// [JsonProperty("id")] public int ID { get; set; } /// /// Häufigkeit der Appausführungen und die dadurch automatisierte Sortierung /// [JsonProperty("clickcounts")] public int ClickCounts { get; set; } = 0; } } /// /// Modelliert die Attribute einer App-Ausführungshäufigkeit /// [JsonObject(MemberSerialization.OptOut)] public class ClickCounter { /// /// Ausführungsanzahl der Menü-Apps /// [JsonProperty("menu")] public List Menu { get; set; } = new List(); /// /// Ausführungsanzahl der Admin-Apps /// [JsonProperty("admin")] public List Admin { get; set; } = new List(); /// /// Ausführungsanzahl der User-Apps /// [JsonProperty("user")] public List User { get; set; } = new List(); [JsonObject(MemberSerialization.OptOut)] public class AppCounter { /// /// Die eindeutige Identifikationsnummer der ausgeführten App /// [JsonProperty("app_id")] public int ID { get; set; } /// /// Name der ausgeführten App /// [JsonProperty("app_name")] public string Name { get; set; } /// /// Häufigkeit der Appausführungen /// [JsonProperty("counts")] public int Counts { get; set; } = 0; /// /// Letzte Appausführung /// [JsonProperty("lastclicked")] public DateTime LastClicked { get; set; } /// /// Erste Appausführung /// [JsonProperty("firstclicked")] public DateTime FirstClicked { get; set; } } } /// /// Modelliert die Attribute einer App /// [JsonObject(MemberSerialization.OptOut)] public class App { /// /// Die eindeutige Identifikationsnummer /// [JsonProperty("id")] public int ID { get; set; } /// /// Gibt eine Beschreibung über die App wieder /// [JsonProperty("description")] public string Description { get; set; } /// /// Der Anzeigename der App /// [JsonProperty("name")] public string Name { get; set; } /// /// Gruppierungsname mehrerer Apps für diese App /// [JsonProperty("group")] public string Group { get; set; } /// /// Auflistung von Active Directory Gruppen, die dazu berechtigt sind, die App zu nutzen /// [JsonProperty("activedirectory_groups")] public string[] ActiveDirectoryGroups { get; set; } /// /// Bestimmt, ob es sich um einen Prototypen handelt. Diese App wird nur für Admins angezeigt und erst mit deaktivieren dieser Eigenschaft für alle Berechtigten sichtbar /// [JsonProperty("prototype")] public bool Prototype { get; set; } /// /// Ausführungsbefehle und optionale Argumente welche der Reihe nach ausgeführt werden, sofern diese fehlschlagen /// [JsonProperty("exec")] public Execute[] Execute { get; set; } /// /// Gibt den Pfad zum Symbol der App an /// [JsonProperty("icon")] public string Icon { get; set; } /// /// Gibt den Pfad zum Symbol der App an /// [JsonProperty("lastmodified")] public DateTime LastModified { get; set; } /// /// Gibt den Pfad zum Symbol der App an /// [JsonProperty("created")] public DateTime Created { get; set; } /// /// Erstelle eine Kopie des App-Objekts /// /// public App Copy() { return (App)this.MemberwiseClone(); } /// /// Gibt das App-Modell in einer lesbaren Zeichenfolge aus /// /// new public virtual string ToString() { return string.Join("\n", from property in this.GetType().GetProperties() select property.Name + ": " + property.GetValue(this, null)); } } /// /// Modelliert eine Ausführungsfunktion für eine App /// [JsonObject(MemberSerialization.OptOut)] public class Execute { [JsonProperty("cmd")] public string Command { get; set; } [JsonProperty("args")] public string Args { get; set; } new public virtual string ToString() { return string.Join("\n", from property in this.GetType().GetProperties() select property.Name + ": " + property.GetValue(this, null)); } } /// /// Serialisiert die Json-Configs /// public class Config { [JsonObject(MemberSerialization.OptOut)] public class Main { [JsonProperty("defaultwebbrowser")] public string DefaultWebBrowser { get; set; } = "Microsoft Edge"; [JsonProperty("webdomains")] public string[] WebDomains { get; set; } [JsonProperty("domainname")] public string DomainName { get; set; } [JsonProperty("loggerapppath")] public string LoggerAppPath { get; set; } [JsonProperty("citrix")] public CitrixProperties Citrix { get; set; } [JsonProperty("use_ad_groups")] public bool UseActiveDirectoryGroups { get; set; } [JsonProperty("administration")] public AdministrationProperties Administration { get; set; } [JsonProperty("font")] public string FontFamily { get; set; } [JsonProperty("colors")] public ColorsProperties Colors { get; set; } [JsonProperty("sizes")] public SizesProperties Sizes { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class SizesProperties { [JsonProperty("window")] public WindowProperties Window { get; set; } [JsonProperty("list")] public ListSizeProperties List { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class WindowProperties { [JsonProperty("radius")] public int Radius { get; set; } [JsonProperty("border")] public int Border { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class ListSizeProperties { [JsonProperty("border")] public Point Border { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class AppProperties { [JsonProperty("radius")] public int Radius { get; set; } [JsonProperty("margin")] public int Margin { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class CitrixProperties { [JsonProperty("xmlnodes")] public string XMLNodes { get; set; } [JsonProperty("icons")] public string Icons { get; set; } [JsonProperty("icaselfservice")] public string ICASelfService { get; set; } [JsonProperty("appslocation")] public string AppsLocation { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class AdministrationProperties { [JsonProperty("remote_frontend_update")] public bool RemoteFrontEndUpdate { get; set; } [JsonProperty("ad_group")] public string ActiveDirectoryGroup { get; set; } [JsonProperty("accounts")] public AccountProperties Accounts { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class AccountProperties { [JsonProperty("mailaccount")] public MailAccount Mail { get; set; } [JsonProperty("adminlogin")] public AdminLogin Login { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class MailAccount { [JsonProperty("host")] public string Host { get; set; } [JsonProperty("sslport")] public int SSLPort { get; set; } [JsonProperty("username")] public string UserName { get; set; } [JsonProperty("securepassword")] public int[] SecurePassword { get; set; } [JsonProperty("mailmessage")] public MailMessageProperties MailMessage { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class MailMessageProperties { [JsonProperty("to")] public string To { get; set; } [JsonProperty("from")] public FromProperties From { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class FromProperties { [JsonProperty("address")] public string Address { get; set; } [JsonProperty("displayname")] public string DisplayName { get; set; } } } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class AdminLogin { [JsonProperty("securepassword")] public int[] SecurePassword { get; set; } } } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class ColorsProperties { [JsonProperty("loadinganimation")] public LoadingAnimationColorProperties LoadingAnimation { get; set; } [JsonProperty("list")] public ListColorProperties List { get; set; } [JsonProperty("window")] public WindowProperties Window { get; set; } [JsonProperty("groupwindow")] public WindowProperties GroupWindow { get; set; } = new WindowProperties(); [JsonProperty("apps")] public AppsProperties Apps { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class LoadingAnimationColorProperties { [JsonProperty("dot1")] public Color Dot1 { get; set; } [JsonProperty("dot2")] public Color Dot2 { get; set; } [JsonProperty("dot3")] public Color Dot3 { get; set; } [JsonProperty("dot4")] public Color Dot4 { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class ListColorProperties { [JsonProperty("border")] public Color Border { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class WindowProperties { [JsonProperty("backcolor")] public Color BackColor { get; set; } [JsonProperty("action")] public Color Action { get; set; } = Color.Orange; [JsonProperty("titlebarbackcolor")] public Color TitlebarBackColor { get; set; } [JsonProperty("border")] public Color Border { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class AppsProperties { [JsonProperty("default")] public ColorsAppsProperties Default { get; set; } [JsonProperty("hover")] public ColorsAppsProperties Hover { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class ColorsAppsProperties { [JsonProperty("backcolor")] public Color BackColor { get; set; } [JsonProperty("forecolor")] public Color ForeColor { get; set; } [JsonProperty("border")] public Color Border { get; set; } [JsonProperty("image")] public Color Image { get; set; } } } } } [JsonObject(MemberSerialization.OptOut)] public class User { /// /// Soll der GFATask im Dark Mode dargestellt werden /// [ Description("Soll der GFATask im Dark Mode dargestellt werden"), JsonProperty("darkmode") ] public bool DarkMode { get; set; } = false; /// /// Bestimmt, ob zum Einblenden des GFA-Task ein Klick benötigt wird. Verhindert das der GFA-Task beim berühren des oberen Bildschirmrands eingeblendet wird /// [ Description("Bestimmt, ob zum Einblenden des GFA-Task ein Klick benötigt wird. Verhindert das der GFA-Task beim berühren des oberen Bildschirmrands eingeblendet wird"), JsonProperty("necessary_click") ] public bool NecessaryClick { get; set; } = false; /// /// Bestimmt, ob bei der Sortierung der Apps nach Beliebtheit, oder Name vorgegangen wird /// [ Description("Bestimmt, ob bei der Sortierung der Apps nach Beliebtheit, oder Name vorgegangen wird"), JsonProperty("prevalence") ] public bool Prevalence { get; set; } = false; /// /// Bestimmt, ob die Ereiginisanzeige zur Fehleranalyse beim start des GFA-Task mitgestartet werden soll /// [ Description("Bestimmt, ob die Ereiginisanzeige zur Fehleranalyse beim start des GFA-Task mitgestartet werden soll"), JsonProperty("autostart_eventlogger") ] public bool ErrorHandle { get; set; } = false; /// /// Bestimmt, wie beim Programmstart mit den benutzerdefinierten Dateien umgegangen werden soll /// [ Description("Bestimmt, wie beim Programmstart mit den benutzerdefinierten Dateien umgegangen werden soll"), JsonProperty("deploy") ] public DeployProperties Deploy { get; set; } = new DeployProperties() { Backup = true, Overwrite = true }; /// /// Definiert den Bildschirm, auf dem der GFA-Task dargestellt werden soll /// [ Description("Definiert den Bildschirm, auf dem der GFA-Task dargestellt werden soll"), JsonProperty("screen") ] public string Screen { get; set; } = "DISPLAY1"; /// /// Definiert die Wartezeiten und Geschwindigkeit des Ein- und Ausblendprozesses des GFA-Tasks /// [ Description("Definiert die Wartezeiten und Geschwindigkeit des Ein- und Ausblendprozesses des GFA-Tasks"), JsonProperty("delay") ] public DelayProperties Delay { get; set; } = new DelayProperties() { Hide = 0.5F, Show = 0.5F, Speed = 70 }; ///// ///// ///// //[JsonProperty("locations")] //public LocationProperties Locations { get; set; } /// /// Stellt den GFA-Task nach den gewünschten Eigenschaften dar /// [ Description("Stellt den GFA-Task nach den gewünschten Eigenschaften dar"), JsonProperty("window") ] public WindowProperties Window { get; set; } = new WindowProperties() { FontSize = 9F, Opacity = .95D, Size = new Size(940, 420) }; /// /// Stellt die Apps nach den gewünschten Eigenschaften dar /// [ Description("Stellt die Apps nach den gewünschten Eigenschaften dar"), JsonProperty("apps") ] public AppsProperties Apps { get; set; } = new AppsProperties() { Border = 0, Margin = 3, Size = new Size(140, 35), ImageOnly = false, Radius = new AppsProperties.RadiusProperties() { Button = 3, Image = 5 } }; /// /// Stellt die Listen nach den gewünschten Eigenschaften dar /// [ Description("Stellt die Listen nach den gewünschten Eigenschaften dar"), JsonProperty("lists") ] public ListsProperties Lists { get; set; } = new ListsProperties() { Admin = new ListProperties() { Grouping = true, Height = 100, Show = false }, Citrix = new ListProperties() { Grouping = true, Height = 100, Show = false }, Favorites = new ListProperties() { Grouping = true, Height = 55, Show = true }, Menu = new ListProperties() { Grouping = true, Height = 55, Show = true }, User = new ListProperties() { Grouping = true, Height = 100, Show = true } }; /// /// Bestimmt beim Öffnen einer App-Gruppe, wie viele Apps in einer Zeile angezeigt werden sollen, bis in die nächste Zeile umgebrochen werden soll /// [ Description("Bestimmt beim Öffnen einer App-Gruppe, wie viele Apps in einer Zeile angezeigt werden sollen, bis in die nächste Zeile umgebrochen werden soll"), JsonProperty("grouplistcolumncount") ] public int GroupListColumnCount { get; set; } = 3; [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class DeployProperties { [JsonProperty("overwrite")] public bool Overwrite { get; set; } [JsonProperty("backup")] public bool Backup { get; set; } new public virtual string ToString() { return string.Join("\n", from property in this.GetType().GetProperties() select property.Name + ": " + property.GetValue(this, null)); } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class DelayProperties { [JsonProperty("speed")] public int Speed { get; set; } [JsonProperty("show")] public float Show { get; set; } [JsonProperty("hide")] public float Hide { get; set; } new public virtual string ToString() { return string.Join("\n", from property in this.GetType().GetProperties() select property.Name + ": " + property.GetValue(this, null)); } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class ListsProperties { [JsonProperty("menu")] public ListProperties Menu { get; set; } [JsonProperty("citrix")] public ListProperties Citrix { get; set; } [JsonProperty("favorites")] public ListProperties Favorites { get; set; } [JsonProperty("admin")] public ListProperties Admin { get; set; } [JsonProperty("user")] public ListProperties User { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class WindowProperties { [JsonProperty("size")] public Size Size { get; set; } [JsonProperty("actionregionheight")] public int ActionRegionHeight { get; set; } = 3; [JsonProperty("font")] public float FontSize { get; set; } [JsonProperty("opacity")] public double Opacity { get; set; } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class AppsProperties { [JsonProperty("imageonly")] public bool ImageOnly { get; set; } [JsonProperty("border")] public int Border { get; set; } [JsonProperty("size")] public Size Size { get; set; } [JsonProperty("margin")] public int Margin { get; set; } [JsonProperty("radius")] public RadiusProperties Radius { get; set; } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class RadiusProperties { [JsonProperty("button")] public int Button { get; set; } [JsonProperty("image")] public int Image { get; set; } } } [EditorBrowsable(EditorBrowsableState.Never)] [JsonObject(MemberSerialization.OptOut)] public class ListProperties { [JsonProperty("height")] public int Height { get; set; } = 96; [JsonProperty("show")] public bool Show { get; set; } = false; [JsonProperty("grouping")] public bool Grouping { get; set; } = false; } new public virtual string ToString() { return string.Join("\n", from property in this.GetType().GetProperties() select property.Name + ": " + property.GetValue(this, null)); } } } }