aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVidhu Kant Sharma <vidhukant@vidhukant.xyz>2022-07-06 22:53:12 +0530
committerVidhu Kant Sharma <vidhukant@vidhukant.xyz>2022-07-06 22:53:12 +0530
commitb5a8c767660fde8b73fee1ea0b261b28e35ccc62 (patch)
treeba644b739529643b45c74e4a90c70a06786447fd
parent3b429fe70ab3004e9d613df745e62a0da9fab552 (diff)
added list command to show user's animelist
-rw-r--r--cmd/list.go81
-rw-r--r--mal/list.go46
-rw-r--r--ui/animelist.go54
3 files changed, 181 insertions, 0 deletions
diff --git a/cmd/list.go b/cmd/list.go
new file mode 100644
index 0000000..f0e4327
--- /dev/null
+++ b/cmd/list.go
@@ -0,0 +1,81 @@
+/*
+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 cmd
+
+import (
+ "os"
+ "fmt"
+ "github.com/MikunoNaka/macli/ui"
+ "github.com/MikunoNaka/macli/mal"
+ // m "github.com/MikunoNaka/MAL2Go/v4/manga"
+
+ "github.com/spf13/cobra"
+)
+
+// statusCmd represents the status command
+var listCmd = &cobra.Command{
+ Use: "list",
+ Short: "Print out user's animelist",
+ Long: "To be added", // +
+ // "\n" +
+ // "Example Usage:\n" +
+ // " - \x1b[33m`macli chapters <anime-name>`\x1b[0m For interactive prompt (anime-name can be omitted)\n" +
+ // " - \x1b[33m`macli chapters -s 4 <anime-name>`\x1b[0m to set the chapters to 4\n" +
+ // " - \x1b[33m`macli chapters -s +1 <anime-name>`\x1b[0m to increment the chapters by 1\n" +
+ // " - \x1b[33m`macli chapters -s -2 <anime-name>`\x1b[0m to decrement the chapters by 2\n",
+ Run: func(cmd *cobra.Command, args []string) {
+ mal.Init()
+
+ status, err := cmd.Flags().GetString("status")
+ if err != nil {
+ fmt.Println("error while reading \x1b[33m--status\x1b[0m flag:", err)
+ os.Exit(1)
+ }
+
+ user, err := cmd.Flags().GetString("user")
+ if err != nil {
+ fmt.Println("error while reading \x1b[33m--user\x1b[0m flag:", err)
+ os.Exit(1)
+ }
+
+ sort, err := cmd.Flags().GetString("sort")
+ if err != nil {
+ fmt.Println("error while reading \x1b[33m--sort\x1b[0m flag:", err)
+ os.Exit(1)
+ }
+
+ nsfw, err := cmd.Flags().GetBool("include-nsfw")
+ if err != nil {
+ fmt.Println("error while reading \x1b[33m--include-nsfw\x1b[0m flag:", err)
+ os.Exit(1)
+ }
+
+
+ ui.AnimeList(mal.AnimeList(user, status, sort, nsfw))
+
+ },
+}
+
+func init() {
+ rootCmd.AddCommand(listCmd)
+ listCmd.Flags().StringP("status", "", "", "Status (leave blank for all)")
+ listCmd.Flags().StringP("user", "", "@me", "User (@me or blank for self)")
+ listCmd.Flags().StringP("sort", "", "list_score", "Sort the list")
+ listCmd.Flags().BoolP("include-nsfw", "", false, "Include NSFW results")
+}
diff --git a/mal/list.go b/mal/list.go
new file mode 100644
index 0000000..ec0c634
--- /dev/null
+++ b/mal/list.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"
+ a "github.com/MikunoNaka/MAL2Go/v4/anime"
+ m "github.com/MikunoNaka/MAL2Go/v4/manga"
+)
+
+// TODO: return all the list items using loop
+func AnimeList(user, status, sort string, nsfw bool) []a.Anime {
+ res, _, err := userAnimeClient.GetAnimeList(user, status, sort, 1000, 0, nsfw, []string{"title", "list_status", "num_episodes", "media_type"})
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ return res
+}
+
+// TODO: return all the list items using loop
+func MangaList(user, status, sort string, nsfw bool) []m.Manga {
+ res, _, err := userMangaClient.GetMangaList(user, status, sort, 1000, 0, nsfw, []string{"title", "my_list_status", "num_chapters"})
+ if err != nil {
+ fmt.Println(err)
+ os.Exit(1)
+ }
+ return res
+}
diff --git a/ui/animelist.go b/ui/animelist.go
new file mode 100644
index 0000000..c256666
--- /dev/null
+++ b/ui/animelist.go
@@ -0,0 +1,54 @@
+/*
+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 ui
+
+import (
+ a "github.com/MikunoNaka/MAL2Go/v4/anime"
+ "github.com/jedib0t/go-pretty/v6/table"
+ "fmt"
+ "os"
+)
+
+func AnimeList(animes []a.Anime) {
+ t := table.NewWriter()
+ t.SetOutputMirror(os.Stdout)
+
+ t.AppendHeader(table.Row{"#", "Title", "ID", "Score", "Type", "Status", "Progress"})
+
+ for index, anime := range animes {
+ status := anime.ListStatus.Status
+ score := anime.ListStatus.Score
+
+ formattedStatus := GetColorCodeByStatus(status) + FormatStatus(status) + "\x1b[0m"
+ formattedScore := FormatScore(score)
+
+ // TODO: format it
+ formattedMediaType := anime.MediaType
+
+ progress := fmt.Sprintf("%d/%d", anime.ListStatus.EpWatched, anime.NumEpisodes)
+
+ t.AppendRow([]interface{}{
+ index + 1, anime.Title, anime.Id, formattedScore, formattedMediaType, formattedStatus, progress,
+ })
+ }
+
+ t.AppendSeparator()
+ t.AppendFooter(table.Row{len(animes), "", "", ""})
+ t.Render()
+}