diff --git a/.gitignore b/.gitignore index ac19e01..76b1ae2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ riderModule.iml /_ReSharper.Caches/ .idea/ .vs/ +/APP.sln.DotSettings.user diff --git a/0i21ur4fl1x11.png b/0i21ur4fl1x11.png new file mode 100644 index 0000000..d3dfd54 Binary files /dev/null and b/0i21ur4fl1x11.png differ diff --git a/APP/APP.csproj b/APP/APP.csproj index 0434b56..18a249d 100644 --- a/APP/APP.csproj +++ b/APP/APP.csproj @@ -11,7 +11,7 @@ Hanami Anime plan program Hanami HANAMI - net6.0-windows7.0 + net6.0-windows10.0.22000.0 10 7.0 @@ -22,4 +22,23 @@ + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + \ No newline at end of file diff --git a/APP/DTO/Genre.cs b/APP/DTO/Genre.cs new file mode 100644 index 0000000..106c369 --- /dev/null +++ b/APP/DTO/Genre.cs @@ -0,0 +1,10 @@ +using System.Text.Json.Serialization; + +namespace APP.DTO; + +public class Genre +{ + [JsonPropertyName("id")] public int Id { get; set; } + + [JsonPropertyName("name")] public string Name { get; set; } +} diff --git a/APP/DTO/SeasonAnime.cs b/APP/DTO/SeasonAnime.cs new file mode 100644 index 0000000..781450f --- /dev/null +++ b/APP/DTO/SeasonAnime.cs @@ -0,0 +1,58 @@ +using System.Text.Json.Serialization; + +namespace APP.DTO; + +public class SeasonAnime +{ + [JsonPropertyName("anime")] public long Anime { get; set; } + + [JsonPropertyName("title")] public string Title { get; set; } + + [JsonPropertyName("titleEn")] public string TitleEn { get; set; } + + [JsonPropertyName("titleJp")] public string TitleJp { get; set; } + + [JsonPropertyName("imageMedium")] public string ImageMedium { get; set; } + + [JsonPropertyName("imageLarge")] public string ImageLarge { get; set; } + + [JsonPropertyName("imageThumb")] public string? ImageThumb { get; set; } + + [JsonPropertyName("type")] public string Type { get; set; } + + [JsonPropertyName("status")] public string Status { get; set; } + + [JsonPropertyName("episodes")] public int Episodes { get; set; } + + [JsonPropertyName("synopsis")] public string? Synopsis { get; set; } + + [JsonPropertyName("genres")] public List? Genres { get; set; } + + [JsonPropertyName("startDate")] public DateTime StartDate { get; set; } + + [JsonPropertyName("endDate")] public DateTime EndDate { get; set; } + + [JsonPropertyName("year")] public int Year { get; set; } + + [JsonPropertyName("season")] public string SeasonString { get; set; } + + [JsonPropertyName("score")] public double Score { get; set; } + + [JsonPropertyName("scoredBy")] public int ScoredBy { get; set; } + + [JsonPropertyName("rank")] public int Rank { get; set; } + + [JsonPropertyName("popularity")] public int Popularity { get; set; } + + [JsonPropertyName("members")] public int Members { get; set; } + + [JsonPropertyName("source")] public string? Source { get; set; } + + [JsonPropertyName("weekday")] public string? Weekday { get; set; } + + [JsonPropertyName("studios")] public List? Studios { get; set; } + + [JsonPropertyName("trailerUrl")] public string? TrailerUrl { get; set; } + + [JsonPropertyName("trailerEmbedUrl")] public string? TrailerEmbedUrl { get; set; } +} diff --git a/APP/DTO/Studio.cs b/APP/DTO/Studio.cs new file mode 100644 index 0000000..0ef866e --- /dev/null +++ b/APP/DTO/Studio.cs @@ -0,0 +1,10 @@ +using System.Text.Json.Serialization; + +namespace APP.DTO; + +public class Studio +{ + [JsonPropertyName("id")] public int Id { get; set; } + + [JsonPropertyName("name")] public string Name { get; set; } +} diff --git a/APP/DTO/User.cs b/APP/DTO/User.cs new file mode 100644 index 0000000..6cc3e15 --- /dev/null +++ b/APP/DTO/User.cs @@ -0,0 +1,24 @@ +using System.Text.Json.Serialization; + +namespace APP.DTO; + +public class User +{ + [JsonPropertyName("id")] public long Id { get; set; } + + [JsonPropertyName("username")] public string Username { get; set; } + + [JsonPropertyName("url")] public string Url { get; set; } + + [JsonPropertyName("imageUrl")] public string ImageUrl { get; set; } + + [JsonPropertyName("lastOnline")] public DateTime LastOnline { get; set; } + + [JsonPropertyName("gender")] public string? Gender { get; set; } + + [JsonPropertyName("birthday")] public DateTime? Birthday { get; set; } + + [JsonPropertyName("location")] public string? Location { get; set; } + + [JsonPropertyName("joined")] public DateTime Joined { get; set; } +} diff --git a/APP/Main.Designer.cs b/APP/Main.Designer.cs index e9387ac..71ba0a3 100644 --- a/APP/Main.Designer.cs +++ b/APP/Main.Designer.cs @@ -31,13 +31,20 @@ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); this.tabControl = new System.Windows.Forms.TabControl(); this.tabUser = new System.Windows.Forms.TabPage(); + this.userLinkLabel = new System.Windows.Forms.LinkLabel(); + this.userLabelInfo = new System.Windows.Forms.Label(); + this.userLabel = new System.Windows.Forms.Label(); + this.userImage = new System.Windows.Forms.PictureBox(); this.tabSeason = new System.Windows.Forms.TabPage(); + this.listViewSeason = new System.Windows.Forms.ListView(); this.tabAddAnime = new System.Windows.Forms.TabPage(); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.memeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.loginToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.listViewSeason = new System.Windows.Forms.ListView(); + this.userLabelInfoData = new System.Windows.Forms.Label(); this.tabControl.SuspendLayout(); + this.tabUser.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.userImage)).BeginInit(); this.tabSeason.SuspendLayout(); this.menuStrip.SuspendLayout(); this.SuspendLayout(); @@ -56,7 +63,12 @@ // // tabUser // - this.tabUser.BackColor = System.Drawing.SystemColors.ControlDarkDark; + this.tabUser.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.tabUser.Controls.Add(this.userLabelInfoData); + this.tabUser.Controls.Add(this.userLinkLabel); + this.tabUser.Controls.Add(this.userLabelInfo); + this.tabUser.Controls.Add(this.userLabel); + this.tabUser.Controls.Add(this.userImage); this.tabUser.Location = new System.Drawing.Point(4, 24); this.tabUser.Name = "tabUser"; this.tabUser.Padding = new System.Windows.Forms.Padding(3); @@ -64,6 +76,55 @@ this.tabUser.TabIndex = 0; this.tabUser.Text = "YOURNAME"; // + // userLinkLabel + // + this.userLinkLabel.AutoSize = true; + this.userLinkLabel.LinkColor = System.Drawing.SystemColors.Highlight; + this.userLinkLabel.Location = new System.Drawing.Point(264, 51); + this.userLinkLabel.Name = "userLinkLabel"; + this.userLinkLabel.Size = new System.Drawing.Size(60, 15); + this.userLinkLabel.TabIndex = 3; + this.userLinkLabel.TabStop = true; + this.userLinkLabel.Text = "linkLabel1"; + this.userLinkLabel.Visible = false; + this.userLinkLabel.VisitedLinkColor = System.Drawing.SystemColors.Highlight; + this.userLinkLabel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.userLinkLabel_LinkClicked); + // + // userLabelInfo + // + this.userLabelInfo.AutoSize = true; + this.userLabelInfo.ForeColor = System.Drawing.SystemColors.Control; + this.userLabelInfo.Location = new System.Drawing.Point(264, 76); + this.userLabelInfo.Name = "userLabelInfo"; + this.userLabelInfo.Size = new System.Drawing.Size(67, 60); + this.userLabelInfo.TabIndex = 2; + this.userLabelInfo.Text = "MAL ID:\r\nLast online:\r\nLocation:\r\nJoined:"; + this.userLabelInfo.Visible = false; + // + // userLabel + // + this.userLabel.AutoSize = true; + this.userLabel.Font = new System.Drawing.Font("Comic Sans MS", 14F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); + this.userLabel.ForeColor = System.Drawing.SystemColors.Control; + this.userLabel.Location = new System.Drawing.Point(264, 18); + this.userLabel.Name = "userLabel"; + this.userLabel.Size = new System.Drawing.Size(123, 27); + this.userLabel.TabIndex = 1; + this.userLabel.Text = "YOURNAME"; + this.userLabel.Visible = false; + // + // userImage + // + this.userImage.ErrorImage = null; + this.userImage.Image = ((System.Drawing.Image)(resources.GetObject("userImage.Image"))); + this.userImage.InitialImage = null; + this.userImage.Location = new System.Drawing.Point(8, 6); + this.userImage.Name = "userImage"; + this.userImage.Size = new System.Drawing.Size(250, 250); + this.userImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.userImage.TabIndex = 0; + this.userImage.TabStop = false; + // // tabSeason // this.tabSeason.BackColor = System.Drawing.SystemColors.ControlDarkDark; @@ -75,9 +136,24 @@ this.tabSeason.TabIndex = 1; this.tabSeason.Text = "Season"; // + // listViewSeason + // + this.listViewSeason.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.listViewSeason.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.listViewSeason.Dock = System.Windows.Forms.DockStyle.Fill; + this.listViewSeason.ForeColor = System.Drawing.SystemColors.Control; + this.listViewSeason.GridLines = true; + this.listViewSeason.Location = new System.Drawing.Point(3, 3); + this.listViewSeason.Name = "listViewSeason"; + this.listViewSeason.ShowGroups = false; + this.listViewSeason.Size = new System.Drawing.Size(814, 513); + this.listViewSeason.TabIndex = 0; + this.listViewSeason.UseCompatibleStateImageBehavior = false; + this.listViewSeason.View = System.Windows.Forms.View.Tile; + // // tabAddAnime // - this.tabAddAnime.BackColor = System.Drawing.SystemColors.ControlDarkDark; + this.tabAddAnime.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); this.tabAddAnime.Location = new System.Drawing.Point(4, 24); this.tabAddAnime.Name = "tabAddAnime"; this.tabAddAnime.Padding = new System.Windows.Forms.Padding(3); @@ -110,21 +186,22 @@ this.loginToolStripMenuItem.Text = "Login"; this.loginToolStripMenuItem.Click += new System.EventHandler(this.loginToolStripMenuItem_Click); // - // listViewSeason + // userLabelInfoData // - this.listViewSeason.BackColor = System.Drawing.SystemColors.ControlDark; - this.listViewSeason.Dock = System.Windows.Forms.DockStyle.Fill; - this.listViewSeason.Location = new System.Drawing.Point(3, 3); - this.listViewSeason.Name = "listViewSeason"; - this.listViewSeason.Size = new System.Drawing.Size(814, 513); - this.listViewSeason.TabIndex = 0; - this.listViewSeason.UseCompatibleStateImageBehavior = false; + this.userLabelInfoData.AutoSize = true; + this.userLabelInfoData.ForeColor = System.Drawing.SystemColors.Control; + this.userLabelInfoData.Location = new System.Drawing.Point(374, 76); + this.userLabelInfoData.Name = "userLabelInfoData"; + this.userLabelInfoData.Size = new System.Drawing.Size(38, 15); + this.userLabelInfoData.TabIndex = 4; + this.userLabelInfoData.Text = "label1"; + this.userLabelInfoData.Visible = false; // // Main // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.ControlDarkDark; + this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); this.ClientSize = new System.Drawing.Size(828, 571); this.Controls.Add(this.tabControl); this.Controls.Add(this.menuStrip); @@ -132,6 +209,9 @@ this.Name = "Main"; this.Text = "APP - Anime plan program"; this.tabControl.ResumeLayout(false); + this.tabUser.ResumeLayout(false); + this.tabUser.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.userImage)).EndInit(); this.tabSeason.ResumeLayout(false); this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); @@ -150,5 +230,10 @@ private ToolStripMenuItem memeToolStripMenuItem; private ToolStripMenuItem loginToolStripMenuItem; private ListView listViewSeason; + private PictureBox userImage; + private Label userLabel; + private Label userLabelInfo; + private LinkLabel userLinkLabel; + private Label userLabelInfoData; } } \ No newline at end of file diff --git a/APP/Main.cs b/APP/Main.cs index 042a2e4..719080a 100644 --- a/APP/Main.cs +++ b/APP/Main.cs @@ -1,25 +1,91 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; +using System.Diagnostics; +using APP.DTO; +using APP.Utility; -namespace APP +namespace APP; + +public partial class Main : Form { - public partial class Main : Form + private ImageList _imageListSeason; + private List? _seasonAnime; + private User? _user; + + public Main() { - public Main() + InitializeComponent(); + _imageListSeason = new ImageList(); + Load += OnLoad; + } + + private async void OnLoad(object? sender, EventArgs e) + { + await UpdateData(); + } + + private async Task UpdateData() + { + _seasonAnime = await BackendComms.GetSeason(); + if (_seasonAnime == null) { - InitializeComponent(); + ShowError("Fehler beim Season abrufen"); + } + else + { + foreach (var anime in _seasonAnime) + { + //_imageListSeason.Images.Add("", new ) + listViewSeason.Items.Add(new ListViewItem + { + Text = anime.Title + }); + } } - private void loginToolStripMenuItem_Click(object sender, EventArgs e) + _user = await BackendComms.GetUser("ultrasn0w"); + if (_user == null) { - // TODO search for user in backend + ShowError("Fehler beim User abrufen"); + } + else + { + tabUser.Text = _user.Username; + userLabel.Text = _user.Username; + userLabel.Visible = true; + userLinkLabel.Text = _user.Url; + userLinkLabel.Visible = true; + userLabelInfo.Text = StringAssemble.UserInfo(_user); + userLabelInfo.Visible = true; + userLabelInfoData.Text = StringAssemble.UserData(_user); + userLabelInfoData.Visible = true; + userImage.LoadAsync(_user.ImageUrl); + } + } + + private static void ShowError(string text) + { + MessageBox.Show(text, @"FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + private void loginToolStripMenuItem_Click(object sender, EventArgs e) + { + // TODO search for user in backend + } + + private void userLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + if (string.IsNullOrWhiteSpace(_user?.Url)) return; + try + { + var url = new Uri(_user.Url).ToString(); + var sInfo = new ProcessStartInfo(url) + { + UseShellExecute = true + }; + Process.Start(sInfo); + } + catch (Exception ex) + { + Console.Error.WriteLineAsync(ex.Message); } } } diff --git a/APP/Main.resx b/APP/Main.resx index 4c75266..18e31bb 100644 --- a/APP/Main.resx +++ b/APP/Main.resx @@ -57,10 +57,171 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + 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 + + 17, 17 - AAABAAEAAAAAAAEAIADupQEAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAIABJ diff --git a/APP/Program.cs b/APP/Program.cs index c9f8d51..b12a8d8 100644 --- a/APP/Program.cs +++ b/APP/Program.cs @@ -3,7 +3,7 @@ namespace APP; internal static class Program { /// - /// The main entry point for the application. + /// The main entry point for the application. /// [STAThread] private static void Main() diff --git a/APP/Properties/Resources.Designer.cs b/APP/Properties/Resources.Designer.cs new file mode 100644 index 0000000..2487693 --- /dev/null +++ b/APP/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace APP.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("APP.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/APP/Properties/Resources.resx b/APP/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/APP/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/APP/Utility/BackendComms.cs b/APP/Utility/BackendComms.cs new file mode 100644 index 0000000..8832a6e --- /dev/null +++ b/APP/Utility/BackendComms.cs @@ -0,0 +1,31 @@ +using System.Net.Http.Json; +using System.Text.Json; +using APP.DTO; + +namespace APP.Utility; + +internal static class BackendComms +{ + private const string ApiBaseUrl = "https://huso.hanami.family/api/"; + private static readonly HttpClient Client = new(); + private static readonly JsonSerializerOptions JsonSerializerOptions = new() {PropertyNameCaseInsensitive = true}; + + internal static async Task?> GetSeason() + { + var resp = await Client.GetAsync(ApiBaseUrl + "season"); + if (!resp.IsSuccessStatusCode) return null; + return await resp.Content.ReadFromJsonAsync>(JsonSerializerOptions); + } + + internal static async Task GetUser(string username) + { + if (string.IsNullOrWhiteSpace(username)) + { + return null; + } + var resp = await Client.GetAsync(ApiBaseUrl + "user/"+username); + if (!resp.IsSuccessStatusCode) return null; + var users = await resp.Content.ReadFromJsonAsync>(JsonSerializerOptions); + return users?.SingleOrDefault(); + } +} diff --git a/APP/Utility/StringAssemble.cs b/APP/Utility/StringAssemble.cs new file mode 100644 index 0000000..5bdb40d --- /dev/null +++ b/APP/Utility/StringAssemble.cs @@ -0,0 +1,59 @@ +using System.Text; +using APP.DTO; + +namespace APP.Utility; + +public static class StringAssemble +{ + public static string UserInfo(User? user) + { + if (user == null) + { + return string.Empty; + } + + var sb = new StringBuilder(); + sb.Append("MAL ID:"); + sb.AppendLine(); + + sb.Append("Last online:"); + sb.AppendLine(); + + if (!string.IsNullOrEmpty(user.Location)) + { + sb.Append("Location:"); + sb.AppendLine(); + } + + sb.Append("Joined:"); + sb.AppendLine(); + + return sb.ToString(); + } + + public static string UserData(User? user) + { + if (user == null) + { + return string.Empty; + } + + var sb = new StringBuilder(); + sb.Append(user.Id); + sb.AppendLine(); + + sb.Append(user.LastOnline); + sb.AppendLine(); + + if (!string.IsNullOrEmpty(user.Location)) + { + sb.Append(user.Location); + sb.AppendLine(); + } + + sb.Append(user.Joined.ToShortDateString()); + sb.AppendLine(); + + return sb.ToString(); + } +} diff --git a/doge.png b/doge.png new file mode 100644 index 0000000..91de458 Binary files /dev/null and b/doge.png differ diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..cb8a0e5 Binary files /dev/null and b/icon.png differ