mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-22 09:35:08 -07:00
[PictureLoader] Fix custom-folder pictures in subdirectories not loading (#7340)
Some checks are pending
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (actions) (push) Waiting to run
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 26 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker / Servatrice (arm) (push) Waiting to run
Build Docker / Servatrice (x86) (push) Waiting to run
Build Docker / Publish multi-platform Servatrice image (push) Blocked by required conditions
Some checks are pending
CodeQL / Analyze (cpp) (push) Waiting to run
CodeQL / Analyze (actions) (push) Waiting to run
Build Desktop / Configure (push) Waiting to run
Build Desktop / Debian 13 (push) Blocked by required conditions
Build Desktop / Debian 12 (push) Blocked by required conditions
Build Desktop / Fedora 44 (push) Blocked by required conditions
Build Desktop / Fedora 43 (push) Blocked by required conditions
Build Desktop / Servatrice_Debian 12 (push) Blocked by required conditions
Build Desktop / Ubuntu 26.04 (push) Blocked by required conditions
Build Desktop / Ubuntu 24.04 (push) Blocked by required conditions
Build Desktop / Arch (push) Blocked by required conditions
Build Desktop / macOS 13 Intel (push) Blocked by required conditions
Build Desktop / macOS 14 (push) Blocked by required conditions
Build Desktop / macOS 15 (push) Blocked by required conditions
Build Desktop / macOS 26 Debug (push) Blocked by required conditions
Build Desktop / Windows 10 (push) Blocked by required conditions
Build Docker / Servatrice (arm) (push) Waiting to run
Build Docker / Servatrice (x86) (push) Waiting to run
Build Docker / Publish multi-platform Servatrice image (push) Blocked by required conditions
CardPictureLoaderLocal compared the full file name (including extension) of the custom-folder candidate against the extension-stripped base name of each directory entry, so a CUSTOM subfolder image like pics/CUSTOM/poker/1 of Hearts.png never matched and the card fell through to the network. Compare the complete base names instead. Add matcher tests covering CUSTOM subfolder resolution. Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
e97ef5a617
commit
7a41dfe175
2 changed files with 35 additions and 1 deletions
|
|
@ -101,7 +101,7 @@ QImage CardPictureLoaderLocal::tryLoadCardImageFromDisk(const QString &setName,
|
||||||
for (const QString &path : candidatePaths) {
|
for (const QString &path : candidatePaths) {
|
||||||
QFileInfo fileInfo(path);
|
QFileInfo fileInfo(path);
|
||||||
QDir dir = fileInfo.dir();
|
QDir dir = fileInfo.dir();
|
||||||
QString baseName = fileInfo.fileName();
|
QString baseName = fileInfo.completeBaseName();
|
||||||
|
|
||||||
if (!dir.exists()) {
|
if (!dir.exists()) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,18 @@ protected:
|
||||||
loader = nullptr;
|
loader = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Destroys and rebuilds the loader so the CUSTOM index is re-scanned.
|
||||||
|
*
|
||||||
|
* The CUSTOM-folder index is snapshotted at construction; rebuild it after
|
||||||
|
* writing files so freshly placed images are discoverable.
|
||||||
|
*/
|
||||||
|
void rebuildLoader()
|
||||||
|
{
|
||||||
|
delete loader;
|
||||||
|
loader = new CardPictureLoaderLocal(nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Writes a valid 1x1 PNG under the sandboxed pics path.
|
* @brief Writes a valid 1x1 PNG under the sandboxed pics path.
|
||||||
*/
|
*/
|
||||||
|
|
@ -162,6 +174,28 @@ TEST_F(LocalMatcherTest, SetFolderCandidateTakesPrecedenceOverRootFallback)
|
||||||
EXPECT_EQ(image.pixelColor(0, 0), QColor(Qt::red)) << "The set-folder candidate must be preferred";
|
EXPECT_EQ(image.pixelColor(0, 0), QColor(Qt::red)) << "The set-folder candidate must be preferred";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(LocalMatcherTest, CustomSubfolderResolvesExactFile)
|
||||||
|
{
|
||||||
|
// Images in the CUSTOM folder are indexed by their full file path (extension included),
|
||||||
|
// unlike the extension-less candidate paths built from the naming schemes.
|
||||||
|
writePngUnderPics("CUSTOM/poker/TestCard.png");
|
||||||
|
rebuildLoader();
|
||||||
|
|
||||||
|
const QImage image = loader->tryLoad(cardFor("TestCard", "", ""));
|
||||||
|
|
||||||
|
EXPECT_FALSE(image.isNull()) << "A CUSTOM-folder image in a subdirectory must resolve";
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(LocalMatcherTest, CustomSubfolderIgnoresSuffixedFiles)
|
||||||
|
{
|
||||||
|
writePngUnderPics("CUSTOM/poker/TestCard (1).png");
|
||||||
|
rebuildLoader();
|
||||||
|
|
||||||
|
const QImage image = loader->tryLoad(cardFor("TestCard", "", ""));
|
||||||
|
|
||||||
|
EXPECT_TRUE(image.isNull()) << "A suffixed CUSTOM-folder file must not satisfy an exact name lookup";
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue