Code Monkey home page Code Monkey logo

spotify-tui's People

Contributors

allcontributors[bot] avatar amgassert avatar bios-marcel avatar bkitor avatar dependabot-preview[bot] avatar dependabot[bot] avatar dp304 avatar fangyi-zhou avatar fratajczak avatar gpawlik avatar ilnaes avatar jfaltis avatar lennypenny avatar littleli avatar marcoieni avatar orangefran avatar peterwmoss avatar radicalzephyr avatar ricardo-he avatar rigellute avatar skrewby avatar slumber avatar sputnick1124 avatar stuarth avatar svenvnl avatar tem1029 avatar timonpost avatar timotheegerber avatar utagai avatar zacklukem avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spotify-tui's Issues

Change sort order of playlist

An option to sort the playlist in different ways would be nice: Show the most recently added songs on top for example.

No Devices Available in List

Hey there, when I run spt, there are no devices available in the devices list.

I'm running macOS 10.14.5 (Mojave)

Publish crate

Would be great if you could $ cargo install spotify-tui.

Looks like a sweet project.

Can't play tracks from spotify-tui

When I try to launch a start a track I get an error message saying:
"Api response: Spotify API reported an error.
If you are trying to play a track, make sure the offical spotify app is open"

And it is open I can even see what song is currently playing.

Split the app file and struct

The app struct and file are pretty big and have a lot of responsibility. I think it is better to split the code like it is done in OOP. The code does a lot and is not the easiest to get started in. We can split it in the following groups:

  • navigation
  • input
  • current playback
  • devices
  • search
  • playlists
  • playlist
  • artists
  • artist album
  • albums
  • album tracks
  • liked songs

Not working with spotifyd

Hi, I'm currently trying to get spotify-tui to work with spotifyd. spt sees the currently playing song by spotifyd@MyPC but won't allow me to control the daemon because of this error:

Error
Api response: Spotify API reported an error
If you are trying to play a track make sure the official spotify app is open

My spotifyd is installed from AUR.
kernel: 5.3.4-arch1-1-ARCH

↳spotifyd --version
spotifyd 0.2.18
↳spt --version
spotify-tui 0.4.0
↳systemctl status --user spotifyd
● spotifyd.service - A spotify playing daemon
   Loaded: loaded (/etc/systemd/user/spotifyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-08 20:15:26 CEST; 9min ago
     Docs: https://github.com/Spotifyd/spotifyd
 Main PID: 81601 (spotifyd)
   CGroup: /user.slice/user-1000.slice/[email protected]/spotifyd.service
           └─81601 /usr/bin/spotifyd --no-daemon

Oct 08 20:15:26 wojtas-arch spotifyd[81601]: 18:15:26 [INFO] Using alsa volume controller.
Oct 08 20:15:26 wojtas-arch spotifyd[81601]: 18:15:26 [INFO] Connecting to AP ""
Oct 08 20:15:26 wojtas-arch spotifyd[81601]: 18:15:26 [INFO] Authenticated as "" !
Oct 08 20:15:26 wojtas-arch spotifyd[81601]: 18:15:26 [INFO] Country: "PL"
Oct 08 20:15:36 wojtas-arch spotifyd[81601]: 18:15:36 [INFO] Loading track "I Hear A Rhapsody" with Spotify URI "spotify:track:2oEvw0AfrT2fPNpEnBwVml"
Oct 08 20:15:37 wojtas-arch spotifyd[81601]: 18:15:37 [INFO] Track "I Hear A Rhapsody" loaded

Update to new version

First of all, i have tried your tui now for a while and i gotta say that i love it! I follow every new feature and i am really happy to see all the progress.

Sorry if this is not the right forum but do you have a command that updates the tui to the latest version? Or should this command check the latest version when it starts?

Example: I have the older version that does not have "next track". Could it be a good thing to implement a check for your latest version so i know that i could update it? I have to check everything manually now.

Solution: Check if the user has the latest version and ask if you want to update. When new update is installed maybe have some text with new implemented features?

cargo install error Ubuntu 18.04

Tried installing via cargo:

cargo install spotify-tui

and got the following error:

    Updating crates.io index
  Installing spotify-tui v0.4.0
error: failed to compile `spotify-tui v0.4.0`, intermediate artifacts can be found at `/tmp/cargo-installls8SWH`

Caused by:
  unable to get packages from source

Caused by:
  failed to parse manifest at `/home/ubuntu/.cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.34/Cargo.toml`

Caused by:
  feature `rename-dependency` is required

this Cargo does not support nightly features, but if you
switch to nightly channel you can add
`cargo-features = ["rename-dependency"]` to enable this feature

Rust installed via rustup on Ubuntu 18.04

Linking error with Ubuntu 18.04

Thanks for this great app! I am trying to build for Ubuntu 18.04 but getting this error. Thank you for any guidance.

Compiling spotify-tui v0.6.2 error: linking withccfailed: exit code: 1 | = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/home/brendan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.0.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.1.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.10.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.11.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.12.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.13.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.14.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.15.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.2.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.3.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.4.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.5.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.6.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.7.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.8.rcgu.o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.spt.9nqlk0j9-cgu.9.rcgu.o" "-o" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561" "/tmp/cargo-install4Cfs9h/release/deps/spt-7ec6f893f06f5561.47pxari3l4vn7782.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/tmp/cargo-install4Cfs9h/release/deps" "-L" "/tmp/cargo-install4Cfs9h/release/build/backtrace-sys-6335e9cbc5f67c4d/out" "-L" "/home/brendan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/tmp/cargo-install4Cfs9h/release/deps/libserde_yaml-8d44eac82564392d.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libyaml_rust-d81429449dc24cbb.rlib" "/tmp/cargo-install4Cfs9h/release/deps/liblinked_hash_map-e4890eadedeb8224.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libclap-ea086e5ba1a1d381.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libvec_map-31dc9a693a4a81e3.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libtextwrap-bdab6b89a06c723b.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libstrsim-4dcff5113b2146ff.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libansi_term-32b6666dc48e585a.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libdirs-bab61cddd523db62.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libdirs_sys-639bdc321521283b.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libtui-20e40b0d40cfb4e2.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libcassowary-d86a96321c02898a.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libunicode_width-9f3924e3e3141e72.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libunicode_segmentation-9a919c577d642cc2.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libtermion-e7792cde031aadd5.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libnumtoa-7557d30a5e9b1a6d.rlib" "/tmp/cargo-install4Cfs9h/release/deps/librspotify-698216f05d0e1fb4.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libdotenv-e89e02bb033aec32.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libitertools-c80bad646a5eab1d.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libwebbrowser-daebd74259dba216.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libchrono-0805c79bb7ee4099.rlib" "/tmp/cargo-install4Cfs9h/release/deps/librustc_serialize-5b0f76bcae5f9800.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libnum_integer-d4c1ffdd4e03d0ed.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libnum_traits-1e075d15ab2edabd.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib" "/tmp/cargo-install4Cfs9h/release/deps/libuuid-5470b3f4ddf64c15.rlib" "/tmp/cargo-install4Cfs9h/release/deps/librand-77ebb0d412a3eec8.rlib" "/tmp/cargo-install4Cfs9h/re = note: /tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.15.rcgu.o): In functioncore::ptr::real_drop_in_place':
reqwest.f36917vf-cgu.15:(.text._ZN4core3ptr18real_drop_in_place17h8541869b63f84185E+0x4d): undefined reference to sk_pop' reqwest.f36917vf-cgu.15:(.text._ZN4core3ptr18real_drop_in_place17h8541869b63f84185E+0x60): undefined reference to sk_pop'
reqwest.f36917vf-cgu.15:(.text._ZN4core3ptr18real_drop_in_place17h8541869b63f84185E+0x8f): undefined reference to sk_free' /tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.15.rcgu.o): In function core::ptr::real_drop_in_place':
reqwest.f36917vf-cgu.15:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x2f): undefined reference to sk_pop' reqwest.f36917vf-cgu.15:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x42): undefined reference to sk_pop'
reqwest.f36917vf-cgu.15:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x6d): undefined reference to sk_free' /tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.3.rcgu.o): In function core::ptr::real_drop_in_place':
reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17h8541869b63f84185E+0x4d): undefined reference to sk_pop' reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17h8541869b63f84185E+0x60): undefined reference to sk_pop'
reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17h8541869b63f84185E+0x8f): undefined reference to sk_free' /tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.3.rcgu.o): In function core::ptr::real_drop_in_place':
reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17hbca00f17854cfa86E+0x33): undefined reference to sk_pop' reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17hbca00f17854cfa86E+0x46): undefined reference to sk_pop'
reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17hbca00f17854cfa86E+0x67): undefined reference to sk_free' /tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.3.rcgu.o): In function core::ptr::real_drop_in_place':
reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x2f): undefined reference to sk_pop' reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x42): undefined reference to sk_pop'
reqwest.f36917vf-cgu.3:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x6d): undefined reference to sk_free' /tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.3.rcgu.o): In function reqwest::connect::Connector::new_default_tls':
reqwest.f36917vf-cgu.3:(.text._ZN7reqwest7connect9Connector15new_default_tls17h8d3027f3120d2e3cE+0x257): undefined reference to sk_pop' reqwest.f36917vf-cgu.3:(.text._ZN7reqwest7connect9Connector15new_default_tls17h8d3027f3120d2e3cE+0x26a): undefined reference to sk_pop'
reqwest.f36917vf-cgu.3:(.text._ZN7reqwest7connect9Connector15new_default_tls17h8d3027f3120d2e3cE+0x288): undefined reference to sk_free' reqwest.f36917vf-cgu.3:(.text._ZN7reqwest7connect9Connector15new_default_tls17h8d3027f3120d2e3cE+0x3b5): undefined reference to sk_pop'
reqwest.f36917vf-cgu.3:(.text._ZN7reqwest7connect9Connector15new_default_tls17h8d3027f3120d2e3cE+0x3c8): undefined reference to sk_pop' reqwest.f36917vf-cgu.3:(.text._ZN7reqwest7connect9Connector15new_default_tls17h8d3027f3120d2e3cE+0x3e8): undefined reference to sk_free'
/tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.4.rcgu.o): In function core::ptr::real_drop_in_place': reqwest.f36917vf-cgu.4:(.text._ZN4core3ptr18real_drop_in_place17h03f22d935e3f560bE+0x4d): undefined reference to sk_pop'
reqwest.f36917vf-cgu.4:(.text._ZN4core3ptr18real_drop_in_place17h03f22d935e3f560bE+0x60): undefined reference to sk_pop' reqwest.f36917vf-cgu.4:(.text._ZN4core3ptr18real_drop_in_place17h03f22d935e3f560bE+0x8f): undefined reference to sk_free'
/tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.4.rcgu.o): In function core::ptr::real_drop_in_place': reqwest.f36917vf-cgu.4:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x2f): undefined reference to sk_pop'
reqwest.f36917vf-cgu.4:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x42): undefined reference to sk_pop' reqwest.f36917vf-cgu.4:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x6d): undefined reference to sk_free'
/tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.5.rcgu.o): In function core::ptr::real_drop_in_place': reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17hbca00f17854cfa86E+0x33): undefined reference to sk_pop'
reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17hbca00f17854cfa86E+0x46): undefined reference to sk_pop' reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17hbca00f17854cfa86E+0x67): undefined reference to sk_free'
/tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.5.rcgu.o): In function core::ptr::real_drop_in_place': reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17he55c792f297e5e24E+0x28): undefined reference to sk_pop'
reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17he55c792f297e5e24E+0x3b): undefined reference to sk_pop' reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17he55c792f297e5e24E+0x5d): undefined reference to sk_free'
/tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.5.rcgu.o): In function core::ptr::real_drop_in_place': reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x2f): undefined reference to sk_pop'
reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x42): undefined reference to sk_pop' reqwest.f36917vf-cgu.5:(.text._ZN4core3ptr18real_drop_in_place17hecff3f6f06deb1d7E+0x6d): undefined reference to sk_free'
/tmp/cargo-install4Cfs9h/release/deps/libreqwest-a596dff68d420d29.rlib(reqwest-a596dff68d420d29.reqwest.f36917vf-cgu.5.rcgu.o): In function reqwest::async_impl::client::ClientBuilder::build': reqwest.f36917vf-cgu.5:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17hf413fe8b04345345E+0x2c6): undefined reference to sk_pop'
reqwest.f36917vf-cgu.5:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17hf413fe8b04345345E+0x2d9): undefined reference to sk_pop' reqwest.f36917vf-cgu.5:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17hf413fe8b04345345E+0x2fe): undefined reference to sk_free'
reqwest.f36917vf-cgu.5:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17hf413fe8b04345345E+0xa62): undefined reference to sk_pop' reqwest.f36917vf-cgu.5:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17hf413fe8b04345345E+0xa75): undefined reference to sk_pop'
reqwest.f36917vf-cgu.5:(.text._ZN7reqwest10async_impl6client13ClientBuilder5build17hf413fe8b04345345E+0xa9e): undefined reference to sk_free' /tmp/cargo-install4Cfs9h/release/deps/libnative_tls-6bd62f1981dbd61d.rlib(native_tls-6bd62f1981dbd61d.native_tls.1u6r82qc-cgu.0.rcgu.o): In function native_tls::imp::TlsConnector::new':
native_tls.1u6r82qc-cgu.0:(.text._ZN10native_tls3imp12TlsConnector3new17h6c93eca07e6cb695E+0x484): undefined reference to sk_num' native_tls.1u6r82qc-cgu.0:(.text._ZN10native_tls3imp12TlsConnector3new17h6c93eca07e6cb695E+0x4aa): undefined reference to sk_value'
/tmp/cargo-install4Cfs9h/release/deps/libnative_tls-6bd62f1981dbd61d.rlib(native_tls-6bd62f1981dbd61d.native_tls.1u6r82qc-cgu.2.rcgu.o): In function native_tls::TlsConnectorBuilder::identity': native_tls.1u6r82qc-cgu.2:(.text._ZN10native_tls19TlsConnectorBuilder8identity17hebf2175177689622E+0x43): undefined reference to sk_pop'
native_tls.1u6r82qc-cgu.2:(.text._ZN10native_tls19TlsConnectorBuilder8identity17hebf2175177689622E+0x56): undefined reference to sk_pop' native_tls.1u6r82qc-cgu.2:(.text._ZN10native_tls19TlsConnectorBuilder8identity17hebf2175177689622E+0x78): undefined reference to sk_free'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.0.rcgu.o): In function openssl::ssl::SslMethod::tls': openssl.cdqq66go-cgu.0:(.text._ZN7openssl3ssl9SslMethod3tls17hae668f941a8dc151E+0x2): undefined reference to SSLv23_method'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.0.rcgu.o): In function <openssl::ssl::SslContext as core::clone::Clone>::clone': openssl.cdqq66go-cgu.0:(.text._ZN63_$LT$openssl..ssl..SslContext$u20$as$u20$core..clone..Clone$GT$5clone17h97f995de37326510E+0x24): undefined reference to CRYPTO_add_lock'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.0.rcgu.o): In function openssl::ssl::Ssl::new': openssl.cdqq66go-cgu.0:(.text._ZN7openssl3ssl3Ssl3new17h1ea4689978bace7aE+0x9a): undefined reference to CRYPTO_add_lock'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.15.rcgu.o): In function std::sync::once::Once::call_once::{{closure}}': openssl.cdqq66go-cgu.15:(.text._ZN3std4sync4once4Once9call_once28_$u7b$$u7b$closure$u7d$$u7d$17h5677c6dfbb7094a0E+0x1a): undefined reference to SSL_get_ex_new_index'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.15.rcgu.o): In function std::sync::once::Once::call_once::{{closure}}': openssl.cdqq66go-cgu.15:(.text._ZN3std4sync4once4Once9call_once28_$u7b$$u7b$closure$u7d$$u7d$17h7f9137704afd4bd0E+0x3e): undefined reference to SSL_get_ex_new_index'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.15.rcgu.o): In function core::ops::function::FnOnce::call_once{{vtable-shim}}': openssl.cdqq66go-cgu.15:(.text._ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h2bf8105945cea7d0E+0x3e): undefined reference to SSL_get_ex_new_index'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.15.rcgu.o): In function core::ops::function::FnOnce::call_once{{vtable-shim}}': openssl.cdqq66go-cgu.15:(.text._ZN4core3ops8function6FnOnce40call_once$u7b$$u7b$vtable.shim$u7d$$u7d$17h3a60acbce837a2ffE+0x1a): undefined reference to SSL_get_ex_new_index'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.15.rcgu.o): In function openssl::ssl::connector::SslConnector::builder': openssl.cdqq66go-cgu.15:(.text._ZN7openssl3ssl9connector12SslConnector7builder17h0c046c5b88fa9875E+0x39): undefined reference to SSLeay'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.2.rcgu.o): In function <openssl::x509::X509Ref as alloc::borrow::ToOwned>::to_owned': openssl.cdqq66go-cgu.2:(.text._ZN65_$LT$openssl..x509..X509Ref$u20$as$u20$alloc..borrow..ToOwned$GT$8to_owned17h0b86f3b926f154f6E+0x21): undefined reference to CRYPTO_add_lock'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl-f1d462493160d7b7.rlib(openssl-f1d462493160d7b7.openssl.cdqq66go-cgu.2.rcgu.o): In function <openssl::x509::X509 as core::clone::Clone>::clone': openssl.cdqq66go-cgu.2:(.text._ZN58_$LT$openssl..x509..X509$u20$as$u20$core..clone..Clone$GT$5clone17h162fdad7cc6a69a7E+0x21): undefined reference to CRYPTO_add_lock'
/tmp/cargo-install4Cfs9h/release/deps/libopenssl_sys-870c6348f4aa41df.rlib(openssl_sys-870c6348f4aa41df.openssl_sys.2czsmp8s-cgu.13.rcgu.o): In function std::sync::once::Once::call_once::{{closure}}': openssl_sys.2czsmp8s-cgu.13:(.text._ZN3std4sync4once4Once9call_once28_$u7b$$u7b$closure$u7d$$u7d$17ha5097da62f58cce2E+0x1f): undefined reference to SSL_library_init'
openssl_sys.2czsmp8s-cgu.13:(.text.ZN3std4sync4once4Once9call_once28$u7b$$u7b$closure$u7d$$u7d$17ha5097da62f58cce2E+0x25): undefined reference to SSL_load_error_strings' openssl_sys.2czsmp8s-cgu.13:(.text._ZN3std4sync4once4Once9call_once28_$u7b$$u7b$closure$u7d$$u7d$17ha5097da62f58cce2E+0x2b): undefined reference to OPENSSL_add_all_algorithms_noconf'
openssl_sys.2czsmp8s-cgu.13:(.text.ZN3std4sync4once4Once9call_once28$u7b$$u7b$closure$u7d$$u7d$17ha5097da62f58cce2E+0x31): undefined reference to CRYPTO_num_locks' openssl_sys.2czsmp8s-cgu.13:(.text._ZN3std4sync4once4Once9call_once28_$u7b$$u7b$closure$u7d$$u7d$17ha5097da62f58cce2E+0x220): undefined reference to CRYPTO_set_locking_callback'
openssl_sys.2czsmp8s-cgu.13:(.text.ZN3std4sync4once4Once9call_once28$u7b$$u7b$closure$u7d$$u7d$17ha5097da62f58cce2E+0x23b): undefined reference to `CRYPTO_set_id_callback'
collect2: error: ld returned 1 exit status

error: aborting due to previous error

error: failed to compile spotify-tui v0.6.2, intermediate artifacts can be found at /tmp/cargo-install4Cfs9h

Caused by:
Could not compile spotify-tui.

`

Implement a configuration file (e.g. for keybindings, etc.)

Create a config for easy customization of keybindings, program behaviour, etc. It could be located at $HOME/.config/spotify-tui/config.yml.

The current client configurations could be moved into this configuration too.
E.g

---
client:
  - client_id:
  - client_secret:
  - device_id:
  
keybindings:
  - left: h
  - down: j
  - up: k
  - right: l

Podcast support

Hey, podcasts don't seem to appear. Although playlists of podcasts do, trying to enter them doesn't do anything. Am I right in thinking the aren't supported right now or have I just misconfigured something?

scroll not in view

When moving cursor up and down, it doesn't show selected/highlighted choice when terminal window is resized. I use tmux, and the pane resizes great to fit the proper space, but it doesn't update the scroll buffer of what is visible to select.
I am selecting songs below the visible song list, because they are still selectable in the current scroll buffer from the tmux resize.

Scroll not in view

cargo install spotify-tui fails on Ubuntu 19.10

Hi. First time Rust user so excuse my naivety.

Running cargo install spotify-tui produces:

   ...
   Compiling idna v0.2.0
   Compiling idna v0.1.5
   Compiling want v0.2.0
error: failed to run custom build command for `openssl-sys v0.9.50`

Caused by:
  process didn't exit successfully: `/tmp/cargo-installsXx3mo/release/build/openssl-sys-29b8e6cd7dd78066/build-script-main` (exit code: 101)
