Rich presence for sharing your music listening activity in your Discord status. Works with any media player on your system. For Windows and Mac (and soon Linux).
This issue tracks the progress on the next release, which features a complete rewrite of the application, to allow showing any media that is currently playing on the user's device. That means not just TIDAL, but also Spotify, the Windows Media Player, foobar2000 or even media from your browser, if you wanted to.
To make this possible the old way of detecting which media is playing (which parsed the window title of the application) is replaced with using the platform's integrated APIs for accessing currently playing media. Coincidentally, each platform (Windows, macOS and Linux) has the capabilities to give us all the information we need and tack media playback over time.
Progress
Minimum viable product (MVP)
[x] Create a new CMake project
[x] Write a component to track media on Mac (using the MediaRemote private framework)
[x] Write a component to track media on Windows (using WinRT)
[x] In preparation of a configuration file, write a first (v1) configuration class, which should later support serialization to JSON
[x] Tie it all together by integrating it with discord-rpc in a main loop, to display the detected and most recently started media and its metadata on the local Discord user's profile via Discord's Rich Presence feature
[x] Retrieve metadata from multiple music APIs to get additional metadata (especially a link the album art): Use the TIDAL API for music being played on TIDAL and the Spotify API for any other media (which APIs are used may be subject to change). Extend the Discord presence to display the album artwork and optionally a link to the song, to listen to it as a button
[x] Create different app icons (detailed app icon, small tray icon and a small tray icon which indicates that the application is showing the current media as a status on Discord)
[x] Implement a simple tray application with Qt6 to change some simple settings (like if the presence is enabled or not) and configure which of the active applications are allowed to be shared on Discord
[x] Switch the tray icon to a different icon when the presence is active, and back to default if it's not
[x] Whitelist a set of applications which are known to only play music (any other application shouldn't be shared by default)
[x] Allow the user to enable or disable certain applications via the tray menu. Whitelisted applications are enabled by default, any other is disabled by default. Store which applications are enabled/disabled in a simple, persistent, plain-text file (which can be easily submitted in the next step)
[x] Implement a feature where people can submit their locally discovered music player identifiers (executable name/bundle identifier) for their platform (Windows, Mac, Linux) to extend the whitelist of media player applications that are enabled by default. Submission can be done with a simple URL that prepopulates a GitHub issue in this repository (with this e.g.)
[x] Add a one-off notification and a button in the tray menu to encourage people to join the Discord server of this application!
[x] Check for new releases in this repository.
[x] Write logs to a file instead of the standard output, so they can be shared easily by the user.
[x] Add "Get this status" button to presence.
[x] Create proper installers for Windows, so people don't have to move it somewhere themselves. The installer should show the license file, which needs to be accepted by the user.
[x] Update README, so newcomers know what this application is about.
Extended
To save some time and get a first release as early as possible, the following features will be implemented after the initial release:
[ ] Refactor, so it compiles and works on Mac. Create Installer for Mac which shows license file.
[ ] Complete the component to track media on Linux (using DBUS/MPRISv2 via playerctl)
[x] Use a JSON config file in the home directory for configuration. Amongst other things, allow configuration for how the Discord Presence is constructed (which metadata goes where). Using fmt seems like a great option here. Enable versioning and migration functions from version to version.
[x] Add an option to open the configuration file from the tray menu for more fine-grained control (amongst other things) and easy access to the config file (so the user doesn't have to search from it in the file explorer)
[x] Extend the cloned discord-rpc to allow showing buttons
[x] Add proper logging to a file and a button in the tray menu to enable debug logs and to open the logs.
Features
Show any media in your Discord status (given the media player broadcasts media metadata to the system)
Control which applications are shared with Discord and which aren't
Fine-grained control over what the Discord status looks like
Run it on all major platforms (Windows, Mac and Linux)
Version 2.0.0 has been released, all of the relevant TODOs for that version have been implemented, the rest will be tracked in the Roadmap, other issues and the project board.
This issue tracks the progress on the next release, which features a complete rewrite of the application, to allow showing any media that is currently playing on the user's device. That means not just TIDAL, but also Spotify, the Windows Media Player, foobar2000 or even media from your browser, if you wanted to.
To make this possible the old way of detecting which media is playing (which parsed the window title of the application) is replaced with using the platform's integrated APIs for accessing currently playing media. Coincidentally, each platform (Windows, macOS and Linux) has the capabilities to give us all the information we need and tack media playback over time.
Progress
Minimum viable product (MVP)
Extended
To save some time and get a first release as early as possible, the following features will be implemented after the initial release:
Features