Kaynağa Gözat

Fixed tracks with no info (name, album, artist)

9and3r 11 yıl önce
ebeveyn
işleme
33199f85ca

+ 65 - 32
mopidy_touchscreen/.idea/workspace.xml

@@ -23,13 +23,25 @@
   </component>
   <component name="FileEditorManager">
     <leaf>
-      <file leaf-file-name="touch_manager.py" pinned="false" current="true" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/touch_manager.py">
+      <file leaf-file-name="main_screen.py" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/main_screen.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.7444169" vertical-offset="90" max-vertical-offset="1440">
-              <caret line="26" column="12" selection-start-line="26" selection-start-column="12" selection-end-line="26" selection-end-column="12" />
+            <state vertical-scroll-proportion="-1.6865672" vertical-offset="2572" max-vertical-offset="2895">
+              <caret line="179" column="0" selection-start-line="179" selection-start-column="0" selection-end-line="179" selection-end-column="0" />
               <folding>
-                <element signature="e#0#13#0" expanded="true" />
+                <element signature="e#0#14#0" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="tracklist.py" pinned="false" current="true" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/tracklist.py">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.42307693" vertical-offset="195" max-vertical-offset="585">
+              <caret line="24" column="81" selection-start-line="24" selection-start-column="81" selection-end-line="24" selection-end-column="81" />
+              <folding>
+                <element signature="e#0#31#0" expanded="true" />
               </folding>
             </state>
           </provider>
@@ -46,13 +58,14 @@
     <option name="changedFiles">
       <list>
         <option value="$PROJECT_DIR$/screen_objects.py" />
-        <option value="$PROJECT_DIR$/touch_screen.py" />
-        <option value="$PROJECT_DIR$/screen_manager.py" />
         <option value="$PROJECT_DIR$/menu_screen.py" />
-        <option value="$PROJECT_DIR$/main_screen.py" />
         <option value="$PROJECT_DIR$/list_view.py" />
+        <option value="$PROJECT_DIR$/touch_screen.py" />
         <option value="$PROJECT_DIR$/library_screen.py" />
+        <option value="$PROJECT_DIR$/screen_manager.py" />
         <option value="$PROJECT_DIR$/touch_manager.py" />
+        <option value="$PROJECT_DIR$/main_screen.py" />
+        <option value="$PROJECT_DIR$/tracklist.py" />
       </list>
     </option>
   </component>
