# 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)