Răsfoiți Sursa

Fix streams

9and3r 10 ani în urmă
părinte
comite
ca7f01091a

+ 6 - 0
mopidy_touchscreen/graphic_utils/screen_objects.py

@@ -27,6 +27,12 @@ class ScreenObjectsManager:
     def set_touch_object(self, key, add_object):
         self.touch_objects[key] = add_object
 
+    def delete_touch_object(self, key):
+        try:
+            del self.touch_objects[key]
+        except KeyError:
+            pass
+
     def get_touch_object(self, key):
         return self.touch_objects[key]
 

+ 4 - 0
mopidy_touchscreen/screen_manager.py

@@ -260,6 +260,10 @@ class ScreenManager():
         self.init_manager(event.size)
         self.update_type = BaseScreen.update_all
 
+    def stream_title_changed(self, title):
+        self.screens[main_screen_index].stream_title_changed(title)
+        self.update_type = BaseScreen.update_all
+
     def open_keyboard(self, input_listener):
         self.keyboard = Keyboard(self.size, self.base_size, self,
                                  self.fonts, input_listener)

+ 58 - 46
mopidy_touchscreen/screens/main_screen.py

@@ -66,15 +66,19 @@ class MainScreen(BaseScreen):
                                100, True)
         self.touch_text_manager.set_touch_object("volume", progress)
         progress.set_value(self.core.playback.volume.get())
+        self.progress_show = False
 
     def should_update(self):
         if len(self.update_keys) > 0:
             return True
         else:
-            track_pos_millis = self.core.playback.time_position.get()
-            new_track_pos = track_pos_millis / 1000
-            if new_track_pos != self.current_track_pos:
-                return True
+            if self.progress_show:
+                track_pos_millis = self.core.playback.time_position.get()
+                new_track_pos = track_pos_millis / 1000
+                if new_track_pos != self.current_track_pos:
+                    return True
+                else:
+                    return False
             else:
                 return False
 
@@ -89,21 +93,21 @@ class MainScreen(BaseScreen):
 
         elif update_type == BaseScreen.update_partial \
                 and self.track is not None:
-            track_pos_millis = self.core.playback.time_position.get()
-            new_track_pos = track_pos_millis / 1000
-
-            if new_track_pos != self.current_track_pos:
-                progress = self.touch_text_manager.get_touch_object(
-                    "time_progress")
-                progress.set_value(track_pos_millis)
-                self.current_track_pos = new_track_pos
-                progress.set_text(
+            if self.progress_show:
+                track_pos_millis = self.core.playback.time_position.get()
+                new_track_pos = track_pos_millis / 1000
+
+                if new_track_pos != self.current_track_pos:
+                    progress = self.touch_text_manager.get_touch_object(
+                        "time_progress")
+                    progress.set_value(track_pos_millis)
+                    self.current_track_pos = new_track_pos
+                    progress.set_text(
                     time.strftime('%M:%S', time.gmtime(
-                        self.current_track_pos)) +
-                    "/" + self.track_duration)
-                progress.render(screen)
-                rects.append(progress.rect_in_pos)
-
+                            self.current_track_pos)) +
+                        "/" + self.track_duration)
+                    progress.render(screen)
+                    rects.append(progress.rect_in_pos)
             for key in self.update_keys:
                 object = self.touch_text_manager.get_object(key)
                 object.update()
@@ -116,8 +120,39 @@ class MainScreen(BaseScreen):
         x = self.size[1] - self.base_size * 3
         width = self.size[0] - self.base_size / 2 - x
 
-        self.track_duration = time.strftime('%M:%S', time.gmtime(
-            track.length / 1000))
+        # Previous track button
+        button = TouchAndTextItem(self.fonts['icon'], u"\ue61c",
+                                  (0, self.size[1] - self.base_size * 2), None)
+        self.touch_text_manager.set_touch_object("previous", button)
+        size_1 = button.get_right_pos()
+
+        size_2 = self.fonts['icon'].size(u"\ue61d")[0]
+        button = TouchAndTextItem(self.fonts['icon'], u"\ue61d",
+                                  (self.size[0] - size_2,
+                                   self.size[1] - self.base_size * 2),
+                                  None)
+        self.touch_text_manager.set_touch_object("next", button)
+
+        if track.length:
+            self.track_duration = time.strftime('%M:%S', time.gmtime(
+                track.length / 1000))
+
+            # Progress
+            progress = Progressbar(self.fonts['base'],
+                               time.strftime('%M:%S', time.gmtime(
+                                   0)) + "/" + time.strftime(
+                                   '%M:%S', time.gmtime(0)),
+                               (size_1, self.size[1] - self.base_size * 2),
+                               (
+                                   self.size[0] - size_1 - size_2,
+                                   self.base_size),
+                               track.length, False)
+            self.touch_text_manager.set_touch_object("time_progress",
+                                                 progress)
+            self.progress_show = True
+        else:
+            self.progress_show = False
+            self.touch_text_manager.delete_touch_object("time_progress")
 
         # Load all artists
         self.artists = []
@@ -155,32 +190,6 @@ class MainScreen(BaseScreen):
             self.update_keys.append("artist_name")
         self.touch_text_manager.set_object("artist_name", label)
 
-        # Previous track button
-        button = TouchAndTextItem(self.fonts['icon'], u"\ue61c",
-                                  (0, self.size[1] - self.base_size * 2), None)
-        self.touch_text_manager.set_touch_object("previous", button)
-        size_1 = button.get_right_pos()
-
-        size_2 = self.fonts['icon'].size(u"\ue61d")[0]
-        button = TouchAndTextItem(self.fonts['icon'], u"\ue61d",
-                                  (self.size[0] - size_2,
-                                   self.size[1] - self.base_size * 2),
-                                  None)
-        self.touch_text_manager.set_touch_object("next", button)
-
-        # Progress
-        progress = Progressbar(self.fonts['base'],
-                               time.strftime('%M:%S', time.gmtime(
-                                   0)) + "/" + time.strftime(
-                                   '%M:%S', time.gmtime(0)),
-                               (size_1, self.size[1] - self.base_size * 2),
-                               (
-                                   self.size[0] - size_1 - size_2,
-                                   self.base_size),
-                               track.length, False)
-        self.touch_text_manager.set_touch_object("time_progress",
-                                                 progress)
-
         self.track = track
         if not self.is_image_in_cache():
             thread = Thread(target=self.download_image)
@@ -189,6 +198,9 @@ class MainScreen(BaseScreen):
             thread = Thread(target=self.load_image)
             thread.start()
 
+    def stream_title_changed(self, title):
+        self.touch_text_manager.get_object("track_name").set_text(title, False)
+
     def get_artist_string(self):
         artists_string = ''
         for artist in self.artists:

+ 3 - 0
mopidy_touchscreen/touch_screen.py

@@ -132,3 +132,6 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
 
     def playlists_loaded(self):
         self.screen_manager.playlists_loaded()
+
+    def stream_title_changed(self, title):
+        self.screen_manager.stream_title_changed(title)