diff --git a/pages/dashboard/dashboard.go b/pages/dashboard/dashboard.go index eb8a3ced..d16d774c 100644 --- a/pages/dashboard/dashboard.go +++ b/pages/dashboard/dashboard.go @@ -1,6 +1,8 @@ package dashboard import ( + "time" + "github.com/aerogo/aero" "github.com/aerogo/flow" "github.com/animenotifier/arn" @@ -12,6 +14,7 @@ import ( const maxPosts = 5 const maxFollowing = 5 const maxSoundTracks = 5 +const maxScheduleItems = 5 // Get the dashboard or the frontpage when logged out. func Get(ctx *aero.Context) string { @@ -30,6 +33,7 @@ func dashboard(ctx *aero.Context) string { var userList interface{} var followingList []*arn.User var soundTracks []*arn.SoundTrack + var upcomingEpisodes []*arn.UpcomingEpisode user := utils.GetUser(ctx) @@ -43,6 +47,43 @@ func dashboard(ctx *aero.Context) string { arn.SortPostsLatestFirst(posts) posts = arn.FilterPostsWithUniqueThreads(posts, maxPosts) + }, func() { + animeList, err := arn.GetAnimeList(user) + + if err != nil { + return + } + + var keys []string + + for _, item := range animeList.Items { + keys = append(keys, item.AnimeID) + } + + objects, getErr := arn.DB.GetMany("Anime", keys) + + if getErr != nil { + return + } + + allAnimeInList := objects.([]*arn.Anime) + now := time.Now().UTC().Format(time.RFC3339) + + for _, anime := range allAnimeInList { + if len(upcomingEpisodes) >= maxScheduleItems { + break + } + + for _, episode := range anime.Episodes { + if episode.AiringDate.Start > now { + upcomingEpisodes = append(upcomingEpisodes, &arn.UpcomingEpisode{ + Anime: anime, + Episode: episode, + }) + continue + } + } + } }, func() { var err error soundTracks, err = arn.AllSoundTracks() @@ -72,5 +113,5 @@ func dashboard(ctx *aero.Context) string { } }) - return ctx.HTML(components.Dashboard(posts, soundTracks, followingList)) + return ctx.HTML(components.Dashboard(upcomingEpisodes, posts, soundTracks, followingList)) } diff --git a/pages/dashboard/dashboard.pixy b/pages/dashboard/dashboard.pixy index c6037c90..4189ff1d 100644 --- a/pages/dashboard/dashboard.pixy +++ b/pages/dashboard/dashboard.pixy @@ -1,15 +1,22 @@ -component Dashboard(posts []*arn.Post, soundTracks []*arn.SoundTrack, following []*arn.User) +component Dashboard(schedule []*arn.UpcomingEpisode, posts []*arn.Post, soundTracks []*arn.SoundTrack, following []*arn.User) h2.page-title Dash .widgets .widget.mountable h3.widget-title Schedule - for i := 1; i <= 5; i++ - .widget-element - .widget-element-text - Icon("calendar-o") - span ... + for i := 0; i <= 4; i++ + if i < len(schedule) + a.widget-element.ajax(href=schedule[i].Anime.Link()) + .widget-element-text + Icon("calendar-o") + .schedule-item-title= schedule[i].Anime.Title.Canonical + .schedule-item-episode= "# " + toString(schedule[i].Episode.Number) + else + .widget-element + .widget-element-text + Icon("calendar-o") + span ... .widget.mountable h3.widget-title Forums diff --git a/pages/dashboard/dashboard.scarlet b/pages/dashboard/dashboard.scarlet new file mode 100644 index 00000000..54fa04e9 --- /dev/null +++ b/pages/dashboard/dashboard.scarlet @@ -0,0 +1,5 @@ +.schedule-item-title + flex 1 + +.schedule-item-episode + text-align right \ No newline at end of file