From 6b1987a16af8cea886802e72e8c02dc076758f20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Mon, 5 May 2025 19:20:51 +0200 Subject: [PATCH] Use a better default search string from comic files --- .../comic_vine/comic_vine_dialog.cpp | 30 +++++++++++++++---- .../comic_vine/comic_vine_dialog.h | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/YACReaderLibrary/comic_vine/comic_vine_dialog.cpp b/YACReaderLibrary/comic_vine/comic_vine_dialog.cpp index 468ff2f2..1faa0aae 100644 --- a/YACReaderLibrary/comic_vine/comic_vine_dialog.cpp +++ b/YACReaderLibrary/comic_vine/comic_vine_dialog.cpp @@ -143,9 +143,7 @@ void ComicVineDialog::goNext() showLoading(tr("Looking for volume...")); - // TODO: option to handle exact matches? - // TODO: parse the file name to create better searches - searchVolume({ title, 1, true }); + searchVolume({ volumeSearchStringFromComic(comic), 1, true }); } } else if (content->currentWidget() == selectVolumeWidget) { currentVolumeId = selectVolumeWidget->getSelectedVolumeInfo().id; @@ -260,10 +258,11 @@ void ComicVineDialog::show() mode = ScraperMode::SingleComic; ComicDB singleComic = comics[0]; + QString title = singleComic.getTitleOrFileName(); titleHeader->setSubTitle(title); - showSearchSingleComic(singleComic.getParentFolderName()); + showSearchSingleComic(volumeSearchStringFromComic(singleComic)); } else if (comics.length() > 1) { titleHeader->setSubTitle(tr("%1 comics selected").arg(comics.length())); showSeriesQuestion(); @@ -533,6 +532,25 @@ void ComicVineDialog::toggleSkipButton() skipButton->setHidden(true); } +QString ComicVineDialog::volumeSearchStringFromComic(const ComicDB &comic) +{ + auto volume = comic.info.volume.toString().trimmed(); + if (!volume.isEmpty()) + return volume; + + auto series = comic.info.series.toString().trimmed(); + if (!series.isEmpty()) + return series; + + auto alternateSeries = comic.info.alternateSeries.toString().trimmed(); + if (!alternateSeries.isEmpty()) + return alternateSeries; + + // extract information from file name + auto parentFolderName = comic.getParentFolderName(); + return parentFolderName; +} + void ComicVineDialog::goToNextComic() { if (mode == ScraperMode::SingleComic || currentIndex == (comics.count() - 1)) { @@ -543,11 +561,11 @@ void ComicVineDialog::goToNextComic() currentIndex++; ComicDB comic = comics[currentIndex]; + QString title = comic.getTitleOrFileName(); titleHeader->setSubTitle(tr("comic %1 of %2 - %3").arg(currentIndex + 1).arg(comics.length()).arg(title)); - // TODO: parse title - showSearchSingleComic(title); + showSearchSingleComic(volumeSearchStringFromComic(comic)); } void ComicVineDialog::clearState() diff --git a/YACReaderLibrary/comic_vine/comic_vine_dialog.h b/YACReaderLibrary/comic_vine/comic_vine_dialog.h index 39bbc3c2..e6ccfc78 100644 --- a/YACReaderLibrary/comic_vine/comic_vine_dialog.h +++ b/YACReaderLibrary/comic_vine/comic_vine_dialog.h @@ -66,8 +66,8 @@ protected slots: private: void clearState(); - void toggleSkipButton(); + QString volumeSearchStringFromComic(const ComicDB &comic); enum class ScraperMode { SingleComic, // the scraper has been opened for a single comic