diff --git a/cmd/radio.go b/cmd/radio.go index cbe3a5d..870472c 100644 --- a/cmd/radio.go +++ b/cmd/radio.go @@ -14,7 +14,7 @@ var radioCmd = &cobra.Command{ Use: "radio", Short: "Starts radio", Long: `Starts radio`, - Run: func(cmd *cobra.Command, args []string) { - commands.Radio(ctx, client) + RunE: func(cmd *cobra.Command, args []string) error { + return commands.Radio(ctx, client) }, } diff --git a/cmd/root.go b/cmd/root.go index 40414fe..dd2011f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -54,7 +54,11 @@ func init() { if err != nil { panic(err) } - + currentUser, err := client.CurrentUser(ctx) + if err != nil { + panic(err) + } + ctx.UserId = currentUser.ID } } diff --git a/go.mod b/go.mod index 2b1bdcb..f93aac4 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/charmbracelet/lipgloss v0.6.0 github.com/cristalhq/aconfig v0.18.3 github.com/cristalhq/aconfig/aconfigyaml v0.17.1 + github.com/spf13/cobra v1.6.1 github.com/zmb3/spotify v1.3.0 github.com/zmb3/spotify/v2 v2.3.1 golang.org/x/oauth2 v0.0.0-20210810183815-faf39c7919d5 @@ -29,7 +30,6 @@ require ( github.com/muesli/termenv v0.13.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/sahilm/fuzzy v0.1.0 // indirect - github.com/spf13/cobra v1.6.1 // indirect github.com/spf13/pflag v1.0.5 // indirect golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect diff --git a/gospt_bash b/gospt_bash deleted file mode 100644 index bea1708..0000000 --- a/gospt_bash +++ /dev/null @@ -1,890 +0,0 @@ -# bash completion for gospt -*- shell-script -*- - -__gospt_debug() -{ - if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then - echo "$*" >> "${BASH_COMP_DEBUG_FILE}" - fi -} - -# Homebrew on Macs have version 1.3 of bash-completion which doesn't include -# _init_completion. This is a very minimal version of that function. -__gospt_init_completion() -{ - COMPREPLY=() - _get_comp_words_by_ref "$@" cur prev words cword -} - -__gospt_index_of_word() -{ - local w word=$1 - shift - index=0 - for w in "$@"; do - [[ $w = "$word" ]] && return - index=$((index+1)) - done - index=-1 -} - -__gospt_contains_word() -{ - local w word=$1; shift - for w in "$@"; do - [[ $w = "$word" ]] && return - done - return 1 -} - -__gospt_handle_go_custom_completion() -{ - __gospt_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}" - - local shellCompDirectiveError=1 - local shellCompDirectiveNoSpace=2 - local shellCompDirectiveNoFileComp=4 - local shellCompDirectiveFilterFileExt=8 - local shellCompDirectiveFilterDirs=16 - - local out requestComp lastParam lastChar comp directive args - - # Prepare the command to request completions for the program. - # Calling ${words[0]} instead of directly gospt allows to handle aliases - args=("${words[@]:1}") - # Disable ActiveHelp which is not supported for bash completion v1 - requestComp="GOSPT_ACTIVE_HELP=0 ${words[0]} __completeNoDesc ${args[*]}" - - lastParam=${words[$((${#words[@]}-1))]} - lastChar=${lastParam:$((${#lastParam}-1)):1} - __gospt_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}" - - if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then - # If the last parameter is complete (there is a space following it) - # We add an extra empty parameter so we can indicate this to the go method. - __gospt_debug "${FUNCNAME[0]}: Adding extra empty parameter" - requestComp="${requestComp} \"\"" - fi - - __gospt_debug "${FUNCNAME[0]}: calling ${requestComp}" - # Use eval to handle any environment variables and such - out=$(eval "${requestComp}" 2>/dev/null) - - # Extract the directive integer at the very end of the output following a colon (:) - directive=${out##*:} - # Remove the directive - out=${out%:*} - if [ "${directive}" = "${out}" ]; then - # There is not directive specified - directive=0 - fi - __gospt_debug "${FUNCNAME[0]}: the completion directive is: ${directive}" - __gospt_debug "${FUNCNAME[0]}: the completions are: ${out}" - - if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then - # Error code. No completion. - __gospt_debug "${FUNCNAME[0]}: received error from custom completion go code" - return - else - if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then - if [[ $(type -t compopt) = "builtin" ]]; then - __gospt_debug "${FUNCNAME[0]}: activating no space" - compopt -o nospace - fi - fi - if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then - if [[ $(type -t compopt) = "builtin" ]]; then - __gospt_debug "${FUNCNAME[0]}: activating no file completion" - compopt +o default - fi - fi - fi - - if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then - # File extension filtering - local fullFilter filter filteringCmd - # Do not use quotes around the $out variable or else newline - # characters will be kept. - for filter in ${out}; do - fullFilter+="$filter|" - done - - filteringCmd="_filedir $fullFilter" - __gospt_debug "File filtering command: $filteringCmd" - $filteringCmd - elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then - # File completion for directories only - local subdir - # Use printf to strip any trailing newline - subdir=$(printf "%s" "${out}") - if [ -n "$subdir" ]; then - __gospt_debug "Listing directories in $subdir" - __gospt_handle_subdirs_in_dir_flag "$subdir" - else - __gospt_debug "Listing directories in ." - _filedir -d - fi - else - while IFS='' read -r comp; do - COMPREPLY+=("$comp") - done < <(compgen -W "${out}" -- "$cur") - fi -} - -__gospt_handle_reply() -{ - __gospt_debug "${FUNCNAME[0]}" - local comp - case $cur in - -*) - if [[ $(type -t compopt) = "builtin" ]]; then - compopt -o nospace - fi - local allflags - if [ ${#must_have_one_flag[@]} -ne 0 ]; then - allflags=("${must_have_one_flag[@]}") - else - allflags=("${flags[*]} ${two_word_flags[*]}") - fi - while IFS='' read -r comp; do - COMPREPLY+=("$comp") - done < <(compgen -W "${allflags[*]}" -- "$cur") - if [[ $(type -t compopt) = "builtin" ]]; then - [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace - fi - - # complete after --flag=abc - if [[ $cur == *=* ]]; then - if [[ $(type -t compopt) = "builtin" ]]; then - compopt +o nospace - fi - - local index flag - flag="${cur%=*}" - __gospt_index_of_word "${flag}" "${flags_with_completion[@]}" - COMPREPLY=() - if [[ ${index} -ge 0 ]]; then - PREFIX="" - cur="${cur#*=}" - ${flags_completion[${index}]} - if [ -n "${ZSH_VERSION:-}" ]; then - # zsh completion needs --flag= prefix - eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )" - fi - fi - fi - - if [[ -z "${flag_parsing_disabled}" ]]; then - # If flag parsing is enabled, we have completed the flags and can return. - # If flag parsing is disabled, we may not know all (or any) of the flags, so we fallthrough - # to possibly call handle_go_custom_completion. - return 0; - fi - ;; - esac - - # check if we are handling a flag with special work handling - local index - __gospt_index_of_word "${prev}" "${flags_with_completion[@]}" - if [[ ${index} -ge 0 ]]; then - ${flags_completion[${index}]} - return - fi - - # we are parsing a flag and don't have a special handler, no completion - if [[ ${cur} != "${words[cword]}" ]]; then - return - fi - - local completions - completions=("${commands[@]}") - if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then - completions+=("${must_have_one_noun[@]}") - elif [[ -n "${has_completion_function}" ]]; then - # if a go completion function is provided, defer to that function - __gospt_handle_go_custom_completion - fi - if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then - completions+=("${must_have_one_flag[@]}") - fi - while IFS='' read -r comp; do - COMPREPLY+=("$comp") - done < <(compgen -W "${completions[*]}" -- "$cur") - - if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then - while IFS='' read -r comp; do - COMPREPLY+=("$comp") - done < <(compgen -W "${noun_aliases[*]}" -- "$cur") - fi - - if [[ ${#COMPREPLY[@]} -eq 0 ]]; then - if declare -F __gospt_custom_func >/dev/null; then - # try command name qualified custom func - __gospt_custom_func - else - # otherwise fall back to unqualified for compatibility - declare -F __custom_func >/dev/null && __custom_func - fi - fi - - # available in bash-completion >= 2, not always present on macOS - if declare -F __ltrim_colon_completions >/dev/null; then - __ltrim_colon_completions "$cur" - fi - - # If there is only 1 completion and it is a flag with an = it will be completed - # but we don't want a space after the = - if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then - compopt -o nospace - fi -} - -# The arguments should be in the form "ext1|ext2|extn" -__gospt_handle_filename_extension_flag() -{ - local ext="$1" - _filedir "@(${ext})" -} - -__gospt_handle_subdirs_in_dir_flag() -{ - local dir="$1" - pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return -} - -__gospt_handle_flag() -{ - __gospt_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" - - # if a command required a flag, and we found it, unset must_have_one_flag() - local flagname=${words[c]} - local flagvalue="" - # if the word contained an = - if [[ ${words[c]} == *"="* ]]; then - flagvalue=${flagname#*=} # take in as flagvalue after the = - flagname=${flagname%=*} # strip everything after the = - flagname="${flagname}=" # but put the = back - fi - __gospt_debug "${FUNCNAME[0]}: looking for ${flagname}" - if __gospt_contains_word "${flagname}" "${must_have_one_flag[@]}"; then - must_have_one_flag=() - fi - - # if you set a flag which only applies to this command, don't show subcommands - if __gospt_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then - commands=() - fi - - # keep flag value with flagname as flaghash - # flaghash variable is an associative array which is only supported in bash > 3. - if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then - if [ -n "${flagvalue}" ] ; then - flaghash[${flagname}]=${flagvalue} - elif [ -n "${words[ $((c+1)) ]}" ] ; then - flaghash[${flagname}]=${words[ $((c+1)) ]} - else - flaghash[${flagname}]="true" # pad "true" for bool flag - fi - fi - - # skip the argument to a two word flag - if [[ ${words[c]} != *"="* ]] && __gospt_contains_word "${words[c]}" "${two_word_flags[@]}"; then - __gospt_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument" - c=$((c+1)) - # if we are looking for a flags value, don't show commands - if [[ $c -eq $cword ]]; then - commands=() - fi - fi - - c=$((c+1)) - -} - -__gospt_handle_noun() -{ - __gospt_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" - - if __gospt_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then - must_have_one_noun=() - elif __gospt_contains_word "${words[c]}" "${noun_aliases[@]}"; then - must_have_one_noun=() - fi - - nouns+=("${words[c]}") - c=$((c+1)) -} - -__gospt_handle_command() -{ - __gospt_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" - - local next_command - if [[ -n ${last_command} ]]; then - next_command="_${last_command}_${words[c]//:/__}" - else - if [[ $c -eq 0 ]]; then - next_command="_gospt_root_command" - else - next_command="_${words[c]//:/__}" - fi - fi - c=$((c+1)) - __gospt_debug "${FUNCNAME[0]}: looking for ${next_command}" - declare -F "$next_command" >/dev/null && $next_command -} - -__gospt_handle_word() -{ - if [[ $c -ge $cword ]]; then - __gospt_handle_reply - return - fi - __gospt_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" - if [[ "${words[c]}" == -* ]]; then - __gospt_handle_flag - elif __gospt_contains_word "${words[c]}" "${commands[@]}"; then - __gospt_handle_command - elif [[ $c -eq 0 ]]; then - __gospt_handle_command - elif __gospt_contains_word "${words[c]}" "${command_aliases[@]}"; then - # aliashash variable is an associative array which is only supported in bash > 3. - if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then - words[c]=${aliashash[${words[c]}]} - __gospt_handle_command - else - __gospt_handle_noun - fi - else - __gospt_handle_noun - fi - __gospt_handle_word -} - -_gospt_clearradio() -{ - last_command="gospt_clearradio" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_completion() -{ - last_command="gospt_completion" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - flags+=("--help") - flags+=("-h") - local_nonpersistent_flags+=("--help") - local_nonpersistent_flags+=("-h") - - must_have_one_flag=() - must_have_one_noun=() - must_have_one_noun+=("bash") - must_have_one_noun+=("fish") - must_have_one_noun+=("powershell") - must_have_one_noun+=("zsh") - noun_aliases=() -} - -_gospt_devices() -{ - last_command="gospt_devices" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_help() -{ - last_command="gospt_help" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - has_completion_function=1 - noun_aliases=() -} - -_gospt_like() -{ - last_command="gospt_like" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_nowplaying() -{ - last_command="gospt_nowplaying" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_pause() -{ - last_command="gospt_pause" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_play() -{ - last_command="gospt_play" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_playlists() -{ - last_command="gospt_playlists" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_playurl() -{ - last_command="gospt_playurl" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_previous() -{ - last_command="gospt_previous" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_radio() -{ - last_command="gospt_radio" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_refillradio() -{ - last_command="gospt_refillradio" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_repeat() -{ - last_command="gospt_repeat" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_setdevice() -{ - last_command="gospt_setdevice" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_shuffle() -{ - last_command="gospt_shuffle" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_skip() -{ - last_command="gospt_skip" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_status() -{ - last_command="gospt_status" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_toggleplay() -{ - last_command="gospt_toggleplay" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_tracks() -{ - last_command="gospt_tracks" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_tui() -{ - last_command="gospt_tui" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_unlike() -{ - last_command="gospt_unlike" - - command_aliases=() - - commands=() - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -_gospt_root_command() -{ - last_command="gospt" - - command_aliases=() - - commands=() - commands+=("clearradio") - commands+=("completion") - commands+=("devices") - commands+=("help") - commands+=("like") - commands+=("nowplaying") - commands+=("pause") - commands+=("play") - commands+=("playlists") - commands+=("playurl") - commands+=("previous") - commands+=("radio") - commands+=("refillradio") - commands+=("repeat") - commands+=("setdevice") - commands+=("shuffle") - commands+=("skip") - commands+=("status") - commands+=("toggleplay") - commands+=("tracks") - commands+=("tui") - commands+=("unlike") - - flags=() - two_word_flags=() - local_nonpersistent_flags=() - flags_with_completion=() - flags_completion=() - - - must_have_one_flag=() - must_have_one_noun=() - noun_aliases=() -} - -__start_gospt() -{ - local cur prev words cword split - declare -A flaghash 2>/dev/null || : - declare -A aliashash 2>/dev/null || : - if declare -F _init_completion >/dev/null 2>&1; then - _init_completion -s || return - else - __gospt_init_completion -n "=" || return - fi - - local c=0 - local flag_parsing_disabled= - local flags=() - local two_word_flags=() - local local_nonpersistent_flags=() - local flags_with_completion=() - local flags_completion=() - local commands=("gospt") - local command_aliases=() - local must_have_one_flag=() - local must_have_one_noun=() - local has_completion_function="" - local last_command="" - local nouns=() - local noun_aliases=() - - __gospt_handle_word -} - -if [[ $(type -t compopt) = "builtin" ]]; then - complete -o default -F __start_gospt gospt -else - complete -o default -o nospace -F __start_gospt gospt -fi - -# ex: ts=4 sw=4 et filetype=sh diff --git a/internal/api/api.go b/internal/api/api.go deleted file mode 100644 index 8d42a41..0000000 --- a/internal/api/api.go +++ /dev/null @@ -1,67 +0,0 @@ -package api - -import ( - "fmt" - "os" - "path/filepath" - - "gospt/internal/commands" - "gospt/internal/gctx" - "gospt/internal/tui" - - "github.com/zmb3/spotify/v2" -) - -func Run(ctx *gctx.Context, client *spotify.Client, args []string) error { - if len(args) == 0 { - configDir, _ := os.UserConfigDir() - if _, err := os.Stat(filepath.Join(configDir, "gospt/device.json")); err != nil { - return tui.StartTea(ctx, client) - } - return tui.DisplayMain(ctx, client) - } - switch args[0] { - case "help", "--help": - return commands.PrintHelp(ctx) - case "play": - return commands.Play(ctx, client) - case "pause": - return commands.Pause(ctx, client) - case "toggleplay": - return commands.TogglePlay(ctx, client) - case "next": - return commands.Skip(ctx, client) - case "previous": - return commands.Previous(ctx, client) - case "playurl": - return commands.PlayUrl(ctx, client, args) - case "like": - return commands.Like(ctx, client) - case "unlike": - return commands.Unlike(ctx, client) - case "shuffle": - return commands.Shuffle(ctx, client) - case "repeat": - return commands.Repeat(ctx, client) - case "radio": - return commands.Radio(ctx, client) - case "clearradio": - return commands.ClearRadio(ctx, client) - case "refillradio": - return commands.RefillRadio(ctx, client) - case "tracks": - return tui.DisplayList(ctx, client) - case "playlists": - return tui.DisplayPlaylists(ctx, client) - case "status": - return commands.Status(ctx, client) - case "devices": - return commands.Devices(ctx, client) - case "nowplaying": - return commands.NowPlaying(ctx, client) - case "setdevice": - return tui.DisplayDevices(ctx, client) - default: - return fmt.Errorf("Unsupported Command") - } -} diff --git a/internal/commands/commands.go b/internal/commands/commands.go index fbff079..10b8208 100644 --- a/internal/commands/commands.go +++ b/internal/commands/commands.go @@ -16,14 +16,6 @@ import ( "github.com/zmb3/spotify/v2" ) -func PrintHelp(ctx *gctx.Context) error { - fmt.Println("Usage: gospt [command]") - fmt.Println("if no command is provided then TUI will open") - fmt.Println("\ncurrently available commands:") - fmt.Println("help, play, pause, toggleplay, \nnext, previous, playurl, like, unlike, shuffle, \nrepeat, radio, clearradio, refillradio, tracks, \nclearradio, playlists, status, devices, nowplaying, setdevice") - return nil -} - func Play(ctx *gctx.Context, client *spotify.Client) error { err := client.Play(ctx) if err != nil { @@ -175,6 +167,7 @@ func Radio(ctx *gctx.Context, client *spotify.Client) error { if err != nil { return err } + tracks, err := client.CurrentUsersTracks(ctx, spotify.Limit(10)) if err != nil { return err @@ -182,6 +175,7 @@ func Radio(ctx *gctx.Context, client *spotify.Client) error { seed_song = tracks.Tracks[rand.Intn(len(tracks.Tracks))].SimpleTrack } else { if !current_song.Playing { + tracks, err := client.CurrentUsersTracks(ctx, spotify.Limit(10)) if err != nil { return err @@ -233,7 +227,7 @@ func RefillRadio(ctx *gctx.Context, client *spotify.Client) error { return err } for idx, song := range recomendations.Tracks { - if idx >= len(to_remove) { + if idx > len(to_remove) { break } recomendationIds = append(recomendationIds, song.ID) @@ -249,6 +243,7 @@ func RefillRadio(ctx *gctx.Context, client *spotify.Client) error { func ClearRadio(ctx *gctx.Context, client *spotify.Client) error { radioPlaylist, err := GetRadioPlaylist(ctx, client) if err != nil { + fmt.Println(err) return err } err = client.UnfollowPlaylist(ctx, radioPlaylist.ID) @@ -494,8 +489,9 @@ func GetRadioPlaylist(ctx *gctx.Context, client *spotify.Client) (*spotify.FullP return playlist, nil } // private flag doesnt work - playlist, err := client.CreatePlaylistForUser(ctx, ctx.UserId, "Radio", "Automanaged radio playlist", false, false) + playlist, err := client.CreatePlaylistForUser(ctx, ctx.UserId, "autoradio", "Automanaged radio playlist", false, false) if err != nil { + fmt.Println("AHHHHHHHHHHHHh", ctx.UserId) return nil, err } out, err := json.MarshalIndent(playlist, "", " ")