--- stdout
cargo:rustc-cfg=const_fn
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=OPENSSL_LIB_DIR
OPENSSL_LIB_DIR unset
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR
OPENSSL_INCLUDE_DIR unset
cargo:rerun-if-env-changed=X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR
X86_64_UNKNOWN_LINUX_GNU_OPENSSL_DIR unset
cargo:rerun-if-env-changed=OPENSSL_DIR
OPENSSL_DIR unset
run pkg_config fail: "Failed to run `\"pkg-config\" \"--libs\" \"--cflags\" \"openssl\"`: No such file or directory (os error 2)"

--- stderr
thread 'main' panicked at '

Could not find directory of OpenSSL installation, and this `-sys` crate cannot
proceed without this knowledge. If OpenSSL is installed and this crate had
trouble finding it,  you can set the `OPENSSL_DIR` environment variable for the
compilation process.

Make sure you also have the development packages of openssl installed.
For example, `libssl-dev` on Ubuntu or `openssl-devel` on Fedora.

If you're in a situation where you think the directory *should* be found
automatically, please open a bug at https://github.com/sfackler/rust-openssl
and include information about your system as well as this message.

$HOST = x86_64-unknown-linux-gnu
$TARGET = x86_64-unknown-linux-gnu
openssl-sys = 0.9.50


