Changes
2 changed files (+94/-46)
-
-
@@ -44,44 +44,59 @@ </property></object> </child> <property name="content"> <object class="GtkStack" id="root_stack"> <object class="GtkBox"> <property name="orientation">vertical</property> <child> <object class="AdwBanner" id="error_banner"> <property name="title">Connection error</property> <property name="button-label">Reconnect</property> <style> <class name="error" /> </style> </object> </child> <child> <object class="GtkStackPage"> <property name="name">main</property> <property name="child"> <object class="AdwViewStack" id="stack"> <child> <object class="AdwViewStackPage"> <property name="name">playback</property> <property name="title">Playback</property> <property name="icon-name">sound-symbolic</property> <property name="child"> <object class="PlacGtkAdwaitaPlaybackToolbar" id="playback_toolbar" /> </property> </object> </child> <child> <object class="AdwViewStackPage"> <property name="name">library</property> <property name="title">Library</property> <property name="icon-name">library-music-symbolic</property> <property name="child"> <object class="GtkLabel" id="test_label"> <property name="label">Empty</property> <object class="GtkStack" id="root_stack"> <property name="vexpand">true</property> <child> <object class="GtkStackPage"> <property name="name">main</property> <property name="child"> <object class="AdwViewStack" id="stack"> <child> <object class="AdwViewStackPage"> <property name="name">playback</property> <property name="title">Playback</property> <property name="icon-name">sound-symbolic</property> <property name="child"> <object class="PlacGtkAdwaitaPlaybackToolbar" id="playback_toolbar" /> </property> </object> </child> <child> <object class="AdwViewStackPage"> <property name="name">library</property> <property name="title">Library</property> <property name="icon-name">library-music-symbolic</property> <property name="child"> <object class="GtkLabel" id="test_label"> <property name="label">Empty</property> </object> </property> </object> </property> </child> </object> </child> </property> </object> </property> </object> </child> <child> <object class="GtkStackPage"> <property name="name">loading</property> <property name="child"> <object class="PlacGtkAdwaitaServerConnecting" /> </property> </child> <child> <object class="GtkStackPage"> <property name="name">loading</property> <property name="child"> <object class="PlacGtkAdwaitaServerConnecting" /> </property> </object> </child> </object> </child> </object>
-
-
-
@@ -15,6 +15,11 @@ //// SPDX-License-Identifier: Apache-2.0 namespace PlacGtkAdwaita { private errordomain ResolveError { CONNECTION_ERROR, SERVER_NOT_FOUND } [GtkTemplate(ui = "/jp/pocka/plac/gtk-adwaita/ui/main-window.ui")] class MainWindow : Adw.ApplicationWindow { [GtkChild]
-
@@ -25,6 +30,9 @@ private unowned Gtk.Stack root_stack;[GtkChild] private unowned PlaybackToolbar playback_toolbar; [GtkChild] private unowned Adw.Banner error_banner; private Settings settings = new Settings();
-
@@ -51,20 +59,38 @@ Object(application: app);this.server_id = server_id; } construct { error_banner.button_clicked.connect(() => { try_listen(); }); } public void start() { root_stack.visible_child_name = "loading"; try_listen(); this.present(); } private void try_listen() { error_banner.revealed = false; if (conn != null) { listen_events(); } else { resolve_server.begin((obj, res) => { resolve_server.end(res); try { resolve_server.end(res); } catch (ResolveError e) { error_banner.title = e.message; error_banner.revealed = true; return; } listen_events(); }); } this.present(); } private void listen_events() {
-
@@ -82,13 +108,15 @@ settings.connected_server_token = event.token;}); conn.connection_error.connect((event) => { GLib.log("Plac", LEVEL_ERROR, "Failed to connect: %s", event.code.to_string()); // TODO: Display error message GLib.log("Plac", LEVEL_CRITICAL, "Failed to connect: %s", event.code.to_string()); error_banner.title = "Connection error: %s".printf(event.code.to_string()); error_banner.revealed = true; }); conn.out_of_memory_error.connect(() => { GLib.log("Plac", LEVEL_ERROR, "Failed to connect: out of memory"); // TODO: Display error message? GLib.log("Plac", LEVEL_CRITICAL, "Failed to connect: out of memory"); error_banner.title = "Connection error (out of memory)"; error_banner.revealed = true; }); playback_toolbar.listen(conn);
-
@@ -96,23 +124,24 @@conn.activate(); } private async void resolve_server() { private async void resolve_server() throws ResolveError { GLib.SourceFunc callback = resolve_server.callback; ResolveError? error = null; Plac.Discovery.find_async.begin(server_id, (obj, res) => { var result = Plac.Discovery.find_async.end(res); if (result.code != OK) { GLib.log("Plac", LEVEL_ERROR, "Failed to find server: %s", result.code.to_string()); // TODO: Display error message GLib.log("Plac", LEVEL_CRITICAL, "Failed to find server: %s", result.code.to_string()); Idle.add((owned) callback); error = new ResolveError.CONNECTION_ERROR("Failed to connect: %s".printf(result.code.to_string())); return; } if (result.servers.length < 1) { GLib.log("Plac", LEVEL_ERROR, "Server not found: ID=%s", server_id); // TODO: Display error message GLib.log("Plac", LEVEL_CRITICAL, "Server not found: ID=%s", server_id); Idle.add((owned) callback); error = new ResolveError.SERVER_NOT_FOUND("Server not found"); return; }
-
@@ -122,6 +151,10 @@ Idle.add((owned) callback);}); yield; if (error != null) { throw error; } } } }
-