Ticket #7889: mythgame.diff
File mythgame.diff, 22.1 KB (added by , 14 years ago) |
---|
-
mythgame/gamehandler.cpp
5 5 #include <QObject> 6 6 #include <QRegExp> 7 7 #include <QDir> 8 #include <Q 3PtrList>8 #include <QList> 9 9 10 10 #include <mythcontext.h> 11 11 #include <mythdbcon.h> … … 16 16 #define LOC_ERR QString("MythGame:GAMEHANDLER Error: ") 17 17 #define LOC QString("MythGame:GAMEHANDLER: ") 18 18 19 static Q 3PtrList<GameHandler> *handlers = NULL;19 static QList<GameHandler*> *handlers = NULL; 20 20 21 21 bool existsHandler(const QString name) 22 22 { 23 GameHandler *handler = handlers->first(); 24 while(handler) 23 for (int i = 0; i < handlers->size(); i++) 25 24 { 25 GameHandler *handler = handlers->at(i); 26 26 if (handler->SystemName() == name) 27 { 28 return TRUE; 29 } 30 31 handler = handlers->next(); 27 return true; 32 28 } 33 29 34 return FALSE;30 return false; 35 31 } 36 32 37 33 static void checkHandlers(void) 38 34 { 39 35 // If a handlers list doesn't currently exist create one. Otherwise 40 36 // clear the existing list so that we can regenerate a new one. 41 if (! handlers) 42 { 43 handlers = new Q3PtrList<GameHandler>; 44 } 45 else { 37 if (!handlers) 38 handlers = new QList<GameHandler*>; 39 else 40 { 41 while (!handlers->isEmpty()) 42 delete handlers->takeFirst(); 46 43 handlers->clear(); 47 44 } 48 45 … … 52 49 MythDB::DBError("checkHandlers - selecting playername", query); 53 50 54 51 while (query.next()) 55 { 52 { 56 53 QString name = query.value(0).toString(); 57 54 GameHandler::registerHandler(GameHandler::newHandler(name)); 58 } 59 55 } 60 56 } 61 57 62 GameHandler *GameHandler::getHandler(uint i)58 GameHandler *GameHandler::getHandler(uint i) 63 59 { 64 60 return handlers->at(i); 65 61 } … … 82 78 handler->screenshots = query.value(3).toString(); 83 79 handler->gameplayerid = query.value(4).toInt(); 84 80 handler->gametype = query.value(5).toString(); 85 handler->validextensions = QStringList::split(",",86 query.value(6).toString().stripWhiteSpace().remove(" "));81 handler->validextensions = query.value(6).toString().trimmed() 82 .remove(" ").split(","); 87 83 handler->spandisks = query.value(7).toInt(); 88 84 } 89 90 85 } 91 86 92 87 GameHandler* GameHandler::newInstance = 0; … … 307 302 { 308 303 MSqlQuery query(MSqlQuery::InitCon()); 309 304 310 QRegExp multiDiskRGXP = QRegExp( "[0-4]$", TRUE, FALSE);305 QRegExp multiDiskRGXP = QRegExp( "[0-4]$", Qt::CaseSensitive, QRegExp::RegExp); 311 306 int diskcount = 0; 312 307 int pos = 0; 313 308 … … 344 339 { 345 340 { 346 341 347 pos = RomName. findRev(".");342 pos = RomName.lastIndexOf("."); 348 343 if (pos > 1) 349 344 { 350 345 extlength = RomName.length() - pos; … … 428 423 for (iter = m_GameMap.begin(); iter != m_GameMap.end(); iter++) 429 424 { 430 425 431 if (iter. data().FoundLoc() == inFileSystem)426 if (iter.value().FoundLoc() == inFileSystem) 432 427 { 433 428 if (indepth) 434 429 { 435 GetMetadata(handler, iter. data().RomFullPath(), &Genre, &Year, &Country, &CRC32, &GameName,430 GetMetadata(handler, iter.value().RomFullPath(), &Genre, &Year, &Country, &CRC32, &GameName, 436 431 &Plot, &Publisher, &Version, &Fanart, &Boxart); 437 432 } 438 433 else 439 434 { 440 Genre = QObject::tr( QString("Unknown%1").arg( handler->GameType() ));435 Genre = QObject::tr("Unknown") + handler->GameType(); 441 436 Country = QObject::tr("Unknown"); 442 437 CRC32 = ""; 443 438 Year = QObject::tr("19xx"); … … 450 445 } 451 446 452 447 if (GameName == QObject::tr("Unknown")) 453 GameName = iter. data().GameName();448 GameName = iter.value().GameName(); 454 449 455 int suffixPos = iter.data().Rom().lastIndexOf(QChar('.'));456 QString baseName = iter.data().Rom();450 int suffixPos = iter.value().Rom().lastIndexOf(QChar('.')); 451 QString baseName = iter.value().Rom(); 457 452 458 453 if (suffixPos > 0) 459 baseName = iter. data().Rom().left(suffixPos);454 baseName = iter.value().Rom().left(suffixPos); 460 455 461 456 baseName = screenShotPath + "/" + baseName; 462 457 463 458 if (QFile(baseName + ".png").exists()) 464 459 ScreenShot = baseName + ".png"; 465 460 else if (QFile(baseName + ".jpg").exists()) 466 461 ScreenShot = baseName + ".jpg"; … … 481 476 ":FANART, :BOXART, :SCREENSHOT)"); 482 477 483 478 query.bindValue(":SYSTEM",handler->SystemName()); 484 query.bindValue(":ROMNAME",iter. data().Rom());479 query.bindValue(":ROMNAME",iter.value().Rom()); 485 480 query.bindValue(":GAMENAME",GameName); 486 481 query.bindValue(":GENRE",Genre); 487 482 query.bindValue(":YEAR",Year); 488 483 query.bindValue(":GAMETYPE",handler->GameType()); 489 query.bindValue(":ROMPATH",iter. data().RomPath());484 query.bindValue(":ROMPATH",iter.value().RomPath()); 490 485 query.bindValue(":COUNTRY",Country); 491 486 query.bindValue(":CRC32", CRC32); 492 487 query.bindValue(":PLOT", Plot); … … 494 489 query.bindValue(":VERSION", Version); 495 490 query.bindValue(":FANART", Fanart); 496 491 query.bindValue(":BOXART", Boxart); 497 492 query.bindValue(":SCREENSHOT", ScreenShot); 498 493 499 494 if (!query.exec()) 500 495 MythDB::DBError("GameHandler::UpdateGameDB - " 501 496 "insert gamemetadata", query); 502 497 } 503 else if ((iter. data().FoundLoc() == inDatabase) && (removalprompt))498 else if ((iter.value().FoundLoc() == inDatabase) && (removalprompt)) 504 499 { 505 500 506 promptForRemoval( iter. data().Rom() , iter.data().RomPath() );501 promptForRemoval( iter.value().Rom() , iter.value().RomPath() ); 507 502 } 508 503 509 504 progressDlg->setProgress(++counter); … … 545 540 if ((iter = m_GameMap.find(RomName)) != m_GameMap.end()) 546 541 { 547 542 // If it's both on disk and in the database we're done with it. 548 m_GameMap. remove(iter);543 m_GameMap.erase(iter); 549 544 } 550 545 else 551 546 { … … 569 564 int filecount = 0; 570 565 QDir RomDir(directory); 571 566 572 567 // If we can't read it's contents move on 573 568 if (!RomDir.isReadable()) 574 569 return 0; 575 570 576 571 QFileInfoList List = RomDir.entryInfoList(); 577 572 for (QFileInfoList::const_iterator it = List.begin(); 578 573 it != List.end(); ++it) 579 { 574 { 580 575 QFileInfo Info = *it; 581 576 QString RomName = Info.fileName(); 582 577 583 578 if (RomName == "." || 584 579 RomName == "..") 585 { 580 { 586 581 continue; 587 582 } 588 583 589 584 if (Info.isDir()) 590 { 585 { 591 586 filecount += buildFileCount(Info.filePath(), handler); 592 587 continue; 593 588 } 594 589 else 595 { 590 { 596 591 if (handler->validextensions.count() > 0) 597 { 592 { 598 593 QRegExp r; 599 594 600 r.setPattern("^" + Info.extension( FALSE ) + "$"); 601 r.setCaseSensitive(false); 602 QStringList result = handler->validextensions.grep(r); 603 if (result.isEmpty()) { 595 r.setPattern("^" + Info.suffix() + "$"); 596 r.setCaseSensitivity(Qt::CaseInsensitive); 597 QStringList result; 598 for (int x = 0; x < handler->validextensions.size(); x++) 599 { 600 QString extension = handler->validextensions.at(x); 601 if (extension.contains(r)) 602 result.append(extension); 603 } 604 if (result.isEmpty()) 604 605 continue; 605 }606 606 } 607 607 608 filecount++; 608 609 609 } 610 610 } 611 611 … … 658 658 { 659 659 QFileInfo Info = *it; 660 660 QString RomName = Info.fileName(); 661 QString GameName = Info. baseName(TRUE);661 QString GameName = Info.completeBaseName(); 662 662 663 663 if (RomName == "." || 664 664 RomName == "..") … … 678 678 { 679 679 QRegExp r; 680 680 681 r.setPattern("^" + Info.extension( FALSE ) + "$"); 682 r.setCaseSensitive(false); 683 QStringList result = handler->validextensions.grep(r); 684 if (result.isEmpty()) { 681 r.setPattern("^" + Info.suffix() + "$"); 682 r.setCaseSensitivity(Qt::CaseInsensitive); 683 QStringList result; 684 for (int x = 0; x < handler->validextensions.size(); x++) 685 { 686 QString extension = handler->validextensions.at(x); 687 if (extension.contains(r)) 688 result.append(extension); 689 } 690 691 if (result.isEmpty()) 685 692 continue; 686 }687 693 } 688 694 689 695 m_GameMap[RomName] = GameScan(RomName,Info.filePath(),inFileSystem, 690 GameName, Info.dirPath());696 GameName, Info.absoluteDir().path()); 691 697 692 VERBOSE(VB_GENERAL, LOC + QString("Found Rom : (%1) - %2") 693 .arg(handler->SystemName()) 694 .arg(RomName)); 698 VERBOSE(VB_GENERAL, LOC + QString("Found Rom : (%1) - %2") 699 .arg(handler->SystemName()).arg(RomName)); 695 700 696 701 *filecount = *filecount + 1; 697 702 pdial->setProgress(*filecount); … … 728 733 729 734 if (handler->GameType() == "PC") 730 735 { 731 m_GameMap[handler->SystemCmdLine()] = GameScan(handler->SystemCmdLine(), 732 handler->SystemCmdLine(), 733 inFileSystem, 734 handler->SystemName(), 735 handler->SystemCmdLine().left(handler->SystemCmdLine().findRev(QRegExp("/")))); 736 m_GameMap[handler->SystemCmdLine()] = 737 GameScan(handler->SystemCmdLine(), 738 handler->SystemCmdLine(), 739 inFileSystem, 740 handler->SystemName(), 741 handler->SystemCmdLine().left(handler->SystemCmdLine().lastIndexOf(QRegExp("/")))); 736 742 737 743 738 744 pdial->setProgress(maxcount); … … 770 776 checkHandlers(); 771 777 QStringList updatelist; 772 778 773 GameHandler *handler = handlers->first(); 774 775 while(handler) 779 for (int x = 0; x < handlers->size(); x++) 776 780 { 777 updateSettings(handler); 778 handler->processGames(handler); 781 GameHandler *handler = handlers->at(x); 779 782 780 if (handler->needRebuild()) 781 updatelist.append(handler->GameType()); 783 if (handler) 784 { 785 updateSettings(handler); 786 handler->processGames(handler); 782 787 783 handler = handlers->next(); 788 if (handler->needRebuild()) 789 updatelist.append(handler->GameType()); 790 } 784 791 } 785 792 786 793 if (!updatelist.isEmpty()) … … 792 799 if (!rominfo) 793 800 return NULL; 794 801 795 GameHandler *handler = handlers->first(); 796 while(handler) 797 { 798 if(rominfo->System() == handler->SystemName()) 799 { 800 return handler; 802 for (int x = 0; x < handlers->size(); x++) 803 { 804 GameHandler *handler = handlers->at(x); 805 if (handler) 806 { 807 if (rominfo->System() == handler->SystemName()) 808 return handler; 801 809 } 802 handler = handlers->next();803 810 } 804 return handler; 811 812 return NULL; 805 813 } 806 814 807 815 GameHandler* GameHandler::GetHandlerByName(QString systemname) … … 809 817 if (systemname.isEmpty() || systemname.isNull()) 810 818 return NULL; 811 819 812 GameHandler *handler = handlers->first(); 813 while(handler) 820 for (int x = 0; x < handlers->size(); x++) 814 821 { 815 if(handler->SystemName() == systemname) 822 GameHandler *handler = handlers->at(x); 823 824 if (handler) 816 825 { 817 return handler; 826 if (handler->SystemName() == systemname) 827 return handler; 818 828 } 819 handler = handlers->next();820 829 } 821 return handler; 830 831 return NULL; 822 832 } 823 833 824 834 void GameHandler::Launchgame(RomInfo *romdata, QString systemname) … … 850 860 851 861 if (handler->SpanDisks()) 852 862 { 853 QRegExp rxp = QRegExp( "%d[0-4]", TRUE, FALSE);863 QRegExp rxp = QRegExp( "%d[0-4]", Qt::CaseSensitive, QRegExp::RegExp); 854 864 855 865 if (exec.contains(rxp)) 856 866 { 857 867 if (romdata->DiskCount() > 1) 858 868 { 859 869 // Chop off the extension, . and last character of the name which we are assuming is the disk # 860 870 QString basename = romdata->Romname().left(romdata->Romname().length() - (romdata->getExtension().length() + 2)); 861 871 QString extension = romdata->getExtension(); 862 872 QString rom; … … 886 896 } 887 897 } 888 898 889 QString savedir = QDir::current DirPath();899 QString savedir = QDir::current().path(); 890 900 QDir d; 891 if (!handler->SystemWorkingPath().isEmpty()) { 901 if (!handler->SystemWorkingPath().isEmpty()) 902 { 892 903 if (!d.cd(handler->SystemWorkingPath())) 893 904 { 894 905 VERBOSE(VB_GENERAL, LOC_ERR + QString("Failed to change to specified Working Directory: %1") 895 906 .arg(handler->SystemWorkingPath())); 896 907 } 897 908 } 898 909 VERBOSE(VB_GENERAL, LOC + QString("Launching Game : %1 : %2") 899 900 910 .arg(handler->SystemName()) 911 .arg(exec)); 901 912 902 913 903 QStringList cmdlist = QStringList::split(";", exec);914 QStringList cmdlist = exec.split(";"); 904 915 if (cmdlist.count() > 0) { 905 916 for ( QStringList::Iterator cmd = cmdlist.begin(); cmd != cmdlist.end(); ++cmd ) { 906 917 VERBOSE(VB_GENERAL, LOC + QString("Executing : %1").arg(*cmd)); -
mythgame/gameui.cpp
22 22 { 23 23 public: 24 24 GameTreeInfo(const QString& levels, const QString& filter) 25 : m_levels( QStringList::split(" ", levels))25 : m_levels(levels.split(" ")) 26 26 , m_filter(filter) 27 27 { 28 28 } … … 120 120 121 121 if (m_showHashed) 122 122 { 123 int pos = levels. find("gamename",0);123 int pos = levels.indexOf("gamename"); 124 124 if (pos >= 0) 125 125 levels.insert(pos, " hash "); 126 126 } … … 253 253 { 254 254 chooseSystemPopup->SetReturnEvent(this, "chooseSystemPopup"); 255 255 QString all_systems = romInfo->AllSystems(); 256 QStringList players = QStringList::split(",", all_systems);256 QStringList players = all_systems.split(","); 257 257 for (QStringList::Iterator it = players.begin(); 258 258 it != players.end(); ++it) 259 259 { … … 546 546 filter += " and romname like '" + layer + "%'"; 547 547 548 548 } 549 else if ((childLevel == "gamename") && (layer.length() == 1)) { 549 else if ((childLevel == "gamename") && (layer.length() == 1)) 550 { 550 551 columns = childIsLeaf 551 552 ? childLevel + ",system,year,genre,gamename" 552 553 : childLevel; … … 555 556 filter += " and gamename like '" + layer + "%'"; 556 557 557 558 } 558 else if (childLevel == "hash") { 559 else if (childLevel == "hash") 560 { 559 561 columns = "left(gamename,1)"; 560 562 } 561 else { 563 else 564 { 562 565 563 566 columns = childIsLeaf 564 567 ? childLevel + ",system,year,genre,gamename" … … 567 570 568 571 // this whole section ought to be in rominfo.cpp really, but I've put it 569 572 // in here for now to minimise the number of files changed by this mod 570 if (romInfo) { 573 if (romInfo) 574 { 571 575 if (!romInfo->System().isEmpty()) 572 576 { 573 577 filter += conj + "trim(system)=:SYSTEM"; … … 605 609 QString sql; 606 610 607 611 if ((childLevel == "gamename") && (m_gameShowFileName)) 608 { 612 { 609 613 sql = "select distinct " 610 614 + columns 611 615 + " from gamemetadata " … … 613 617 + " order by romname" 614 618 + ";"; 615 619 } 616 else if (childLevel == "hash") { 620 else if (childLevel == "hash") 621 { 617 622 sql = "select distinct " 618 623 + columns 619 624 + " from gamemetadata " … … 697 702 { 698 703 while (query.next()) 699 704 { 700 QString current = query.value(0).toString(). stripWhiteSpace();705 QString current = query.value(0).toString().trimmed(); 701 706 MythGenericTree *new_node = 702 707 new MythGenericTree(current, node->getInt() + 1, false); 703 708 if (IsLeaf) 704 709 { 705 710 RomInfo *temp = new RomInfo(); 706 temp->setSystem(query.value(1).toString(). stripWhiteSpace());711 temp->setSystem(query.value(1).toString().trimmed()); 707 712 temp->setYear(query.value(2).toString()); 708 temp->setGenre(query.value(3).toString(). stripWhiteSpace());709 temp->setGamename(query.value(4).toString(). stripWhiteSpace());713 temp->setGenre(query.value(3).toString().trimmed()); 714 temp->setGamename(query.value(4).toString().trimmed()); 710 715 new_node->SetData(qVariantFromValue(temp)); 711 716 node->addNode(new_node); 712 717 } -
mythgame/rominfo.cpp
130 130 graphic_formats.append("tif"); 131 131 graphic_formats.append("tiff"); 132 132 133 int dotLocation = BaseFileName. findRev('.');133 int dotLocation = BaseFileName.lastIndexOf('.'); 134 134 if (dotLocation == -1) 135 135 { 136 136 BaseFileName.append('.'); … … 210 210 211 211 QString RomInfo::getExtension() 212 212 { 213 int pos = Romname(). findRev(".");213 int pos = Romname().lastIndexOf("."); 214 214 if (pos == -1) 215 215 return NULL; 216 216 -
mythgame/gamehandler.h
6 6 #include <QMap> 7 7 8 8 #include <mythdbcon.h> 9 //#include <mythdialogs.h>10 9 11 10 #include "rom_metadata.h" 12 11 #include "rominfo.h" … … 62 61 m_RemoveAll(false), m_KeepAll(false) {} 63 62 64 63 static void updateSettings(GameHandler*); 65 static GameHandler *getHandler(uint i);66 static GameHandler *newHandler(QString name);64 static GameHandler *getHandler(uint i); 65 static GameHandler *newHandler(QString name); 67 66 static uint count(void); 68 67 void InitMetaDataMap(QString GameType); 69 68 void GetMetadata(GameHandler *handler, QString rom, -
mythgame/main.cpp
31 31 void GameCallback(void *data, QString &selection) 32 32 { 33 33 GameData *ddata = (GameData *)data; 34 QString sel = selection. lower();34 QString sel = selection.toLower(); 35 35 36 36 (void)ddata; 37 37 -
mythgame/mythgame.pro
23 23 LIBS += -lz 24 24 25 25 #The following line was inserted by qt3to4 26 QT += xml sql opengl qt3support26 QT += xml sql opengl 27 27 28 28 include ( ../../libs-targetfix.pro ) -
mythgame/gamesettings.cpp
140 140 QString GameDBStorage::GetSetClause(MSqlBindings &bindings) const 141 141 { 142 142 QString playerID(":SETPLAYERID"); 143 QString colTag(":SET" + GetColumnName(). upper());143 QString colTag(":SET" + GetColumnName().toUpper()); 144 144 145 145 QString query("gameplayerid = " + playerID + ", " + 146 146 GetColumnName() + " = " + colTag); -
mythgame/rom_metadata.cpp
37 37 if (tmpcrc == "0") 38 38 tmpcrc = ""; 39 39 else 40 tmpcrc = tmpcrc.rightJustif y( 8,'0');40 tmpcrc = tmpcrc.rightJustified(8, '0'); 41 41 42 42 return tmpcrc; 43 43 } … … 59 59 blocksize = 8192; 60 60 // VERBOSE(VB_GENERAL, QString("crcinfo : %1 : %2 :").arg(romname).arg(GameType)); 61 61 62 if ((zf = unzOpen( romname)))62 if ((zf = unzOpen(qPrintable(romname)))) 63 63 { 64 64 int FoundFile; 65 65 for (FoundFile = unzGoToFirstFile(zf); FoundFile == UNZ_OK; … … 105 105 offset = calcOffset(GameType, f.size()); 106 106 107 107 if (offset > 0) 108 f.read Block(block, offset);108 f.read(block, offset); 109 109 110 110 // Get CRC of rom data 111 Q_LONGcount;112 while ((count = f.read Block(block, blocksize)) > 0)111 qint64 count; 112 while ((count = f.read(block, blocksize)) > 0) 113 113 { 114 114 crc = crc32(crc, (Bytef *)block, (uInt)count); 115 } 115 } 116 116 117 117 crcRes = crcStr(crc); 118 118 *key = QString("%1:").arg(crcRes);