mirror of
https://github.com/SoongNoonien/mpdevil.git
synced 2023-08-10 21:12:44 +03:00
improved displaying of compilation albums
This commit is contained in:
parent
5c2cc71fb3
commit
b3d96f3e9f
165
bin/mpdevil.py
165
bin/mpdevil.py
|
@ -951,64 +951,21 @@ class SongPopover(Gtk.Popover):
|
||||||
# self.treeview.queue_resize()
|
# self.treeview.queue_resize()
|
||||||
|
|
||||||
class SongsView(Gtk.TreeView):
|
class SongsView(Gtk.TreeView):
|
||||||
def __init__(self, client, show_album=True, sort_enable=True):
|
def __init__(self, client, store, file_column_id):
|
||||||
Gtk.TreeView.__init__(self)
|
Gtk.TreeView.__init__(self)
|
||||||
|
self.set_model(store)
|
||||||
self.set_search_column(-1)
|
self.set_search_column(-1)
|
||||||
self.columns_autosize()
|
self.columns_autosize()
|
||||||
|
|
||||||
#add vars
|
#add vars
|
||||||
self.client=client
|
self.client=client
|
||||||
self.songs=[]
|
self.store=store
|
||||||
|
self.file_column_id=file_column_id
|
||||||
#store
|
|
||||||
#(track, title, artist, album, duration, file)
|
|
||||||
self.store=Gtk.ListStore(int, str, str, str, str, str)
|
|
||||||
self.set_model(self.store)
|
|
||||||
|
|
||||||
#selection
|
#selection
|
||||||
self.selection=self.get_selection()
|
self.selection=self.get_selection()
|
||||||
self.selection.set_mode(Gtk.SelectionMode.SINGLE)
|
self.selection.set_mode(Gtk.SelectionMode.SINGLE)
|
||||||
|
|
||||||
#columns
|
|
||||||
renderer_text=Gtk.CellRendererText(ellipsize=Pango.EllipsizeMode.END, ellipsize_set=True)
|
|
||||||
renderer_text_ralign=Gtk.CellRendererText(xalign=1.0)
|
|
||||||
|
|
||||||
self.column_track=Gtk.TreeViewColumn(_("No"), renderer_text_ralign, text=0)
|
|
||||||
self.column_track.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
|
||||||
self.column_track.set_property("resizable", False)
|
|
||||||
self.append_column(self.column_track)
|
|
||||||
|
|
||||||
self.column_title=Gtk.TreeViewColumn(_("Title"), renderer_text, text=1)
|
|
||||||
self.column_title.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
|
||||||
self.column_title.set_property("resizable", False)
|
|
||||||
self.column_title.set_property("expand", True)
|
|
||||||
self.append_column(self.column_title)
|
|
||||||
|
|
||||||
self.column_artist=Gtk.TreeViewColumn(_("Artist"), renderer_text, text=2)
|
|
||||||
self.column_artist.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
|
||||||
self.column_artist.set_property("resizable", False)
|
|
||||||
self.column_artist.set_property("expand", True)
|
|
||||||
self.append_column(self.column_artist)
|
|
||||||
|
|
||||||
self.column_album=Gtk.TreeViewColumn(_("Album"), renderer_text, text=3)
|
|
||||||
self.column_album.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
|
||||||
self.column_album.set_property("resizable", False)
|
|
||||||
self.column_album.set_property("expand", True)
|
|
||||||
if show_album:
|
|
||||||
self.append_column(self.column_album)
|
|
||||||
|
|
||||||
self.column_time=Gtk.TreeViewColumn(_("Length"), renderer_text, text=4)
|
|
||||||
self.column_time.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
|
||||||
self.column_time.set_property("resizable", False)
|
|
||||||
self.append_column(self.column_time)
|
|
||||||
|
|
||||||
if sort_enable:
|
|
||||||
self.column_track.set_sort_column_id(0)
|
|
||||||
self.column_title.set_sort_column_id(1)
|
|
||||||
self.column_artist.set_sort_column_id(2)
|
|
||||||
self.column_album.set_sort_column_id(3)
|
|
||||||
self.column_time.set_sort_column_id(4)
|
|
||||||
|
|
||||||
#connect
|
#connect
|
||||||
self.connect("row-activated", self.on_row_activated)
|
self.connect("row-activated", self.on_row_activated)
|
||||||
self.connect("button-press-event", self.on_button_press_event)
|
self.connect("button-press-event", self.on_button_press_event)
|
||||||
|
@ -1021,19 +978,20 @@ class SongsView(Gtk.TreeView):
|
||||||
if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS:
|
if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS:
|
||||||
try:
|
try:
|
||||||
path=widget.get_path_at_pos(int(event.x), int(event.y))[0]
|
path=widget.get_path_at_pos(int(event.x), int(event.y))[0]
|
||||||
self.client.files_to_playlist([self.store[path][5]], False)
|
self.client.files_to_playlist([self.store[path][self.file_column_id]], False)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
elif event.button == 2 and event.type == Gdk.EventType.BUTTON_PRESS:
|
elif event.button == 2 and event.type == Gdk.EventType.BUTTON_PRESS:
|
||||||
try:
|
try:
|
||||||
path=widget.get_path_at_pos(int(event.x), int(event.y))[0]
|
path=widget.get_path_at_pos(int(event.x), int(event.y))[0]
|
||||||
self.client.files_to_playlist([self.store[path][5]], True)
|
self.client.files_to_playlist([self.store[path][self.file_column_id]], True)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
|
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
|
||||||
try:
|
try:
|
||||||
path=widget.get_path_at_pos(int(event.x), int(event.y))[0]
|
path=widget.get_path_at_pos(int(event.x), int(event.y))[0]
|
||||||
pop=SongPopover(self.songs[int(str(path))], widget, int(event.x), int(event.y))
|
file_name=self.store[path][self.file_column_id]
|
||||||
|
pop=SongPopover(self.client.lsinfo(file_name)[0], widget, int(event.x), int(event.y))
|
||||||
pop.popup()
|
pop.popup()
|
||||||
pop.show_all()
|
pop.show_all()
|
||||||
except:
|
except:
|
||||||
|
@ -1044,22 +1002,15 @@ class SongsView(Gtk.TreeView):
|
||||||
if event.keyval == 112: #p
|
if event.keyval == 112: #p
|
||||||
treeview, treeiter=self.selection.get_selected()
|
treeview, treeiter=self.selection.get_selected()
|
||||||
if not treeiter == None:
|
if not treeiter == None:
|
||||||
self.client.files_to_playlist([self.store.get_value(treeiter, 5)], False)
|
self.client.files_to_playlist([self.store.get_value(treeiter, self.file_column_id)], False)
|
||||||
elif event.keyval == 97: #a
|
elif event.keyval == 97: #a
|
||||||
treeview, treeiter=self.selection.get_selected()
|
treeview, treeiter=self.selection.get_selected()
|
||||||
if not treeiter == None:
|
if not treeiter == None:
|
||||||
self.client.files_to_playlist([self.store.get_value(treeiter, 5)], True)
|
self.client.files_to_playlist([self.store.get_value(treeiter, self.file_column_id)], True)
|
||||||
# elif event.keyval == 65383: #menu key
|
# elif event.keyval == 65383: #menu key
|
||||||
self.handler_unblock(self.key_press_event)
|
self.handler_unblock(self.key_press_event)
|
||||||
|
|
||||||
def populate(self, songs):
|
|
||||||
self.songs=songs
|
|
||||||
for s in songs:
|
|
||||||
song=self.client.extend_song_for_display(self.client.song_to_str_dict(s))
|
|
||||||
self.store.append([int(song["track"]), song["title"], song["artist"], song["album"], song["human_duration"], song["file"]])
|
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
self.songs=[]
|
|
||||||
self.store.clear()
|
self.store.clear()
|
||||||
|
|
||||||
def count(self):
|
def count(self):
|
||||||
|
@ -1068,7 +1019,7 @@ class SongsView(Gtk.TreeView):
|
||||||
def get_files(self):
|
def get_files(self):
|
||||||
return_list=[]
|
return_list=[]
|
||||||
for row in self.store:
|
for row in self.store:
|
||||||
return_list.append(row[5])
|
return_list.append(row[self.file_column_id])
|
||||||
return return_list
|
return return_list
|
||||||
|
|
||||||
class AlbumDialog(Gtk.Dialog):
|
class AlbumDialog(Gtk.Dialog):
|
||||||
|
@ -1098,9 +1049,50 @@ class AlbumDialog(Gtk.Dialog):
|
||||||
self.artist=artist
|
self.artist=artist
|
||||||
self.year=year
|
self.year=year
|
||||||
|
|
||||||
|
#store
|
||||||
|
#(track, title (artist), duration, file)
|
||||||
|
self.store=Gtk.ListStore(int, str, str, str)
|
||||||
|
|
||||||
#songs view
|
#songs view
|
||||||
self.songs_view=SongsView(self.client, False, False)
|
self.songs_view=SongsView(self.client, self.store, 3)
|
||||||
self.songs_view.populate(self.client.find("album", self.album, "date", self.year, self.settings.get_artist_type(), self.artist))
|
songs=self.client.find("album", self.album, "date", self.year, self.settings.get_artist_type(), self.artist)
|
||||||
|
for s in songs:
|
||||||
|
song=self.client.extend_song_for_display(s)
|
||||||
|
if type(song["title"]) == list: # could be impossible
|
||||||
|
title=(', '.join(song["title"]))
|
||||||
|
else:
|
||||||
|
title=song["title"]
|
||||||
|
if type(song["artist"]) == list:
|
||||||
|
song["artist"].remove(self.artist)
|
||||||
|
artist=(', '.join(song["artist"]))
|
||||||
|
else:
|
||||||
|
artist=song["artist"]
|
||||||
|
if artist != self.artist:
|
||||||
|
title_artist="<b>"+title+"</b> - "+artist
|
||||||
|
else:
|
||||||
|
title_artist="<b>"+title+"</b>"
|
||||||
|
title_artist=title_artist.replace("&", "&")
|
||||||
|
self.store.append([int(song["track"]), title_artist, song["human_duration"], song["file"]])
|
||||||
|
|
||||||
|
#columns
|
||||||
|
renderer_text=Gtk.CellRendererText(ellipsize=Pango.EllipsizeMode.END, ellipsize_set=True)
|
||||||
|
renderer_text_ralign=Gtk.CellRendererText(xalign=1.0)
|
||||||
|
|
||||||
|
self.column_track=Gtk.TreeViewColumn(_("No"), renderer_text_ralign, text=0)
|
||||||
|
self.column_track.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
||||||
|
self.column_track.set_property("resizable", False)
|
||||||
|
self.songs_view.append_column(self.column_track)
|
||||||
|
|
||||||
|
self.column_title=Gtk.TreeViewColumn(_("Title"), renderer_text, markup=1)
|
||||||
|
self.column_title.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
||||||
|
self.column_title.set_property("resizable", False)
|
||||||
|
self.column_title.set_property("expand", True)
|
||||||
|
self.songs_view.append_column(self.column_title)
|
||||||
|
|
||||||
|
self.column_time=Gtk.TreeViewColumn(_("Length"), renderer_text, text=2)
|
||||||
|
self.column_time.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
||||||
|
self.column_time.set_property("resizable", False)
|
||||||
|
self.songs_view.append_column(self.column_time)
|
||||||
|
|
||||||
#scroll
|
#scroll
|
||||||
scroll=Gtk.ScrolledWindow()
|
scroll=Gtk.ScrolledWindow()
|
||||||
|
@ -2964,8 +2956,50 @@ class SearchWindow(Gtk.Box):
|
||||||
self.label.set_xalign(1)
|
self.label.set_xalign(1)
|
||||||
self.label.set_margin_end(6)
|
self.label.set_margin_end(6)
|
||||||
|
|
||||||
|
#store
|
||||||
|
#(track, title, artist, album, duration, file)
|
||||||
|
self.store=Gtk.ListStore(int, str, str, str, str, str)
|
||||||
|
|
||||||
#songs view
|
#songs view
|
||||||
self.songs_view=SongsView(self.client)
|
self.songs_view=SongsView(self.client, self.store, 5)
|
||||||
|
|
||||||
|
#columns
|
||||||
|
renderer_text=Gtk.CellRendererText(ellipsize=Pango.EllipsizeMode.END, ellipsize_set=True)
|
||||||
|
renderer_text_ralign=Gtk.CellRendererText(xalign=1.0)
|
||||||
|
|
||||||
|
self.column_track=Gtk.TreeViewColumn(_("No"), renderer_text_ralign, text=0)
|
||||||
|
self.column_track.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
||||||
|
self.column_track.set_property("resizable", False)
|
||||||
|
self.songs_view.append_column(self.column_track)
|
||||||
|
|
||||||
|
self.column_title=Gtk.TreeViewColumn(_("Title"), renderer_text, text=1)
|
||||||
|
self.column_title.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
||||||
|
self.column_title.set_property("resizable", False)
|
||||||
|
self.column_title.set_property("expand", True)
|
||||||
|
self.songs_view.append_column(self.column_title)
|
||||||
|
|
||||||
|
self.column_artist=Gtk.TreeViewColumn(_("Artist"), renderer_text, text=2)
|
||||||
|
self.column_artist.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
||||||
|
self.column_artist.set_property("resizable", False)
|
||||||
|
self.column_artist.set_property("expand", True)
|
||||||
|
self.songs_view.append_column(self.column_artist)
|
||||||
|
|
||||||
|
self.column_album=Gtk.TreeViewColumn(_("Album"), renderer_text, text=3)
|
||||||
|
self.column_album.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
||||||
|
self.column_album.set_property("resizable", False)
|
||||||
|
self.column_album.set_property("expand", True)
|
||||||
|
self.songs_view.append_column(self.column_album)
|
||||||
|
|
||||||
|
self.column_time=Gtk.TreeViewColumn(_("Length"), renderer_text, text=4)
|
||||||
|
self.column_time.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
|
||||||
|
self.column_time.set_property("resizable", False)
|
||||||
|
self.songs_view.append_column(self.column_time)
|
||||||
|
|
||||||
|
self.column_track.set_sort_column_id(0)
|
||||||
|
self.column_title.set_sort_column_id(1)
|
||||||
|
self.column_artist.set_sort_column_id(2)
|
||||||
|
self.column_album.set_sort_column_id(3)
|
||||||
|
self.column_time.set_sort_column_id(4)
|
||||||
|
|
||||||
#scroll
|
#scroll
|
||||||
scroll=Gtk.ScrolledWindow()
|
scroll=Gtk.ScrolledWindow()
|
||||||
|
@ -3021,7 +3055,10 @@ class SearchWindow(Gtk.Box):
|
||||||
self.songs_view.clear()
|
self.songs_view.clear()
|
||||||
self.label.set_text("")
|
self.label.set_text("")
|
||||||
if len(self.search_entry.get_text()) > 1:
|
if len(self.search_entry.get_text()) > 1:
|
||||||
self.songs_view.populate(self.client.search("any", self.search_entry.get_text()))
|
songs=self.client.search("any", self.search_entry.get_text())
|
||||||
|
for s in songs:
|
||||||
|
song=self.client.extend_song_for_display(self.client.song_to_str_dict(s))
|
||||||
|
self.store.append([int(song["track"]), song["title"], song["artist"], song["album"], song["human_duration"], song["file"]])
|
||||||
self.label.set_text(_("hits: %i") % (self.songs_view.count()))
|
self.label.set_text(_("hits: %i") % (self.songs_view.count()))
|
||||||
if self.songs_view.count() == 0:
|
if self.songs_view.count() == 0:
|
||||||
self.add_button.set_sensitive(False)
|
self.add_button.set_sensitive(False)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user