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

This commit is contained in:
9and3r
2014-07-31 21:55:25 +02:00
parent 91d1e94a5e
commit 33199f85ca
7 changed files with 132 additions and 71 deletions

View File

@@ -23,13 +23,25 @@
</component> </component>
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf> <leaf>
<file leaf-file-name="touch_manager.py" pinned="false" current="true" current-in-tab="true"> <file leaf-file-name="main_screen.py" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/touch_manager.py"> <entry file="file://$PROJECT_DIR$/main_screen.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.7444169" vertical-offset="90" max-vertical-offset="1440"> <state vertical-scroll-proportion="-1.6865672" vertical-offset="2572" max-vertical-offset="2895">
<caret line="26" column="12" selection-start-line="26" selection-start-column="12" selection-end-line="26" selection-end-column="12" /> <caret line="179" column="0" selection-start-line="179" selection-start-column="0" selection-end-line="179" selection-end-column="0" />
<folding> <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> </folding>
</state> </state>
</provider> </provider>
@@ -46,13 +58,14 @@
<option name="changedFiles"> <option name="changedFiles">
<list> <list>
<option value="$PROJECT_DIR$/screen_objects.py" /> <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$/menu_screen.py" />
<option value="$PROJECT_DIR$/main_screen.py" />
<option value="$PROJECT_DIR$/list_view.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$/library_screen.py" />
<option value="$PROJECT_DIR$/screen_manager.py" />
<option value="$PROJECT_DIR$/touch_manager.py" /> <option value="$PROJECT_DIR$/touch_manager.py" />
<option value="$PROJECT_DIR$/main_screen.py" />
<option value="$PROJECT_DIR$/tracklist.py" />
</list> </list>
</option> </option>
</component> </component>
@@ -435,27 +448,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/touch_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>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/playlist_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>
</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>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/menu_screen.py"> <entry file="file://$PROJECT_DIR$/menu_screen.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.76501304" vertical-offset="532" max-vertical-offset="1185"> <state vertical-scroll-proportion="0.76501304" vertical-offset="532" max-vertical-offset="1185">
@@ -463,37 +455,78 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/main_screen.py"> <entry file="file://$PROJECT_DIR$/library_screen.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="3.3076923" vertical-offset="0" max-vertical-offset="2640"> <state vertical-scroll-proportion="0.42307693" vertical-offset="645" max-vertical-offset="1200">
<caret line="86" column="48" selection-start-line="86" selection-start-column="48" selection-end-line="86" selection-end-column="48" /> <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> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/list_view.py"> <entry file="file://$PROJECT_DIR$/list_view.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.5" vertical-offset="1020" max-vertical-offset="1545"> <state vertical-scroll-proportion="0.34615386" vertical-offset="720" 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" /> <caret line="62" column="35" selection-start-line="62" selection-start-column="35" selection-end-line="62" selection-end-column="35" />
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/library_screen.py"> <entry file="file://$PROJECT_DIR$/screen_manager.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="2.2692308" vertical-offset="0" max-vertical-offset="1020"> <state vertical-scroll-proportion="0.37220845" vertical-offset="1665" max-vertical-offset="3240">
<caret line="61" column="43" selection-start-line="61" selection-start-column="43" selection-end-line="61" selection-end-column="43" /> <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$/touch_screen.py">
<provider selected="true" editor-type-id="text-editor">
<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> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/touch_manager.py"> <entry file="file://$PROJECT_DIR$/touch_manager.py">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state vertical-scroll-proportion="0.7444169" vertical-offset="90" max-vertical-offset="1440"> <state vertical-scroll-proportion="0.074441686" vertical-offset="405" 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" /> <caret line="29" column="27" selection-start-line="29" selection-start-column="27" selection-end-line="29" selection-end-column="27" />
<folding> <folding>
<element signature="e#0#13#0" expanded="true" /> <element signature="e#0#13#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/playlist_screen.py">
<provider selected="true" editor-type-id="text-editor">
<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$/main_screen.py">
<provider selected="true" editor-type-id="text-editor">
<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$/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>
</entry>
</component> </component>
</project> </project>

View File

@@ -1,4 +1,5 @@
from .list_view import ListView from .list_view import ListView
from .touch_manager import TouchManager
import logging import logging
import mopidy.models import mopidy.models
@@ -44,6 +45,15 @@ class LibraryScreen():
def touch_event(self, touch_event): def touch_event(self, touch_event):
clicked = self.list_view.touch_event(touch_event) clicked = self.list_view.touch_event(touch_event)
if clicked is not None: if clicked is not None:
if touch_event.type == TouchManager.long_click:
if self.current_directory is not None:
if clicked == 0:
self.go_up_directory()
else:
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 self.current_directory is not None:
if clicked == 0: if clicked == 0:
self.go_up_directory() self.go_up_directory()

View File

@@ -57,7 +57,7 @@ class ListView():
self.screen_objects.render(surface) self.screen_objects.render(surface)
def touch_event(self, touch_event): 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) objects = self.screen_objects.get_touch_objects_in_pos(touch_event.current_pos)
if objects is not None: if objects is not None:
for key in objects: for key in objects:

View File

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

View File

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

View File

@@ -39,8 +39,9 @@ class TouchScreen(pykka.ThreadingActor, core.CoreListener):
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
self.running = False 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.running = False
else:
self.screen_manager.event(event) self.screen_manager.event(event)
pygame.quit() pygame.quit()

View File

@@ -1,5 +1,5 @@
from .list_view import ListView from .list_view import ListView
from .main_screen import MainScreen
class Tracklist(): class Tracklist():
@@ -22,7 +22,7 @@ class Tracklist():
self.tracks = self.manager.core.tracklist.tl_tracks.get() self.tracks = self.manager.core.tracklist.tl_tracks.get()
self.tracks_strings = [] self.tracks_strings = []
for tl_track in self.tracks: 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) self.list_view.set_list(self.tracks_strings)
def touch_event(self, touch_event): def touch_event(self, touch_event):