diff options
| -rw-r--r-- | mal/data.go | 46 | ||||
| -rw-r--r-- | mal/search.go | 2 | ||||
| -rw-r--r-- | ui/episodes.go | 28 | 
3 files changed, 61 insertions, 15 deletions
| 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 <vidhukant@vidhukant.xyz> + +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 <http://www.gnu.org/licenses/>. +*/ + +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)  } |