unfunny the comments

This commit is contained in:
sentriz
2021-12-09 21:13:17 +00:00
committed by Senan Kelly
parent f9133aac91
commit 62ccf01a3a
7 changed files with 46 additions and 38 deletions

View File

@@ -116,12 +116,12 @@ type templateData struct {
Playlists []*db.Playlist Playlists []*db.Playlist
TranscodePreferences []*db.TranscodePreference TranscodePreferences []*db.TranscodePreference
TranscodeProfiles []string TranscodeProfiles []string
//
CurrentLastFMAPIKey string CurrentLastFMAPIKey string
CurrentLastFMAPISecret string CurrentLastFMAPISecret string
DefaultListenBrainzURL string DefaultListenBrainzURL string
SelectedUser *db.User SelectedUser *db.User
//
Podcasts []*db.Podcast Podcasts []*db.Podcast
} }

View File

@@ -92,7 +92,7 @@ func (c *Controller) ServeHome(r *http.Request) *Response {
} }
// podcasts box // podcasts box
c.DB.Find(&data.Podcasts) c.DB.Find(&data.Podcasts)
//
return &Response{ return &Response{
template: "home.tmpl", template: "home.tmpl",
data: data, data: data,

View File

@@ -16,7 +16,7 @@ import (
func playlistRender(c *Controller, playlist *db.Playlist) *spec.Playlist { func playlistRender(c *Controller, playlist *db.Playlist) *spec.Playlist {
user := &db.User{} user := &db.User{}
c.DB.Where("id=?", playlist.UserID).Find(user) c.DB.Where("id=?", playlist.UserID).Find(user)
//
resp := &spec.Playlist{ resp := &spec.Playlist{
ID: playlist.ID, ID: playlist.ID,
Name: playlist.Name, Name: playlist.Name,
@@ -24,7 +24,7 @@ func playlistRender(c *Controller, playlist *db.Playlist) *spec.Playlist {
Created: playlist.CreatedAt, Created: playlist.CreatedAt,
SongCount: playlist.TrackCount, SongCount: playlist.TrackCount,
} }
//
trackIDs := playlist.GetItems() trackIDs := playlist.GetItems()
resp.List = make([]*spec.TrackChild, len(trackIDs)) resp.List = make([]*spec.TrackChild, len(trackIDs))
for i, id := range trackIDs { for i, id := range trackIDs {
@@ -88,12 +88,14 @@ func (c *Controller) ServeCreatePlaylist(r *http.Request) *spec.Response {
c.DB. c.DB.
Where("id=?", playlistID). Where("id=?", playlistID).
FirstOrCreate(&playlist) FirstOrCreate(&playlist)
// ** begin update meta info
// update meta info
playlist.UserID = user.ID playlist.UserID = user.ID
if val, err := params.Get("name"); err == nil { if val, err := params.Get("name"); err == nil {
playlist.Name = val playlist.Name = val
} }
// ** begin replace song IDs
// replace song IDs
var trackIDs []int var trackIDs []int
if p, err := params.GetIDList("songId"); err == nil { if p, err := params.GetIDList("songId"); err == nil {
for _, i := range p { for _, i := range p {
@@ -103,7 +105,7 @@ func (c *Controller) ServeCreatePlaylist(r *http.Request) *spec.Response {
// Set the items of the playlist // Set the items of the playlist
playlist.SetItems(trackIDs) playlist.SetItems(trackIDs)
c.DB.Save(playlist) c.DB.Save(playlist)
//
sub := spec.NewResponse() sub := spec.NewResponse()
sub.Playlist = playlistRender(c, &playlist) sub.Playlist = playlistRender(c, &playlist)
return sub return sub
@@ -119,7 +121,8 @@ func (c *Controller) ServeUpdatePlaylist(r *http.Request) *spec.Response {
c.DB. c.DB.
Where("id=?", playlistID). Where("id=?", playlistID).
FirstOrCreate(&playlist) FirstOrCreate(&playlist)
// ** begin update meta info
// update meta info
playlist.UserID = user.ID playlist.UserID = user.ID
if val, err := params.Get("name"); err == nil { if val, err := params.Get("name"); err == nil {
playlist.Name = val playlist.Name = val
@@ -128,20 +131,22 @@ func (c *Controller) ServeUpdatePlaylist(r *http.Request) *spec.Response {
playlist.Comment = val playlist.Comment = val
} }
trackIDs := playlist.GetItems() trackIDs := playlist.GetItems()
// ** begin delete items
// delete items
if p, err := params.GetIntList("songIndexToRemove"); err == nil { if p, err := params.GetIntList("songIndexToRemove"); err == nil {
sort.Sort(sort.Reverse(sort.IntSlice(p))) sort.Sort(sort.Reverse(sort.IntSlice(p)))
for _, i := range p { for _, i := range p {
trackIDs = append(trackIDs[:i], trackIDs[i+1:]...) trackIDs = append(trackIDs[:i], trackIDs[i+1:]...)
} }
} }
// ** begin add items
// add items
if p, err := params.GetIDList("songIdToAdd"); err == nil { if p, err := params.GetIDList("songIdToAdd"); err == nil {
for _, i := range p { for _, i := range p {
trackIDs = append(trackIDs, i.Value) trackIDs = append(trackIDs, i.Value)
} }
} }
//
playlist.SetItems(trackIDs) playlist.SetItems(trackIDs)
c.DB.Save(playlist) c.DB.Save(playlist)
return spec.NewResponse() return spec.NewResponse()

View File

@@ -59,7 +59,7 @@ func (c *Controller) WithUser(next http.Handler) http.Handler {
password, _ := params.Get("p") password, _ := params.Get("p")
token, _ := params.Get("t") token, _ := params.Get("t")
salt, _ := params.Get("s") salt, _ := params.Get("s")
//
passwordAuth := token == "" && salt == "" passwordAuth := token == "" && salt == ""
tokenAuth := password == "" tokenAuth := password == ""
if tokenAuth == passwordAuth { if tokenAuth == passwordAuth {

View File

@@ -1,24 +1,24 @@
// package params provides methods on url.Values for parsing params for the subsonic api // package params provides methods on url.Values for parsing params for the subsonic api
//
// the format of the functions are: // the format of the functions are:
// `Get[First|Or|FirstOr][Int|ID|Bool|TimeMs][List]` // `Get[First|Or|FirstOr][Int|ID|Bool|TimeMs][List]`
//
// first component (key selection): // first component (key selection):
// "" -> lookup the key as usual, err if not found // "" -> lookup the key as usual, err if not found
// "First" -> lookup from a list of possible keys, err if none found // "First" -> lookup from a list of possible keys, err if none found
// "Or" -> lookup the key as usual, return `or` if not found // "Or" -> lookup the key as usual, return `or` if not found
// "FirstOr" -> lookup from a list of possible keys, return `or` if not found // "FirstOr" -> lookup from a list of possible keys, return `or` if not found
//
// second component (type selection): // second component (type selection):
// "" -> parse the value as a string // "" -> parse the value as a string
// "Int" -> parse the value as an integer // "Int" -> parse the value as an integer
// "ID" -> parse the value as an artist, track, album etc id // "ID" -> parse the value as an artist, track, album etc id
// "Bool" -> parse the value as a boolean // "Bool" -> parse the value as a boolean
//
// last component (list parsing with stacked keys, eg. `?a=1&a=2&a=3`): // last component (list parsing with stacked keys, eg. `?a=1&a=2&a=3`):
// "" -> return the first value, eg. `1` // "" -> return the first value, eg. `1`
// "List" -> return all values, eg. `{1, 2, 3}` // "List" -> return all values, eg. `{1, 2, 3}`
//
// note: these bulk of these funcs were generated with vim macros, so let me know if // note: these bulk of these funcs were generated with vim macros, so let me know if
// you see something wrong :) // you see something wrong :)
@@ -60,7 +60,8 @@ func parse(values []string, i interface{}) error {
} }
var err error var err error
switch v := i.(type) { switch v := i.(type) {
// ** begin *T
// *T
case *string: case *string:
*v, err = parseStr(values[0]) *v, err = parseStr(values[0])
case *int: case *int:
@@ -71,7 +72,8 @@ func parse(values []string, i interface{}) error {
*v, err = parseBool(values[0]) *v, err = parseBool(values[0])
case *time.Time: case *time.Time:
*v, err = parseTime(values[0]) *v, err = parseTime(values[0])
// ** begin *[]T
// *[]T
case *[]string: case *[]string:
for _, value := range values { for _, value := range values {
parsed, err := parseStr(value) parsed, err := parseStr(value)
@@ -143,7 +145,7 @@ func (p Params) getFirst(keys []string) []string {
return nil return nil
} }
// ** begin str {get, get first, get or, get first or} // str {get, get first, get or, get first or}
func (p Params) Get(key string) (string, error) { func (p Params) Get(key string) (string, error) {
var ret string var ret string
@@ -171,7 +173,7 @@ func (p Params) GetFirstOr(or string, keys ...string) string {
return or return or
} }
// ** begin []str {get, get first, get or, get first or} // []str {get, get first, get or, get first or}
func (p Params) GetList(key string) ([]string, error) { func (p Params) GetList(key string) ([]string, error) {
var ret []string var ret []string
@@ -199,7 +201,7 @@ func (p Params) GetFirstOrList(or []string, keys ...string) []string {
return or return or
} }
// ** begin int {get, get first, get or, get first or} // int {get, get first, get or, get first or}
func (p Params) GetInt(key string) (int, error) { func (p Params) GetInt(key string) (int, error) {
var ret int var ret int
@@ -227,7 +229,7 @@ func (p Params) GetFirstOrInt(or int, keys ...string) int {
return or return or
} }
// ** begin []int {get, get first, get or, get first or} // []int {get, get first, get or, get first or}
func (p Params) GetIntList(key string) ([]int, error) { func (p Params) GetIntList(key string) ([]int, error) {
var ret []int var ret []int
@@ -255,7 +257,7 @@ func (p Params) GetFirstOrIntList(or []int, keys ...string) []int {
return or return or
} }
// ** begin specid.ID {get, get first, get or, get first or} // specid.ID {get, get first, get or, get first or}
func (p Params) GetID(key string) (specid.ID, error) { func (p Params) GetID(key string) (specid.ID, error) {
var ret specid.ID var ret specid.ID
@@ -283,7 +285,7 @@ func (p Params) GetFirstOrID(or specid.ID, keys ...string) specid.ID {
return or return or
} }
// ** begin []specid.ID {get, get first, get or, get first or} // []specid.ID {get, get first, get or, get first or}
func (p Params) GetIDList(key string) ([]specid.ID, error) { func (p Params) GetIDList(key string) ([]specid.ID, error) {
var ret []specid.ID var ret []specid.ID
@@ -311,7 +313,7 @@ func (p Params) GetFirstOrIDList(or []specid.ID, keys ...string) []specid.ID {
return or return or
} }
// ** begin bool {get, get first, get or, get first or} // bool {get, get first, get or, get first or}
func (p Params) GetBool(key string) (bool, error) { func (p Params) GetBool(key string) (bool, error) {
var ret bool var ret bool
@@ -339,7 +341,7 @@ func (p Params) GetFirstOrBool(or bool, keys ...string) bool {
return or return or
} }
// ** begin []bool {get, get first, get or, get first or} // []bool {get, get first, get or, get first or}
func (p Params) GetBoolList(key string) ([]bool, error) { func (p Params) GetBoolList(key string) ([]bool, error) {
var ret []bool var ret []bool
@@ -367,7 +369,7 @@ func (p Params) GetFirstOrBoolList(or []bool, keys ...string) []bool {
return or return or
} }
// ** begin time {get, get first, get or, get first or} // time {get, get first, get or, get first or}
func (p Params) GetTime(key string) (time.Time, error) { func (p Params) GetTime(key string) (time.Time, error) {
var ret time.Time var ret time.Time

View File

@@ -208,7 +208,7 @@ func encode(out io.Writer, trackPath, cachePath string, profile Profile) error {
// still unsure if buffer version (cmdOutputWrite) is any better than io.Copy-based one (cmdOutputCopy) // still unsure if buffer version (cmdOutputWrite) is any better than io.Copy-based one (cmdOutputCopy)
// initial goal here is to start streaming response asap, with smallest ttfb. more testing needed // initial goal here is to start streaming response asap, with smallest ttfb. more testing needed
// -- @spijet // -- @spijet
//
// start up writers for cache file and http response // start up writers for cache file and http response
go cmdOutputWrite(out, cacheFile, pipeReader) go cmdOutputWrite(out, cacheFile, pipeReader)
// run ffmpeg // run ffmpeg

View File

@@ -136,7 +136,8 @@ func setupMisc(r *mux.Router, ctrl *ctrlbase.Controller) {
} }
func setupAdmin(r *mux.Router, ctrl *ctrladmin.Controller) { func setupAdmin(r *mux.Router, ctrl *ctrladmin.Controller) {
// ** begin public routes (creates session)
// public routes (creates session)
r.Use(ctrl.WithSession) r.Use(ctrl.WithSession)
r.Handle("/login", ctrl.H(ctrl.ServeLogin)) r.Handle("/login", ctrl.H(ctrl.ServeLogin))
r.Handle("/login_do", ctrl.HR(ctrl.ServeLoginDo)) // "raw" handler, updates session r.Handle("/login_do", ctrl.HR(ctrl.ServeLoginDo)) // "raw" handler, updates session
@@ -144,7 +145,7 @@ func setupAdmin(r *mux.Router, ctrl *ctrladmin.Controller) {
staticHandler := http.StripPrefix("/admin", http.FileServer(http.FS(assets.Static))) staticHandler := http.StripPrefix("/admin", http.FileServer(http.FS(assets.Static)))
r.PathPrefix("/static").Handler(staticHandler) r.PathPrefix("/static").Handler(staticHandler)
// ** begin user routes (if session is valid) // user routes (if session is valid)
routUser := r.NewRoute().Subrouter() routUser := r.NewRoute().Subrouter()
routUser.Use(ctrl.WithUserSession) routUser.Use(ctrl.WithUserSession)
routUser.Handle("/logout", ctrl.HR(ctrl.ServeLogout)) // "raw" handler, updates session routUser.Handle("/logout", ctrl.HR(ctrl.ServeLogout)) // "raw" handler, updates session
@@ -166,7 +167,7 @@ func setupAdmin(r *mux.Router, ctrl *ctrladmin.Controller) {
routUser.Handle("/download_podcast_do", ctrl.H(ctrl.ServePodcastDownloadDo)) routUser.Handle("/download_podcast_do", ctrl.H(ctrl.ServePodcastDownloadDo))
routUser.Handle("/update_podcast_do", ctrl.H(ctrl.ServePodcastUpdateDo)) routUser.Handle("/update_podcast_do", ctrl.H(ctrl.ServePodcastUpdateDo))
// ** begin admin routes (if session is valid, and is admin) // admin routes (if session is valid, and is admin)
routAdmin := routUser.NewRoute().Subrouter() routAdmin := routUser.NewRoute().Subrouter()
routAdmin.Use(ctrl.WithAdminSession) routAdmin.Use(ctrl.WithAdminSession)
routAdmin.Handle("/change_username", ctrl.H(ctrl.ServeChangeUsername)) routAdmin.Handle("/change_username", ctrl.H(ctrl.ServeChangeUsername))
@@ -194,7 +195,7 @@ func setupSubsonic(r *mux.Router, ctrl *ctrlsubsonic.Controller) {
r.Use(ctrl.WithRequiredParams) r.Use(ctrl.WithRequiredParams)
r.Use(ctrl.WithUser) r.Use(ctrl.WithUser)
// ** begin common // common
r.Handle("/getLicense{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetLicence)) r.Handle("/getLicense{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetLicence))
r.Handle("/getMusicFolders{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetMusicFolders)) r.Handle("/getMusicFolders{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetMusicFolders))
r.Handle("/getScanStatus{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetScanStatus)) r.Handle("/getScanStatus{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetScanStatus))
@@ -217,12 +218,12 @@ func setupSubsonic(r *mux.Router, ctrl *ctrlsubsonic.Controller) {
r.Handle("/createBookmark{_:(?:\\.view)?}", ctrl.H(ctrl.ServeCreateBookmark)) r.Handle("/createBookmark{_:(?:\\.view)?}", ctrl.H(ctrl.ServeCreateBookmark))
r.Handle("/deleteBookmark{_:(?:\\.view)?}", ctrl.H(ctrl.ServeDeleteBookmark)) r.Handle("/deleteBookmark{_:(?:\\.view)?}", ctrl.H(ctrl.ServeDeleteBookmark))
// ** begin raw // raw
r.Handle("/download{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeDownload)) r.Handle("/download{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeDownload))
r.Handle("/getCoverArt{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeGetCoverArt)) r.Handle("/getCoverArt{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeGetCoverArt))
r.Handle("/stream{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeStream)) r.Handle("/stream{_:(?:\\.view)?}", ctrl.HR(ctrl.ServeStream))
// ** begin browse by tag // browse by tag
r.Handle("/getAlbum{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetAlbum)) r.Handle("/getAlbum{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetAlbum))
r.Handle("/getAlbumList2{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetAlbumListTwo)) r.Handle("/getAlbumList2{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetAlbumListTwo))
r.Handle("/getArtist{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetArtist)) r.Handle("/getArtist{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetArtist))
@@ -230,7 +231,7 @@ func setupSubsonic(r *mux.Router, ctrl *ctrlsubsonic.Controller) {
r.Handle("/search3{_:(?:\\.view)?}", ctrl.H(ctrl.ServeSearchThree)) r.Handle("/search3{_:(?:\\.view)?}", ctrl.H(ctrl.ServeSearchThree))
r.Handle("/getArtistInfo2{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetArtistInfoTwo)) r.Handle("/getArtistInfo2{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetArtistInfoTwo))
// ** begin browse by folder // browse by folder
r.Handle("/getIndexes{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetIndexes)) r.Handle("/getIndexes{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetIndexes))
r.Handle("/getMusicDirectory{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetMusicDirectory)) r.Handle("/getMusicDirectory{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetMusicDirectory))
r.Handle("/getAlbumList{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetAlbumList)) r.Handle("/getAlbumList{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetAlbumList))
@@ -238,7 +239,7 @@ func setupSubsonic(r *mux.Router, ctrl *ctrlsubsonic.Controller) {
r.Handle("/getGenres{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetGenres)) r.Handle("/getGenres{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetGenres))
r.Handle("/getArtistInfo{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetArtistInfo)) r.Handle("/getArtistInfo{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetArtistInfo))
// ** begin podcasts // podcasts
r.Handle("/getPodcasts{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetPodcasts)) r.Handle("/getPodcasts{_:(?:\\.view)?}", ctrl.H(ctrl.ServeGetPodcasts))
r.Handle("/downloadPodcastEpisode{_:(?:\\.view)?}", ctrl.H(ctrl.ServeDownloadPodcastEpisode)) r.Handle("/downloadPodcastEpisode{_:(?:\\.view)?}", ctrl.H(ctrl.ServeDownloadPodcastEpisode))
r.Handle("/createPodcastChannel{_:(?:\\.view)?}", ctrl.H(ctrl.ServeCreatePodcastChannel)) r.Handle("/createPodcastChannel{_:(?:\\.view)?}", ctrl.H(ctrl.ServeCreatePodcastChannel))