freedom-legacy/web.go

108 lines
2.9 KiB
Go
Raw Normal View History

2018-12-28 02:27:34 +00:00
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)
}