diff options
author | Manuel Kaufmann <humitos@gmail.com> | 2013-01-28 20:30:07 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@gmail.com> | 2013-01-29 13:41:54 (GMT) |
commit | 629d101fb42e03247811afa8c2b817981d9a1255 (patch) | |
tree | 9d9eb7da0cf81b3b16f92a8537b2af308918243b | |
parent | 57461441c9fca6adfb9d08e9f1b8cc8a0d2fed49 (diff) |
Show an Alert when there are missing tracks at startup
If we open an existent playlist from the Journal or we resume an old
instance of Jukebox, it is possible to have some tracks missing. So,
in this case Jukebox shows an Alert.
This feautre was accidentally removed in:
874cae39902b8bfb02c115772b95535519aeb253
Signed-off-by: Manuel Kaufmann <humitos@gmail.com>
-rw-r--r-- | activity.py | 44 | ||||
-rw-r--r-- | playlist.py | 14 |
2 files changed, 52 insertions, 6 deletions
diff --git a/activity.py b/activity.py index 9b41feb..7ad2a4e 100644 --- a/activity.py +++ b/activity.py @@ -33,6 +33,8 @@ from sugar3.graphics.toolbarbox import ToolbarButton from sugar3.activity.widgets import StopButton from sugar3.activity.widgets import ActivityToolbarButton from sugar3.graphics.alert import ErrorAlert +from sugar3.graphics.alert import Alert +from sugar3.graphics.icon import Icon import gi gi.require_version('Gtk', '3.0') @@ -102,6 +104,8 @@ class JukeboxActivity(activity.Activity): self.playlist_widget = PlayList() self.playlist_widget.connect('play-index', self.__play_index_cb) + self.playlist_widget.connect('missing-tracks', + self.__missing_tracks_cb) self.playlist_widget.set_size_request( Gdk.Screen.width() * PLAYLIST_WIDTH_PROP, 0) self.playlist_widget.show() @@ -259,6 +263,46 @@ class JukeboxActivity(activity.Activity): self.remove_alert(self._alert) self.playlist_widget.update() + def __missing_tracks_cb(self, widget, tracks): + self._show_missing_tracks_alert(tracks) + + def _show_missing_tracks_alert(self, tracks): + self._alert = Alert() + title = _('%s tracks not found.') % len(tracks) + self._alert.props.title = title + icon = Icon(icon_name='dialog-cancel') + self._alert.add_button(Gtk.ResponseType.CANCEL, _('Dismiss'), icon) + icon.show() + + icon = Icon(icon_name='dialog-ok') + self._alert.add_button(Gtk.ResponseType.APPLY, _('Details'), icon) + icon.show() + self.add_alert(self._alert) + self._alert.connect( + 'response', self.__missing_tracks_alert_response_cb, tracks) + + def __missing_tracks_alert_response_cb(self, alert, response_id, tracks): + if response_id == Gtk.ResponseType.APPLY: + vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) + vbox.props.valign = Gtk.Align.CENTER + label = Gtk.Label(label='') + label.set_markup(_('<b>Missing tracks</b>')) + vbox.pack_start(label, False, False, 15) + + for track in tracks: + label = Gtk.Label(label=track['path']) + vbox.add(label) + + _missing_tracks = Gtk.ScrolledWindow() + _missing_tracks.add_with_viewport(vbox) + _missing_tracks.show_all() + + self.view_area.append_page(_missing_tracks, None) + + self.view_area.set_current_page(2) + + self.remove_alert(alert) + def _alert_cancel_cb(self, alert, response_id): self.remove_alert(alert) diff --git a/playlist.py b/playlist.py index f04d1be..8068eb7 100644 --- a/playlist.py +++ b/playlist.py @@ -36,10 +36,10 @@ class PlayList(Gtk.ScrolledWindow): __gsignals__ = { 'play-index': (GObject.SignalFlags.RUN_FIRST, None, [int, str]), + 'missing-tracks': (GObject.SignalFlags.RUN_FIRST, None, [object]), } def __init__(self): - self._not_found_files = 0 self._current_playing = 0 self._items = [] @@ -130,18 +130,15 @@ class PlayList(Gtk.ScrolledWindow): else: return False - def get_missing_tracks(self): + def _get_missing_tracks(self): missing_tracks = [] - for track in self._playlist: + for track in self._items: if not track['available']: missing_tracks.append(track) return missing_tracks def _load_m3u_playlist(self, file_path): for uri in self._read_m3u_playlist(file_path): - if not self.check_available_media(uri['path']): - self._not_found_files += 1 - self._add_track(uri['path'], uri['title']) def _load_stream(self, file_path, title=None): @@ -168,6 +165,11 @@ class PlayList(Gtk.ScrolledWindow): # is not a M3U playlist self._load_stream(file_path, title) + missing_tracks = self._get_missing_tracks() + if len(missing_tracks) > 0: + logging.info('%s tracks not found', len(missing_tracks)) + self.emit('missing-tracks', missing_tracks) + def update(self): for tree_item, playlist_item in zip(self.treemodel, self._items): tree_item[2] = self.check_available_media(playlist_item['path']) |