Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Kaufmann <humitos@gmail.com>2013-01-28 20:30:07 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2013-01-29 13:41:54 (GMT)
commit629d101fb42e03247811afa8c2b817981d9a1255 (patch)
tree9d9eb7da0cf81b3b16f92a8537b2af308918243b
parent57461441c9fca6adfb9d08e9f1b8cc8a0d2fed49 (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.py44
-rw-r--r--playlist.py14
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'])