mirror of
https://github.com/SoongNoonien/mpdevil.git
synced 2023-08-10 21:12:44 +03:00
added genre filter
This commit is contained in:
parent
e5cba6af5d
commit
47d0213b3f
100
bin/mpdevil.py
100
bin/mpdevil.py
@ -358,8 +358,69 @@ class AlbumDialog(Gtk.Dialog):
|
|||||||
duration=str(datetime.timedelta(seconds=int(dura)))
|
duration=str(datetime.timedelta(seconds=int(dura)))
|
||||||
self.store.append([track, title, artist, duration, song["file"]] )
|
self.store.append([track, title, artist, duration, song["file"]] )
|
||||||
|
|
||||||
class ArtistView(Gtk.ScrolledWindow):
|
class GenreSelect(Gtk.Box):
|
||||||
def __init__(self, client, settings, emitter):
|
def __init__(self, client, settings, emitter):
|
||||||
|
Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL, spacing=4)
|
||||||
|
|
||||||
|
#adding vars
|
||||||
|
self.client=client
|
||||||
|
self.settings=settings
|
||||||
|
self.emitter=emitter
|
||||||
|
self.icon_size=self.settings.get_gtk_icon_size("icon-size")
|
||||||
|
|
||||||
|
self.combo=Gtk.ComboBoxText()
|
||||||
|
self.button=Gtk.ToggleButton(image=Gtk.Image.new_from_icon_name("object-select-symbolic", self.icon_size))
|
||||||
|
|
||||||
|
#connect
|
||||||
|
#self.connect("changed", self.on_changed)
|
||||||
|
self.combo_changed=self.combo.connect("changed", self.on_combo_changed)
|
||||||
|
self.button.connect("toggled", self.on_button_toggled)
|
||||||
|
self.update_signal=self.emitter.connect("update", self.refresh)
|
||||||
|
|
||||||
|
self.pack_start(self.button, False, False, 0)
|
||||||
|
self.pack_start(self.combo, True, True, 0)
|
||||||
|
|
||||||
|
@GObject.Signal
|
||||||
|
def changed(self):
|
||||||
|
self.emitter.handler_block(self.update_signal)
|
||||||
|
self.emitter.emit("update")
|
||||||
|
self.emitter.handler_unblock(self.update_signal)
|
||||||
|
|
||||||
|
def refresh(self, *args):
|
||||||
|
self.combo.handler_block(self.combo_changed)
|
||||||
|
self.combo.remove_all()
|
||||||
|
for genre in self.client.list("genre"):
|
||||||
|
self.combo.append_text(genre)
|
||||||
|
self.combo.set_active(0)
|
||||||
|
self.combo.handler_unblock(self.combo_changed)
|
||||||
|
self.button.emit("toggled")
|
||||||
|
|
||||||
|
def get_value(self):
|
||||||
|
if self.button.get_active():
|
||||||
|
return self.combo.get_active_text()
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def on_changed(self, *args):
|
||||||
|
value=self.get_value()
|
||||||
|
if value == None:
|
||||||
|
print("None")
|
||||||
|
else:
|
||||||
|
print(value)
|
||||||
|
print(self.client.list(self.settings.get_artist_type(), "genre", value))
|
||||||
|
|
||||||
|
def on_combo_changed(self, *args):
|
||||||
|
self.emit("changed")
|
||||||
|
|
||||||
|
def on_button_toggled(self, widget):
|
||||||
|
if widget.get_active():
|
||||||
|
self.combo.set_sensitive(True)
|
||||||
|
else:
|
||||||
|
self.combo.set_sensitive(False)
|
||||||
|
self.emit("changed")
|
||||||
|
|
||||||
|
class ArtistView(Gtk.ScrolledWindow):
|
||||||
|
def __init__(self, client, settings, emitter, genre_select):
|
||||||
Gtk.ScrolledWindow.__init__(self)
|
Gtk.ScrolledWindow.__init__(self)
|
||||||
self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
||||||
|
|
||||||
@ -367,6 +428,7 @@ class ArtistView(Gtk.ScrolledWindow):
|
|||||||
self.client=client
|
self.client=client
|
||||||
self.settings=settings
|
self.settings=settings
|
||||||
self.emitter=emitter
|
self.emitter=emitter
|
||||||
|
self.genre_select=genre_select
|
||||||
|
|
||||||
#artistStore
|
#artistStore
|
||||||
#(name)
|
#(name)
|
||||||
@ -403,7 +465,12 @@ class ArtistView(Gtk.ScrolledWindow):
|
|||||||
def refresh(self, *args):
|
def refresh(self, *args):
|
||||||
self.selection.set_mode(Gtk.SelectionMode.NONE)
|
self.selection.set_mode(Gtk.SelectionMode.NONE)
|
||||||
self.clear()
|
self.clear()
|
||||||
for artist in self.client.list(self.settings.get_artist_type()):
|
genre=self.genre_select.get_value()
|
||||||
|
if genre == None:
|
||||||
|
artists=self.client.list(self.settings.get_artist_type())
|
||||||
|
else:
|
||||||
|
artists=self.client.list(self.settings.get_artist_type(), "genre", genre)
|
||||||
|
for artist in artists:
|
||||||
self.store.append([artist])
|
self.store.append([artist])
|
||||||
self.selection.set_mode(Gtk.SelectionMode.MULTIPLE)
|
self.selection.set_mode(Gtk.SelectionMode.MULTIPLE)
|
||||||
|
|
||||||
@ -421,12 +488,13 @@ class ArtistView(Gtk.ScrolledWindow):
|
|||||||
self.treeview.grab_focus()
|
self.treeview.grab_focus()
|
||||||
|
|
||||||
class AlbumIconView(Gtk.IconView):
|
class AlbumIconView(Gtk.IconView):
|
||||||
def __init__(self, client, settings, window):
|
def __init__(self, client, settings, genre_select, window):
|
||||||
Gtk.IconView.__init__(self)
|
Gtk.IconView.__init__(self)
|
||||||
|
|
||||||
#adding vars
|
#adding vars
|
||||||
self.settings=settings
|
self.settings=settings
|
||||||
self.client=client
|
self.client=client
|
||||||
|
self.genre_select=genre_select
|
||||||
self.window=window
|
self.window=window
|
||||||
self.stop_flag=True
|
self.stop_flag=True
|
||||||
|
|
||||||
@ -475,8 +543,13 @@ class AlbumIconView(Gtk.IconView):
|
|||||||
self.stop_flag=False
|
self.stop_flag=False
|
||||||
size=self.settings.get_int("album-cover")
|
size=self.settings.get_int("album-cover")
|
||||||
albums=[]
|
albums=[]
|
||||||
|
genre=self.genre_select.get_value()
|
||||||
for artist in artists:
|
for artist in artists:
|
||||||
for album in self.client.list("album", self.settings.get_artist_type(), artist):
|
if genre == None:
|
||||||
|
album_candidates=self.client.list("album", self.settings.get_artist_type(), artist)
|
||||||
|
else:
|
||||||
|
album_candidates=self.client.list("album", self.settings.get_artist_type(), artist, "genre", genre)
|
||||||
|
for album in album_candidates:
|
||||||
albums.append({"artist": artist, "album": album, "year": self.client.list("date", "album", album, self.settings.get_artist_type(), artist)[0]})
|
albums.append({"artist": artist, "album": album, "year": self.client.list("date", "album", album, self.settings.get_artist_type(), artist)[0]})
|
||||||
albums = sorted(albums, key=lambda k: k['year'])
|
albums = sorted(albums, key=lambda k: k['year'])
|
||||||
for album in albums:
|
for album in albums:
|
||||||
@ -558,17 +631,18 @@ class AlbumIconView(Gtk.IconView):
|
|||||||
self.grab_focus()
|
self.grab_focus()
|
||||||
|
|
||||||
class AlbumView(Gtk.ScrolledWindow):
|
class AlbumView(Gtk.ScrolledWindow):
|
||||||
def __init__(self, client, settings, window):
|
def __init__(self, client, settings, genre_select, window):
|
||||||
Gtk.ScrolledWindow.__init__(self)
|
Gtk.ScrolledWindow.__init__(self)
|
||||||
self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
|
||||||
|
|
||||||
#adding vars
|
#adding vars
|
||||||
self.settings=settings
|
self.settings=settings
|
||||||
self.client=client
|
self.client=client
|
||||||
|
self.genre_select=genre_select
|
||||||
self.window=window
|
self.window=window
|
||||||
self.artists=[]
|
self.artists=[]
|
||||||
|
|
||||||
self.iconview=AlbumIconView(self.client, self.settings, self.window)
|
self.iconview=AlbumIconView(self.client, self.settings, self.genre_select, self.window)
|
||||||
self.iconview.connect("stopped", self.update)
|
self.iconview.connect("stopped", self.update)
|
||||||
|
|
||||||
self.add(self.iconview)
|
self.add(self.iconview)
|
||||||
@ -722,7 +796,7 @@ class TrackView(Gtk.Box):
|
|||||||
try:
|
try:
|
||||||
song=self.client.status()["song"]
|
song=self.client.status()["song"]
|
||||||
path = Gtk.TreePath(int(song))
|
path = Gtk.TreePath(int(song))
|
||||||
self.treeview.set_cursor(path, None, False)
|
self.treeview.set_cursor(path, None, False) #TODO
|
||||||
self.selection.select_path(path)
|
self.selection.select_path(path)
|
||||||
except:
|
except:
|
||||||
self.selection.unselect_all()
|
self.selection.unselect_all()
|
||||||
@ -852,7 +926,7 @@ class TrackView(Gtk.Box):
|
|||||||
|
|
||||||
class Browser(Gtk.Box):
|
class Browser(Gtk.Box):
|
||||||
def __init__(self, client, settings, emitter, window):
|
def __init__(self, client, settings, emitter, window):
|
||||||
Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL, spacing=4)
|
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=4)
|
||||||
|
|
||||||
#adding vars
|
#adding vars
|
||||||
self.client=client
|
self.client=client
|
||||||
@ -861,19 +935,23 @@ class Browser(Gtk.Box):
|
|||||||
self.window=window
|
self.window=window
|
||||||
|
|
||||||
#widgets
|
#widgets
|
||||||
self.artist_list=ArtistView(self.client, self.settings, self.emitter)
|
self.genre_select=GenreSelect(self.client, self.settings, self.emitter)
|
||||||
self.album_list=AlbumView(self.client, self.settings, self.window)
|
self.artist_list=ArtistView(self.client, self.settings, self.emitter, self.genre_select)
|
||||||
|
self.album_list=AlbumView(self.client, self.settings, self.genre_select, self.window)
|
||||||
self.title_list=TrackView(self.client, self.settings, self.emitter, self.window)
|
self.title_list=TrackView(self.client, self.settings, self.emitter, self.window)
|
||||||
|
hbox=Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
||||||
|
|
||||||
#connect
|
#connect
|
||||||
self.artist_change=self.artist_list.selection.connect("changed", self.on_artist_selection_change)
|
self.artist_change=self.artist_list.selection.connect("changed", self.on_artist_selection_change)
|
||||||
|
|
||||||
#packing
|
#packing
|
||||||
|
hbox.pack_start(self.genre_select, False, False, 4)
|
||||||
|
hbox.pack_start(self.artist_list, True, True, 0)
|
||||||
self.paned1=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
|
self.paned1=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
|
||||||
self.paned1.set_wide_handle(True)
|
self.paned1.set_wide_handle(True)
|
||||||
self.paned2=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
|
self.paned2=Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
|
||||||
self.paned2.set_wide_handle(True)
|
self.paned2.set_wide_handle(True)
|
||||||
self.paned1.pack1(self.artist_list, False, False)
|
self.paned1.pack1(hbox, False, False)
|
||||||
self.paned1.pack2(self.album_list, True, False)
|
self.paned1.pack2(self.album_list, True, False)
|
||||||
self.paned2.pack1(self.paned1, True, False)
|
self.paned2.pack1(self.paned1, True, False)
|
||||||
self.paned2.pack2(self.title_list, False, False)
|
self.paned2.pack2(self.title_list, False, False)
|
||||||
|
Loading…
Reference in New Issue
Block a user