From 7afbff6a129e4fee1ff932312119435ee3311904 Mon Sep 17 00:00:00 2001 From: Ilya Suhodolskiy Date: Sat, 13 May 2023 19:20:49 +0400 Subject: [PATCH] Initial commit --- .github/cover.jpg | Bin 0 -> 53083 bytes .gitignore | 3 ++ .vscode/launch.json | 14 +++++ .vscode/settings.json | 3 ++ Makefile | 2 + README.md | 16 ++++++ go.mod | 3 ++ go.sum | 0 index.html | 75 ++++++++++++++++++++++++++ main.go | 119 ++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 235 insertions(+) create mode 100644 .github/cover.jpg create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 Makefile create mode 100644 README.md create mode 100644 go.mod create mode 100644 go.sum create mode 100644 index.html create mode 100644 main.go diff --git a/.github/cover.jpg b/.github/cover.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f02475f7cdd3ac139002cbc94f9b634e7f9d40f0 GIT binary patch literal 53083 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 + + + + + + Spotify + + + +

+
+ +
+
+ {{ .Track.Name }} +
{{ .Track.Artist }}
+
+
+ + + diff --git a/main.go b/main.go new file mode 100644 index 0000000..e4e4bb7 --- /dev/null +++ b/main.go @@ -0,0 +1,119 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "net/http" + "os" + "os/exec" + "path/filepath" + "text/template" + "time" +) + +const command = ` + tell application "Spotify" + set ctrack to "{" + set ctrack to ctrack & "\"artist\": \"" & current track's artist & "\"" + set ctrack to ctrack & ",\"album\": \"" & current track's album & "\"" + set ctrack to ctrack & ",\"discNumber\": " & current track's disc number + set ctrack to ctrack & ",\"duration\": " & current track's duration + set ctrack to ctrack & ",\"playedCount\": " & current track's played count + set ctrack to ctrack & ",\"trackNumber\": " & current track's track number + set ctrack to ctrack & ",\"popularity\": " & current track's popularity + set ctrack to ctrack & ",\"id\": \"" & current track's id & "\"" + set ctrack to ctrack & ",\"position\": " & (player position as integer) + set ctrack to ctrack & ",\"name\": \"" & current track's name & "\"" + set ctrack to ctrack & ",\"albumArtist\": \"" & current track's album artist & "\"" + set ctrack to ctrack & ",\"artworkUrl\": \"" & current track's artwork url & "\"" + set ctrack to ctrack & ",\"spotifyUrl\": \"" & current track's spotify url & "\"" + set ctrack to ctrack & "}" + + return ctrack + end tell` + +type SpotifyCurrentTrack struct { + Artist string `json:"artist"` + Album string `json:"album"` + DiscNumber int `json:"discNumber"` + Duration int `json:"duration"` + PlayedCount int `json:"playedCount"` + TrackNumber int `json:"trackNumber"` + Popularity int `json:"popularity"` + ID string `json:"id"` + Name string `json:"name"` + Position int `json:"position"` + AlbumArtist string `json:"albumArtist"` + ArtworkURL string `json:"artworkUrl"` + SpotifyURL string `json:"spotifyUrl"` +} + +type Response struct { + Track SpotifyCurrentTrack + Refresh int64 + Port string +} + +func getCurrentTrack() SpotifyCurrentTrack { + currentTrack := SpotifyCurrentTrack{} + + cmd := exec.Command("osascript", "-e", command) + + output, err := cmd.CombinedOutput() + + if err != nil { + return currentTrack + } + + if err := json.Unmarshal(output, ¤tTrack); err != nil { + return currentTrack + } + + return currentTrack +} + +func main() { + port := flag.String("port", "5783", "http port") + flag.Parse() + + ex, _ := os.Executable() + tmpl, err := template.ParseFiles(filepath.Join(ex, "../index.html")) + + if err != nil { + panic(err) + } + + http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { + response := Response{ + Track: getCurrentTrack(), + Refresh: time.Second.Milliseconds(), + Port: *port, + } + + refreshQueryParam := req.URL.Query().Get("refresh") + + if refreshQueryParam != "" { + if duration, err := time.ParseDuration(refreshQueryParam); err == nil { + response.Refresh = duration.Milliseconds() + } + } + + if err := tmpl.Execute(w, response); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + }) + + http.HandleFunc("/track", func(w http.ResponseWriter, req *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.Header().Set("Access-Control-Allow-Origin", "*") + + resp, _ := json.Marshal(getCurrentTrack()) + + fmt.Fprint(w, string(resp)) + }) + + fmt.Printf("The server is running on port %s!", *port) + + http.ListenAndServe(fmt.Sprintf(":%s", *port), nil) +}