90 lines
2.9 KiB
Go
90 lines
2.9 KiB
Go
// This example demonstrates how to authenticate with Spotify using the authorization code flow.
|
|
// In order to run this example yourself, you'll need to:
|
|
//
|
|
// 1. Register an application at: https://developer.spotify.com/my-applications/
|
|
// - Use "http://localhost:8080/callback" as the redirect URI
|
|
// 2. Set the SPOTIFY_ID environment variable to the client ID you got in step 1.
|
|
// 3. Set the SPOTIFY_SECRET environment variable to the client secret from step 1.
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/dixonwille/wmenu"
|
|
|
|
"gopkg.in/dixonwille/wlog.v2"
|
|
"github.com/zmb3/spotify"
|
|
"github.com/ahmetalpbalkan/go-cursor"
|
|
)
|
|
|
|
// and enter this value.
|
|
const redirectURI = "http://localhost:8080/callback"
|
|
const root_track_folder = "music/tracks/"
|
|
const root_playlists_folder = "music/playlists/"
|
|
const root_user_folder = "music/users/"
|
|
|
|
var (
|
|
auth = get_spotify_auth();
|
|
ch = make(chan *spotify.Client)
|
|
state = "abc123"
|
|
status = 1
|
|
client *spotify.Client
|
|
)
|
|
|
|
func main() {
|
|
|
|
menu := wmenu.NewMenu("Choose your Option (0-9). <return> to get back to menu.")
|
|
menu.Action(
|
|
func (opts []wmenu.Opt) error {
|
|
switch opts[0].Value {
|
|
case 1:
|
|
HowToSetEnvVariables()
|
|
case 2:
|
|
fmt.Println("~ starting 'Authorization Code Flow' Sequence ~")
|
|
client = StartAuthorizationCodeFlow()
|
|
case 3:
|
|
fmt.Println("~ starting 'Dowload a Track' Sequence ~")
|
|
DownloadTrack()
|
|
case 4:
|
|
fmt.Println("~ starting 'Download a Playlist' Sequence ~")
|
|
DownloadPlaylist()
|
|
case 5:
|
|
fmt.Println("~ starting 'Download all of my Playlists' Sequence ~")
|
|
DownloadAllPlaylistsOfUser()
|
|
case 6:
|
|
fmt.Println("~ starting 'Go to webapp' Sequence~")
|
|
startWebServer()
|
|
}
|
|
main()
|
|
return nil
|
|
})
|
|
|
|
fmt.Print(cursor.ClearEntireScreen())
|
|
fmt.Print(cursor.MoveTo(0,0))
|
|
if status > 1 {
|
|
fmt.Println("~ status => authenticated ~")
|
|
menu.Option(" Download a Track", 3, true, nil)
|
|
menu.Option(" Download a Playlist", 4, true, nil)
|
|
menu.Option(" Download all of my Playlists", 5, true, nil)
|
|
menu.Option(" Go to webapp", 6, true, nil)
|
|
} else {
|
|
fmt.Println("~ status => not authenticated ~")
|
|
menu.Option(" Set Client ID", 1, true, nil)
|
|
menu.Option(" Start Authorization Code Flow", 2, false, nil)
|
|
}
|
|
|
|
optionColor := wlog.None
|
|
questionColor := wlog.Color{}
|
|
responseColor := wlog.Color{}
|
|
errorColor := wlog.Color{}
|
|
menu.AddColor(optionColor, questionColor, responseColor, errorColor)
|
|
// menu.AddColor("green", "blue", "yellow", "yellow")
|
|
|
|
mainMenu := menu.Run()
|
|
if mainMenu != nil{
|
|
log.Fatal(mainMenu)
|
|
}
|
|
|
|
}
|