From e9355deabb849a123670e6678427cf33007d01f1 Mon Sep 17 00:00:00 2001 From: Vidhu Kant Sharma Date: Thu, 30 Jun 2022 01:01:45 +0530 Subject: showing number of episodes/chapters watched/read when updating them --- mal/data.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ mal/search.go | 2 +- ui/episodes.go | 28 ++++++++++++++-------------- 3 files changed, 61 insertions(+), 15 deletions(-) create mode 100644 mal/data.go diff --git a/mal/data.go b/mal/data.go new file mode 100644 index 0000000..541bd2e --- /dev/null +++ b/mal/data.go @@ -0,0 +1,46 @@ +/* +macli - Unofficial CLI-Based MyAnimeList Client +Copyright © 2022 Vidhu Kant Sharma + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +package mal + +import ( + "fmt" + "os" + m "github.com/MikunoNaka/MAL2Go/v2/manga" + a "github.com/MikunoNaka/MAL2Go/v2/anime" +) + +// because MAL2Go/Anime.SearchAnime won't give us all the data sometimes +func GetAnimeData(animeId int, fields []string) a.Anime { + data, err := animeClient.GetAnimeById(animeId, fields) + if err != nil { + fmt.Println("Error while fetching data about anime:", err) + os.Exit(1) + } + return data +} + +// because MAL2Go/Manga.SearchManga won't give us all the data sometimes +func GetMangaData(mangaId int, fields []string) m.Manga { + data, err := mangaClient.GetMangaById(mangaId, fields) + if err != nil { + fmt.Println("Error while fetching data about manga:", err) + os.Exit(1) + } + return data +} diff --git a/mal/search.go b/mal/search.go index 8fee461..de2c53c 100644 --- a/mal/search.go +++ b/mal/search.go @@ -28,7 +28,7 @@ import ( func SearchAnime(searchString string) []a.Anime { // TODO: read limit, offset from flags limit, offset := 10, 0 - fields := []string{"title", "id", "my_list_status"} + fields := []string{"title", "id", "my_list_status", "num_episodes"} res, err := animeClient.SearchAnime(searchString, limit, offset, fields) if err != nil { diff --git a/ui/episodes.go b/ui/episodes.go index 8b39119..277d52f 100644 --- a/ui/episodes.go +++ b/ui/episodes.go @@ -30,6 +30,11 @@ import ( ) func EpisodeInput(anime a.Anime) { + // fetch number of total episodes, number of watched episodes from the API + animeData := mal.GetAnimeData(anime.Id, []string{"num_episodes", "my_list_status"}) + epWatchedNum := animeData.MyListStatus.EpWatched + epTotalNum := animeData.NumEpisodes + validate := func(input string) error { if _, err := strconv.ParseFloat(input, 64); err != nil { return errors.New("Input must be a number.") @@ -44,27 +49,27 @@ func EpisodeInput(anime a.Anime) { } prompt := p.Prompt { - Label: "Set Episode Number: ", + Label: fmt.Sprintf("Set Episode Number (%d/%d watched):", epWatchedNum, epTotalNum), Templates: template, Validate: validate, } - // print current episode number if any - epNum := anime.MyListStatus.EpWatched - if epNum != 0 { - fmt.Printf("\x1b[33mYou currently have watched %d episodes.\n\x1b[0m", epNum) - } - res, err := prompt.Run() if err != nil { fmt.Println("Error Running episode input Prompt.", err.Error()) os.Exit(1) } + // TODO: read resp and show confirmation message mal.SetEpisodes(anime.Id, res) } func ChapterInput(manga m.Manga) { + // fetch number of total chapters, number of read chapters from the API + animeData := mal.GetMangaData(manga.Id, []string{"num_chapters", "my_list_status"}) + chReadNum := animeData.MyListStatus.ChaptersRead + chTotalNum := animeData.NumChapters + validate := func(input string) error { if _, err := strconv.ParseFloat(input, 64); err != nil { return errors.New("Input must be a number.") @@ -79,22 +84,17 @@ func ChapterInput(manga m.Manga) { } prompt := p.Prompt { - Label: "Set Chapter Number: ", + Label: fmt.Sprintf("Set Chapter Number (%d/%d read):", chReadNum, chTotalNum), Templates: template, Validate: validate, } - // print current chapter number if any - chNum := manga.MyListStatus.ChaptersRead - if chNum != 0 { - fmt.Printf("\x1b[33mYou currently have read %d chapters.\n\x1b[0m", chNum) - } - res, err := prompt.Run() if err != nil { fmt.Println("Error Running chapter input Prompt.", err.Error()) os.Exit(1) } + // TODO: read resp and show confirmation message mal.SetChapters(manga.Id, res) } -- cgit v1.2.3