108 lines
2.9 KiB
Go
108 lines
2.9 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
// "os"
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
"html/template"
|
||
|
"regexp"
|
||
|
"io/ioutil"
|
||
|
"encoding/json"
|
||
|
)
|
||
|
|
||
|
var templates = template.Must(template.ParseGlob("pages/*.html"))
|
||
|
var validPath = regexp.MustCompile("^/(webclient)/(.*)$")
|
||
|
|
||
|
type Page struct {
|
||
|
Title string
|
||
|
Body []byte
|
||
|
}
|
||
|
|
||
|
// func makeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc {
|
||
|
// fmt.Println("Running makeHandler")
|
||
|
// return func(w http.ResponseWriter, r *http.Request) {
|
||
|
// m := validPath.FindStringSubmatch(r.URL.Path)
|
||
|
// if m == nil {
|
||
|
// http.NotFound(w, r)
|
||
|
// return
|
||
|
// }
|
||
|
// fmt.Println("makeHandler::request::" + r.RequestURI)
|
||
|
// fn(w, r, m[2])
|
||
|
// }
|
||
|
// }
|
||
|
|
||
|
type testStructForWeb struct {
|
||
|
ID string
|
||
|
Name string
|
||
|
Owner string
|
||
|
}
|
||
|
|
||
|
type Context struct {
|
||
|
Items []testStructForWeb
|
||
|
}
|
||
|
|
||
|
func serveSingle(pattern string, filename string) {
|
||
|
http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
|
||
|
http.ServeFile(w, r, filename)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func webclientHandler(w http.ResponseWriter, r *http.Request) {
|
||
|
fmt.Println("webclientHandler called")
|
||
|
|
||
|
var result []testStructForWeb
|
||
|
|
||
|
url := baseURL_playlists + "?limit=50&offset=0"
|
||
|
|
||
|
httpClient := &http.Client{}
|
||
|
req, _ := http.NewRequest("GET", url, nil)
|
||
|
req.Header.Set("Authorization", "Bearer "+oauthToken)
|
||
|
res, _ := httpClient.Do(req)
|
||
|
|
||
|
body, _ := ioutil.ReadAll(res.Body)
|
||
|
data := new(spotifyPlaylistsOfUser)
|
||
|
json.Unmarshal(body, &data)
|
||
|
var counter = 0
|
||
|
|
||
|
for _,playlist := range data.Items {
|
||
|
counter++
|
||
|
result = append(result, testStructForWeb{ID: playlist.ID, Name: playlist.Name, Owner: (playlist.Owner.ID)})
|
||
|
}
|
||
|
if data.Total > 50 {
|
||
|
for(data.Next != nil) {
|
||
|
nextUrl := *data.Next
|
||
|
request, _ := http.NewRequest("GET",nextUrl, nil)
|
||
|
request.Header.Set("Authorization", "Bearer "+oauthToken)
|
||
|
response, _ := httpClient.Do(request)
|
||
|
|
||
|
body, _ = ioutil.ReadAll(response.Body)
|
||
|
json.Unmarshal(body, &data)
|
||
|
for _,playlist := range data.Items {
|
||
|
counter++
|
||
|
result = append(result, testStructForWeb{ID: playlist.ID, Name: playlist.Name, Owner: playlist.Owner.ID})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
playlists := Context{Items: result}
|
||
|
|
||
|
templates.ExecuteTemplate(w, "playlists", playlists)
|
||
|
}
|
||
|
|
||
|
func submitDownloadQueueHandler(w http.ResponseWriter, r *http.Request) {
|
||
|
// for playlist_id in all_playlists
|
||
|
// if r.PostFormValue(playlist_id)
|
||
|
// end for
|
||
|
}
|
||
|
|
||
|
func startWebServer() {
|
||
|
http.HandleFunc("/webclient/", webclientHandler)
|
||
|
http.HandleFunc("/submitDownloadQueue/", submitDownloadQueueHandler)
|
||
|
|
||
|
serveSingle("/static/tables.css", "./static/tables.css")
|
||
|
|
||
|
fmt.Println("http://localhost:8088/webclient")
|
||
|
http.ListenAndServe("localhost:8088", nil)
|
||
|
}
|