aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mal/data.go46
-rw-r--r--mal/search.go2
-rw-r--r--ui/episodes.go28
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)
}