@@ -435,61 +448,81 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/touch_screen.py">
+    <entry file="file://$PROJECT_DIR$/menu_screen.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.6818182" vertical-offset="180" max-vertical-offset="1335">
-          <caret line="30" column="23" selection-start-line="30" selection-start-column="23" selection-end-line="30" selection-end-column="23" />
+        <state vertical-scroll-proportion="0.76501304" vertical-offset="532" max-vertical-offset="1185">
+          <caret line="55" column="29" selection-start-line="55" selection-start-column="29" selection-end-line="55" selection-end-column="29" />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/playlist_screen.py">
+    <entry file="file://$PROJECT_DIR$/library_screen.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="555">
-          <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="31" selection-end-column="0" />
+        <state vertical-scroll-proportion="0.42307693" vertical-offset="645" max-vertical-offset="1200">
+          <caret line="54" column="26" selection-start-line="54" selection-start-column="26" selection-end-line="54" selection-end-column="26" />
+          <folding>
+            <element signature="e#0#31#0" expanded="false" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/list_view.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.34615386" vertical-offset="720" max-vertical-offset="1545">
+          <caret line="62" column="35" selection-start-line="62" selection-start-column="35" selection-end-line="62" selection-end-column="35" />
+          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/screen_manager.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="2814" max-vertical-offset="3240">
-          <caret line="218" column="45" selection-start-line="218" selection-start-column="45" selection-end-line="218" selection-end-column="45" />
+        <state vertical-scroll-proportion="0.37220845" vertical-offset="1665" max-vertical-offset="3240">
+          <caret line="133" column="27" selection-start-line="133" selection-start-column="27" selection-end-line="133" selection-end-column="27" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/menu_screen.py">
+    <entry file="file://$PROJECT_DIR$/touch_screen.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.76501304" vertical-offset="532" max-vertical-offset="1185">
-          <caret line="55" column="29" selection-start-line="55" selection-start-column="29" selection-end-line="55" selection-end-column="29" />
+        <state vertical-scroll-proportion="0.719603" vertical-offset="250" max-vertical-offset="1245">
+          <caret line="43" column="21" selection-start-line="43" selection-start-column="21" selection-end-line="43" selection-end-column="21" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/main_screen.py">
+    <entry file="file://$PROJECT_DIR$/touch_manager.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="3.3076923" vertical-offset="0" max-vertical-offset="2640">
-          <caret line="86" column="48" selection-start-line="86" selection-start-column="48" selection-end-line="86" selection-end-column="48" />
+        <state vertical-scroll-proportion="0.074441686" vertical-offset="405" max-vertical-offset="1440">
+          <caret line="29" column="27" selection-start-line="29" selection-start-column="27" selection-end-line="29" selection-end-column="27" />
+          <folding>
+            <element signature="e#0#13#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/list_view.py">
+    <entry file="file://$PROJECT_DIR$/playlist_screen.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.5" vertical-offset="1020" max-vertical-offset="1545">
-          <caret line="86" column="41" selection-start-line="86" selection-start-column="41" selection-end-line="86" selection-end-column="41" />
+        <state vertical-scroll-proportion="0.46153846" vertical-offset="75" max-vertical-offset="555">
+          <caret line="17" column="31" selection-start-line="17" selection-start-column="31" selection-end-line="17" selection-end-column="31" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/library_screen.py">
+    <entry file="file://$PROJECT_DIR$/main_screen.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="2.2692308" vertical-offset="0" max-vertical-offset="1020">
-          <caret line="61" column="43" selection-start-line="61" selection-start-column="43" selection-end-line="61" selection-end-column="43" />
+        <state vertical-scroll-proportion="-1.6865672" vertical-offset="2572" max-vertical-offset="2895">
+          <caret line="179" column="0" selection-start-line="179" selection-start-column="0" selection-end-line="179" selection-end-column="0" />
+          <folding>
+            <element signature="e#0#14#0" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/touch_manager.py">
+    <entry file="file://$PROJECT_DIR$/tracklist.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.7444169" vertical-offset="90" max-vertical-offset="1440">
-          <caret line="26" column="12" selection-start-line="26" selection-start-column="12" selection-end-line="26" selection-end-column="12" />
+        <state vertical-scroll-proportion="0.42307693" vertical-offset="195" max-vertical-offset="585">
+          <caret line="24" column="81" selection-start-line="24" selection-start-column="81" selection-end-line="24" selection-end-column="81" />
           <folding>
-            <element signature="e#0#13#0" expanded="true" />
+            <element signature="e#0#31#0" expanded="true" />
           </folding>
         </state>
       </provider>

+ 20 - 10
mopidy_touchscreen/library_screen.py

@@ -1,4 +1,5 @@
 from .list_view import ListView
+from .touch_manager import TouchManager
 import logging
 import mopidy.models
 
@@ -44,19 +45,28 @@ class LibraryScreen():
     def touch_event(self, touch_event):
         clicked = self.list_view.touch_event(touch_event)
         if clicked is not None:
-            if self.current_directory is not None:
-                if clicked == 0:
-                    self.go_up_directory()
-                else:
-                    if self.library[clicked-1].type == mopidy.models.Ref.TRACK:
-                        self.play_uri(self.library[clicked-1].uri)
+            if touch_event.type == TouchManager.long_click:
+                if self.current_directory is not None:
+                    if clicked == 0:
+                        self.go_up_directory()
                     else:
