From de398badab8713b69aaeeae064242c55a62eae01 Mon Sep 17 00:00:00 2001 From: CakesTwix Date: Fri, 2 Aug 2024 10:29:51 +0300 Subject: [PATCH] core: Implement System.CommandLine --- Program.cs | 91 ++++++++++++++++++++++++++--------------- Smakolykytl2Epub.csproj | 7 ++-- 2 files changed, 61 insertions(+), 37 deletions(-) diff --git a/Program.cs b/Program.cs index 3a1e8b5..5ab26b1 100644 --- a/Program.cs +++ b/Program.cs @@ -1,49 +1,72 @@ using EpubSharp; +using System.CommandLine; using Smakolykytl2Epub.Models; using Smakolykytl2Epub.Utils; -var client = new HttpClient(); +// CLI +var titleIDOption = new Option( + aliases: ["--title", "-t"], + description: "Title ID, can be taken from the link" +) {IsRequired = true}; + +var chapterIDOption = new Option( + aliases: ["--chapter", "-c"], + description: "Chapter ID, can be taken from the link" +) {IsRequired = true}; -int titleId = int.Parse(args[0]); -int chapsterId = int.Parse(args[1]) - 1; +var rootCommand = new RootCommand("A simple ranobe loader for Smakolykytl :)"); +rootCommand.AddOption(titleIDOption); +rootCommand.AddOption(chapterIDOption); -var projectTitle = await Ranobe.GetById(titleId); -if (projectTitle != null) -{ - // Print - var project = projectTitle.project; - Console.WriteLine(project.title); - Console.WriteLine(project.alternatives); - Console.WriteLine(project.description); +// Run main program +rootCommand.SetHandler(DownloadTitleAsync, titleIDOption, chapterIDOption); - // Basic Info - var writer = new EpubWriter(); - writer.AddAuthor(project.author); - writer.SetTitle(project.title); +return rootCommand.InvokeAsync(args).Result; - // Add Cover Image - using (var response = await client.GetAsync(project.image.url)) +// Main Program +static async Task DownloadTitleAsync(int titleID, int chapterID){ + var client = new HttpClient(); + var projectTitle = await Ranobe.GetById(titleID); + if (projectTitle.project != null) { - var imageBytes = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false); - writer.SetCover(imageBytes, ImageFormat.Png); - } + // Print + var project = projectTitle.project; + + Console.WriteLine(project.title); + Console.WriteLine(project.alternatives); + Console.WriteLine(project.description); - Books? books = await Ranobe.GetChaptersById(titleId); - Book? book = books.books[chapsterId]; + // Basic Info + var writer = new EpubWriter(); + writer.AddAuthor(project.author); + writer.SetTitle(project.title); - if (book != null) - { - foreach (var item in book.chapters) + // Add Cover Image + using (var response = await client.GetAsync(project.image.url)) { - Console.WriteLine("Завантаження розділу: {0}", item.title); - var content = (await Ranobe.GetChapterById(item.id))!.chapter.content; - writer.AddChapter(item.title, HtmlConverter.ConvertJsonToHtml(content)); - Thread.Sleep(1000); + var imageBytes = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false); + writer.SetCover(imageBytes, ImageFormat.Png); } - // Done - var fileName = string.Format("{0} - {1}.epub", project.title, book.title); - writer.Write(fileName); - Console.WriteLine("Файл збережено як: {0}", fileName); + Books? books = await Ranobe.GetChaptersById(titleID); + Book? book = books.books[chapterID]; + + if (book != null) + { + foreach (var item in book.chapters) + { + Console.WriteLine("Завантаження розділу: {0}", item.title); + var content = (await Ranobe.GetChapterById(item.id))!.chapter.content; + writer.AddChapter(item.title, HtmlConverter.ConvertJsonToHtml(content)); + Thread.Sleep(1000); + } + + // Done + var fileName = string.Format("{0} - {1}.epub", project.title, book.title); + writer.Write(fileName); + Console.WriteLine("Файл збережено як: {0}", fileName); + } + } else { + Console.WriteLine("Нічого не знайшли :("); } -} \ No newline at end of file +} diff --git a/Smakolykytl2Epub.csproj b/Smakolykytl2Epub.csproj index f2ded08..0458c63 100644 --- a/Smakolykytl2Epub.csproj +++ b/Smakolykytl2Epub.csproj @@ -8,9 +8,10 @@ - - - + + + +