It looks like you're compiling on Linux and also targeting Linux. Currently this
requires the `pkg-config` utility to find OpenSSL but unfortunately `pkg-config`
could not be found. If you have OpenSSL installed you can likely fix this by
installing `pkg-config`.

', /home/tim/.cargo/registry/src/github.com-1ecc6299db9ec823/openssl-sys-0.9.50/build/find_normal.rs:150:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

warning: build failed, waiting for other jobs to finish...
error: failed to compile `spotify-tui v0.4.0`, intermediate artifacts can be found at `/tmp/cargo-installsXx3mo`

Caused by:
  build failed

~/work via 🐍 3.6.2 took 3m 25s 
➜ sudo apt-get install libssl-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libssl-dev is already the newest version (1.1.1c-1ubuntu4).
The following packages were automatically installed and are no longer required:
  apache2-utils authbind libapr1 libaprutil1 libecj-java libjaxb-api-java libjetty9-extra-java libjffi-java libjffi-jni libjnr-constants-java libjnr-enxio-java libjnr-ffi-java libjnr-posix-java libjnr-unixsocket-java libjnr-x86asm-java
  libspring-beans-java libspring-core-java libtaglibs-standard-impl-java libtaglibs-standard-spec-java
Use 'sudo apt autoremove' to remove them.
0 to upgrade, 0 to newly install, 0 to remove and 1 not to upgrade.