-                        self.go_inside_directory(self.library[clicked-1].uri)
-            else:
-                if self.library[clicked].type == mopidy.models.Track:
+                        self.play_uri(self.library[clicked-1].uri)
+                else:
                     self.play_uri(self.library[clicked].uri)
+            else:
+                if self.current_directory is not None:
+                    if clicked == 0:
+                        self.go_up_directory()
+                    else:
+                        if self.library[clicked-1].type == mopidy.models.Ref.TRACK:
+                            self.play_uri(self.library[clicked-1].uri)
+                        else:
+                            self.go_inside_directory(self.library[clicked-1].uri)
                 else:
-                    self.go_inside_directory(self.library[clicked].uri)
+                    if self.library[clicked].type == mopidy.models.Track:
+                        self.play_uri(self.library[clicked].uri)
+                    else:
+                        self.go_inside_directory(self.library[clicked].uri)
 
     def play_uri(self, uri):
         self.manager.core.tracklist.clear()

+ 1 - 1
mopidy_touchscreen/list_view.py

@@ -57,7 +57,7 @@ class ListView():
         self.screen_objects.render(surface)
 
     def touch_event(self, touch_event):
-        if touch_event.type == TouchManager.click:
+        if touch_event.type == TouchManager.click or touch_event.type == TouchManager.long_click:
             objects = self.screen_objects.get_touch_objects_in_pos(touch_event.current_pos)
             if objects is not None:
                 for key in objects:

+ 28 - 11
mopidy_touchscreen/main_screen.py

@@ -45,11 +45,11 @@ class MainScreen():
             self.artists.append(artist)
 
         #Track name
-        label = TextItem(self.fonts['base'], track.name, (x, self.base_size * 2), (width, self.size[1]))
+        label = TextItem(self.fonts['base'], MainScreen.get_track_name(track), (x, self.base_size * 2), (width, self.size[1]))
         self.touch_text_manager.set_object("track_name", label)
 
         #Album name
-        label = TextItem(self.fonts['base'], track.album.name, (x, self.base_size * 3), (width, self.size[1]))
+        label = TextItem(self.fonts['base'], MainScreen.get_track_album_name(track), (x, self.base_size * 3), (width, self.size[1]))
         self.touch_text_manager.set_object("album_name", label)
 
         #Artist
@@ -80,15 +80,17 @@ class MainScreen():
             self.load_image()
 
     def get_artist_string(self):
-        artists_strign = ''
+        artists_string = ''
         for artist in self.artists:
-            artists_strign += artist.name + ', '
-        if len(artists_strign) > 2:
-            artists_strign = artists_strign[:-2]
-        return artists_strign
+            artists_string += artist.name + ', '
+        if len(artists_string) > 2:
+            artists_string = artists_string[:-2]
+        elif len(artists_string) == 0:
+            artists_string = "Unknow Artist"
+        return artists_string
 
     def get_image_file_name(self):
-        name = self.track.album.name + '-' + self.get_artist_string()
+        name = MainScreen.get_track_album_name(self.track) + '-' + self.get_artist_string()
         md5name = hashlib.md5(name.encode('utf-8')).hexdigest()
         return md5name
 
@@ -105,7 +107,7 @@ class MainScreen():
         if artist_index < len(self.artists):
             try:
                 safe_artist = urllib.quote_plus(self.artists[artist_index].name)
-                safe_album = urllib.quote_plus(self.track.album.name)
+                safe_album = urllib.quote_plus(MainScreen.get_track_album_name(self.track))
                 url = "http://ws.audioscrobbler.com/2.0/?"
                 params = "method=album.getinfo&api_key=59a04c6a73fb99d6e8996e01db306829&artist=" + safe_artist + "&album=" + safe_album + "&format=json"
                 response = urllib2.urlopen(url + params)
@@ -122,11 +124,11 @@ class MainScreen():
             # There is no cover so it will use all the screen size for the text
             width = self.size[0] - self.base_size
 
