mirror of
https://github.com/Febbweiss/mopidy-touchscreen.git
synced 2026-03-04 22:25:39 +00:00
Fixed tracks with no info (name, album, artist)
This commit is contained in:
111
mopidy_touchscreen/.idea/workspace.xml
generated
111
mopidy_touchscreen/.idea/workspace.xml
generated
@@ -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,27 +448,6 @@
|
||||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state vertical-scroll-proportion="0.76501304" vertical-offset="532" max-vertical-offset="1185">
|
||||
@@ -463,37 +455,78 @@
|
||||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<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.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.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.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$/library_screen.py">
|
||||
<entry file="file://$PROJECT_DIR$/screen_manager.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="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$/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>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/touch_manager.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.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$/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>
|
||||
</project>
|
||||
|
||||
|
||||
@@ -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].uri)
|
||||
self.play_uri(self.library[clicked-1].uri)
|
||||
else:
|
||||
self.go_inside_directory(self.library[clicked].uri)
|
||||
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:
|
||||
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()
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user