~/work via 🐍 3.6.2 
➜ openssl version
OpenSSL 1.1.1c  28 May 2019

Looking at sfackler/rust-openssl#1164, it appears that openssl-sys v0.9.50 (which is in your dependency chain?) does not work with OpenSSL 1.1.1

Problem with the last step

Hi everyone, let me get to the point fast

I followed all the steps, included the API credentials that are needed and also whitelisted http://localhost/8888/callback
When the client is running I made sure to check that the port is open.
However, when I go to the authentication link and I login I get INVALID_CLIENT: Invalid client. Even when trying to paste in the URL from this into the tool I get an error.

No device_id selected

I installed spt under Ubuntu 19.04 inside a virtualbox. I was able to connect spt to spotify. E.g. I can see a couple of play lists, I added. But as soon as I tray to play a song, I get the following error message.

Api response: No device_id selected
If you are trying to play a track, make sure the official

spt

$ spt --version
spotify-tui 0.4.0

//EDIT: After I started the spotify desktop app on one of my computers, this computer showed up as a device i can select. After that I can control the playback on that device, but I can't play music where I installed spotify tui. I do have a couple of connected sonos devices here in my network, they don't get detected.

spt2

//EDIT2: Ahaaaaa, when you maximize the terminal with spotify tui some explanations get shown. It's like responsive website. But the problem is, that the wrapping doesn't work properly. With a small window, there's no text at all. If you make the window bigger, the text will be cut. Only when you maximize the terminal application, you'll see the whole text.

spt3

dyld: Symbol not found: __cg_jpeg_resync_to_restart

macOS Mojava 10.14.6, install by brew:

spt

dyld: Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /usr/local/lib/libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
[1]    5267 abort      spt

Can't play tracks through Spotify TUI

Hi, thanks for working on this! Pretty interesting project.

I installed this with cargo (5eaecb0) but for some reason it won't detect that my Spotify Desktop is open and I always end up with this error whenever I try to play a track through TUI:

Api response: Spotify API reported an error
If you are trying to play a track, make sure the official spotify app is open
Press <Esc> to return

However, the TUI displays the current track playing and its position correctly.

Might it be that Spotify API requires a Spotify Premium account for this feature to work?

Connection Refused - Linux

You said it only works for mac, but I want to try in Linux, it seems working but returns an error at the below after facebook log in.

Could not connect: Connection refused.

Windows Installation

Hi,

About spotify-tui windows installation, there is a tutorial to use it?

Greetings

No sound.

No sound.
Using on gnome-terminal in budgie desktop environment on the latest version of Arch Linux.

crash on non-ascii symbols in search input

Application exits on any keypress after first appearance of non-ascii symbol in search bar, like ž, Ф, or 🥰

Steps to reproduce:
Just press / and try to enter any non-ascii character

Version: spotify-tui 0.6.2
Os: Macos 10.15
Terminal: iterm2 Build 3.3.3

thread '<unnamed>' panicked at 'called `Result::unwrap()`

thread '' panicked at 'called Result::unwrap() on an Err value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/libcore/result.rs:999:5
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace.

Interface is slow

Scrolling should be asynchronous and fast, or spt defeats its own utility.

Unable to scroll past first page of songs in playlist

