package web // Functions used in the HTML templates import ( "fmt" "time" "muzi/db" ) // Subtracts two integers func sub(a int, b int) int { return a - b } // Adds two integers func add(a int, b int) int { return a + b } // Divides two integers (integer division) func div(a int, b int) int { if b == 0 { return 0 } return a / b } // Returns a % b func mod(a int, b int) int { return a % b } // Returns a slice of a slice from start to end func slice(a []db.TopArtist, start int, end int) []db.TopArtist { if start >= len(a) { return []db.TopArtist{} } if end > len(a) { end = len(a) } return a[start:end] } func sliceAlbum(a []db.TopAlbum, start int, end int) []db.TopAlbum { if start >= len(a) { return []db.TopAlbum{} } if end > len(a) { end = len(a) } return a[start:end] } func sliceTrack(a []db.TopTrack, start int, end int) []db.TopTrack { if start >= len(a) { return []db.TopTrack{} } if end > len(a) { end = len(a) } return a[start:end] } func gridReorder(artists []db.TopArtist) []db.TopArtist { if len(artists) < 2 { return artists } if len(artists)%2 == 0 { return artists } remaining := len(artists) - 1 perRow := remaining / 2 rest := artists[1:] firstRow := rest[:perRow] secondRow := rest[perRow:] var reordered []db.TopArtist reordered = append(reordered, artists[0]) reordered = append(reordered, secondRow...) reordered = append(reordered, firstRow...) return reordered } // Put a comma in the thousands place, ten-thousands place etc. func formatInt(n int) string { if n < 1000 { return fmt.Sprintf("%d", n) } else { return formatInt(n/1000) + "," + fmt.Sprintf("%03d", n%1000) } } // Formats timestamps compared to local time func formatTimestamp(timestamp time.Time) string { now := time.Now() duration := now.Sub(timestamp) if duration < 24*time.Hour { seconds := int(duration.Seconds()) if seconds < 60 { return fmt.Sprintf("%d seconds ago", seconds) } minutes := seconds / 60 if minutes < 60 { return fmt.Sprintf("%d minutes ago", minutes) } hours := minutes / 60 return fmt.Sprintf("%d hours ago", hours) } year := now.Year() if timestamp.Year() == year { return timestamp.Format("2 Jan 3:04pm") } return timestamp.Format("2 Jan 2006 3:04pm") } // Full timestamp format for browser hover func formatTimestampFull(timestamp time.Time) string { return timestamp.Format("Monday 2 Jan 2006, 3:04pm") } // GetArtistNames takes artist IDs and returns a slice of artist names func GetArtistNames(artistIds []int) []string { if artistIds == nil { return nil } var names []string for _, id := range artistIds { artist, err := db.GetArtistById(id) if err == nil { names = append(names, artist.Name) } } return names }