def _process_queue(self): log.info("Startet processing queue") self.filecopy_cancel = Gio.Cancellable() self._fill_queue_from_db() self.total_batch_count = len(self.queue) self.current_batch_count = 0 if len(self.queue) > 0: self.current_book_processing = self.queue[0].track.book.id while len(self.queue) > 0: log.info("Processing item") self.current_batch_count += 1 item = self.queue[0] if self.thread.stopped(): break new_item = OfflineCacheModel.get(OfflineCacheModel.id == item.id) if self.current_book_processing != new_item.track.book.id: self.update_book_download_status( Book.get(Book.id == self.current_book_processing)) self.current_book_processing = new_item.track.book.id if not new_item.copied and os.path.exists(new_item.track.file): log.info("Copying item") Gdk.threads_add_idle(GLib.PRIORITY_DEFAULT_IDLE, self.ui.switch_to_working, _("Copying") + " " + tools.shorten_string(new_item.track.book.name, 30), False, False) self.current = new_item destination = Gio.File.new_for_path(os.path.join(self.cache_dir, new_item.file)) source = Gio.File.new_for_path(new_item.track.file) flags = Gio.FileCopyFlags.OVERWRITE try: copied = source.copy(destination, flags, self.filecopy_cancel, self.__update_copy_status, None) except Exception as e: if e.code == Gio.IOErrorEnum.CANCELLED: log.info("Download of book was cancelled.") self.thread.stop() break reporter.exception("offline_cache", e) log.error("Could not copy file to offline cache: " + new_item.track.file) log.error(e) self.queue.remove(item) continue if copied: OfflineCacheModel.update(copied=True).where( OfflineCacheModel.id == new_item.id).execute() self.queue.remove(item) if self.current_book_processing: self.update_book_download_status( Book.get(Book.id == self.current_book_processing)) self.current = None Gdk.threads_add_idle(GLib.PRIORITY_DEFAULT_IDLE, self.ui.switch_to_playing)
def _process_queue(self): log.info("Started processing queue") self.filecopy_cancel = Gio.Cancellable() self._fill_queue_from_db() self.total_batch_count = len(self.queue) self.current_batch_count = 0 if len(self.queue) > 0: self.current_book_processing = self._get_book_to_file( self.queue[0].original_file).id self.emit_event_main_thread("start") while len(self.queue) > 0: log.info("Processing item") self.current_batch_count += 1 item = self.queue[0] if self.thread.stopped(): break query = OfflineCacheModel.select().where( OfflineCacheModel.id == item.id) if not query.exists(): continue new_item = OfflineCacheModel.get(OfflineCacheModel.id == item.id) book = self._get_book_to_file(new_item.original_file) if self.current_book_processing != book.id: self._update_book_download_status(self.current_book_processing) self.current_book_processing = book.id if not new_item.copied and os.path.exists( new_item.original_file.path): log.info("Copying item") self.emit_event_main_thread( "message", _("Copying") + " " + tools.shorten_string(book.name, 30)) self.current = new_item destination = Gio.File.new_for_path( os.path.join(self.cache_dir, new_item.cached_file)) source = Gio.File.new_for_path(new_item.original_file.path) flags = Gio.FileCopyFlags.OVERWRITE try: copied = source.copy(destination, flags, self.filecopy_cancel, self.__update_copy_status, None) except Exception as e: if e.code == Gio.IOErrorEnum.CANCELLED: log.info("Download of book was cancelled.") self.thread.stop() break reporter.exception("offline_cache", e) log.error("Could not copy file to offline cache: " + new_item.original_file.path) log.error(e) self.queue.remove(item) continue if copied: OfflineCacheModel.update(copied=True).where( OfflineCacheModel.id == new_item.id).execute() self.queue.remove(item) if self.current_book_processing: self._update_book_download_status(self.current_book_processing) self.current = None self.emit_event_main_thread("finished")