After selecting a playlist, I can only view the first 30 or so songs and can't scroll beyond that. Scrolling using vim keys or arrow keys brings me back to the top of the list, and ctl+d/u doesn't do anything (although I'm not too sure ctl+d/u should do). Hopefully I'm not missing something easy in the help section.

spt: symbol lookup error: spt: undefined symbol: CRYPTO_set_locking_callback

I'm on Ubuntu 19.10 and getting this error

spt: symbol lookup error: spt: undefined symbol: CRYPTO_set_locking_callback
cargo version
cargo 1.38.0 (23ef9a4ef 2019-08-20)

I saw other issues with libssl and I fixed my problems from the recommendations in those tickets but still getting this error.

Here's a quick strace -ff spt I didn't have time to dig into the problem but thought you'd want to know.

$ strace -ff spt | xclip -selection clipboard 
execve("/home/jgarr/.cargo/bin/spt", ["spt"], 0x7ffca3f90b48 /* 78 vars */) = 0
brk(NULL)                               = 0x55ad341f6000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=115558, ...}) = 0
mmap(NULL, 115558, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fbfd3127000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/haswell/x86_64/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls/haswell/x86_64", 0x7ffef831d590) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/haswell/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls/haswell", 0x7ffef831d590) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/x86_64/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls/x86_64", 0x7ffef831d590) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls", 0x7ffef831d590) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/haswell/x86_64/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/haswell/x86_64", 0x7ffef831d590) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/haswell/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/haswell", 0x7ffef831d590) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/x86_64/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/x86_64", 0x7ffef831d590) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libssl.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\260\333\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=585504, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbfd3125000
mmap(NULL, 588080, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfd3095000
mmap(0x7fbfd30b1000, 315392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1c000) = 0x7fbfd30b1000
mmap(0x7fbfd30fe000, 106496, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x69000) = 0x7fbfd30fe000
mmap(0x7fbfd3118000, 53248, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x82000) = 0x7fbfd3118000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libcrypto.so.1.0.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\220\7\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=2925408, ...}) = 0
mmap(NULL, 2940776, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfd2dc7000
mmap(0x7fbfd2e3f000, 1671168, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x78000) = 0x7fbfd2e3f000
mmap(0x7fbfd2fd7000, 577536, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x210000) = 0x7fbfd2fd7000
mmap(0x7fbfd3064000, 188416, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x29c000) = 0x7fbfd3064000
mmap(0x7fbfd3092000, 12136, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fbfd3092000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0000\21\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=18656, ...}) = 0
mmap(NULL, 20752, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfd2dc1000
mmap(0x7fbfd2dc2000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0x7fbfd2dc2000
mmap(0x7fbfd2dc4000, 4096, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fbfd2dc4000
mmap(0x7fbfd2dc5000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fbfd2dc5000
close(3)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2603\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=39880, ...}) = 0
mmap(NULL, 44000, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfd2db6000
mmap(0x7fbfd2db9000, 16384, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fbfd2db9000
mmap(0x7fbfd2dbd000, 8192, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7fbfd2dbd000
mmap(0x7fbfd2dbf000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x8000) = 0x7fbfd2dbf000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200|\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=149840, ...}) = 0
mmap(NULL, 132288, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfd2d95000
mmap(0x7fbfd2d9c000, 61440, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7000) = 0x7fbfd2d9c000
mmap(0x7fbfd2dab000, 20480, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7fbfd2dab000
mmap(0x7fbfd2db0000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a000) = 0x7fbfd2db0000
mmap(0x7fbfd2db2000, 13504, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fbfd2db2000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0203\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=100736, ...}) = 0
mmap(NULL, 103504, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfd2d7b000
mmap(0x7fbfd2d7e000, 69632, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7fbfd2d7e000
mmap(0x7fbfd2d8f000, 16384, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14000) = 0x7fbfd2d8f000
mmap(0x7fbfd2d93000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x17000) = 0x7fbfd2d93000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200l\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2000480, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbfd2d79000
mmap(NULL, 2008696, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfd2b8e000
mmap(0x7fbfd2bb3000, 1519616, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x25000) = 0x7fbfd2bb3000
mmap(0x7fbfd2d26000, 299008, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x198000) = 0x7fbfd2d26000
mmap(0x7fbfd2d6f000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1e0000) = 0x7fbfd2d6f000
mmap(0x7fbfd2d75000, 13944, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fbfd2d75000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\362\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=1365096, ...}) = 0
mmap(NULL, 1364240, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbfd2a40000
mmap(0x7fbfd2a4f000, 679936, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf000) = 0x7fbfd2a4f000
mmap(0x7fbfd2af5000, 618496, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xb5000) = 0x7fbfd2af5000
mmap(0x7fbfd2b8c000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14b000) = 0x7fbfd2b8c000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbfd2a3e000
mmap(NULL, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbfd2a3a000
arch_prctl(ARCH_SET_FS, 0x7fbfd2a3ba40) = 0
mprotect(0x7fbfd2d6f000, 12288, PROT_READ) = 0
mprotect(0x7fbfd2b8c000, 4096, PROT_READ) = 0
mprotect(0x7fbfd2d93000, 4096, PROT_READ) = 0
mprotect(0x7fbfd2db0000, 4096, PROT_READ) = 0
mprotect(0x7fbfd2dbf000, 4096, PROT_READ) = 0
mprotect(0x7fbfd2dc5000, 4096, PROT_READ) = 0
mprotect(0x7fbfd3064000, 180224, PROT_READ) = 0
mprotect(0x7fbfd3118000, 36864, PROT_READ) = 0
writev(2, [{iov_base="spt", iov_len=3}, {iov_base=": ", iov_len=2}, {iov_base="symbol lookup error", iov_len=19}, {iov_base=": ", iov_len=2}, {iov_base="spt", iov_len=3}, {iov_base=": ", iov_len=2}, {iov_base="undefined symbol: CRYPTO_set_loc"..., iov_len=45}, {iov_base="", iov_len=0}, {iov_base="", iov_len=0}, {iov_base="\n", iov_len=1}], 10spt: symbol lookup error: spt: undefined symbol: CRYPTO_set_locking_callback
) = 77
exit_group(127)                         = ?
+++ exited with 127 +++

Unable to authorize

Every time I try to authorize I get INVALID_CLIENT: Invalid redirect URI as a reply from Spotify.

The URL generated by spotify-tui is:
https://accounts.spotify.com/authorize?redirect_uri=http:%2F%2Flocalhost:8888%2Fcallback&client_id=[CLIENT_ID]&response_type=code&state=[STATE]&scope=playlist-read-private%20user-library-modify%20user-library-read%20user-modify-playback-state%20user-read-currently-playing%20user-read-playback-state%20user-read-private%20user-read-recently-played&

This happens independent of browser with the homebrew version on MacOs 10.14.5

Config broken

It seems that after downloading the binary from cargo, I do not have a working config file

Posting a blank config working could solve this issue.

Error: Message("invalid type: unit value, expected struct ClientConfig", Some(Pos { marker: Marker { index: 6, line: 4, col: 0 }, path: "." }))

This is my error message.

Authentication Error. INVALID_CLIENT: Invalid redirect URI

I have followed the instructions in the README and created the file in ~/.config/spotify-tui/client.yml with the correct credentials, and it's being read correctly.

Here is the request being made with important parts removed:

$ spotify-tui
Opened https://accounts.spotify.com/authorize?scope=user-modify-playback-state%20user-read-playback-state%20user-read-private%20user-read-currently-playing%20playlist-read-private%20user-library-read%20user-read-recently-played&client_id=CLIENT_ID&redirect_uri=http:%2F%2Flocalhost:8888%2Fcallback&response_type=code&state=xvlgXiO7MBaweLQ6& in your browser
Enter the URL you were redirected to: 

Here's the error page I get:

image

I'm noticing that the secret isn't included in the request. Should it be?

Navigation in search input can go out of bounds

To replicate, type something into the search box and keep pressing the left arrow key- you can keep going past the first character and overflow off to the right side of the screen. the program usually crashes after other input at this point.

Home and end keys don't work either, but I can forgive that. :)

Installed via cargo on Thursday 10 Oct so apologies if this has been fixed since then.

This program is really awesome- thanks a lot! I'm using it to control the office spotify machine without having to get up ;)

Playback via librespot?

Just gonna leave this here as a suggestion, there exists an on-going effort at an open source Spotify client in Rust over at librespot and there might be some way to collaborate (I'm only a user of librespot though, so don't expect anything from my side).

Duplicate Albums

Some of the albums of an artist are pushed twice. Using Linux Mint 19.1 Tessa.

duplicate

Implement methods to control playback

Would be awsome if you could add next and previous track.

I know that there is some issues with:
"The auth token does not currently automatically refresh - when you leave spotify-tui running for a while, you won't be able to control playback. And you'll need to quit and restart to get it working again."

I had the same issue, i checked if the current token is valid. You could probably do this in a nicer way but when a user signs in the first time you get:

{
 "access_token" : "NgAagA...Um_SHo",
 "expires_in" : "3600",
 "refresh_token" : "NgCXRK...MzYjw"
}

The expires_in tells you when the access_token expires. You can use it to decide when to get a new access_token. Then use the refresh_token to get a new access_token.

You can renew the access_token by using a refresh_token. This token is provided to you when you first make the request to authenticate the user. You should save that refresh_token if you don't already do so. The refresh_token is valid forever but you can't control playback with the refresh_token.

To get a new access_token with the refresh_token: (JavaScript)

    const res = await fetch(
      `${this.baseUrl}/auth/refresh_token?refresh_token=${refreshKey}`,
      {
        method: 'GET'
      }
    );

You will then get a new access_token that you can use to control playback.

Documentation from Spotify on how to use the refresh_token to access a new access_token.

https://developer.spotify.com/documentation/ios/guides/token-swap-and-refresh/

btw, love what you have made! Great work!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.