Changes
1 changed files (+113/-90)
-
-
@@ -119,84 +119,15 @@ }public void start() { this.set_state_file(); // TODO: Make this (and possibly other callbacks) async, so access to GTK will be safe. core.on_restore_complete(() => { if (core.connection == PlacCore.ConnectionState.IDLE) { core.server_selector.on_change(() => { switch (core.server_selector.state) { case PlacCore.ServerSelectorState.REFRESHING: case PlacCore.ServerSelectorState.LOADING: failure_banner.revealed = false; if (error_detail_hid > 0) { failure_banner.disconnect(error_detail_hid); error_detail_hid = 0; } stack.visible_child_name = "loading"; scan_button.set_sensitive(false); break; case PlacCore.ServerSelectorState.NOT_LOADED: break; case PlacCore.ServerSelectorState.LOADED: servers_list.remove_all(); if (core.server_selector.entries.length == 0) { servers_list.visible = false; empty.visible = true; scan_button.add_css_class("suggested-action"); } else { servers_list.visible = true; empty.visible = false; scan_button.remove_css_class("suggested-action"); } foreach (unowned PlacCore.ServerSelectorEntry entry in core.server_selector.entries) { var row = new Adw.ActionRow(); row.title = entry.name; row.subtitle = entry.version; var main_window = new MainWindow(this.application, core); row.activatable_widget = main_window; row.activated.connect(() => { main_window.start(); core.connect(entry.id, entry.id.length, null, 0); this.close(); }); servers_list.append(row); } stack.visible_child_name = "idle"; scan_button.set_sensitive(true); break; case PlacCore.ServerSelectorState.ERR_UNEXPECTED: show_error(ScanErrorKind.UNEXPECTED_ERROR, "Unexpected error"); break; case PlacCore.ServerSelectorState.ERR_NETWORK_UNAVAILABLE: show_error(ScanErrorKind.NETWORK_ERROR, "Network unavailable"); break; case PlacCore.ServerSelectorState.ERR_SOCKET_PERMISSION: show_error(ScanErrorKind.NETWORK_ERROR, "No permission to create UDP socket"); break; case PlacCore.ServerSelectorState.ERR_OUT_OF_MEMORY: show_error(ScanErrorKind.UNEXPECTED_ERROR, "Out of memory"); break; case PlacCore.ServerSelectorState.ERR_SOCKET: show_error(ScanErrorKind.NETWORK_ERROR, "Failed to operate on a socket"); break; case PlacCore.ServerSelectorState.ERR_THREAD_SPAWN: show_error(ScanErrorKind.UNEXPECTED_ERROR, "Unable to spawn a thread"); break; } }); core.server_selector.load(); this.start_scanning(); return; } else if (core.connection == PlacCore.ConnectionState.BUSY) { var window = new MainWindow(application, core); window.start(); this.close(); GLib.Idle.add(() => { this.open_restored_window(); return false; }); } });
-
@@ -209,6 +140,94 @@this.present(); } private void open_restored_window() { var window = new MainWindow(application, core); window.start(); this.close(); return; } private void start_scanning() { core.server_selector.on_change(() => { GLib.Idle.add(() => { this.render(); return false; }); }); core.server_selector.load(); this.render(); } private void render() { switch (core.server_selector.state) { case PlacCore.ServerSelectorState.REFRESHING: case PlacCore.ServerSelectorState.LOADING: failure_banner.revealed = false; if (error_detail_hid > 0) { failure_banner.disconnect(error_detail_hid); error_detail_hid = 0; } stack.visible_child_name = "loading"; scan_button.set_sensitive(false); break; case PlacCore.ServerSelectorState.NOT_LOADED: break; case PlacCore.ServerSelectorState.LOADED: servers_list.remove_all(); if (core.server_selector.entries.length == 0) { servers_list.visible = false; empty.visible = true; scan_button.add_css_class("suggested-action"); } else { servers_list.visible = true; empty.visible = false; scan_button.remove_css_class("suggested-action"); } foreach (unowned PlacCore.ServerSelectorEntry entry in core.server_selector.entries) { var row = new Adw.ActionRow(); row.title = entry.name; row.subtitle = entry.version; var main_window = new MainWindow(this.application, core); row.activatable_widget = main_window; row.activated.connect(() => { main_window.start(); core.connect(entry.id, entry.id.length, null, 0); this.close(); }); servers_list.append(row); } stack.visible_child_name = "idle"; scan_button.set_sensitive(true); break; case PlacCore.ServerSelectorState.ERR_UNEXPECTED: show_error(ScanErrorKind.UNEXPECTED_ERROR, "Unexpected error"); break; case PlacCore.ServerSelectorState.ERR_NETWORK_UNAVAILABLE: show_error(ScanErrorKind.NETWORK_ERROR, "Network unavailable"); break; case PlacCore.ServerSelectorState.ERR_SOCKET_PERMISSION: show_error(ScanErrorKind.NETWORK_ERROR, "No permission to create UDP socket"); break; case PlacCore.ServerSelectorState.ERR_OUT_OF_MEMORY: show_error(ScanErrorKind.UNEXPECTED_ERROR, "Out of memory"); break; case PlacCore.ServerSelectorState.ERR_SOCKET: show_error(ScanErrorKind.NETWORK_ERROR, "Failed to operate on a socket"); break; case PlacCore.ServerSelectorState.ERR_THREAD_SPAWN: show_error(ScanErrorKind.UNEXPECTED_ERROR, "Unable to spawn a thread"); break; } } private void show_error(ScanErrorKind kind, string message) { scan_button.add_css_class("suggested-action");
-
@@ -258,28 +277,32 @@ }public void start() { core.on_connection_change(() => { switch (core.connection) { case PlacCore.ConnectionState.IDLE: idle_render(); break; case PlacCore.ConnectionState.BUSY: test_label.label = "Loading"; break; default: test_label.label = core.connection.to_string(); break; } GLib.Idle.add(() => { this.render(); return false; }); }); this.present(); this.render(); } private void idle_render() { if (core.server == null) { return; } private void render() { switch (core.connection) { case PlacCore.ConnectionState.IDLE: if (core.server == null) { return; } test_label.label = core.server.name; test_label.label = core.server.name; break; case PlacCore.ConnectionState.BUSY: test_label.label = "Loading"; break; default: test_label.label = core.connection.to_string(); break; } } } }
-