Anna Schumaker
be7e8e6073
This fixes a bug where a different track would be selected when hitting "Play" after an autopause Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
# Copyright 2021 (c) Anna Schumaker.
|
|
import db
|
|
import lib
|
|
from gi.repository import GObject
|
|
from . import bass
|
|
from . import scale
|
|
|
|
|
|
class Player(bass.BassPlayer):
|
|
def __init__(self):
|
|
bass.BassPlayer.__init__(self)
|
|
self.Autopause = scale.AutoPauseScale()
|
|
self.playlist = None
|
|
self.track = None
|
|
|
|
self.set_playlist(db.find_playlist(lib.settings.get_int("audio.plstateid")))
|
|
self.change_track(db.track.Table.get(lib.settings.get_int("audio.trackid")))
|
|
|
|
def change_track(self, track, reset=False, add_prev=True):
|
|
if self.track and self.play_percent > (2 / 3):
|
|
self.track.played()
|
|
if reset:
|
|
self.uri = None
|
|
self.emit("track-changed", self.track, track)
|
|
if track and add_prev:
|
|
db.user.Table.find("Previous").add_track(track)
|
|
|
|
def do_about_to_finish(self):
|
|
if self.Autopause.get_value() != 0:
|
|
self.Autopause.decrement()
|
|
self.change_track(self.playlist.next_track())
|
|
|
|
def do_eos(self):
|
|
self.Autopause.decrement()
|
|
self.change_track(self.playlist.next_track(), reset=True)
|
|
self.playing = self.Autopause.keep_playing
|
|
|
|
def play(self): self.playing = True
|
|
def pause(self): self.playing = False
|
|
def playpause(self): self.playing = not self.playing
|
|
|
|
def play_track(self, track, add_prev=True):
|
|
self.change_track(track, reset=True, add_prev=add_prev)
|
|
self.play()
|
|
|
|
def next(self):
|
|
if track := db.user.Table.find("Previous").next_track():
|
|
self.play_track(track, add_prev=False)
|
|
else:
|
|
if (track := self.playlist.next_track()) == None:
|
|
self.set_playlist(db.user.Table.find("Collection"))
|
|
track = self.playlist.next_track()
|
|
self.play_track(track)
|
|
|
|
def previous(self):
|
|
if track := db.user.Table.find("Previous").previous_track():
|
|
self.play_track(track, add_prev=False)
|
|
|
|
def set_playlist(self, plist):
|
|
if plist is None:
|
|
plist = db.user.Table.find("Collection")
|
|
if plist != self.playlist:
|
|
self.emit("playlist-changed", self.playlist, plist)
|
|
|
|
@GObject.Signal(arg_types=(db.track.Track, db.track.Track))
|
|
def track_changed(self, prev, new):
|
|
self.track = new
|
|
if self.track:
|
|
lib.settings.set("audio.trackid", new.rowid)
|
|
self.uri = new.path.absolute().as_uri()
|
|
|
|
@GObject.Signal(arg_types=(db.playlist.Playlist, db.playlist.Playlist))
|
|
def playlist_changed(self, prev, new):
|
|
self.playlist = new
|
|
if self.playlist:
|
|
if new.current >= new.get_n_tracks() - 1:
|
|
new.current = -1
|
|
lib.settings.set("audio.plstateid", new.plstateid)
|