-            current = TextItem(self.fonts['base'], self.track.name, (self.base_size / 2, self.base_size * 2),
+            current = TextItem(self.fonts['base'], MainScreen.get_track_name(self.track), (self.base_size / 2, self.base_size * 2),
                                (width, self.base_size))
             self.touch_text_manager.set_object("track_name", current)
 
-            current = TextItem(self.fonts['base'], self.track.album.name, (self.base_size / 2, self.base_size * 3),
+            current = TextItem(self.fonts['base'], MainScreen.get_track_album_name(self.track), (self.base_size / 2, self.base_size * 3),
                                (width, self.base_size))
             self.touch_text_manager.set_object("album_name", current)
 
@@ -168,3 +170,18 @@ class MainScreen():
                     volume = 0
                 self.manager.backend.tell({'action': 'volume', 'value': volume})
                 self.manager.volume_changed(volume)
+
+    @staticmethod
+    def get_track_name(track):
+        if track.name is None:
+            return track.uri
+        else:
+            return track.name
+
+    @staticmethod
+    def get_track_album_name(track):
+        if track.album is not None and track.album.name is not None and len(track.album.name)>0:
+            return track.album.name
+        else:
+            return "Unknow Album"
+

+ 5 - 5
mopidy_touchscreen/touch_manager.py

@@ -28,7 +28,9 @@ class TouchManager():
         self.down_time = -1
 
     def event(self, event):
+
         if event.type == pygame.MOUSEBUTTONUP:
+            logger.error(event.button)
             if event.button == 4:
                 touch_event = TouchEvent(TouchManager.swipe, self.down_pos, self.up_pos, True)
                 touch_event.direction = TouchManager.up
@@ -40,9 +42,9 @@ class TouchManager():
             elif event.button == 1 and self.down_button == 1:
                 touch_event = self.mouse_up(event)
                 return touch_event
-            elif event.button == 2 and self.down_button == 2:
+            elif event.button == 3 and self.down_button == 3:
                 touch_event = TouchEvent(TouchManager.long_click, self.down_pos, self.up_pos, None)
-                return TouchEvent
+                return touch_event
             else:
                 return None
         elif event.type == pygame.MOUSEBUTTONDOWN:
@@ -55,13 +57,11 @@ class TouchManager():
         self.down_time = time.time()
 
     def mouse_up(self, event):
+        logger.error(event.button)
         self.up_pos = event.pos
         if abs(self.down_pos[0] - self.up_pos[0]) < self.max_move_margin:
             if abs(self.down_pos[1] - self.up_pos[1]) < self.max_move_margin:
-                logger.error(time.time())
-                logger.error(self.down_time)
                 if time.time() - TouchManager.long_click_min_time > self.down_time:
-                    logger.error("longpress")
                     return TouchEvent(TouchManager.long_click, self.down_pos, self.up_pos, None)
                 else:
                     return TouchEvent(TouchManager.click, self.down_pos, self.up_pos, None)

+ 3 - 2
mopidy_touchscreen/touch_screen.py

@@ -39,9 +39,10 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
             for event in pygame.event.get():
                 if event.type == pygame.QUIT:
                     self.running = False
-                if event.type == pygame.KEYUP and event.key == pygame.K_q:
+                elif event.type == pygame.KEYUP and event.key == pygame.K_q:
                     self.running = False
-                self.screen_manager.event(event)
+                else:
+                    self.screen_manager.event(event)
         pygame.quit()
 
     def on_start(self):

+ 2 - 2
mopidy_touchscreen/tracklist.py

@@ -1,5 +1,5 @@
 from .list_view import ListView
-
+from .main_screen import MainScreen
 
 class Tracklist():
 
@@ -22,7 +22,7 @@ class Tracklist():
         self.tracks = self.manager.core.tracklist.tl_tracks.get()
         self.tracks_strings = []
         for tl_track in self.tracks:
-            self.tracks_strings.append(tl_track.track.name)
+            self.tracks_strings.append(MainScreen.get_track_name(tl_track.track))
         self.list_view.set_list(self.tracks_strings)
 
     def touch_event(self, touch_event):