Added deletion to Kitsu imports

This commit is contained in:
Eduard Urbach 2018-04-17 12:27:54 +02:00
parent 9eae7ebce5
commit 8cb44131cf
7 changed files with 73 additions and 6 deletions

View File

@ -0,0 +1,43 @@
package animeimport
import (
"net/http"
"github.com/animenotifier/arn"
"github.com/aerogo/aero"
"github.com/animenotifier/notify.moe/utils"
)
// DeleteKitsu marks an anime for deletion.
func DeleteKitsu(ctx *aero.Context) string {
id := ctx.Get("id")
// Is the user allowed to delete?
user := utils.GetUser(ctx)
if user == nil || (user.Role != "editor" && user.Role != "admin") {
return ctx.Error(http.StatusUnauthorized, "Not authorized", nil)
}
// Check that the anime really exists
kitsuAnimeObj, err := arn.Kitsu.Get("Anime", id)
if kitsuAnimeObj == nil {
return ctx.Error(http.StatusNotFound, "Kitsu anime not found", err)
}
// Add to deleted IDs list
deletedKitsuAnime, err := arn.GetIDList("deleted kitsu anime")
if err != nil {
deletedKitsuAnime = arn.IDList{}
}
deletedKitsuAnime = deletedKitsuAnime.Append(id)
// Save in database
arn.DB.Set("IDList", "deleted kitsu anime", &deletedKitsuAnime)
return ""
}

View File

@ -14,9 +14,14 @@ import (
func NewKitsuAnime(ctx *aero.Context) string { func NewKitsuAnime(ctx *aero.Context) string {
user := utils.GetUser(ctx) user := utils.GetUser(ctx)
finder := arn.NewAnimeFinder("kitsu/anime") finder := arn.NewAnimeFinder("kitsu/anime")
deletedIDs, err := arn.GetIDList("deleted kitsu anime")
if err != nil {
deletedIDs = arn.IDList{}
}
animes := arn.FilterKitsuAnime(func(anime *kitsu.Anime) bool { animes := arn.FilterKitsuAnime(func(anime *kitsu.Anime) bool {
return finder.GetAnime(anime.ID) == nil return finder.GetAnime(anime.ID) == nil && !arn.Contains(deletedIDs, anime.ID)
}) })
sort.Slice(animes, func(i, j int) bool { sort.Slice(animes, func(i, j int) bool {

View File

@ -28,6 +28,9 @@ component NewKitsuAnime(animes []*kitsu.Anime, url string, user *arn.User)
if len(anime.Attributes.StartDate) >= 4 if len(anime.Attributes.StartDate) >= 4
span= anime.Attributes.StartDate[:4] span= anime.Attributes.StartDate[:4]
td td
.buttons
button.action(data-action="importKitsuAnime", data-trigger="click", data-id=anime.ID) button.action(data-action="importKitsuAnime", data-trigger="click", data-id=anime.ID)
Icon("download") RawIcon("download")
span Import
button.action(data-action="deleteKitsuAnime", data-trigger="click", data-id=anime.ID)
RawIcon("trash")

View File

@ -266,6 +266,7 @@ func Configure(app *aero.Application) {
// Import anime // Import anime
app.Post("/api/import/kitsu/anime/:id", animeimport.Kitsu) app.Post("/api/import/kitsu/anime/:id", animeimport.Kitsu)
app.Post("/api/delete/kitsu/anime/:id", animeimport.DeleteKitsu)
// Upload // Upload
app.Post("/api/upload/avatar", upload.Avatar) app.Post("/api/upload/avatar", upload.Avatar)

View File

@ -23,6 +23,10 @@ export function newAnimeDiffIgnore(arn: AnimeNotifier, button: HTMLButtonElement
// Import Kitsu anime // Import Kitsu anime
export async function importKitsuAnime(arn: AnimeNotifier, button: HTMLButtonElement) { export async function importKitsuAnime(arn: AnimeNotifier, button: HTMLButtonElement) {
if(!confirm("Are you sure you want to import this anime?")) {
return
}
let newTab = window.open() let newTab = window.open()
let animeId = button.dataset.id let animeId = button.dataset.id
let response = await fetch(`/api/import/kitsu/anime/${animeId}`, { let response = await fetch(`/api/import/kitsu/anime/${animeId}`, {
@ -38,6 +42,17 @@ export async function importKitsuAnime(arn: AnimeNotifier, button: HTMLButtonEle
} }
} }
// Delete Kitsu anime
export async function deleteKitsuAnime(arn: AnimeNotifier, button: HTMLButtonElement) {
if(!confirm("Are you sure you want to delete this anime?")) {
return
}
let animeId = button.dataset.id
await arn.post(`/api/delete/kitsu/anime/${animeId}`)
arn.reloadContent()
}
// Multi-search anime // Multi-search anime
export async function multiSearchAnime(arn: AnimeNotifier, textarea: HTMLTextAreaElement) { export async function multiSearchAnime(arn: AnimeNotifier, textarea: HTMLTextAreaElement) {
let results = document.getElementById("multi-search-anime") as HTMLDivElement let results = document.getElementById("multi-search-anime") as HTMLDivElement

View File

@ -804,12 +804,12 @@ export default class AnimeNotifier {
return Diff.innerHTML(element, html) return Diff.innerHTML(element, html)
} }
post(url: string, body: any) { post(url: string, body?: any) {
if(this.isLoading) { if(this.isLoading) {
return Promise.resolve(null) return Promise.resolve(null)
} }
if(typeof body !== "string") { if(body !== undefined && typeof body !== "string") {
body = JSON.stringify(body) body = JSON.stringify(body)
} }