emmental/playlist/__init__.py

64 lines
2.2 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
import db
import audio
from gi.repository import Gdk
from gi.repository import Gtk
from . import footer
from . import header
from . import view
class Panel(Gtk.Box):
def __init__(self):
Gtk.Box.__init__(self)
self.set_orientation(Gtk.Orientation.VERTICAL)
self.header = header.Header()
self.window = view.PlaylistWindow()
self.footer = footer.Footer(self.window.get_filter_model())
self.append(self.header)
self.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL))
self.append(self.window)
self.append(Gtk.Separator.new(Gtk.Orientation.HORIZONTAL))
self.append(self.footer)
keypress = Gtk.EventControllerKey.new()
keypress.connect("key-pressed", self.key_pressed)
self.add_controller(keypress)
self.header.get_jump_button().connect("clicked", self.jump_clicked)
def get_playlist(self): return self.window.get_playlist()
def set_playlist(self, plist):
if plist:
self.header.set_playlist(plist)
self.window.set_playlist(plist)
def key_pressed(self, event, keyval, keycode, state):
match Gdk.keyval_name(keyval):
case "Escape": self.window.clear_selection()
case "Delete":
playlist = self.get_playlist()
if not (playlist and playlist.can_add_remove_tracks()):
return False
for track in self.selected_tracks():
playlist.remove_track(track)
case "f": self.add_selected_tracks(db.user.Table.find("Favorites"))
case "q": self.add_selected_tracks(db.user.Table.find("Queued Tracks"))
case _: return False
return True
def jump_clicked(self, button):
view = self.window.get_child()
view.track_changed(audio.Player, None, audio.Player.track)
def selected_tracks(self):
for track in self.window.selected_tracks():
yield track
def add_selected_tracks(self, plist):
for track in self.selected_tracks():
plist.add_track(track)
if plist == db.user.Table.find("Queued Tracks"):
audio.Player.set_playlist(plist)
db.sql.commit()