Skip to content

Commit 99ba737

Browse files
authored
Fix for #169 (#170)
- remove surplus url path /browse?q= on non-WHDL backed games and - utilize QStringBuilder - align and update testcases
1 parent 32bdb97 commit 99ba737

2 files changed

Lines changed: 65 additions & 34 deletions

File tree

src/openretro.cpp

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
#include <QDebug>
3232
#include <QRegularExpression>
33+
#include <QStringBuilder>
3334

3435
OpenRetro::OpenRetro(Settings *config, QSharedPointer<NetManager> manager)
3536
: AbstractScraper(config, manager, MatchType::MATCH_MANY) {
@@ -98,9 +99,9 @@ void OpenRetro::getSearchResults(QList<GameEntry> &gameEntries,
9899
bool hasWhdlUuid = searchName.left(6) == "/game/";
99100
QString lookupReq = QString(searchUrlPre);
100101
if (hasWhdlUuid) {
101-
lookupReq = lookupReq + searchName;
102+
lookupReq = lookupReq % searchName;
102103
} else {
103-
lookupReq = lookupReq + "/browse?q=" + searchName + searchUrlPost;
104+
lookupReq = lookupReq % "/browse?q=" % searchName % searchUrlPost;
104105
}
105106
netComm->request(lookupReq);
106107
q.exec();
@@ -146,8 +147,8 @@ void OpenRetro::getSearchResults(QList<GameEntry> &gameEntries,
146147
for (const auto &nom : urlPre) {
147148
nomNom(nom);
148149
}
149-
game.url = baseUrl + "/" +
150-
data.left(data.indexOf(urlPost.toUtf8())) + "/edit";
150+
game.url = baseUrl % "/" %
151+
data.left(data.indexOf(urlPost.toUtf8())) % "/edit";
151152

152153
// Digest until title
153154
for (const auto &nom : titlePre) {
@@ -227,7 +228,7 @@ void OpenRetro::getTags(GameEntry &game) {
227228
while (data.indexOf(tagBegin.toUtf8()) != -1) {
228229
nomNom(tagBegin);
229230
nomNom("\">");
230-
tags.append(data.left(data.indexOf("</a>")) + ", ");
231+
tags.append(data.left(data.indexOf("</a>")) % ", ");
231232
}
232233
if (!tags.isEmpty()) {
233234
tags.chop(2); // Remove last ", "
@@ -302,10 +303,10 @@ void OpenRetro::getCover(GameEntry &game) {
302303
nomNom(nom);
303304
}
304305
QString coverUrl =
305-
data.left(data.indexOf(coverPost.toUtf8())).replace("&amp;", "&") +
306-
"?s=512";
306+
data.left(data.indexOf(coverPost.toUtf8())).replace("&amp;", "&") %
307+
QString("?s=512");
307308
if (coverUrl.left(4) != "http") {
308-
coverUrl.prepend(baseUrl + (coverUrl.left(1) == "/" ? "" : "/"));
309+
coverUrl.prepend(baseUrl % (coverUrl.left(1) == "/" ? "" : "/"));
309310
}
310311
game.coverData = downloadMedia(coverUrl);
311312
}
@@ -323,10 +324,10 @@ void OpenRetro::getMarquee(GameEntry &game) {
323324
nomNom(nom);
324325
}
325326
QString marqueeUrl =
326-
data.left(data.indexOf(marqueePost.toUtf8())).replace("&amp;", "&") +
327-
"?s=512";
327+
data.left(data.indexOf(marqueePost.toUtf8())).replace("&amp;", "&") %
328+
QString("?s=512");
328329
if (marqueeUrl.left(4) != "http") {
329-
marqueeUrl.prepend(baseUrl + (marqueeUrl.left(1) == "/" ? "" : "/"));
330+
marqueeUrl.prepend(baseUrl % (marqueeUrl.left(1) == "/" ? "" : "/"));
330331
}
331332
game.marqueeData = downloadMedia(marqueeUrl);
332333
}
@@ -337,17 +338,20 @@ QList<QString> OpenRetro::getSearchNames(const QFileInfo &info,
337338
QList<QString> searchNames;
338339
QString searchName = baseName;
339340

340-
debug.append("Base name: '" + baseName + "'\n");
341+
debug.append("Base name: '" % baseName % "'\n");
341342
qDebug() << "baseName" << baseName;
342343

343344
searchName = lookupSearchName(info, baseName, debug);
344345
qDebug() << "searchName, after lookup SearchName" << searchName;
345-
if (info.suffix() == "lha") {
346+
if (info.suffix() == "lha" &&
347+
!config->whdLoadMap[baseName].second.isEmpty()) {
346348
// Insert uuid from whdload_db.xml first
347-
if (!config->whdLoadMap[baseName].second.isEmpty()) {
348-
searchNames.prepend("/game/" + config->whdLoadMap[baseName].second);
349-
}
349+
searchNames.prepend("/game/" % config->whdLoadMap[baseName].second);
350350
}
351+
// openretro handles "'s" as additional word, remove "'"
352+
searchName = searchName.remove("'");
353+
// remove " of" and " the" as OpenRetro ignores them anyway
354+
searchName = searchName.toLower().remove(" of").remove(" the");
351355
searchName = NameTools::getUrlQueryName(searchName, 3);
352356
qDebug() << "searchName, after UrlQueryname" << searchName;
353357

@@ -358,14 +362,31 @@ QList<QString> OpenRetro::getSearchNames(const QFileInfo &info,
358362
QRegularExpression("[_[]{1}(Aga|AGA)[_\\]]{0,1}")
359363
.match(baseName)
360364
.hasMatch()) {
361-
searchNames.append("/browse?q=" + searchName + "+aga");
365+
QStringList words = searchName.split('+');
366+
int wc = 0;
367+
QStringList wordList;
368+
for (auto const &w : words) {
369+
if (w == "aga")
370+
continue;
371+
wordList.append(w);
372+
wc++;
373+
// OpenRetro may refuse queries with more than 3 words
374+
if (wc > 2)
375+
break;
376+
}
377+
QString searchNameMax = wordList.join("+");
378+
if (wordList.size() > 2)
379+
wordList.removeLast();
380+
searchNames.append(wordList.join("+") % "+aga");
381+
searchNames.append(searchNameMax);
382+
} else {
383+
searchNames.append(searchName);
362384
}
363-
searchNames.append("/browse?q=" + searchName);
364385

365386
if (searchName.indexOf(":") != -1 || searchName.indexOf("-") != -1) {
366387
searchName = searchName.left(searchName.indexOf(":")).simplified();
367388
searchName = searchName.left(searchName.indexOf("-")).simplified();
368-
searchNames.append("/browse?q=" + searchName);
389+
searchNames.append(searchName);
369390
}
370391

371392
return searchNames;

test/getsearchnames/test_getsearchnames.cpp

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -104,20 +104,20 @@ private slots:
104104
{"OpenRetro, with aliasMap match",
105105
QPair<QString, QStringList>(
106106
"./rom_samples/Mother 25th Restoration Hack.zip",
107-
{"/browse?q=motherx"})},
107+
{"motherx"})},
108108
{"OpenRetro, with ROM hack and no aliasMap entry",
109109
QPair<QString, QStringList>(
110110
"./rom_samples/Mother 25th Restoration Hack_Hack.zip",
111-
{"/browse?q=mother+25th"})},
112-
{"OpenRetro, w/o aliasMap match 1 word",
113-
QPair<QString, QStringList>("./rom_samples/1942.zip",
114-
{"/browse?q=1942"})},
115-
{"OpenRetro, w/o aliasMap match 2+ words",
111+
{"mother+25th+restoration"})},
112+
{"OpenRetro, w/o aliasMap match 1 word",
113+
QPair<QString, QStringList>("./rom_samples/1942.zip", {"1942"})},
114+
{"OpenRetro, w/o aliasMap match 2+ words",
116115
QPair<QString, QStringList>("./rom_samples/abclimax.zip",
117-
{"/browse?q=after+burner"})},
116+
{"after+burner+climax"})},
118117

119118
};
120119

