mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-18 00:12:15 -07:00
Try to better reproduce pre-provider ID behavior
If "override all card art with personal preference" setting is set, look for custom art for all sets instead of just the most preferred set.
This commit is contained in:
parent
a4b0cddcf8
commit
b233743825
4 changed files with 53 additions and 20 deletions
|
|
@ -16,11 +16,14 @@ QStringList PictureLoaderWorker::md5Blacklist = QStringList() << "db0c48db407a90
|
||||||
PictureLoaderWorker::PictureLoaderWorker()
|
PictureLoaderWorker::PictureLoaderWorker()
|
||||||
: QObject(nullptr), picsPath(SettingsCache::instance().getPicsPath()),
|
: QObject(nullptr), picsPath(SettingsCache::instance().getPicsPath()),
|
||||||
customPicsPath(SettingsCache::instance().getCustomPicsPath()),
|
customPicsPath(SettingsCache::instance().getCustomPicsPath()),
|
||||||
picDownload(SettingsCache::instance().getPicDownload()), downloadRunning(false), loadQueueRunning(false)
|
picDownload(SettingsCache::instance().getPicDownload()), downloadRunning(false), loadQueueRunning(false),
|
||||||
|
overrideAllCardArtWithPersonalPreference(SettingsCache::instance().getOverrideAllCardArtWithPersonalPreference())
|
||||||
{
|
{
|
||||||
connect(this, SIGNAL(startLoadQueue()), this, SLOT(processLoadQueue()), Qt::QueuedConnection);
|
connect(this, SIGNAL(startLoadQueue()), this, SLOT(processLoadQueue()), Qt::QueuedConnection);
|
||||||
connect(&SettingsCache::instance(), SIGNAL(picsPathChanged()), this, SLOT(picsPathChanged()));
|
connect(&SettingsCache::instance(), SIGNAL(picsPathChanged()), this, SLOT(picsPathChanged()));
|
||||||
connect(&SettingsCache::instance(), SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged()));
|
connect(&SettingsCache::instance(), SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged()));
|
||||||
|
connect(&SettingsCache::instance(), &SettingsCache::overrideAllCardArtWithPersonalPreferenceChanged, this,
|
||||||
|
&PictureLoaderWorker::setOverrideAllCardArtWithPersonalPreference);
|
||||||
|
|
||||||
networkManager = new QNetworkAccessManager(this);
|
networkManager = new QNetworkAccessManager(this);
|
||||||
// We need a timeout to ensure requests don't hang indefinitely in case of
|
// We need a timeout to ensure requests don't hang indefinitely in case of
|
||||||
|
|
@ -83,12 +86,25 @@ void PictureLoaderWorker::processLoadQueue()
|
||||||
qCDebug(PictureLoaderWorkerLog).nospace()
|
qCDebug(PictureLoaderWorkerLog).nospace()
|
||||||
<< "[card: " << cardName << " set: " << setName << "]: Trying to load picture";
|
<< "[card: " << cardName << " set: " << setName << "]: Trying to load picture";
|
||||||
|
|
||||||
if (CardDatabaseManager::getInstance()->isProviderIdForPreferredPrinting(
|
// FIXME: This is a hack so that to keep old Cockatrice behavior
|
||||||
cardName, cardBeingLoaded.getCard()->getPixmapCacheKey())) {
|
// (ignoring provider ID) when the "override all card art with personal
|
||||||
if (cardImageExistsOnDisk(setName, correctedCardName)) {
|
// preference" is set.
|
||||||
|
//
|
||||||
|
// Figure out a proper way to integrate the two systems at some point.
|
||||||
|
//
|
||||||
|
// Note: need to go through a member for
|
||||||
|
// overrideAllCardArtWithPersonalPreference as reading from the
|
||||||
|
// SettingsCache instance from the PictureLoaderWorker thread could
|
||||||
|
// cause race conditions.
|
||||||
|
//
|
||||||
|
// XXX: Reading from the CardDatabaseManager instance from the
|
||||||
|
// PictureLoaderWorker thread might not be safe either
|
||||||
|
bool searchCustomPics = overrideAllCardArtWithPersonalPreference ||
|
||||||
|
CardDatabaseManager::getInstance()->isProviderIdForPreferredPrinting(
|
||||||
|
cardName, cardBeingLoaded.getCard()->getPixmapCacheKey());
|
||||||
|
if (searchCustomPics && cardImageExistsOnDisk(setName, correctedCardName, searchCustomPics)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
qCDebug(PictureLoaderWorkerLog).nospace()
|
qCDebug(PictureLoaderWorkerLog).nospace()
|
||||||
<< "[card: " << cardName << " set: " << setName << "]: No custom picture, trying to download";
|
<< "[card: " << cardName << " set: " << setName << "]: No custom picture, trying to download";
|
||||||
|
|
@ -100,12 +116,14 @@ void PictureLoaderWorker::processLoadQueue()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PictureLoaderWorker::cardImageExistsOnDisk(QString &setName, QString &correctedCardname)
|
bool PictureLoaderWorker::cardImageExistsOnDisk(QString &setName, QString &correctedCardname, bool searchCustomPics)
|
||||||
{
|
{
|
||||||
QImage image;
|
QImage image;
|
||||||
QImageReader imgReader;
|
QImageReader imgReader;
|
||||||
imgReader.setDecideFormatFromContent(true);
|
imgReader.setDecideFormatFromContent(true);
|
||||||
QList<QString> picsPaths = QList<QString>();
|
QList<QString> picsPaths = QList<QString>();
|
||||||
|
|
||||||
|
if (searchCustomPics) {
|
||||||
QDirIterator it(customPicsPath, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
|
QDirIterator it(customPicsPath, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
|
||||||
|
|
||||||
// Recursively check all subdirectories of the CUSTOM folder
|
// Recursively check all subdirectories of the CUSTOM folder
|
||||||
|
|
@ -119,6 +137,7 @@ bool PictureLoaderWorker::cardImageExistsOnDisk(QString &setName, QString &corre
|
||||||
picsPaths << thisPath; // Card found in the CUSTOM directory, somewhere
|
picsPaths << thisPath; // Card found in the CUSTOM directory, somewhere
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!setName.isEmpty()) {
|
if (!setName.isEmpty()) {
|
||||||
picsPaths << picsPath + "/" + setName + "/" + correctedCardname
|
picsPaths << picsPath + "/" + setName + "/" + correctedCardname
|
||||||
|
|
@ -451,6 +470,11 @@ void PictureLoaderWorker::picsPathChanged()
|
||||||
customPicsPath = SettingsCache::instance().getCustomPicsPath();
|
customPicsPath = SettingsCache::instance().getCustomPicsPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PictureLoaderWorker::setOverrideAllCardArtWithPersonalPreference(bool _overrideAllCardArtWithPersonalPreference)
|
||||||
|
{
|
||||||
|
overrideAllCardArtWithPersonalPreference = _overrideAllCardArtWithPersonalPreference;
|
||||||
|
}
|
||||||
|
|
||||||
void PictureLoaderWorker::clearNetworkCache()
|
void PictureLoaderWorker::clearNetworkCache()
|
||||||
{
|
{
|
||||||
networkManager->cache()->clear();
|
networkManager->cache()->clear();
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,16 @@ private:
|
||||||
PictureToLoad cardBeingLoaded;
|
PictureToLoad cardBeingLoaded;
|
||||||
PictureToLoad cardBeingDownloaded;
|
PictureToLoad cardBeingDownloaded;
|
||||||
bool picDownload, downloadRunning, loadQueueRunning;
|
bool picDownload, downloadRunning, loadQueueRunning;
|
||||||
|
bool overrideAllCardArtWithPersonalPreference;
|
||||||
void startNextPicDownload();
|
void startNextPicDownload();
|
||||||
bool cardImageExistsOnDisk(QString &setName, QString &correctedCardName);
|
|
||||||
|
/** Emit the `imageLoaded` signal and return `true` if a picture is found on
|
||||||
|
disk, return `false` otherwise.
|
||||||
|
|
||||||
|
If `searchCustomPics` is `true`, the CUSTOM folder is searched for a
|
||||||
|
matching image first; otherwise, only the set-based folders are used. */
|
||||||
|
bool cardImageExistsOnDisk(QString &setName, QString &correctedCardName, bool searchCustomPics);
|
||||||
|
|
||||||
bool imageIsBlackListed(const QByteArray &);
|
bool imageIsBlackListed(const QByteArray &);
|
||||||
QNetworkReply *makeRequest(const QUrl &url);
|
QNetworkReply *makeRequest(const QUrl &url);
|
||||||
void cacheRedirect(const QUrl &originalUrl, const QUrl &redirectUrl);
|
void cacheRedirect(const QUrl &originalUrl, const QUrl &redirectUrl);
|
||||||
|
|
@ -58,6 +66,7 @@ private slots:
|
||||||
|
|
||||||
void picDownloadChanged();
|
void picDownloadChanged();
|
||||||
void picsPathChanged();
|
void picsPathChanged();
|
||||||
|
void setOverrideAllCardArtWithPersonalPreference(bool _overrideAllCardArtWithPersonalPreference);
|
||||||
public slots:
|
public slots:
|
||||||
void processLoadQueue();
|
void processLoadQueue();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -632,7 +632,7 @@ void SettingsCache::setOverrideAllCardArtWithPersonalPreference(QT_STATE_CHANGED
|
||||||
{
|
{
|
||||||
overrideAllCardArtWithPersonalPreference = static_cast<bool>(_overrideAllCardArt);
|
overrideAllCardArtWithPersonalPreference = static_cast<bool>(_overrideAllCardArt);
|
||||||
settings->setValue("cards/overrideallcardartwithpersonalpreference", overrideAllCardArtWithPersonalPreference);
|
settings->setValue("cards/overrideallcardartwithpersonalpreference", overrideAllCardArtWithPersonalPreference);
|
||||||
emit overrideAllCardArtWithPersonalPreferenceChanged();
|
emit overrideAllCardArtWithPersonalPreferenceChanged(overrideAllCardArtWithPersonalPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsCache::setBumpSetsWithCardsInDeckToTop(QT_STATE_CHANGED_T _bumpSetsWithCardsInDeckToTop)
|
void SettingsCache::setBumpSetsWithCardsInDeckToTop(QT_STATE_CHANGED_T _bumpSetsWithCardsInDeckToTop)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ signals:
|
||||||
void themeChanged();
|
void themeChanged();
|
||||||
void picDownloadChanged();
|
void picDownloadChanged();
|
||||||
void displayCardNamesChanged();
|
void displayCardNamesChanged();
|
||||||
void overrideAllCardArtWithPersonalPreferenceChanged();
|
void overrideAllCardArtWithPersonalPreferenceChanged(bool _overrideAllCardArtWithPersonalPreference);
|
||||||
void bumpSetsWithCardsInDeckToTopChanged();
|
void bumpSetsWithCardsInDeckToTopChanged();
|
||||||
void printingSelectorSortOrderChanged();
|
void printingSelectorSortOrderChanged();
|
||||||
void printingSelectorCardSizeChanged();
|
void printingSelectorCardSizeChanged();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue