From 000f04025b8105c9951d5766ccf2d1e636603310 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Wed, 31 Oct 2018 05:24:12 +0900 Subject: [PATCH] Editors can now refresh audio downloads --- jobs/mal-download/mal-download.go | 2 +- pages/character/character.pixy | 7 +++++ pages/character/character.scarlet | 4 +++ pages/index/apiroutes/apiroutes.go | 3 ++ pages/index/userlistroutes/userlistroutes.go | 1 + pages/soundtrack/download.go | 29 ++++++++++++++++++++ pages/users/ffxiv.pixy | 23 ++++++++++++++++ pages/users/users.go | 18 ++++++++++++ pages/users/users.pixy | 3 +- scripts/Actions/Editor.ts | 12 ++++++++ utils/editform/editform.go | 7 +++++ 11 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 pages/soundtrack/download.go create mode 100644 pages/users/ffxiv.pixy diff --git a/jobs/mal-download/mal-download.go b/jobs/mal-download/mal-download.go index b8aeca42..6aa9aea6 100644 --- a/jobs/mal-download/mal-download.go +++ b/jobs/mal-download/mal-download.go @@ -13,7 +13,7 @@ import ( const ( // The maximum age of files we accept until we force a refresh. - maxAge = 24 * time.Hour + maxAge = 7 * 24 * time.Hour delayBetweenRequests = 1100 * time.Millisecond userAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.20 Safari/537.36" animeDirectory = "anime" diff --git a/pages/character/character.pixy b/pages/character/character.pixy index 1fd010c5..f2c4ff0b 100644 --- a/pages/character/character.pixy +++ b/pages/character/character.pixy @@ -78,6 +78,13 @@ component CharacterSidebar(character *arn.Character, friends []*arn.User, releva td.character-attributes-value!= markdown.Render(attribute.Value) else td.character-attributes-value= attribute.Value + //- td.character-attributes-value + //- if strings.Contains(attribute.Value, ",") + //- ul + //- each part in strings.Split(attribute.Value, ",") + //- li= strings.TrimSpace(part) + //- else + //- span= attribute.Value if len(relevantCharacters) > 0 h3.mountable(data-mountable-type="sidebar") Relevant diff --git a/pages/character/character.scarlet b/pages/character/character.scarlet index 9cf5cd54..4bf7e1c7 100644 --- a/pages/character/character.scarlet +++ b/pages/character/character.scarlet @@ -39,6 +39,10 @@ .character-attributes-value text-align right + li + list-style-type none + margin 0 + .character-anime horizontal-wrap diff --git a/pages/index/apiroutes/apiroutes.go b/pages/index/apiroutes/apiroutes.go index c87eeb03..3331067d 100644 --- a/pages/index/apiroutes/apiroutes.go +++ b/pages/index/apiroutes/apiroutes.go @@ -39,6 +39,9 @@ func Register(l *layout.Layout, app *aero.Application) { app.Get("/api/next/soundtrack", soundtrack.Next) app.Get("/api/character/:id/ranking", character.Ranking) + // SoundTrack + app.Post("/api/soundtrack/:id/download", soundtrack.Download) + // Upload app.Post("/api/upload/avatar", upload.Avatar) app.Post("/api/upload/cover", upload.Cover) diff --git a/pages/index/userlistroutes/userlistroutes.go b/pages/index/userlistroutes/userlistroutes.go index 51b8f21b..e63277f1 100644 --- a/pages/index/userlistroutes/userlistroutes.go +++ b/pages/index/userlistroutes/userlistroutes.go @@ -13,6 +13,7 @@ func Register(l *layout.Layout) { l.Page("/users/noavatar", users.ActiveNoAvatar) l.Page("/users/games/osu", users.Osu) l.Page("/users/games/overwatch", users.Overwatch) + l.Page("/users/games/ffxiv", users.FFXIV) l.Page("/users/staff", users.Staff) l.Page("/users/pro", users.Pro) l.Page("/users/editors", users.Editors) diff --git a/pages/soundtrack/download.go b/pages/soundtrack/download.go new file mode 100644 index 00000000..9e82fbc8 --- /dev/null +++ b/pages/soundtrack/download.go @@ -0,0 +1,29 @@ +package soundtrack + +import ( + "net/http" + + "github.com/aerogo/aero" + "github.com/animenotifier/arn" + "github.com/animenotifier/notify.moe/utils" +) + +// Download tries to refresh the soundtrack file. +func Download(ctx *aero.Context) string { + id := ctx.Get("id") + user := utils.GetUser(ctx) + + if user == nil || (user.Role != "editor" && user.Role != "admin") { + return ctx.Error(http.StatusUnauthorized, "Not logged in or not auhorized to edit this soundtrack") + } + + track, err := arn.GetSoundTrack(id) + + if err != nil { + return ctx.Error(http.StatusNotFound, "Track not found", err) + } + + track.Download() + + return "" +} diff --git a/pages/users/ffxiv.pixy b/pages/users/ffxiv.pixy new file mode 100644 index 00000000..896c569c --- /dev/null +++ b/pages/users/ffxiv.pixy @@ -0,0 +1,23 @@ +component FinalFantasyXIVRankingList(users []*arn.User, url string) + h1.page-title FinalFantasy XIV ranking list + UsersTabs(url) + + table.ranking-list + thead + tr.mountable + th # + th Player + th.ranking-class Class + th.ranking-level Level + th.ranking-score Item Level + tbody + for index, user := range users + tr.ranking.mountable + td= fmt.Sprint(index + 1) + "." + td.ranking-user + Avatar(user) + a.ranking-user-nick(href=user.Link())= user.Nick + td.ranking-class= user.Accounts.FinalFantasyXIV.Class + td.ranking-level= strconv.Itoa(user.Accounts.FinalFantasyXIV.Level) + td.ranking-score= strconv.Itoa(user.Accounts.FinalFantasyXIV.ItemLevel) + \ No newline at end of file diff --git a/pages/users/users.go b/pages/users/users.go index b2cbcd37..de108b67 100644 --- a/pages/users/users.go +++ b/pages/users/users.go @@ -149,6 +149,24 @@ func Overwatch(ctx *aero.Context) string { return ctx.HTML(components.OverwatchRankingList(users, ctx.URI())) } +// FFXIV ... +func FFXIV(ctx *aero.Context) string { + users := arn.FilterUsers(func(user *arn.User) bool { + return user.HasAvatar() && user.HasNick() && user.IsActive() && user.Accounts.FinalFantasyXIV.ItemLevel > 0 + }) + + // Sort by item level + sort.Slice(users, func(i, j int) bool { + return users[i].Accounts.FinalFantasyXIV.ItemLevel > users[j].Accounts.FinalFantasyXIV.ItemLevel + }) + + if len(users) > 50 { + users = users[:50] + } + + return ctx.HTML(components.FinalFantasyXIVRankingList(users, ctx.URI())) +} + // Staff ... func Staff(ctx *aero.Context) string { users := arn.FilterUsers(func(user *arn.User) bool { diff --git a/pages/users/users.pixy b/pages/users/users.pixy index e0db90d3..ed0310d4 100644 --- a/pages/users/users.pixy +++ b/pages/users/users.pixy @@ -51,4 +51,5 @@ component UsersTabs(url string) if strings.Contains(url, "/users/games") .tabs Tab("Osu", "gamepad", "/users/games/osu") - Tab("Overwatch", "overwatch", "/users/games/overwatch") \ No newline at end of file + Tab("Overwatch", "overwatch", "/users/games/overwatch") + Tab("FFXIV", "gamepad", "/users/games/ffxiv") \ No newline at end of file diff --git a/scripts/Actions/Editor.ts b/scripts/Actions/Editor.ts index 85fa7407..f6550099 100644 --- a/scripts/Actions/Editor.ts +++ b/scripts/Actions/Editor.ts @@ -1,6 +1,7 @@ import AnimeNotifier from "../AnimeNotifier" import { findAllInside } from "../Utils"; import { showSearchResults } from "./Search" +import { arrayAppend } from "./Serialization"; // newAnimeDiffIgnore export function newAnimeDiffIgnore(arn: AnimeNotifier, button: HTMLButtonElement) { @@ -72,6 +73,17 @@ export async function multiSearchAnime(arn: AnimeNotifier, textarea: HTMLTextAre showSearchResults(arn, results) } +// Download soundtrack file +export async function downloadSoundTrackFile(arn: AnimeNotifier, button: HTMLButtonElement) { + let id = button.dataset.id + + try { + await arn.post(`/api/soundtrack/${id}/download`) + arn.reloadContent() + } catch(err) { + arn.statusMessage.showError(err) + } +} // Start background job export async function startJob(arn: AnimeNotifier, button: HTMLButtonElement) { diff --git a/utils/editform/editform.go b/utils/editform/editform.go index 4c195f83..d6147017 100644 --- a/utils/editform/editform.go +++ b/utils/editform/editform.go @@ -49,6 +49,13 @@ func Render(obj interface{}, title string, user *arn.User) string { } } + // Redownload button + track, isSoundTrack := obj.(*arn.SoundTrack) + + if isSoundTrack && !track.IsDraft && track.HasMediaByService("Youtube") && track.File == "" && (user.Role == "editor" || user.Role == "admin") { + b.WriteString(``) + } + // Delete button _, isDeletable := obj.(api.Deletable)