Giter Site home page Giter Site logo

psst's Introduction

Psst

Fast Spotify client with native GUI, without Electron, built in Rust. Very early in development, lacking in features, stability, and general user experience. It is being tested only on Mac so far, but aims for full Windows and Linux support. Contributions welcome!

Screenshot

Linux

Our user-interface library, Druid, has two possible backends to choose from on Linux: GTK and pure X11, with Wayland backend in the works. The default linux backend is GTK. Before building on Linux, make sure the required dependencies are installed, i.e. for Debian:

# apt-get install libssl-dev libgtk-3-dev libcairo2-dev
Building

Development build:

$ git submodule update --recursive --init
$ cargo build

Release build:

$ git submodule update --recursive --init
$ cargo build --release
Running and configuration
$ cd psst-gui
$ cargo run
# Use cargo run --release for the release build.
Roadmap
  • Vorbis track playback
  • Browsing saved albums and tracks
  • Save / unsave albums and tracks
  • Browsing followed playlists
  • Search for artist, albums, and tracks
  • Resilience to network errors
  • Managing playlists
    • Follow / unfollow
    • Add / remove track
    • Reorder tracks
    • Rename playlist
  • Playback queue
  • Audio volume control
  • Audio loudness normalization
  • React to audio output device events
    • Pause after disconnecting headphones
    • Transfer playback after connecting headphones
  • Better caching
    • Cache as much as possibly of WebAPI responses
    • Visualize cache utilization
      • Total cache usage in the config dialog
      • Show time origin of cached data, allow to refresh
  • Media keys control
  • Open Spotify links
  • Trivia on the artist page, Wikipedia links
  • Genre playlists and "For You" content
  • Downloading encrypted tracks
  • Reporting played tracks to Spotify servers
  • OS-specific application bundles
  • Podcast support
  • UI
    • Rethink current design, consider a two-pane layout
      • Left pane for browsing
      • Right pane for current playback
    • Dark theme
    • Detect light/dark OS theme
    • Icon
    • Robust error states, ideally with retry button
    • Correct playback highlight
      • Highlight now-playing track only in the correct album / playlist
      • Keep highlighted track in viewport
    • Paging or virtualized lists for albums and tracks
    • Grid for albums and artists
    • Robust active/inactive menu visualization
    • Save last route and the last playback state
Development

Contributions are very welcome! Project structure:

  • /psst-cli - Example CLI that plays a track. Credentials need to be configured in the code.
  • /psst-core - Core library, takes care of Spotify TCP session, audio file retrieval, decoding, audio output, playback queue, etc.
  • /psst-gui - GUI application built with Druid
  • /psst-protocol - Internal Protobuf definitions used for Spotify communication.
Thanks

This project would not exist without:

  • Big thank you to librespot, the Open Source Spotify client library for Rust. Most of psst-core is directly inspired by the ideas and code of librespot, although with a few differences:
    • Spotify Connect (remote control) is not supported yet.
    • We're completely synchronous, without tokio or other async runtime. I just don't understand the async jungle enough to port librespot from pre-async/await tokio-0.1 code to anything both stable and modern.
    • We're using HTTPS-based CDN audio file retrieval, similar to the official Web client or librespot-java, instead of the older, channel-based approach in librespot.
  • druid native GUI library for Rust.
  • aspotify asynchronous client library for the Spotify Web API.
  • ncspot cross-platform ncurses Spotify client written in Rust, using librespot.

psst's People

Contributors

jpochyla avatar kesefon avatar gokayokyay avatar reynn avatar vv9k avatar

Watchers

James Cloos avatar  avatar

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.