Changes
2 changed files (+106/-96)
-
-
@@ -88,62 +88,101 @@ next_seek = null;} } public PlaybackToolbar() { Object(); } public Plac.AsyncConnection? conn { get { return artwork.conn; } construct { zone_list.row_activated.connect((row) => { this.zone = ((ZoneSelectorRow) row).zone; zone_list_popover.popdown(); this.render(); }); seek.set_increments(1, 10); set { if (artwork.conn != null) { artwork.conn.zones_changed.disconnect(on_zone_change); } settings.settings.bind(Settings.SHOW_SEEK_BY_10SECS, seek_backwards_10, "visible", GET); settings.settings.bind(Settings.SHOW_SEEK_BY_10SECS, seek_forward_10, "visible", GET); this.render(); artwork.conn = value; value.zones_changed.connect(on_zone_change); } } private void dequeue_seek() { var conn = artwork.conn; private void on_zone_change(Plac.Transport.ZoneListEvent event) { foreach (string id in event.removed) { GLib.log("Plac", LEVEL_DEBUG, "Zone id=%s removed", id); if (conn == null || next_seek == null || zone == null) { is_seeking = false; return; if (zone_rows.has_key(id)) { var existing = zone_rows[id]; zone_rows.unset(id); zone_list.remove(existing); } } var position = next_seek; next_seek = null; foreach (Plac.Transport.Zone zone in event.added) { if (zone_rows.has_key(zone.id)) { var existing = zone_rows[zone.id]; existing.zone = zone; existing.render(); } else { var row = new ZoneSelectorRow(zone); zone_rows[zone.id] = row; zone_list.append(row); conn.seek.begin(zone, position, (obj, res) => { var result = conn.seek.end(res); if (zone_id == null) { this.zone = zone; } } } foreach (Plac.Transport.Zone zone in event.changed) { if (zone_rows.has_key(zone.id)) { var existing = zone_rows[zone.id]; existing.zone = zone; existing.render(); } else { var row = new ZoneSelectorRow(zone); zone_rows[zone.id] = row; zone_list.append(row); if (result != OK) { GLib.log("Plac", LEVEL_WARNING, "Failed to seek: %s", result.to_string()); if (zone_id == null) { this.zone = zone; } } } dequeue_seek(); }); } foreach (Plac.Transport.SeekChange change in event.seek_changed) { if (zone_rows.has_key(change.zone_id)) { var zone = zone_rows[change.zone_id].zone; if (zone.now_playing != null) { zone.now_playing.seek_position = change.seek_position; zone.now_playing.has_seek_position = true; } } } private void schedule_seek(int64 position) { next_seek = position; // Selected zone has been removed. if (zone_id != null && !zone_rows.has_key(zone_id)) { this.zone = null; if (!is_seeking) { is_seeking = true; dequeue_seek(); foreach (var entry in zone_rows) { this.zone = entry.value.zone; break; } } this.render(); } public void listen(Plac.AsyncConnection conn) { artwork.conn = conn; public PlaybackToolbar() { Object(); } construct { zone_list.row_activated.connect((row) => { this.zone = ((ZoneSelectorRow) row).zone; zone_list_popover.popdown(); this.render(); }); play.clicked.connect(() => { var row = zone_rows[zone_id]; if (row == null) { if (conn == null || row == null) { return; }
-
@@ -156,7 +195,7 @@ });pause.clicked.connect(() => { var row = zone_rows[zone_id]; if (row == null) { if (conn == null || row == null) { return; }
-
@@ -169,7 +208,7 @@ });prev.clicked.connect(() => { var row = zone_rows[zone_id]; if (row == null) { if (conn == null || row == null) { return; }
-
@@ -182,7 +221,7 @@ });next.clicked.connect(() => { var row = zone_rows[zone_id]; if (row == null) { if (conn == null || row == null) { return; }
-
@@ -210,71 +249,42 @@ seek.set_value(next_value);schedule_seek((int64) next_value); }); conn.zones_changed.connect((event) => { foreach (string id in event.removed) { GLib.log("Plac", LEVEL_DEBUG, "Zone id=%s removed", id); if (zone_rows.has_key(id)) { var existing = zone_rows[id]; zone_rows.unset(id); zone_list.remove(existing); } } seek.set_increments(1, 10); foreach (Plac.Transport.Zone zone in event.added) { if (zone_rows.has_key(zone.id)) { var existing = zone_rows[zone.id]; existing.zone = zone; existing.render(); } else { var row = new ZoneSelectorRow(zone); zone_rows[zone.id] = row; zone_list.append(row); settings.settings.bind(Settings.SHOW_SEEK_BY_10SECS, seek_backwards_10, "visible", GET); settings.settings.bind(Settings.SHOW_SEEK_BY_10SECS, seek_forward_10, "visible", GET); if (zone_id == null) { this.zone = zone; } } } foreach (Plac.Transport.Zone zone in event.changed) { if (zone_rows.has_key(zone.id)) { var existing = zone_rows[zone.id]; existing.zone = zone; existing.render(); } else { var row = new ZoneSelectorRow(zone); zone_rows[zone.id] = row; zone_list.append(row); this.render(); } if (zone_id == null) { this.zone = zone; } } } private void dequeue_seek() { if (conn == null || next_seek == null || zone == null) { is_seeking = false; return; } foreach (Plac.Transport.SeekChange change in event.seek_changed) { if (zone_rows.has_key(change.zone_id)) { var zone = zone_rows[change.zone_id].zone; if (zone.now_playing != null) { zone.now_playing.seek_position = change.seek_position; zone.now_playing.has_seek_position = true; } } } var position = next_seek; next_seek = null; // Selected zone has been removed. if (zone_id != null && !zone_rows.has_key(zone_id)) { this.zone = null; conn.seek.begin(zone, position, (obj, res) => { var result = conn.seek.end(res); foreach (var entry in zone_rows) { this.zone = entry.value.zone; break; } if (result != OK) { GLib.log("Plac", LEVEL_WARNING, "Failed to seek: %s", result.to_string()); } this.render(); dequeue_seek(); }); } private void schedule_seek(int64 position) { next_seek = position; if (!is_seeking) { is_seeking = true; dequeue_seek(); } } private string format_seconds(uint64 secs) {
-
-
-
@@ -167,7 +167,7 @@ error_banner.title = "Connection error (out of memory)";error_banner.revealed = true; }); playback_toolbar.listen(conn); playback_toolbar.conn = conn; conn.activate(); }
-