From ca7f01091a2f613d69e2899d89804d1f7d356383 Mon Sep 17 00:00:00 2001 From: 9and3r <9and3r@gmail.com> Date: Sat, 11 Jul 2015 00:21:06 +0200 Subject: [PATCH] Fix streams --- .../graphic_utils/screen_objects.py | 6 ++ mopidy_touchscreen/screen_manager.py | 4 + mopidy_touchscreen/screens/main_screen.py | 102 ++++++++++-------- mopidy_touchscreen/touch_screen.py | 3 + 4 files changed, 70 insertions(+), 45 deletions(-) diff --git a/mopidy_touchscreen/graphic_utils/screen_objects.py b/mopidy_touchscreen/graphic_utils/screen_objects.py index 01a1871..e88fe48 100644 --- a/mopidy_touchscreen/graphic_utils/screen_objects.py +++ b/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] diff --git a/mopidy_touchscreen/screen_manager.py b/mopidy_touchscreen/screen_manager.py index 9ab51f5..0809333 100644 --- a/mopidy_touchscreen/screen_manager.py +++ b/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) diff --git a/mopidy_touchscreen/screens/main_screen.py b/mopidy_touchscreen/screens/main_screen.py index 2eca417..36d9e29 100644 --- a/mopidy_touchscreen/screens/main_screen.py +++ b/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 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( + 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: diff --git a/mopidy_touchscreen/touch_screen.py b/mopidy_touchscreen/touch_screen.py index d72ffcc..3fc0092 100644 --- a/mopidy_touchscreen/touch_screen.py +++ b/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)