From 19dd3b13e2ce0defd76e4e894aaaff354f2fe08e Mon Sep 17 00:00:00 2001 From: Erica Z Date: Wed, 16 Oct 2024 13:02:32 +0200 Subject: [PATCH] api -> subsonic --- src/application.vala | 2 -- src/meson.build | 2 +- src/playbin.vala | 12 ++++++------ src/{api.vala => subsonic.vala} | 30 +++++++++++++++--------------- src/ui/play_queue.blp | 8 ++++---- src/ui/setup.vala | 4 ++-- src/ui/window.vala | 17 +++++++++-------- 7 files changed, 37 insertions(+), 38 deletions(-) rename src/{api.vala => subsonic.vala} (90%) diff --git a/src/application.vala b/src/application.vala index 33fc973..32fe6b3 100644 --- a/src/application.vala +++ b/src/application.vala @@ -1,5 +1,3 @@ -Subsonic public_api; - public class Audrey.Application : Adw.Application { public Application () { Object ( diff --git a/src/meson.build b/src/meson.build index b6dd941..1c74ba7 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,10 +1,10 @@ audrey_sources = [ - 'api.vala', 'application.vala', 'globalconf.vala', 'main.vala', 'mpris.vala', 'playbin.vala', + 'subsonic.vala', 'ui/play_queue.vala', 'ui/setup.vala', 'ui/window.vala', diff --git a/src/playbin.vala b/src/playbin.vala index 0a737ee..9cade75 100644 --- a/src/playbin.vala +++ b/src/playbin.vala @@ -25,14 +25,14 @@ class Playbin : GLib.Object { public PlaybinState state { get; private set; default = PlaybinState.STOPPED; } - public Song? current_song { get; private set; default = null; } + public Subsonic.Song? current_song { get; private set; default = null; } // true if a timer should update the position property private bool update_position = false; public int64 position { get; private set; default = 0; } public int64 duration { get; private set; default = 1; } // if 0, the seekbar vanishes - public Subsonic api { get; set; default = null; } + public Subsonic.Client api { get; set; default = null; } // sent when a new song starts playing // continues: whether the track is a gapless continuation @@ -109,7 +109,7 @@ class Playbin : GLib.Object { // we're in luck, about-to-finish hasn't been triggered yet // we can get away with replacing it if (this.current_position+1 < play_queue.get_n_items ()) { - Song song = (Song) play_queue.get_item (this.current_position+1); + var song = (Subsonic.Song) play_queue.get_item (this.current_position+1); this.next_uri.push (this.api.stream_uri (song.id)); } else { this.next_uri.push (""); @@ -182,7 +182,7 @@ class Playbin : GLib.Object { this.next_gapless = true; } - var now_playing = (Song) play_queue.get_item (this.current_position); + var now_playing = (Subsonic.Song) play_queue.get_item (this.current_position); if (this.api.stream_uri (now_playing.id) == (string) this.playbin.current_uri) { if (continues) { this.current_song = now_playing; @@ -190,7 +190,7 @@ class Playbin : GLib.Object { } if (this.current_position+1 < play_queue.get_n_items ()) { - Song song = (Song) play_queue.get_item (this.current_position+1); + var song = (Subsonic.Song) play_queue.get_item (this.current_position+1); this.next_uri.push (this.api.stream_uri (song.id)); } else { this.next_uri.push (""); @@ -230,7 +230,7 @@ class Playbin : GLib.Object { this.current_position = position; this.playbin.set_state (Gst.State.READY); - var song = (Song) this.play_queue.get_item (position); + var song = (Subsonic.Song) this.play_queue.get_item (position); this.playbin.uri = this.api.stream_uri (song.id); this.playbin.set_state (Gst.State.PLAYING); this.next_gapless = false; diff --git a/src/api.vala b/src/subsonic.vala similarity index 90% rename from src/api.vala rename to src/subsonic.vala index 00fbc20..9d7904e 100644 --- a/src/api.vala +++ b/src/subsonic.vala @@ -1,11 +1,11 @@ -errordomain SubsonicError { +public errordomain Subsonic.Error { BAD_AUTHN, ERROR, } -public delegate void SongCallback (Song song); +public delegate void Subsonic.SongCallback (Song song); -public class Artist : Object, Json.Serializable { +public class Subsonic.Artist : Object { public string index; public string id; public string name { get; private set; } @@ -38,7 +38,7 @@ public class Artist : Object, Json.Serializable { } } -public class Album : Object { +public class Subsonic.Album : Object { public string id; public string name; @@ -53,7 +53,7 @@ public class Album : Object { } } -public class Song : Object { +public class Subsonic.Song : Object { public string id { get; private set; } public string title { get; private set; } public string album { get; private set; } @@ -89,7 +89,7 @@ public class Song : Object { } } -public struct API.PlayQueue { +public struct Subsonic.PlayQueue { public string current; public int64 position; public DateTime changed; @@ -128,7 +128,7 @@ public struct API.PlayQueue { } } -public class Subsonic : Object { +public class Subsonic.Client : Object { public ListStore artist_list; public ListStore album_list; public ListStore song_list; @@ -137,7 +137,7 @@ public class Subsonic : Object { private string url; private string parameters; - public Subsonic.with_token (string url, string username, string token, string salt) { + public Client.with_token (string url, string username, string token, string salt) { this.url = url; this.parameters = @"u=$(Uri.escape_string(username))&t=$(Uri.escape_string(token))&s=$(Uri.escape_string(salt))&v=1.16.1&c=eu.callcc.audrey"; @@ -149,7 +149,7 @@ public class Subsonic : Object { this.song_list = new ListStore (typeof (Song)); } - private void unwrap_response (Json.Reader reader) throws Error { + private void unwrap_response (Json.Reader reader) throws GLib.Error { reader.read_member ("subsonic-response"); reader.read_member ("status"); @@ -157,15 +157,15 @@ public class Subsonic : Object { reader.end_member (); reader.read_member ("error"); reader.read_member ("message"); - throw new SubsonicError.ERROR (reader.get_string_value () ?? "???"); + throw new Subsonic.Error.ERROR (reader.get_string_value () ?? "???"); } reader.end_member(); } - public async void ping () throws Error { + public async void ping () throws GLib.Error { var msg = new Soup.Message ("GET", @"$(this.url)/rest/ping?f=json&$(this.parameters)"); if (msg == null) { - throw new SubsonicError.BAD_AUTHN ("Bad message"); + throw new Subsonic.Error.BAD_AUTHN ("Bad message"); } var bytes = yield this.session.send_and_read_async (msg, Priority.DEFAULT, null); @@ -178,7 +178,7 @@ public class Subsonic : Object { this.unwrap_response (reader); } - public async void scrobble (string id) throws Error { + public async void scrobble (string id) throws GLib.Error { var msg = new Soup.Message ("GET", @"$(this.url)/rest/scrobble?id=$(Uri.escape_string (id))&f=json&$(this.parameters)"); assert (msg != null); @@ -192,7 +192,7 @@ public class Subsonic : Object { this.unwrap_response (reader); } - public async void get_random_songs (string? parameters, SongCallback callback) throws Error { + public async void get_random_songs (string? parameters, SongCallback callback) throws GLib.Error { string str_parameters; if (parameters == null) { str_parameters = ""; @@ -232,7 +232,7 @@ public class Subsonic : Object { return @"$(this.url)/rest/getCoverArt?id=$(Uri.escape_string(id))&$(this.parameters)"; } - public async Gdk.Pixbuf cover_art (string id, Cancellable cancellable) throws Error { + public async Gdk.Pixbuf cover_art (string id, Cancellable cancellable) throws GLib.Error { var msg = new Soup.Message("GET", this.cover_art_uri (id)); assert (msg != null); diff --git a/src/ui/play_queue.blp b/src/ui/play_queue.blp index 246eaec..b19271e 100644 --- a/src/ui/play_queue.blp +++ b/src/ui/play_queue.blp @@ -34,8 +34,8 @@ template $UiPlayQueue: Adw.NavigationPage { template ColumnViewCell { child: Label { halign: start; - label: bind template.item as <$Song>.title; - tooltip-text: bind template.item as <$Song>.title; + label: bind template.item as <$SubsonicSong>.title; + tooltip-text: bind template.item as <$SubsonicSong>.title; ellipsize: end; }; } @@ -50,8 +50,8 @@ template $UiPlayQueue: Adw.NavigationPage { template ColumnViewCell { child: Label { halign: start; - label: bind template.item as <$Song>.artist; - tooltip-text: bind template.item as <$Song>.artist; + label: bind template.item as <$SubsonicSong>.artist; + tooltip-text: bind template.item as <$SubsonicSong>.artist; ellipsize: end; }; } diff --git a/src/ui/setup.vala b/src/ui/setup.vala index 30b2d07..4957a01 100644 --- a/src/ui/setup.vala +++ b/src/ui/setup.vala @@ -29,7 +29,7 @@ public class Ui.Setup : Adw.PreferencesDialog { public string token; public string salt; - public signal void connected (Subsonic api); + public signal void connected (Subsonic.Client api); private static Secret.Schema secret_schema = new Secret.Schema ( "eu.callcc.audrey", @@ -49,7 +49,7 @@ public class Ui.Setup : Adw.PreferencesDialog { string new_token, new_salt; salt_password (this.password, out new_token, out new_salt); - var api = new Subsonic.with_token ( + var api = new Subsonic.Client.with_token ( this.server_url, this.username, new_token, diff --git a/src/ui/window.vala b/src/ui/window.vala index 0370b5e..4681694 100644 --- a/src/ui/window.vala +++ b/src/ui/window.vala @@ -8,6 +8,8 @@ class Ui.Window : Adw.ApplicationWindow { [GtkChild] public unowned Adw.ButtonRow shuffle_all_tracks; private Setup setup; + + private Subsonic.Client api; public int64 position { get; private set; } @@ -25,7 +27,7 @@ class Ui.Window : Adw.ApplicationWindow { public Gdk.Paintable playing_cover_art { get; set; } public Playbin playbin { get; private set; default = new Playbin (); } - public ListStore play_queue_store { get; private set; default = new ListStore (typeof (Song)); } + public ListStore play_queue_store { get; private set; default = new ListStore (typeof (Subsonic.Song)); } public Window (Gtk.Application app) { Object (application: app); @@ -56,6 +58,7 @@ class Ui.Window : Adw.ApplicationWindow { this.setup = new Setup (); this.setup.connected.connect ((api) => { + this.api = api; this.playbin.api = api; this.playbin.now_playing.connect ((continues) => { @@ -70,8 +73,6 @@ class Ui.Window : Adw.ApplicationWindow { this.playbin.select_track (position); }); - public_api = api; - this.shuffle_all_tracks.sensitive = true; this.shuffle_all_tracks.activated.connect (() => { this.shuffle_all_tracks.sensitive = false; @@ -105,9 +106,9 @@ class Ui.Window : Adw.ApplicationWindow { this.cover_art_loading = true; string song_id = playbin.current_song.id; - public_api.cover_art.begin (song_id, this.cancel_loading_art, (obj, res) => { + this.api.cover_art.begin (song_id, this.cancel_loading_art, (obj, res) => { try { - this.playing_cover_art = Gdk.Texture.for_pixbuf (public_api.cover_art.end (res)); + this.playing_cover_art = Gdk.Texture.for_pixbuf (this.api.cover_art.end (res)); this.cover_art_loading = false; } catch (Error e) { if (!(e is IOError.CANCELLED)) { @@ -215,15 +216,15 @@ class Ui.Window : Adw.ApplicationWindow { this.seek_impl (new_position); } - [GtkCallback] private string song_title (Song? song) { + [GtkCallback] private string song_title (Subsonic.Song? song) { return song == null ? "" : song.title; } - [GtkCallback] private string song_artist (Song? song) { + [GtkCallback] private string song_artist (Subsonic.Song? song) { return song == null ? "" : song.artist; } - [GtkCallback] private string song_album (Song? song) { + [GtkCallback] private string song_album (Subsonic.Song? song) { return song == null ? "" : song.album; } }