120+
settings.arcadePlatform = true;
121121
settings.platform = "fba";
122122
settings.mameMap = {{"1942", "1942 (Revision B)"},
123123
{"abclimax", "After Burner Climax (Export)"}
@@ -129,6 +129,7 @@ private slots:
129129
void testOpenRetroMatchMany() {
130130
scraper = new OpenRetro(&settings, NULL);
131131
settings.platform = "amiga";
132+
settings.arcadePlatform = false;
132133
settings.whdLoadMap = {
133134
{"BillsTomatoGame_v2.0_1748",
134135
{"Bill's Tomato Game", "307c1c7f-1f31-5b7d-ac71-57a9f035679f"}},
@@ -142,16 +143,20 @@ private slots:
142143
QPair<QString, QStringList>(
143144
"./rom_samples/BillsTomatoGame_v2.0_1748.lha",
144145
{"/game/307c1c7f-1f31-5b7d-ac71-57a9f035679f",
145-
"/browse?q=bill%27s+tomato"})},
146-
{"OpenRetro, w/o amiga whdl match",
146+
"bills+tomato+game"})},
147+
{"OpenRetro, w/o amiga whdl match and version in file",
147148
QPair<QString, QStringList>(
148149
"./rom_samples/Some game-here V1.0.lha",
149-
{"/browse?q=some+game-here", "/browse?q=some+game"})},
150+
{"some+game-here", "some+game"})},
150151
{"OpenRetro, with amiga whdl and aga match",
151152
QPair<QString, QStringList>(
152153
"./rom_samples/Burntime_v1.2_AGA_2213.lha",
153-
{"/game/930a2652-50e0-5b89-8076-3ec478f0e6ad",
154-
"/browse?q=burntime+aga", "/browse?q=burntime"})},
154+
{"/game/930a2652-50e0-5b89-8076-3ec478f0e6ad", "burntime+aga",
155+
"burntime"})},
156+
{"OpenRetro, w/o amiga whdl match but aga with 3+ words",
157+
QPair<QString, QStringList>(
158+
"./rom_samples/Word1 Word2 Word3_Aga_.lha",
159+
{"word1+word2+aga", "word1+word2+word3"})},
155160

156161
};
157162

@@ -160,15 +165,15 @@ private slots:
160165
QMap<QString, QPair<QString, QStringList>> tests_scummvm = {
161166
{"OpenRetro, with scummvm.ini match",
162167
QPair<QString, QStringList>("./rom_samples/tentacle.svm",
163-
{"/browse?q=day+of"})},
168+
{"day+tentacle"})},
164169
{"OpenRetro, w/o scummvm.ini match",
165170
QPair<QString, QStringList>(
166-
"./rom_samples/the yabba dabba doo.svm",
167-
{"/browse?q=yabba+dabba"})},
171+
"./rom_samples/the yabba dabba doo.svm", {"yabba+dabba+doo"})},
168172

169173
};
170174

171175
settings.platform = "scummvm";
176+
settings.arcadePlatform = false;
172177
settings.scummIni =
173178
QCoreApplication::applicationDirPath() + "/scummvm.ini";
174179

@@ -178,6 +183,7 @@ private slots:
178183
void testIgdb() {
179184
scraper = new Igdb(&settings, NULL);
180185
settings.platform = "amiga";
186+
settings.arcadePlatform = false;
181187
settings.whdLoadMap = {
182188
{"BillsTomatoGame_v2.0_1748",
183189
{"Bill's Tomato Game", "307c1c7f-1f31-5b7d-ac71-57a9f035679f"}},
@@ -229,6 +235,7 @@ private slots:
229235
};
230236

231237
settings.platform = "scummvm";
238+
settings.arcadePlatform = false;
232239
settings.scummIni =
233240
QCoreApplication::applicationDirPath() + "/scummvm.ini";
234241

@@ -238,6 +245,7 @@ private slots:
238245
void testMobyGames() {
239246
scraper = new MobyGames(&settings, NULL);
240247
settings.platform = "amiga";
248+
settings.arcadePlatform = false;
241249
settings.whdLoadMap = {
242250
{"BillsTomatoGame_v2.0_1748",
243251
{"Bill's Tomato Game", "307c1c7f-1f31-5b7d-ac71-57a9f035679f"}},
@@ -282,13 +290,15 @@ private slots:
282290
};
283291

284292
settings.platform = "scummvm";
293+
settings.arcadePlatform = false;
285294
settings.scummIni =
286295
QCoreApplication::applicationDirPath() + "/scummvm.ini";
287296

288297
match(tests_scummvm);
289298
}
290299
void testScreenscraper() {
291300
scraper = new ScreenScraper(&settings, NULL);
301+
settings.arcadePlatform = true;
292302
settings.platform = "mame-libretro";
293303
QStringList zaxxon_expected = {
294304
"crc=BB2E0146", "md5=852605F01A3E2D21FBAF35FCAB385B94",

0 commit comments

Comments
 (0)