MAL import preview
This commit is contained in:
parent
93cfb471d9
commit
f90522203d
3
main.go
3
main.go
@ -23,6 +23,7 @@ import (
|
|||||||
"github.com/animenotifier/notify.moe/pages/forums"
|
"github.com/animenotifier/notify.moe/pages/forums"
|
||||||
"github.com/animenotifier/notify.moe/pages/listimport"
|
"github.com/animenotifier/notify.moe/pages/listimport"
|
||||||
"github.com/animenotifier/notify.moe/pages/listimport/listimportanilist"
|
"github.com/animenotifier/notify.moe/pages/listimport/listimportanilist"
|
||||||
|
"github.com/animenotifier/notify.moe/pages/listimport/listimportmyanimelist"
|
||||||
"github.com/animenotifier/notify.moe/pages/login"
|
"github.com/animenotifier/notify.moe/pages/login"
|
||||||
"github.com/animenotifier/notify.moe/pages/music"
|
"github.com/animenotifier/notify.moe/pages/music"
|
||||||
"github.com/animenotifier/notify.moe/pages/newsoundtrack"
|
"github.com/animenotifier/notify.moe/pages/newsoundtrack"
|
||||||
@ -91,6 +92,8 @@ func configure(app *aero.Application) *aero.Application {
|
|||||||
app.Ajax("/import", listimport.Get)
|
app.Ajax("/import", listimport.Get)
|
||||||
app.Ajax("/import/anilist/animelist", listimportanilist.Preview)
|
app.Ajax("/import/anilist/animelist", listimportanilist.Preview)
|
||||||
app.Ajax("/import/anilist/animelist/finish", listimportanilist.Finish)
|
app.Ajax("/import/anilist/animelist/finish", listimportanilist.Finish)
|
||||||
|
app.Ajax("/import/myanimelist/animelist", listimportmyanimelist.Preview)
|
||||||
|
app.Ajax("/import/myanimelist/animelist/finish", listimportmyanimelist.Finish)
|
||||||
app.Ajax("/admin", admin.Get)
|
app.Ajax("/admin", admin.Get)
|
||||||
app.Ajax("/statistics", statistics.Get)
|
app.Ajax("/statistics", statistics.Get)
|
||||||
app.Ajax("/statistics/anime", statistics.Anime)
|
app.Ajax("/statistics/anime", statistics.Anime)
|
||||||
|
@ -1,8 +1,13 @@
|
|||||||
component ImportLists(user *arn.User)
|
component ImportLists(user *arn.User)
|
||||||
.buttons
|
.buttons.buttons-vertical
|
||||||
if user.Accounts.AniList.Nick != ""
|
if user.Accounts.AniList.Nick != ""
|
||||||
|
.widget-input
|
||||||
a.button.mountable.ajax(href="/import/anilist/animelist")
|
a.button.mountable.ajax(href="/import/anilist/animelist")
|
||||||
Icon("refresh")
|
Icon("download")
|
||||||
span Import AniList Anime List
|
span Import AniList
|
||||||
else
|
|
||||||
p No imports available.
|
if user.Accounts.MyAnimeList.Nick != ""
|
||||||
|
.widget-input
|
||||||
|
a.button.mountable.ajax(href="/import/myanimelist/animelist")
|
||||||
|
Icon("download")
|
||||||
|
span Import MyAnimeList
|
@ -1,3 +1,6 @@
|
|||||||
|
.buttons-vertical
|
||||||
|
width 100%
|
||||||
|
|
||||||
.import-list
|
.import-list
|
||||||
max-width table-width-normal
|
max-width table-width-normal
|
||||||
margin 0 auto
|
margin 0 auto
|
@ -9,39 +9,14 @@ import (
|
|||||||
"github.com/animenotifier/notify.moe/utils"
|
"github.com/animenotifier/notify.moe/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getMatches(ctx *aero.Context) ([]*arn.AniListMatch, string) {
|
// Preview shows an import preview.
|
||||||
|
func Preview(ctx *aero.Context) string {
|
||||||
user := utils.GetUser(ctx)
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
if user == nil {
|
if user == nil {
|
||||||
return nil, ctx.Error(http.StatusBadRequest, "Not logged in", nil)
|
return ctx.Error(http.StatusBadRequest, "Not logged in", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
authErr := arn.AniList.Authorize()
|
|
||||||
|
|
||||||
if authErr != nil {
|
|
||||||
return nil, ctx.Error(http.StatusBadRequest, "Couldn't authorize the Anime Notifier app on AniList", authErr)
|
|
||||||
}
|
|
||||||
|
|
||||||
allAnime, allErr := arn.AllAnime()
|
|
||||||
|
|
||||||
if allErr != nil {
|
|
||||||
return nil, ctx.Error(http.StatusBadRequest, "Couldn't load notify.moe list of all anime", allErr)
|
|
||||||
}
|
|
||||||
|
|
||||||
anilistAnimeList, err := arn.AniList.GetAnimeList(user)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, ctx.Error(http.StatusBadRequest, "Couldn't load your anime list from AniList", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
matches := findAllMatches(allAnime, anilistAnimeList)
|
|
||||||
|
|
||||||
return matches, ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// Preview ...
|
|
||||||
func Preview(ctx *aero.Context) string {
|
|
||||||
user := utils.GetUser(ctx)
|
|
||||||
matches, response := getMatches(ctx)
|
matches, response := getMatches(ctx)
|
||||||
|
|
||||||
if response != "" {
|
if response != "" {
|
||||||
@ -54,6 +29,11 @@ func Preview(ctx *aero.Context) string {
|
|||||||
// Finish ...
|
// Finish ...
|
||||||
func Finish(ctx *aero.Context) string {
|
func Finish(ctx *aero.Context) string {
|
||||||
user := utils.GetUser(ctx)
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
|
if user == nil {
|
||||||
|
return ctx.Error(http.StatusBadRequest, "Not logged in", nil)
|
||||||
|
}
|
||||||
|
|
||||||
matches, response := getMatches(ctx)
|
matches, response := getMatches(ctx)
|
||||||
|
|
||||||
if response != "" {
|
if response != "" {
|
||||||
@ -92,6 +72,37 @@ func Finish(ctx *aero.Context) string {
|
|||||||
return ctx.Redirect("/+" + user.Nick + "/animelist")
|
return ctx.Redirect("/+" + user.Nick + "/animelist")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getMatches finds and returns all matches for the logged in user.
|
||||||
|
func getMatches(ctx *aero.Context) ([]*arn.AniListMatch, string) {
|
||||||
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
|
if user == nil {
|
||||||
|
return nil, ctx.Error(http.StatusBadRequest, "Not logged in", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
authErr := arn.AniList.Authorize()
|
||||||
|
|
||||||
|
if authErr != nil {
|
||||||
|
return nil, ctx.Error(http.StatusBadRequest, "Couldn't authorize the Anime Notifier app on AniList", authErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
allAnime, allErr := arn.AllAnime()
|
||||||
|
|
||||||
|
if allErr != nil {
|
||||||
|
return nil, ctx.Error(http.StatusBadRequest, "Couldn't load notify.moe list of all anime", allErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
anilistAnimeList, err := arn.AniList.GetAnimeList(user)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, ctx.Error(http.StatusBadRequest, "Couldn't load your anime list from AniList", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
matches := findAllMatches(allAnime, anilistAnimeList)
|
||||||
|
|
||||||
|
return matches, ""
|
||||||
|
}
|
||||||
|
|
||||||
// findAllMatches returns all matches for the anime inside an anilist anime list.
|
// findAllMatches returns all matches for the anime inside an anilist anime list.
|
||||||
func findAllMatches(allAnime []*arn.Anime, animeList *arn.AniListAnimeList) []*arn.AniListMatch {
|
func findAllMatches(allAnime []*arn.Anime, animeList *arn.AniListAnimeList) []*arn.AniListMatch {
|
||||||
matches := []*arn.AniListMatch{}
|
matches := []*arn.AniListMatch{}
|
||||||
|
79
pages/listimport/listimportmyanimelist/myanimelist.go
Normal file
79
pages/listimport/listimportmyanimelist/myanimelist.go
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
package listimportmyanimelist
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/aerogo/aero"
|
||||||
|
"github.com/animenotifier/arn"
|
||||||
|
"github.com/animenotifier/mal"
|
||||||
|
"github.com/animenotifier/notify.moe/components"
|
||||||
|
"github.com/animenotifier/notify.moe/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Preview shows an import preview.
|
||||||
|
func Preview(ctx *aero.Context) string {
|
||||||
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
|
if user == nil {
|
||||||
|
return ctx.Error(http.StatusBadRequest, "Not logged in", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
matches, response := getMatches(ctx)
|
||||||
|
|
||||||
|
if response != "" {
|
||||||
|
return response
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.HTML(components.ImportMyAnimeList(user, matches))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finish ...
|
||||||
|
func Finish(ctx *aero.Context) string {
|
||||||
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
|
if user == nil {
|
||||||
|
return ctx.Error(http.StatusBadRequest, "Not logged in", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.Redirect("/+" + user.Nick + "/animelist")
|
||||||
|
}
|
||||||
|
|
||||||
|
// getMatches finds and returns all matches for the logged in user.
|
||||||
|
func getMatches(ctx *aero.Context) ([]*arn.MyAnimeListMatch, string) {
|
||||||
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
|
if user == nil {
|
||||||
|
return nil, ctx.Error(http.StatusBadRequest, "Not logged in", nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
malAnimeList, err := mal.GetAnimeList(user.Accounts.MyAnimeList.Nick)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, ctx.Error(http.StatusBadRequest, "Couldn't load your anime list from MyAnimeList", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
matches := findAllMatches(malAnimeList)
|
||||||
|
|
||||||
|
return matches, ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// findAllMatches returns all matches for the anime inside an anilist anime list.
|
||||||
|
func findAllMatches(animeList *mal.AnimeList) []*arn.MyAnimeListMatch {
|
||||||
|
matches := []*arn.MyAnimeListMatch{}
|
||||||
|
|
||||||
|
for _, item := range animeList.Items {
|
||||||
|
var anime *arn.Anime
|
||||||
|
connection, err := arn.GetMyAnimeListToAnime(item.AnimeID)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
anime, _ = arn.GetAnime(connection.AnimeID)
|
||||||
|
}
|
||||||
|
|
||||||
|
matches = append(matches, &arn.MyAnimeListMatch{
|
||||||
|
MyAnimeListItem: item,
|
||||||
|
ARNAnime: anime,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return matches
|
||||||
|
}
|
23
pages/listimport/listimportmyanimelist/myanimelist.pixy
Normal file
23
pages/listimport/listimportmyanimelist/myanimelist.pixy
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
component ImportMyAnimeList(user *arn.User, matches []*arn.MyAnimeListMatch)
|
||||||
|
h1= "myanimelist.net Import (" + user.Accounts.MyAnimeList.Nick + ", " + toString(len(matches)) + " anime)"
|
||||||
|
|
||||||
|
table.import-list
|
||||||
|
thead
|
||||||
|
tr
|
||||||
|
th myanimelist.net
|
||||||
|
th notify.moe
|
||||||
|
tbody
|
||||||
|
each match in matches
|
||||||
|
tr
|
||||||
|
td
|
||||||
|
a(href=match.MyAnimeListItem.AnimeLink(), target="_blank", rel="noopener")= match.MyAnimeListItem.AnimeTitle
|
||||||
|
td
|
||||||
|
if match.ARNAnime == nil
|
||||||
|
span.import-error Not found on notify.moe
|
||||||
|
else
|
||||||
|
a(href=match.ARNAnime.Link(), target="_blank", rel="noopener")= match.ARNAnime.Title.Canonical
|
||||||
|
|
||||||
|
.buttons
|
||||||
|
a.button.mountable(href="/import/myanimelist/animelist/finish")
|
||||||
|
Icon("refresh")
|
||||||
|
span Import
|
Loading…
Reference in New Issue
Block a user