def clean_books(): """ Remove all books that have no tracks """ for book in Book.select(): if not get_track_for_playback(book): Book.update(position=0).where(Book.id == book.id).execute() if Track.select().where(Track.book == book).count() < 1: if Settings.get().last_played_book and Settings.get().last_played_book.id == book.id: Settings.update(last_played_book=None).execute() book.delete_instance()
def test_fetching_non_existent_last_played_book_sets_it_to_none(peewee_database): from cozy.model.settings import Settings from cozy.db.settings import Settings as SettingsModel db_object = SettingsModel.get() db_object.last_played_book = 437878782 db_object.save(only=db_object.dirty_fields) settings = Settings() dummy = settings.last_played_book assert SettingsModel.get().last_played_book is None
def __update_db_3(db): current_path = Settings.get().path db.create_tables([Storage]) Storage.create(path=current_path, default=True) Settings.update(path="NOT_USED").execute() Settings.update(version=3).execute()
def load_last_book(filesystem_monitor: FilesystemMonitor): """ Load the last played book into the player. """ global __current_track global __player last_book = Settings.get().last_played_book if last_book and last_book.position != 0: query = Track.select().where(Track.id == last_book.position) if query.exists(): last_track = query.get() if last_track: __player.set_state(Gst.State.NULL) if filesystem_monitor.is_track_online(last_track): path = last_track.file else: path = OfflineCache().get_cached_path(last_track) if not path: return __player.set_property("uri", "file://" + path) __player.set_state(Gst.State.PAUSED) __current_track = last_track Book.update(last_played=int(time.time())).where( Book.id == last_book.id).execute() emit_event("track-changed", last_track)
def test_setting_last_played_book_to_none_updates_in_settings_object_and_database(peewee_database): from cozy.model.settings import Settings from cozy.db.settings import Settings as SettingsModel settings = Settings() settings.last_played_book = None assert settings.last_played_book == None assert SettingsModel.get().last_played_book == None
def do_activate(self): main_window_builder = self.ui.get_builder() self.app_controller = AppController(self, main_window_builder, self.ui) self.ui.activate(self.app_controller.library_view) if Settings.get().first_start: Settings.update(first_start=False).execute() path = os.path.join(Path.home(), _("Audiobooks")) Storage.create(path=path, default=True) os.makedirs(path, exist_ok=True) self.add_window(self.ui.window) mpris = MPRIS(self) mpris._on_current_changed()
def do_activate(self): main_window_builder = self.ui.get_builder() self.app_controller = AppController(main_window_builder, self.ui) self.ui.activate(self.app_controller.library_view) if Settings.get().first_start: Settings.update(first_start=False).execute() path = str(Path.home()) + "/Audiobooks" Settings.update(path=str(Path.home()) + "/Audiobooks").execute() if not os.path.exists(path): os.makedirs(path) self.add_window(self.ui.window) mpris = MPRIS(self) mpris._on_current_changed(None)
def load_last_book(self): if Settings.get().last_played_book: self.update_track_ui() self.update_ui_time(self.progress_scale) cur_m, cur_s = player.get_current_duration_ui() self.__set_progress_scale_value(cur_m * 60 + cur_s) pos = int(player.get_current_track().position) if self._application_settings.replay: log.info("Replaying the previous 30 seconds.") amount = 30 * 1000000000 if (pos < amount): pos = 0 else: pos = pos - amount self.__set_progress_scale_value( int(pos / 1000000000 / self.ui.speed.get_speed()))
def update_db(): db = get_sqlite_database() # First test for version 1 try: next(c for c in db.get_columns("settings") if c.name == "version") except Exception as e: if len(db.get_tables()) == 0: data_dir = get_data_dir() if os.path.exists(os.path.join(data_dir, "cozy.db")): os.remove(os.path.join(data_dir, "cozy.db")) os.remove(os.path.join(data_dir, "cozy.db-shm")) os.remove(os.path.join(data_dir, "cozy.db-wal")) __update_db_1(db) version = Settings.get().version # then for version 2 and so on if version < 2: __update_db_2(db) if version < 3: __update_db_3(db) if version < 4: __update_db_4(db) if version < 5: __update_db_5(db) if version < 6: __update_db_6(db) if version < 7: __update_db_7(db) if version < 8: __update_db_8(db)
def __init__(self): with self._db: self._db_object: SettingsModel = SettingsModel.get()
def update_db(): db = get_sqlite_database() # First test for version 1 try: next(c for c in db.get_columns("settings") if c.name == "version") except Exception as e: if len(db.get_tables()) == 0: data_dir = get_data_dir() if os.path.exists(os.path.join(data_dir, "cozy.db")): os.remove(os.path.join(data_dir, "cozy.db")) os.remove(os.path.join(data_dir, "cozy.db-shm")) os.remove(os.path.join(data_dir, "cozy.db-wal")) __update_db_1(db) version = Settings.get().version # then for version 2 and so on if version < 2: __update_db_2(db) if version < 3: __update_db_3(db) if version < 4: __update_db_4(db) if version < 5: __update_db_5(db) if version < 6: __update_db_6(db) if version < 7: __update_db_7(db) if version < 8: __update_db_8(db) if version < 9: backup_dir_name = _backup_db(db) try: _update_db_9(db) except Exception as e: log.error(e) reporter.exception("db_updator", e) db.stop() _restore_db(backup_dir_name) from cozy.ui.db_migration_failed_view import DBMigrationFailedView dialog = DBMigrationFailedView() dialog.show() exit(1) if version < 10: backup_dir_name = _backup_db(db) try: _update_db_10(db) except Exception as e: log.error(e) reporter.exception("db_updator", e) db.stop() _restore_db(backup_dir_name) from cozy.ui.db_migration_failed_view import DBMigrationFailedView dialog = DBMigrationFailedView() dialog.show() exit(1)