Gtk/Rust native Spotify client for the GNOME desktop.

Overview

Spot

Gtk/Rust native Spotify client for the GNOME desktop. Only works with premium accounts!

Based on librespot.

Spot screenshot

Older demo gif

Installing

Package Maintainer Repo
Download on Flathub xou816 https://github.com/flathub/dev.alextren.Spot
Get it from the Snap Store popey https://github.com/popey/spot-snap
AUR version dpeukert https://gitlab.com/dpeukert/pkgbuilds/tree/main/spot-client

GTK4

The GTK4 port is almost ready :) all future development and contributions should ideally target the gtk4/main branch!

Usage notes

Credentials

It is recommended to install a libsecret compliant keyring application, such as GNOME Keyring (aka seahorse). This will allow saving your password securely between launches.

In GNOME, things should work out of the box. It might be a bit trickier to get it working in other DEs: see this ArchWiki entry for detailed explanations on how to automatically start the daemon with your session.

Bear special attention to the fact that to enable automatic login, you might have to use the same password for your user account and for the keyring, and that the keyring might need to be set as default.

See this comment for more details!

Settings

Spot can also be configured via gsettings if you want to change the audio backend, the song bitrate, etc. A GUI is planned but not available yet.

Seek bar warping

It is possible to click on the seek bar to navigate to that position in a song. If you are having issues with this not working you may have gtk-primary-button-warps-slider set to false. In order to fix this issue set the value to true in your gtk configuration.

Scrobbling

Scrobbling is not supported directly by Spot. However, you can use a tool such a rescrobbled (see #85).

Lyrics

Similarly, Spot does not display lyrics for songs, but you can use osdlyrics (see #226).

Gtk theme

Spot uses the dark theme variant by default; this can be changed using gsettings.

If you are using the flatpak version, don't forget to install your theme with flatpak as well -- even for Adwaita-dark!

See this comment for details.

Features

Only works with premium accounts!

  • playback control (play/pause, prev/next, seeking, shuffle, repeat (none, all, song))
  • selection mode: easily browse and select mutliple tracks to queue them
  • browse your saved albums and playlists
  • search albums and artists
  • view an artist's releases
  • view users' playlists
  • view album info
  • credentials management with Secret Service
  • MPRIS integration

Planned

  • playlist management (creation and edition)
  • liked tracks
  • GNOME search provider?
  • improved search? (track results, )
  • recommendations?

Contributing

Contributions are welcome! If you wish, add yourself to the AUTHORS files when submitting your contribution.

Translating

Translations are managed using gettext and are available in the po/ subdirectory.

Before attempting to edit the potfiles manually, note that nice tools exist to help you work with them (Poedit for instance).

Otherwise, here is a rough overview of how to contribute translations:

  • fork the repository;
  • copy the po/spot.pot file and rename it to match your language code, or edit the relevant po file if it already exists;
  • if needed, add your language code to po/LINGUAS;
  • make sure the Language and Plural-Forms keys are correct;
  • edit the msgstr entries;
  • if you wish, add yourself to the TRANSLATORS file.

If you can't build Spot locally, you may run the spot-snapshots action against your branch from your Github fork (...I think?) to obtain a flatpak debug build.

Building

With GNOME Builder and flatpak

Pre-requisite: install the org.freedesktop.Sdk.Extension.rust-stable SDK extension with flatpak. Builder might do this for you automatically, but it will install an older version; make sure the version installed matches the version of the Freedesktop SDK GNOME uses (at the time of writing: 20.08).

Open the project in GNOME Builder and make the dev.alextren.Spot.development.json configuration active. Then build :)

Manually

Requires Rust (stable), GTK3, and a couple other things. Also requires libhandy1: it is not packaged on all distros at the moment, you might have to build it yourself!

Build dependencies on Ubuntu 20.04 for instance: build-essential pkg-config meson libssl-dev libglib2.0-dev-bin libgtk-3-dev libasound2-dev libpulse-dev.

Then, with meson:

meson target -Dbuildtype=debug -Doffline=false --prefix="$HOME/.local"
ninja install -C target

This will install a .desktop file among other things, and the spot executable will be put in .local/bin (you might want to add it to your path).

To build an optimized release build, use -Dbuildtype=release instead.

Regenerating potfiles

When adding new msgids, don't forget to regenerate/update the potfiles.

ninja spot-pot -C target
ninja spot-update-po -C target

Regenerating sources for flatpak

Using flatpak-cargo-generator.py:

ninja cargo-sources.json -C target

Debugging

Debug builds (flatpak) are available from the master branch on Github (see the spot-snaphots action).

Spot caches images and HTTP responses in ~/.cache/spot.

Spot uses isahc, which uses libcurl, therefore you can set the https_proxy env variable to help with debugging. In debug mode, Spot skips SSL certificate verification.

Comments
  • Details Redesign

    Details Redesign

    Resolves #348

    Uses standard styles where applicable, gives songs more space, uses multipliers of 6 for margins, makes album cover larger, uses real icon for like button, ~~adds an animated playback indicator~~ (#358), ~~makes the entire window scrollable~~ and tries to replicate the boxed-list style for songlist. image image image

    TODO:

    • ~~[ ] Pause playback indicator with the song~~ will be in a followup
    • [x] Make album header adaptive
      • [x] Ditto for playlist
    • [x] Kill custom styles and classes where possible
    • [x] Use boxed-list-ish style on queue and saved songs
      • [ ] ~~Add initial state for queue~~ will be in a followup
    • [x] Ditto for artist view lists
    • [x] Add border and rounded corners to album cover
    • [ ] ~~Add inline release details?~~
    opened by jannuary 37
  • Album info

    Album info

    This pull request focuses on adding a button and ui to albums to display some album info.

    • Added a button in albums to go to the info screen
    • Added a ui to display the info for albums

    The layout is as follows: image

    opened by TotalDarkness-NRF 32
  • 232 show album name in playlists and queue

    232 show album name in playlists and queue

    Addresses #232

    I inserted a column for the album name in the playlist view, as was described in the issue.

    I'm not entirely happy with how the UI looks with it now. I think it would look best if we showed the album name beneath the artist, but I feel like that would be worse since it wastes so much vertical space. I'm attaching a screenshot so we can discuss. image

    Since I am not experienced with both Rust and GTK I'd be happy for any pointers as to what could be improved here, even though this is a small change.

    Thanks for the awesome spotify client!

    opened by abegert 25
  • Adds a status page to Library and Playlists pages.

    Adds a status page to Library and Playlists pages.

    This PR will hopefully fix #305. I'm new to the project and am still getting used to the codebase so I might have edited the wrong files.

    Unresolved stuff

    • What should go in Library's
      • [x] title
      • [x] description
      • [x] icon
    • What should go in Playlists'
      • [x] title
      • [x] description
      • [x] icon
    opened by Diegovsky 23
  • Add more mpris support

    Add more mpris support

    Report all the information from SongDescription to MPRIS, this meant adding album name and art url.

    I would've added more but it seems unecessary to add extra information to SongDescription just for mpris reporting

    opened by Douile 23
  • Update lists, visually merge album header

    Update lists, visually merge album header

    • Don't use .card, use custom style for playlists instead One thing about the previous MR is that .card applies to the entire ListView, including stuff like rounded corners. Herein, I try to recreate the .boxed-list style, applying the style to individual rows.
    • Use AdwClampScrollable In practice, this means that the scrollbar is where it's supposed to be while technically being under ListView ∈ ScrolledWindow rule.
    • Visually merge album header & headerbar Make header revealing/collapsing feel more intentional.

    image

    Resolves #379

    opened by jannuary 22
  • Window to big for PinePhone

    Window to big for PinePhone

    As you can see on the Picture the window is to large if you use the PinePhone in vertical rotation (or normal use). In horizontal rotation it works fine. The PinePhone uses as screen resolution 720 x 1440 px with double scale PhoshUI.

    picture

    bug 
    opened by lqs01 20
  • Two close buttons on elementaryOS

    Two close buttons on elementaryOS

    Describe the bug Two close buttons on elementaryOS

    Screenshots Screenshot from 2022-01-14 16 54 43

    General information:

    • Distribution: elementaryOS 6.1
    • Installation method: Flathub
    • Version: 0.3
    • Device used: Desktop

    Additional context I think these are related.

    bug duplicate 
    opened by AnElementaryUser 16
  • GUI for GSettings

    GUI for GSettings

    I'm working on #142 and trying to create the UI first (see components/settings/) then to integrate it with some structs in src/settings.rs.

    Currently I am stuck at how to handle the AdwPreferencesWindow. I have set up XML file with some widgets, added a button in the user menu, but an empty window is shown:

    image

    opened by sei0o 15
  • Add Russian translation

    Add Russian translation

    Hello! Thanks, for this cool project! I decided to contribute and added support for Russian language.

    If there are any problems, please write under pull request.

    opened by ghost 14
  • Build failure?

    Build failure?

    Describe the bug A clear and concise description of what the bug is. Following the manual build instructions in the README, it seems like everything ran fine. However, I get this message at the end:

    [1/2] Generating spot_gresource with a custom command
    

    It seems like there's suppose to be a second step that never happens? When I go directly to spot/target/src and issue ./spot I get the following error message:

    thread 'main' panicked at 'Could not load resources: Error { domain: g-file-error-quark, code: 4, message: "Failed to open file “/home/barbarossa/.local/share/spot/spot.gresource”: open() failed: No such file or directory" }', src/main.rs:55:10
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    

    To Reproduce Steps to reproduce the behavior: Install dependencies run meson and then ninja commands try to run the spot executable

    Expected behavior Running the spot executable should have everything running fine

    Screenshots If applicable, add screenshots to help explain your problem.

    General information:

    • Distribution: Arch Linux
    • Installation method [e. g. built from source, installed from Flathub...]: Source
    • Version [e.g. 0.1.0]: 0.1.7 (git)
    • Device used [e. g. desktop, phone...]: desktop

    Stack trace: If applicable, run the application from a terminal and paste relevant log output.

    thread 'main' panicked at 'Could not load resources: Error { domain: g-file-error-quark, code: 4, message: "Failed to open file “/home/barbarossa/.local/share/spot/spot.gresource”: open() failed: No such file or directory" }', src/main.rs:55:10
    stack backtrace:
       0:     0x558c5e7096b0 - std::backtrace_rs::backtrace::libunwind::trace::hc8b42b9686bc0d07
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5
       1:     0x558c5e7096b0 - std::backtrace_rs::backtrace::trace_unsynchronized::h839b1b3e096c7094
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
       2:     0x558c5e7096b0 - std::sys_common::backtrace::_print_fmt::h9f36d7c0c192ca75
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/sys_common/backtrace.rs:67:5
       3:     0x558c5e7096b0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::haad7d3f8925bad2e
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/sys_common/backtrace.rs:46:22
       4:     0x558c5e72d2bc - core::fmt::write::h7239b2f9a99358fb
                                   at /build/rust/src/rustc-1.50.0-src/library/core/src/fmt/mod.rs:1078:17
       5:     0x558c5e702055 - std::io::Write::write_fmt::hf8c959f904cf1571
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/io/mod.rs:1517:15
       6:     0x558c5e70b955 - std::sys_common::backtrace::_print::h2c2d9abbb61e574c
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/sys_common/backtrace.rs:49:5
       7:     0x558c5e70b955 - std::sys_common::backtrace::print::h1362a4690ddc5737
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/sys_common/backtrace.rs:36:9
       8:     0x558c5e70b955 - std::panicking::default_hook::{{closure}}::h250793a7822001b5
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/panicking.rs:208:50
       9:     0x558c5e70b4aa - std::panicking::default_hook::h888581adc5c27c77
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/panicking.rs:225:9
      10:     0x558c5e70c0f1 - std::panicking::rust_panic_with_hook::h77f2fa3bf09efb3b
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/panicking.rs:591:17
      11:     0x558c5e70bc37 - std::panicking::begin_panic_handler::{{closure}}::h3cafa059e2851c7f
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/panicking.rs:497:13
      12:     0x558c5e709b6c - std::sys_common::backtrace::__rust_end_short_backtrace::h46c04e54576d0893
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/sys_common/backtrace.rs:141:18
      13:     0x558c5e70bb99 - rust_begin_unwind
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/panicking.rs:493:5
      14:     0x558c5e72aa11 - core::panicking::panic_fmt::hb1f208d1d41afb98
                                   at /build/rust/src/rustc-1.50.0-src/library/core/src/panicking.rs:92:14
      15:     0x558c5e72a833 - core::option::expect_none_failed::h5d536c1ceba4b362
                                   at /build/rust/src/rustc-1.50.0-src/library/core/src/option.rs:1268:5
      16:     0x558c5d2e1ea0 - core::result::Result<T,E>::expect::h99b4e43ee2788aaf
                                   at /build/rust/src/rustc-1.50.0-src/library/core/src/result.rs:933:23
      17:     0x558c5d23a723 - spot::setup_gtk::h6f1c5b8f6b5c75ad
                                   at /home/barbarossa/spot/src/main.rs:54:15
      18:     0x558c5d23a30c - spot::main::h151af790995fc8bb
                                   at /home/barbarossa/spot/src/main.rs:19:5
      19:     0x558c5d21cf6b - core::ops::function::FnOnce::call_once::hd74b7030723ffbc4
                                   at /build/rust/src/rustc-1.50.0-src/library/core/src/ops/function.rs:227:5
      20:     0x558c5d382dde - std::sys_common::backtrace::__rust_begin_short_backtrace::h4067052d650c56ea
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/sys_common/backtrace.rs:125:18
      21:     0x558c5d33fe11 - std::rt::lang_start::{{closure}}::h736c908f18ab0bbb
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/rt.rs:66:18
      22:     0x558c5e70c517 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h5a27e92186d531b9
                                   at /build/rust/src/rustc-1.50.0-src/library/core/src/ops/function.rs:259:13
      23:     0x558c5e70c517 - std::panicking::try::do_call::h8d3a36b2860fc4e2
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/panicking.rs:379:40
      24:     0x558c5e70c517 - std::panicking::try::hefdcf6df93f20790
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/panicking.rs:343:19
      25:     0x558c5e70c517 - std::panic::catch_unwind::h36ddc1c42bb74870
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/panic.rs:396:14
      26:     0x558c5e70c517 - std::rt::lang_start_internal::ha6cc4bb09c664b1a
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/rt.rs:51:25
      27:     0x558c5d33fde7 - std::rt::lang_start::h1a064a3b694e24e5
                                   at /build/rust/src/rustc-1.50.0-src/library/std/src/rt.rs:65:5
      28:     0x558c5d23a97a - main
      29:     0x7f4be5b97b25 - __libc_start_main
      30:     0x558c5d1d30be - _start
      31:                0x0 - <unknown>
    

    Additional context Can this only be used for Gnome? I'm trying to build/run it on Qtile

    bug 
    opened by Barbaross93 14
  • Bump tokio from 1.17.0 to 1.24.1

    Bump tokio from 1.17.0 to 1.24.1

    Bumps tokio from 1.17.0 to 1.24.1.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.24.1

    This release fixes a compilation failure on targets without AtomicU64 when using rustc older than 1.63. (#5356)

    #5356: tokio-rs/tokio#5356

    Tokio v1.24.0

    The highlight of this release is the reduction of lock contention for all I/O operations (#5300). We have received reports of up to a 20% improvement in CPU utilization and increased throughput for real-world I/O heavy applications.

    Fixed

    • rt: improve native AtomicU64 support detection (#5284)

    Added

    • rt: add configuration option for max number of I/O events polled from the OS per tick (#5186)
    • rt: add an environment variable for configuring the default number of worker threads per runtime instance (#4250)

    Changed

    • sync: reduce MPSC channel stack usage (#5294)
    • io: reduce lock contention in I/O operations (#5300)
    • fs: speed up read_dir() by chunking operations (#5309)
    • rt: use internal ThreadId implementation (#5329)
    • test: don't auto-advance time when a spawn_blocking task is running (#5115)

    #5186: tokio-rs/tokio#5186 #5294: tokio-rs/tokio#5294 #5284: tokio-rs/tokio#5284 #4250: tokio-rs/tokio#4250 #5300: tokio-rs/tokio#5300 #5329: tokio-rs/tokio#5329 #5115: tokio-rs/tokio#5115 #5309: tokio-rs/tokio#5309

    Tokio v1.23.1

    This release forward ports changes from 1.18.4.

    Fixed

    • net: fix Windows named pipe server builder to maintain option when toggling pipe mode (#5336).

    #5336: tokio-rs/tokio#5336

    Tokio v1.23.0

    Fixed

    • net: fix Windows named pipe connect (#5208)
    • io: support vectored writes for ChildStdin (#5216)
    • io: fix async fn ready() false positive for OS-specific events (#5231)

    ... (truncated)

    Commits
    • 31c7e82 chore: prepare Tokio v1.24.1 (#5357)
    • 8d8db27 tokio: add load and compare_exchange_weak to loom StaticAtomicU64 (#5356)
    • dfe252d chore: prepare Tokio v1.24.0 release (#5353)
    • 21b233f test: bump version of async-stream (#5347)
    • 7299304 Merge branch 'tokio-1.23.x' into master
    • 1a997ff chore: prepare Tokio v1.23.1 release
    • a8fe333 Merge branch 'tokio-1.20.x' into tokio-1.23.x
    • ba81945 chore: prepare Tokio 1.20.3 release
    • 763bdc9 ci: run WASI tasks using latest Rust
    • 9f98535 Merge remote-tracking branch 'origin/tokio-1.18.x' into fix-named-pipes-1.20
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • sync/add local files

    sync/add local files

    I'm not a gnome developer, so I wouldn't estimate the amount of work it would take, but the ability to synchronize local files would be very useful. Spot is very nice to use and not being constrained to the spotify catalog would make it THE music player.

    Thank you for taking the time to read this issue, I have some basic rust if you take the time to work on it I would be happy to participate

    opened by infdev-fil 0
  • [Feature request] YouTube music backend

    [Feature request] YouTube music backend

    Hey, I really like the interface and usage of spot. Could it be possible to add an alternative YouTube Music backend? In this case you don't need any registered account or premium membership. There's already a gtk youtube music client over here https://github.com/misterhat/youtube-music-gtk

    Best regards Jonas

    bug 
    opened by onny 0
  • Bump gio from 0.15.7 to 0.16.7

    Bump gio from 0.15.7 to 0.16.7

    Bumps gio from 0.15.7 to 0.16.7.

    Release notes

    Sourced from gio's releases.

    0.16.7

    Paolo Borelli (1):
          examples: spawn async gio task on the current thread context
    

    Sebastian Dröge (2): Fix various new beta clippy warnings Update versions to 0.16.7

    0.16.6

    Bilal Elmoussaoui (1):
          gio: Add a GioInfallibleFuture
    

    Sebastian Dröge (6): glib: Implement IntoGlibPtr for Option&lt;T&gt; glib: Implement From&lt;&amp;GStr&gt; and From&lt;GString&gt; for Cow&lt;GStr&gt; glib: Fix docs typo Update versions to 0.16.6

    0.16.5

    Bilal Elmoussaoui (3):
          pango: Auto generate Language
          pango: Manually implement Language::to_string & Language::default
          Bump release to 0.16.5
    

    Sebastian Dröge (2): pango: Make pango::Language::from_string() infallible

    ranfdev (1): Add CastNone trait (#843)

    0.16.4

    Bilal Elmoussaoui (4):
          gdk-pixbuf: Add PixbufAnimation subclassing support
          gdk-pixbuf: Correct PixbufAnimationIter definition
          gdk-pixbuf: Add PixbufAnimationIter subclassing support
          gdk-pixbuf: Add PixbufLoader subclassing support
    

    Colin Walters (1): glib: Add a doc string for as_ptr generated impls

    Jason Francis (2): glib: fix undefined behavior in types::register_type update windows CI to glib 2.74 </tr></table>

    ... (truncated)

    Commits
    • d232903 Update versions to 0.16.7
    • 5a21d6e Merge pull request #864 from sdroege/0.16-backports
    • c0c7148 examples: spawn async gio task on the current thread context
    • 1b3a34b Fix various new beta clippy warnings
    • 5b15f33 Update versions to 0.16.6
    • dbd065a Merge pull request #858 from sdroege/0.16-backports
    • 6ded5e3 glib: Fix docs typo
    • d31771e glib: Implement From\<&GStr> and From\<GString> for Cow\<GStr>
    • d593895 glib: Implement IntoGlibPtr for Option\<T>
    • b0098e2 Merge pull request #849 from gtk-rs/bilelmoussaoui/gio-infaliable-future
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump gdk-pixbuf from 0.15.6 to 0.16.7

    Bump gdk-pixbuf from 0.15.6 to 0.16.7

    Bumps gdk-pixbuf from 0.15.6 to 0.16.7.

    Release notes

    Sourced from gdk-pixbuf's releases.

    0.16.7

    Paolo Borelli (1):
          examples: spawn async gio task on the current thread context
    

    Sebastian Dröge (2): Fix various new beta clippy warnings Update versions to 0.16.7

    0.16.6

    Bilal Elmoussaoui (1):
          gio: Add a GioInfallibleFuture
    

    Sebastian Dröge (6): glib: Implement IntoGlibPtr for Option&lt;T&gt; glib: Implement From&lt;&amp;GStr&gt; and From&lt;GString&gt; for Cow&lt;GStr&gt; glib: Fix docs typo Update versions to 0.16.6

    0.16.5

    Bilal Elmoussaoui (3):
          pango: Auto generate Language
          pango: Manually implement Language::to_string & Language::default
          Bump release to 0.16.5
    

    Sebastian Dröge (2): pango: Make pango::Language::from_string() infallible

    ranfdev (1): Add CastNone trait (#843)

    0.16.4

    Bilal Elmoussaoui (4):
          gdk-pixbuf: Add PixbufAnimation subclassing support
          gdk-pixbuf: Correct PixbufAnimationIter definition
          gdk-pixbuf: Add PixbufAnimationIter subclassing support
          gdk-pixbuf: Add PixbufLoader subclassing support
    

    Colin Walters (1): glib: Add a doc string for as_ptr generated impls

    Jason Francis (2): glib: fix undefined behavior in types::register_type update windows CI to glib 2.74 </tr></table>

    ... (truncated)

    Commits
    • d232903 Update versions to 0.16.7
    • 5a21d6e Merge pull request #864 from sdroege/0.16-backports
    • c0c7148 examples: spawn async gio task on the current thread context
    • 1b3a34b Fix various new beta clippy warnings
    • 5b15f33 Update versions to 0.16.6
    • dbd065a Merge pull request #858 from sdroege/0.16-backports
    • 6ded5e3 glib: Fix docs typo
    • d31771e glib: Implement From\<&GStr> and From\<GString> for Cow\<GStr>
    • d593895 glib: Implement IntoGlibPtr for Option\<T>
    • b0098e2 Merge pull request #849 from gtk-rs/bilelmoussaoui/gio-infaliable-future
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(0.3.2)
  • 0.3.2(Mar 28, 2022)

    What's Changed

    • save tracks to library
    • basic Spotify URI handling (thanks @bbb651!)
    • settings dialog (thanks @sei0o!)
    • brand new icon (thanks @bertob!)
    • bug fixes

    New Contributors

    • @keringar made their first contribution in https://github.com/xou816/spot/pull/440
    • @fbabetto made their first contribution in https://github.com/xou816/spot/pull/446
    • @ChrisLane made their first contribution in https://github.com/xou816/spot/pull/455
    • @bertob made their first contribution in https://github.com/xou816/spot/pull/483

    Full Changelog: https://github.com/xou816/spot/compare/0.3.1...0.3.2

    Source code(tar.gz)
    Source code(zip)
  • 0.3.1(Jan 24, 2022)

    Bugfix release:

    • fix a startup crash with some locales (thanks @jakubiszon26!)
    • fix a crash when attempting to view some users' profile (thanks @juxuanu!)
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Jan 13, 2022)

    What's new

    There has been no release for a while, but this one packs quite a few features:

    • redesigned several parts of the application: headers, selection tools, library, album view... (thanks @jannuary!)
    • many, many, many more subtle design changes and tweaks still owed to @jannuary
    • playlists are now accessible from the sidebar (thanks @abegert!)
    • the album art is visible for individual songs, and the release year is visible for albums (thanks @abegert and @sei0o!)
    • volume control over MPRIS (thanks @Diegovsky!)
    • as always, updated translations for yet more languages; thanks to the many people involved on POEditor!

    Thank you so much to everyone involved for this release, including those I could not mention. If you're willing to contribute, do not hesitate to seek advice from those trusted contributors, and be sure to direct your UX questions towards @jannuary (as long as they're fine with it!).

    New Contributors

    • @abegert made their first contribution in https://github.com/xou816/spot/pull/333
    • @gostsdmitry made their first contribution in https://github.com/xou816/spot/pull/385
    • @mentos1386 made their first contribution in https://github.com/xou816/spot/pull/396

    Full Changelog: https://github.com/xou816/spot/compare/0.2.2...0.3.0

    Source code(tar.gz)
    Source code(zip)
  • 0.2.2(Nov 10, 2021)

    What's Changed

    • Set accent color to green by @jannuary in https://github.com/xou816/spot/pull/353
    • Add tooltips to playback controls by @xRMG412 in https://github.com/xou816/spot/pull/352
    • Add check for zero in "next_index" by @xRMG412 in https://github.com/xou816/spot/pull/357
    • Automatically try other ports in case of timeouts by @sei0o in https://github.com/xou816/spot/pull/363

    New Contributors

    • @xRMG412 made their first contribution in https://github.com/xou816/spot/pull/352

    Full Changelog: https://github.com/xou816/spot/compare/0.2.1...0.2.2

    Source code(tar.gz)
    Source code(zip)
  • 0.2.1(Oct 17, 2021)

    What's Changed

    • Add --device=dri so GTK4 can access GPU by @Alexmitter in https://github.com/xou816/spot/pull/288
    • Adding Purism's custom FormFactor specification by @1peter10 in https://github.com/xou816/spot/pull/293
    • #129: clear saved credentials when login fails by @xou816 in https://github.com/xou816/spot/pull/320
    • #311: parse track=null by @xou816 in https://github.com/xou816/spot/pull/319
    • set a specific revision of libadwaita by @xou816 in https://github.com/xou816/spot/pull/330
    • Adds a status page to Library and Playlists pages. by @Diegovsky in https://github.com/xou816/spot/pull/315
    • #240: load all tracks for long albums by @xou816 in https://github.com/xou816/spot/pull/331
    • Added ap-port option to gsettings by @sei0o in https://github.com/xou816/spot/pull/339
    • saved tracks by @xou816 in https://github.com/xou816/spot/pull/335
    • Added info about Caps Lock in login screen by @przebor in https://github.com/xou816/spot/pull/345

    New Contributors

    • @Alexmitter made their first contribution in https://github.com/xou816/spot/pull/289
    • @igor-dyatlov made their first contribution in https://github.com/xou816/spot/pull/290
    • @1peter10 made their first contribution in https://github.com/xou816/spot/pull/293
    • @Diegovsky made their first contribution in https://github.com/xou816/spot/pull/315
    • @sei0o made their first contribution in https://github.com/xou816/spot/pull/339
    • @przebor made their first contribution in https://github.com/xou816/spot/pull/345

    Full Changelog: https://github.com/xou816/spot/compare/0.2.0...0.2.1

    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Aug 24, 2021)

  • 0.1.16(Aug 17, 2021)

    What's new:

    • added a new album info modal with full release details (thanks TotalDarkness-NRF!)
    • improved player controls: added the ability to repeat a single track or the whole queue (thanks TotalDarkness-NRF!)
    • improved login credentials management: (re)use auth token when possible instead of always using email and password (thanks nn1ks!)
    • MPRIS fixes: raising the player is now properly implemented (thanks eladyn!)
    • ...actually fix an issue with playlists not being modifiable when login in with email

    Special thanks to TotalDarkness-NRF for contributing several major features for this version.

    Source code(tar.gz)
    Source code(zip)
  • 0.1.15(Jun 30, 2021)

    What's new:

    • ability to remove tracks from writable playlists
    • improved login error handling
    • fixed an issue with playlists not being modifiable when login in with email
    • MPRIS: the desktop entry for Spot is now properly referenced (thanks nicolasfella!)
    • quality: various clippy fixes (thanks nn1ks!)
    • new translations: Turkish, Indonesian and Brazilian Portuguese (thanks YusufOzmen01, cho2 and lucraraujo, as well as ondras12345 for the reviews!)
    Source code(tar.gz)
    Source code(zip)
  • 0.1.14(May 9, 2021)

    What's new:

    • long playlists are now handled (somewhat) properly, although this has some drawbacks (shuffling isn't so random...)
    • the MPRIS implementation now supports seeking, and should report the proper album art and album name; thanks Douile!
    • selection tools now allow adding to a playlist (not yet removing, though)
    • Russian translation

    Thanks to all contributors, translators and bug reporters!

    Source code(tar.gz)
    Source code(zip)
  • 0.1.13(Apr 12, 2021)

    What's new:

    • new selection tools: move tracks up and down in queue, quickly select multiple tracks from current view...
    • touch and hold a song list (or right click) to enter selection mode
    • Portuguese translation
    • fixed session restoration requiring manually repeating last action after a long period of inactivity
    • fixed parsing for playlists with local tracks
    Source code(tar.gz)
    Source code(zip)
  • 0.1.12(Apr 5, 2021)

    What's new:

    • browse users' playlists by clicking on their name in playlists you follow (thanks a bunch, Douile!)
    • Catalan, Czech, Polish and Spanish translations; thanks to all the translators involved!
    Source code(tar.gz)
    Source code(zip)
  • 0.1.11(Mar 17, 2021)

    This release fixes the broken "Search" icon, and adds French, German and Dutch translations. Thanks to all translators for their contribution!

    Source code(tar.gz)
    Source code(zip)
  • 0.1.10(Mar 17, 2021)

    New features:

    • redesigned seekbar, login dialog and search (type from any screen to start a search)
    • song durations in playlist widgets (thanks realJavabot!)
    • play queue management (queue/dequeue/clear queue)
    • selection mode: enter selection mode to easily queue multiple tracks
    • keyboards shortcuts
    • various playback options through GSettings (no GUI yet)
    Source code(tar.gz)
    Source code(zip)
  • 0.1.9(Mar 2, 2021)

    Important note to packagers

    This release changes the cache location to avoid clashing with existing folders in the user's HOME. Old files in ~/.cache/net and ~/.cache/img (new location: ~/.cache/spot/{net, img}) are deleted automatically and should not affect user files, but user caution is advised.

    Therefore, a feature can be enabled at build time (enabled by default, meson: -Dfeatures="warn-cache") to present the user with a confirmation dialog.

    In sandboxed environment, this dialog can be safely hidden (the app cannot write in unwanted locations). The flatpak build therefore disables this feature.

    Source code(tar.gz)
    Source code(zip)
  • 0.1.5(Feb 15, 2021)

  • 0.1.4(Feb 7, 2021)

  • 0.1.3(Jan 10, 2021)

  • 0.1.2(Jan 24, 2021)

    New features:

    • improved playlist widget, added menu to jump from "Now playing" to related albums
    • added in-app notifications for some errors

    Fixes:

    • fixed an issue where songs would be skipped in a playlist when autoplaying
    • fixed character encoding in search queries
    Source code(tar.gz)
    Source code(zip)
  • 0.1.1(Jan 21, 2021)

Owner
Alexandre Trendel
Alexandre Trendel
ncspot is a ncurses Spotify client written in Rust using librespot.

ncspot is a ncurses Spotify client written in Rust using librespot. It is heavily inspired by ncurses MPD clients, such as ncmpc. My motivation was to provide a simple and resource friendly alternative to the official client as well as to support platforms that currently don't have a Spotify client, such as the *BSDs.

Henrik Friedrichsen 3.4k Jan 8, 2023
Spotify for the terminal written in Rust 🚀

Spotify TUI A Spotify client for the terminal written in Rust. The terminal in the demo above is using the Rigel theme. Spotify TUI Installation Homeb

Alexander Keliris 14.1k Jan 1, 2023
A Spotify downloader written in rust, which does not require a premium account

DownOnSpot A Spotify downloader written in Rust Disclaimer DownOnSpot was not developed for piracy. It is meant to be used in compliance with DMCA, Se

oSumAtrIX 273 Jan 7, 2023
A spotify daemon

Spotifyd An open source Spotify client running as a UNIX daemon. Spotifyd streams music just like the official client, but is more lightweight and sup

null 8.4k Dec 31, 2022
🎧 a self-hosted Spotify → Discord music bot

Aoede is a Discord music bot that directly streams from Spotify to Discord. The only interface is Spotify itself. Note: a Spotify Premium account is c

Max Isom 159 Dec 29, 2022
code to connect + communicate with a Spotify Car Thing

spotify_carthing_bt A grab-bag of spotify car thing related hacks I'm working on. deskthing-rs A Rust port of https://github.com/relative/deskthing, w

Daniel Prilik 6 Dec 19, 2022
Effortlessly beautify your Spotify playlists with just a single, enchanting script 💫 🎵

harmonia harmonia, effortlessly beautify your Spotify playlists with just a single, enchanting script. ?? ?? HANDLE WITH LOVE: Since harmonia is bloss

Gülce 4 Jun 23, 2023
A multi-threaded GTK 3 application for fetching the lyrics of the current playing song

Lyriek A multi-threaded GTK 3 application for fetching the lyrics of the current playing song. Installation Arch Linux yay -S lyriek Ubuntu apt insta

Bart Willems 18 Feb 9, 2022
A third-party iTunes addon to show the lyrics on the desktop.

iTunes Desktop Lyrics for Windows A third-party iTunes addon to show the lyrics on the desktop. Preview Prerequisites iTunes Usage Download the binary

Jiahao Lu 86 Dec 20, 2022
A third-party iTunes addon to show the lyrics on the desktop.

iLyrics A third-party iTunes addon to show the lyrics on the desktop. Preview Prerequisites iTunes Usage Download the binary or build from source. Run

Jiahao Lu 86 Dec 20, 2022
NekoMC (New Efficient Kitten-oriented MPRIS Client)

a waybar/general component for displaying current song data in bars like waybar and controling players using MPRIS

Insert5StarName 5 Mar 20, 2023
A rust binding for the FMOD library

rust-fmod This is a rust binding for FMOD, the library developped by FIRELIGHT TECHNOLOGIES. FMOD website : www.fmod.org You can also find it on crate

Guillaume Gomez 55 Nov 2, 2022
Easy Api in Rust to play Sounds

ears ears is a simple library to play sounds and music in Rust. Provides an access to the OpenAL spatialization functionality in a simple way. Accepts

Jan Niklas Hasse 82 Jan 1, 2023
Idiomatic Rust bindings for OpenAL 1.1 and extensions (including EFX).

alto alto provides idiomatic Rust bindings for OpenAL 1.1 and extensions (including EFX). WARNING Because Alto interacts with global C state via dynam

null 80 Aug 7, 2022
High-level PortMidi bindings and wrappers for Rust

portmidi-rs High-level PortMidi bindings for Rust. PortMidi website: http://portmedia.sourceforge.net/portmidi/ Installation Add this to your Cargo.to

Philippe Delrieu 69 Dec 1, 2022
Cross-platform audio I/O library in pure Rust

CPAL - Cross-Platform Audio Library Low-level library for audio input and output in pure Rust. This library currently supports the following: Enumerat

null 1.8k Jan 8, 2023
Rust audio playback library

Audio playback library Rust playback library. Playback is handled by cpal. MP3 decoding is handled by minimp3. WAV decoding is handled by hound. Vorbi

null 1.2k Jan 1, 2023
PortAudio bindings and wrappers for Rust.

rust-portaudio PortAudio bindings and wrappers for Rust. PortAudio is a free, cross-platform, open-source, audio I/O library. rust-portaudio is still

null 331 Dec 23, 2022
A music theory guide written in Rust.

Rust Music Theory A library and executable that provides programmatic implementation of the basis of the music theory. Table of Contents Overview Usag

Ozan Kaşıkçı 551 Dec 21, 2022