First stuff

This commit is contained in:
2022-04-18 16:08:19 +02:00
parent abb9b3f415
commit e7c2ae7b8d
17 changed files with 737 additions and 30 deletions

1
.gitignore vendored
View File

@@ -5,3 +5,4 @@ riderModule.iml
/_ReSharper.Caches/
.idea/
.vs/
/APP.sln.DotSettings.user

BIN
0i21ur4fl1x11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -11,7 +11,7 @@
<Description>Hanami Anime plan program</Description>
<Copyright>Hanami</Copyright>
<Company>HANAMI</Company>
<TargetFramework>net6.0-windows7.0</TargetFramework>
<TargetFramework>net6.0-windows10.0.22000.0</TargetFramework>
<LangVersion>10</LangVersion>
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
</PropertyGroup>
@@ -22,4 +22,23 @@
</None>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

10
APP/DTO/Genre.cs Normal file
View File

@@ -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; }
}

58
APP/DTO/SeasonAnime.cs Normal file
View File

@@ -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<Genre>? 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<Studio>? Studios { get; set; }
[JsonPropertyName("trailerUrl")] public string? TrailerUrl { get; set; }
[JsonPropertyName("trailerEmbedUrl")] public string? TrailerEmbedUrl { get; set; }
}

10
APP/DTO/Studio.cs Normal file
View File

@@ -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; }
}

24
APP/DTO/User.cs Normal file
View File

@@ -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; }
}

109
APP/Main.Designer.cs generated
View File

@@ -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;
}
}

View File

@@ -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
{
private ImageList _imageListSeason;
private List<SeasonAnime>? _seasonAnime;
private User? _user;
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)
{
ShowError("Fehler beim Season abrufen");
}
else
{
foreach (var anime in _seasonAnime)
{
//_imageListSeason.Images.Add("", new )
listViewSeason.Items.Add(new ListViewItem
{
Text = anime.Title
});
}
}
_user = await BackendComms.GetUser("ultrasn0w");
if (_user == null)
{
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);
}
}
}

View File

@@ -57,10 +57,171 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="userImage.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAAAAAAAEAIADupQEAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAIABJ

63
APP/Properties/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace APP.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// 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() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[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;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -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<List<SeasonAnime>?> GetSeason()
{
var resp = await Client.GetAsync(ApiBaseUrl + "season");
if (!resp.IsSuccessStatusCode) return null;
return await resp.Content.ReadFromJsonAsync<List<SeasonAnime>>(JsonSerializerOptions);
}
internal static async Task<User?> 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<ICollection<User>>(JsonSerializerOptions);
return users?.SingleOrDefault();
}
}

View File

@@ -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();
}
}

BIN
doge.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB