System Gen89 @ 2025-07-25-01:02:05 by jonas@monolith

This commit is contained in:
Jonas Röger 2025-07-25 01:02:06 +02:00
parent 7857c36e1c
commit 87e526dec7
4 changed files with 39 additions and 10 deletions

View File

@ -2,6 +2,6 @@
with python3Packages; with python3Packages;
buildPythonApplication { buildPythonApplication {
name = "spotify-shortcuts"; name = "spotify-shortcuts";
propagatedBuildInputs = [spotipy pyxdg]; propagatedBuildInputs = [spotipy pyxdg desktop-notifier];
src = ./.; src = ./.;
} }

View File

@ -1,8 +1,15 @@
{pkgs ? import <nixpkgs> {}}: {pkgs ? import <nixpkgs> {}}: let
pkgs.mkShell { drv = pkgs.callPackage ./derivation.nix {};
packages = [ in
pkgs.pyright pkgs.mkShell {
pkgs.black packages = [
]; pkgs.pyright
inputsFrom = [(pkgs.callPackage ./derivation.nix {})]; pkgs.black
} ];
inputsFrom = [drv];
shellHook = ''
export PYTHONPATH="$PYTHONPATH:$(pwd)"
'';
}

View File

@ -13,6 +13,7 @@ class Config:
cache_file: Path = Path(xdg_cache_home) / Path("spotify-shortcuts.json") cache_file: Path = Path(xdg_cache_home) / Path("spotify-shortcuts.json")
client_id: str | None = None client_id: str | None = None
client_secret: str | None = None client_secret: str | None = None
notifications: bool = True
@staticmethod @staticmethod
def from_file(path: Path): def from_file(path: Path):
@ -48,15 +49,26 @@ def load_config(args: List[str] = argv[1:]) -> Config:
default=Config.client_secret, default=Config.client_secret,
help="Spotify API Client Secret", help="Spotify API Client Secret",
) )
parser.add_argument(
"--config-file",
type=str,
help="Path to a json configuration file with keys clientId and clientSecret",
)
parser.add_argument(
"--no-notifications",
action="store_true",
help="Disable desktop notifications",
)
ns = parser.parse_args(args) ns = parser.parse_args(args)
cfg = Config() cfg = Config()
if (cfg_file := getenv("SPOTIFY_SHORTCUTS_CONFIG", None)) != None: if (cfg_file := ns.config_file or getenv("SPOTIFY_SHORTCUTS_CONFIG", None)) != None:
cfg = Config.from_file(Path(cfg_file)) cfg = Config.from_file(Path(cfg_file))
return Config( return Config(
cache_file=ns.cache_file or cfg.cache_file, cache_file=ns.cache_file or cfg.cache_file,
client_id=ns.client_id or cfg.client_id, client_id=ns.client_id or cfg.client_id,
client_secret=ns.client_secret or cfg.client_secret, client_secret=ns.client_secret or cfg.client_secret,
notifications=not ns.no_notifications or cfg.notifications,
) )

View File

@ -1,5 +1,6 @@
from spotify_shortcuts.spotify_auth import authenticated_session from spotify_shortcuts.spotify_auth import authenticated_session
from spotify_shortcuts.config import load_config from spotify_shortcuts.config import load_config
from desktop_notifier import DesktopNotifierSync
def main(): def main():
@ -16,6 +17,15 @@ def main():
sp.current_user_saved_tracks_add(tracks=[uri]) sp.current_user_saved_tracks_add(tracks=[uri])
if cfg.notifications:
dn = DesktopNotifierSync()
dn.send(
title="Track Liked",
message=f"Track \"{playback.get('item', {}).get('name', '<no-name>')}\" by \"{
", ".join(a.get('name', '<no-name>') for a in playback.get('item', {}).get('artists', []))
}\" has been liked.",
)
if __name__ == "__main__": if __name__ == "__main__":
main() main()