using HyperBooru.ApiClient; using System.CommandLine; namespace HyperBooru.CommandLine; public static class Program { public static readonly Option UrlOption = new("--url") { Description = "API base URL to connect to", Required = true }; public static readonly Option UsernameOption = new("--username") { Description = "Username to connect with", Required = true }; public static readonly Option PasswordOption = new("--password") { Description = "Password to connect with", Required = true }; public static readonly Option FileOption = new("--file") { Description = "File to upload", Required = true }; public static readonly Option SkipCertCheckOption = new("--skip-cert-check") { Description = "Don't validate server CA certificate" }; public static readonly Option[] Options = [ UrlOption, UsernameOption, PasswordOption, FileOption, SkipCertCheckOption ]; public static void Main(string[] args) { var rootCommand = new RootCommand(); foreach(var o in Options) rootCommand.Options.Add(o); var parseResult = rootCommand.Parse(args); if(parseResult.Errors.Count != 0) { foreach(var error in parseResult.Errors) Console.Error.WriteLine(error.Message); Environment.Exit(1); } var session = new HBSession( new Uri(parseResult.GetValue(UrlOption)!), parseResult.GetValue(SkipCertCheckOption)); session.LoginAsync( parseResult.GetValue(UsernameOption)!, parseResult.GetValue(PasswordOption)!) .GetAwaiter() .GetResult(); try { var media = session.Media.UploadAsync( parseResult.GetValue(FileOption)!.FullName, null, false).GetAwaiter().GetResult(); Console.WriteLine(media.MediaId); } catch(Exception e) { Console.Error.WriteLine($"An error occurred: {e.Message}"); Environment.Exit(1); } } }