Пример #1
0
 def _load_all_books(self):
     with self._db:
         for book_db_obj in BookModel.select(BookModel.id):
             try:
                 self._books.append(Book(self._db, book_db_obj.id))
             except BookIsEmpty:
                 pass
Пример #2
0
 def _load_all_books(self):
     for book_db_obj in BookModel.select(BookModel.id):
         try:
             book = Book(self._db, book_db_obj.id)
             book.add_listener(self._on_book_event)
             self._books.append(book)
         except BookIsEmpty:
             pass
Пример #3
0
    def _update_book_position(self, book: BookModel, progress: int):
        try:
            book_model = Book(self._db, book.id)
        except BookIsEmpty:
            log.error("Could not restore book position because book is empty")
            return

        completed_chapter_length = 0
        for chapter in book_model.chapters:
            old_position = progress
            if completed_chapter_length + chapter.length > old_position:
                chapter.position = chapter.start_position + (
                    (old_position - completed_chapter_length) * 10**9)
                book_model.position = chapter.id
                return
            else:
                completed_chapter_length += chapter.length

        book_model.position = 0
Пример #4
0
    def _prepare_track_db_objects(
            self, media_files: Set[MediaFile]) -> Set[TrackInsertRequest]:
        book_db_objects: Set[BookModel] = set()

        for media_file in media_files:
            if not media_file:
                continue

            book = next((book for book in book_db_objects
                         if is_same_book(book.name, media_file.book_name)),
                        None)
            file_query = File.select().where(File.path == media_file.path)
            if not file_query.exists():
                log.error("No file object with path present: {}".format(
                    media_file.path))
                continue

            file = file_query.get()

            if not book:
                book = self._import_or_update_book(media_file)
                book_db_objects.add(book)

            try:
                book_model = Book(self._db, book.id)
                progress = book_model.progress
            except BookIsEmpty:
                progress = 0

            self._delete_tracks_from_db(media_file)
            tracks = self._get_track_list_for_db(media_file, book)

            for track in tracks:
                start_at = track.pop("startAt")
                yield TrackInsertRequest(track, file, start_at)

            update_position_request_present = any(
                b.book_id == book.id for b in self._book_update_positions)
            if progress > 0 and not update_position_request_present:
                self._book_update_positions.append(
                    BookUpdatePositionRequest(book.id, progress))