diff --git a/comictaggerlib/taggerwindow.py b/comictaggerlib/taggerwindow.py index 52bade0..3b6ad71 100644 --- a/comictaggerlib/taggerwindow.py +++ b/comictaggerlib/taggerwindow.py @@ -28,7 +28,7 @@ import sys import webbrowser from collections.abc import Iterable from datetime import datetime -from typing import Any, Callable, cast +from typing import Any, Callable from urllib.parse import urlparse import natsort @@ -1045,95 +1045,95 @@ You have {4-self.settings.settings_warning} warnings left. self.query_online(autoselect=False, literal=True) def query_online(self, autoselect: bool = False, literal: bool = False) -> None: + if self.comic_archive is not None: + issue_number = str(self.leIssueNum.text()).strip() - issue_number = str(self.leIssueNum.text()).strip() - - # Only need this check is the source has issue level data. - if autoselect and issue_number == "": - QtWidgets.QMessageBox.information( - self, "Automatic Identify Search", "Can't auto-identify without an issue number (yet!)" - ) - return - - if str(self.leSeries.text()).strip() != "": - series_name = str(self.leSeries.text()).strip() - else: - QtWidgets.QMessageBox.information(self, "Online Search", "Need to enter a series name to search.") - return - - year = utils.xlate(self.lePubYear.text(), True) - - issue_count = utils.xlate(self.leIssueCount.text(), True) - - cover_index_list = self.metadata.get_cover_page_index_list() - selector = VolumeSelectionWindow( - self, - series_name, - issue_number, - year, - issue_count, - cover_index_list, - cast(ComicArchive, self.comic_archive), - self.settings, - self.talker_api, - autoselect, - literal, - ) - - selector.setWindowTitle(f"Search: '{series_name}' - Select Series") - - selector.setModal(True) - selector.exec() - - if selector.result(): - # we should now have a volume ID - QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CursorShape.WaitCursor)) - - # copy the form onto metadata object - self.form_to_metadata() - - try: - if selector.issue_id: - new_metadata = self.talker_api.fetch_comic_data(selector.issue_id) - elif selector.volume_id and selector.issue_number: - # Would this ever be needed? - new_metadata = self.talker_api.fetch_comic_data( - series_id=selector.volume_id, issue_number=selector.issue_number - ) - else: - # Only left with series? Isn't series only handled elsewhere? - new_metadata = self.talker_api.fetch_comic_data(series_id=selector.volume_id) - except TalkerError as e: - QtWidgets.QApplication.restoreOverrideCursor() - QtWidgets.QMessageBox.critical( - self, - f"{e.source} {e.code_name} Error", - f"{e}", + # Only need this check is the source has issue level data. + if autoselect and issue_number == "": + QtWidgets.QMessageBox.information( + self, "Automatic Identify Search", "Can't auto-identify without an issue number (yet!)" ) + return + + if str(self.leSeries.text()).strip() != "": + series_name = str(self.leSeries.text()).strip() else: - QtWidgets.QApplication.restoreOverrideCursor() - if new_metadata is not None: - if self.settings.apply_cbl_transform_on_cv_import: - new_metadata = CBLTransformer(new_metadata, self.settings).apply() + QtWidgets.QMessageBox.information(self, "Online Search", "Need to enter a series name to search.") + return - if self.settings.clear_form_before_populating_from_cv: - self.clear_form() + year = utils.xlate(self.lePubYear.text(), True) - notes = ( - f"Tagged with ComicTagger {ctversion.version} using info from {self.talker_api.source_details.name} on" - f" {datetime.now():%Y-%m-%d %H:%M:%S}. [Issue ID {new_metadata.issue_id}]" - ) - self.metadata.overlay( - new_metadata.replace( - notes=utils.combine_notes(self.metadata.notes, notes, "Tagged with ComicTagger") + issue_count = utils.xlate(self.leIssueCount.text(), True) + + cover_index_list = self.metadata.get_cover_page_index_list() + selector = VolumeSelectionWindow( + self, + series_name, + issue_number, + year, + issue_count, + cover_index_list, + self.comic_archive, + self.settings, + self.talker_api, + autoselect, + literal, + ) + + selector.setWindowTitle(f"Search: '{series_name}' - Select Series") + + selector.setModal(True) + selector.exec() + + if selector.result(): + # we should now have a volume ID + QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CursorShape.WaitCursor)) + + # copy the form onto metadata object + self.form_to_metadata() + + try: + if selector.issue_id: + new_metadata = self.talker_api.fetch_comic_data(selector.issue_id) + elif selector.volume_id and selector.issue_number: + # Would this ever be needed? + new_metadata = self.talker_api.fetch_comic_data( + series_id=selector.volume_id, issue_number=selector.issue_number ) - ) - # Now push the new combined data into the edit controls - self.metadata_to_form() - else: + else: + # Only left with series? Isn't series only handled elsewhere? + new_metadata = self.talker_api.fetch_comic_data(series_id=selector.volume_id) + except TalkerError as e: + QtWidgets.QApplication.restoreOverrideCursor() QtWidgets.QMessageBox.critical( - self, "Search", f"Could not find an issue {selector.issue_number} for that series" + self, + f"{e.source} {e.code_name} Error", + f"{e}", ) + else: + QtWidgets.QApplication.restoreOverrideCursor() + if new_metadata is not None: + if self.settings.apply_cbl_transform_on_cv_import: + new_metadata = CBLTransformer(new_metadata, self.settings).apply() + + if self.settings.clear_form_before_populating_from_cv: + self.clear_form() + + notes = ( + f"Tagged with ComicTagger {ctversion.version} using info from {self.talker_api.source_details.name} on" + f" {datetime.now():%Y-%m-%d %H:%M:%S}. [Issue ID {new_metadata.issue_id}]" + ) + self.metadata.overlay( + new_metadata.replace( + notes=utils.combine_notes(self.metadata.notes, notes, "Tagged with ComicTagger") + ) + ) + # Now push the new combined data into the edit controls + self.metadata_to_form() + else: + QtWidgets.QMessageBox.critical( + self, "Search", f"Could not find an issue {selector.issue_number} for that series" + ) def commit_metadata(self) -> None: if self.metadata is not None and self.comic_archive is not None: