13#define LOC_ERR QString("MythGame:ROMINFO Error: ")
14#define LOC QString("MythGame:ROMINFO: ")
25 bool inserting =
false;
32 LOG(VB_GENERAL, LOG_INFO,
LOC + QString(
"Adding %1 - %2")
35 query.
prepare(
"INSERT INTO gamemetadata "
36 "(`system`, romname, gamename, genre, year, gametype, "
37 "rompath, country, crc_value, diskcount, display, plot, "
38 "publisher, version, fanart, boxart, screenshot) "
39 "VALUES (:SYSTEM, :ROMNAME, :GAMENAME, :GENRE, :YEAR, "
40 ":GAMETYPE, :ROMPATH, :COUNTRY, :CRC32, '1', '1', :PLOT, "
41 ":PUBLISHER, :VERSION, :FANART, :BOXART, :SCREENSHOT)");
61 query.
prepare(
"UPDATE gamemetadata "
62 "SET version = 'CUSTOM', "
63 " gamename = :GAMENAME,"
66 " country = :COUNTRY,"
68 " publisher = :PUBLISHER,"
69 " favorite = :FAVORITE,"
70 " screenshot = :SCREENSHOT,"
73 " inetref = :INETREF "
74 "WHERE gametype = :GAMETYPE AND "
75 " romname = :ROMNAME");
100 LOG(VB_GENERAL, LOG_INFO,
LOC + QString(
"Removing %1 - %2")
105 query.
prepare(
"DELETE FROM gamemetadata WHERE "
106 "romname = :ROMNAME AND "
107 "rompath = :ROMPATH ");
118int romInDB(
const QString& rom,
const QString& gametype)
124 query.
prepare(
"SELECT count(*) FROM gamemetadata "
125 "WHERE gametype = :GAMETYPE "
126 "AND romname = :ROMNAME");
139 count = query.
value(0).toInt();
147 QStringList graphic_formats;
148 graphic_formats.append(
"png");
149 graphic_formats.append(
"gif");
150 graphic_formats.append(
"jpg");
151 graphic_formats.append(
"jpeg");
152 graphic_formats.append(
"xpm");
153 graphic_formats.append(
"bmp");
154 graphic_formats.append(
"pnm");
155 graphic_formats.append(
"tif");
156 graphic_formats.append(
"tiff");
158 int dotLocation = BaseFileName.lastIndexOf(
'.');
159 if (dotLocation == -1)
161 BaseFileName.append(
'.');
162 dotLocation = BaseFileName.length();
166 BaseFileName.truncate(dotLocation + 1);
167 return std::ranges::any_of(std::as_const(graphic_formats),
168 [BaseFileName,result](
const auto & format)
169 { *result = BaseFileName + format;
175 if (field ==
"system")
177 else if (field ==
"gamename")
179 else if (field ==
"genre")
181 else if (field ==
"year")
183 else if (field ==
"favorite")
185 else if (field ==
"rompath")
187 else if (field ==
"screenshot")
189 else if (field ==
"fanart")
191 else if (field ==
"boxart")
193 else if (field ==
"country")
195 else if (field ==
"plot")
197 else if (field ==
"publisher")
199 else if (field ==
"crc_value")
201 else if (field ==
"inetref")
203 else if (field ==
"diskcount")
205 else if (field ==
"gametype")
207 else if (field ==
"romcount")
210 LOG(VB_GENERAL, LOG_ERR,
LOC + QString(
"Invalid field %1").arg(field));
222 query.
prepare(
"UPDATE gamemetadata SET favorite = :FAV "
223 "WHERE romname = :ROMNAME");
237 int pos =
Romname().lastIndexOf(
".");
241 pos =
Romname().length() - pos;
244 QString ext =
Romname().right(pos);
259 systemtype +=
" AND `system` = :SYSTEM ";
262 QString thequery =
"SELECT `system`,gamename,genre,year,romname,favorite,"
263 "rompath,country,crc_value,diskcount,gametype,plot,publisher,"
264 "version,screenshot,fanart,boxart,inetref,intid FROM gamemetadata "
265 "WHERE gamename = :GAMENAME "
266 + systemtype +
" ORDER BY diskcount DESC";
301 query.
prepare(
"SELECT DISTINCT `system` FROM gamemetadata "
302 "WHERE romname = :ROMNAME");
327 QString querystr =
"SELECT intid,`system`,romname,gamename,genre,year,publisher,"
328 "favorite,rompath,screenshot,fanart,plot,boxart,"
329 "gametype,diskcount,country,crc_value,inetref,display,"
330 "version FROM gamemetadata ORDER BY diskcount DESC";
343 query.
value(0).toInt(),
344 query.
value(2).toString(),
345 query.
value(1).toString(),
346 query.
value(3).toString(),
347 query.
value(4).toString(),
348 query.
value(5).toString(),
349 query.
value(7).toBool(),
350 query.
value(8).toString(),
351 query.
value(15).toString(),
352 query.
value(16).toString(),
353 query.
value(14).toInt(),
354 query.
value(13).toString(),
356 query.
value(11).toString(),
357 query.
value(6).toString(),
358 query.
value(19).toString(),
359 query.
value(9).toString(),
360 query.
value(10).toString(),
361 query.
value(12).toString(),
362 query.
value(17).toString());
375 QString querystr =
"SELECT intid,`system`,romname,gamename,genre,year,publisher,"
376 "favorite,rompath,screenshot,fanart,plot,boxart,"
377 "gametype,diskcount,country,crc_value,inetref,display,"
378 "version FROM gamemetadata WHERE intid = :INTID";
389 query.
value(0).toInt(),
390 query.
value(2).toString(),
391 query.
value(1).toString(),
392 query.
value(3).toString(),
393 query.
value(4).toString(),
394 query.
value(5).toString(),
395 query.
value(7).toBool(),
396 query.
value(8).toString(),
397 query.
value(15).toString(),
398 query.
value(16).toString(),
399 query.
value(14).toInt(),
400 query.
value(13).toString(),
402 query.
value(11).toString(),
403 query.
value(6).toString(),
404 query.
value(19).toString(),
405 query.
value(9).toString(),
406 query.
value(10).toString(),
407 query.
value(12).toString(),
408 query.
value(17).toString());
419 return QString (
"Rom Info:\n"
QSqlQuery wrapper that fetches a DB connection from the connection pool.
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
QVariant value(int i) const
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
static void DBError(const QString &where, const MSqlQuery &query)
QString Screenshot() const
void setGameType(const QString &lgametype)
void setVersion(const QString &lversion)
void setBoxart(const QString &lboxart)
void setRomCount(int lromcount)
void setFavorite(bool updateDatabase=false)
void setCRC_VALUE(const QString &lcrc_value)
static bool FindImage(QString BaseFileName, QString *result)
void setRompath(const QString &lrompath)
void SaveToDatabase() const
void setField(const QString &field, const QString &data)
QString getExtension() const
void setGenre(const QString &lgenre)
void setDiskCount(int ldiskcount)
void setPlot(const QString &lplot)
void setCountry(const QString &lcountry)
RomInfo(int lid=0, QString lromname="", QString lsystem="", QString lgamename="", QString lgenre="", QString lyear="", bool lfavorite=false, QString lrompath="", QString lcountry="", QString lcrc_value="", int ldiskcount=0, QString lgametype="", int lromcount=0, QString lallsystems="", QString lplot="", QString lpublisher="", QString lversion="", QString lscreenshot="", QString lfanart="", QString lboxart="", QString linetref="")
void setFanart(const QString &lfanart)
void DeleteFromDatabase() const
void setYear(const QString &lyear)
void setScreenshot(const QString &lscreenshot)
static QList< RomInfo * > GetAllRomInfo()
void setPublisher(const QString &lpublisher)
QString Publisher() const
void setInetref(const QString &linetref)
void setSystem(const QString &lsystem)
void setGamename(const QString &lgamename)
void setRomname(const QString &lromname)
static RomInfo * GetRomInfoById(int id)
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
bool operator==(const RomInfo &a, const RomInfo &b)
int romInDB(const QString &rom, const QString &gametype)