mirror of
https://github.com/riwiwa/muzi.git
synced 2026-03-04 00:51:59 -08:00
add top albums and top tracks widgets to profile
This commit is contained in:
130
web/profile.go
130
web/profile.go
@@ -38,6 +38,13 @@ type ProfileData struct {
|
||||
TopArtistsPeriod string
|
||||
TopArtistsLimit int
|
||||
TopArtistsView string
|
||||
TopAlbums []db.TopAlbum
|
||||
TopAlbumsPeriod string
|
||||
TopAlbumsLimit int
|
||||
TopAlbumsView string
|
||||
TopTracks []db.TopTrack
|
||||
TopTracksPeriod string
|
||||
TopTracksLimit int
|
||||
}
|
||||
|
||||
// Render a page of the profile in the URL
|
||||
@@ -155,6 +162,129 @@ func profilePageHandler() http.HandlerFunc {
|
||||
profileData.TopArtists = topArtists
|
||||
}
|
||||
|
||||
albumPeriod := r.URL.Query().Get("album_period")
|
||||
if albumPeriod == "" {
|
||||
albumPeriod = "all_time"
|
||||
}
|
||||
|
||||
var albumStartDate, albumEndDate *time.Time
|
||||
albumNow := time.Now()
|
||||
switch albumPeriod {
|
||||
case "week":
|
||||
start := albumNow.AddDate(0, 0, -7)
|
||||
albumStartDate = &start
|
||||
case "month":
|
||||
start := albumNow.AddDate(0, -1, 0)
|
||||
albumStartDate = &start
|
||||
case "year":
|
||||
start := albumNow.AddDate(-1, 0, 0)
|
||||
albumStartDate = &start
|
||||
case "custom":
|
||||
albumStartStr := r.URL.Query().Get("album_start")
|
||||
albumEndStr := r.URL.Query().Get("album_end")
|
||||
if albumStartStr != "" {
|
||||
if t, err := time.Parse("2006-01-02", albumStartStr); err == nil {
|
||||
albumStartDate = &t
|
||||
}
|
||||
}
|
||||
if albumEndStr != "" {
|
||||
if t, err := time.Parse("2006-01-02", albumEndStr); err == nil {
|
||||
t = t.AddDate(0, 0, 1)
|
||||
albumEndDate = &t
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
albumLimitStr := r.URL.Query().Get("album_limit")
|
||||
albumLimit := 10
|
||||
if albumLimitStr != "" {
|
||||
albumLimit, err = strconv.Atoi(albumLimitStr)
|
||||
if err != nil || albumLimit < 5 {
|
||||
albumLimit = 10
|
||||
}
|
||||
if albumLimit > 30 {
|
||||
albumLimit = 30
|
||||
}
|
||||
}
|
||||
|
||||
albumView := r.URL.Query().Get("album_view")
|
||||
if albumView == "" {
|
||||
albumView = "grid"
|
||||
}
|
||||
albumMaxLimit := 30
|
||||
if albumView == "grid" {
|
||||
albumMaxLimit = 8
|
||||
}
|
||||
if albumLimit > albumMaxLimit {
|
||||
albumLimit = albumMaxLimit
|
||||
}
|
||||
|
||||
profileData.TopAlbumsPeriod = albumPeriod
|
||||
profileData.TopAlbumsLimit = albumLimit
|
||||
profileData.TopAlbumsView = albumView
|
||||
|
||||
topAlbums, err := db.GetTopAlbums(userId, albumLimit, albumStartDate, albumEndDate)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Cannot get top albums: %v\n", err)
|
||||
} else {
|
||||
profileData.TopAlbums = topAlbums
|
||||
}
|
||||
|
||||
trackPeriod := r.URL.Query().Get("track_period")
|
||||
if trackPeriod == "" {
|
||||
trackPeriod = "all_time"
|
||||
}
|
||||
|
||||
var trackStartDate, trackEndDate *time.Time
|
||||
trackNow := time.Now()
|
||||
switch trackPeriod {
|
||||
case "week":
|
||||
start := trackNow.AddDate(0, 0, -7)
|
||||
trackStartDate = &start
|
||||
case "month":
|
||||
start := trackNow.AddDate(0, -1, 0)
|
||||
trackStartDate = &start
|
||||
case "year":
|
||||
start := trackNow.AddDate(-1, 0, 0)
|
||||
trackStartDate = &start
|
||||
case "custom":
|
||||
trackStartStr := r.URL.Query().Get("track_start")
|
||||
trackEndStr := r.URL.Query().Get("track_end")
|
||||
if trackStartStr != "" {
|
||||
if t, err := time.Parse("2006-01-02", trackStartStr); err == nil {
|
||||
trackStartDate = &t
|
||||
}
|
||||
}
|
||||
if trackEndStr != "" {
|
||||
if t, err := time.Parse("2006-01-02", trackEndStr); err == nil {
|
||||
t = t.AddDate(0, 0, 1)
|
||||
trackEndDate = &t
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
trackLimitStr := r.URL.Query().Get("track_limit")
|
||||
trackLimit := 10
|
||||
if trackLimitStr != "" {
|
||||
trackLimit, err = strconv.Atoi(trackLimitStr)
|
||||
if err != nil || trackLimit < 5 {
|
||||
trackLimit = 10
|
||||
}
|
||||
if trackLimit > 30 {
|
||||
trackLimit = 30
|
||||
}
|
||||
}
|
||||
|
||||
profileData.TopTracksPeriod = trackPeriod
|
||||
profileData.TopTracksLimit = trackLimit
|
||||
|
||||
topTracks, err := db.GetTopTracks(userId, trackLimit, trackStartDate, trackEndDate)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Cannot get top tracks: %v\n", err)
|
||||
} else {
|
||||
profileData.TopTracks = topTracks
|
||||
}
|
||||
|
||||
if pageInt == 1 {
|
||||
if np, ok := scrobble.GetNowPlaying(userId); ok {
|
||||
profileData.NowPlayingArtist = np.Artist
|
||||
|
||||
Reference in New Issue
Block a user