Ticket #1810: game.patch

File game.patch, 16.2 KB (added by jochen, 18 years ago)

first Version...

  • mythgame/mythgame/gametree.h

     
    102102  public slots:
    103103    void handleTreeListSelection(int, IntVector*);
    104104    void handleTreeListEntry(int, IntVector*);
     105    void showImageTimeout(void);
    105106
    106107  protected:
    107108    void keyPressEvent(QKeyEvent *e);
     
    125126    UITextType  *m_gameGenre;
    126127    UITextType  *m_gameFavourite;
    127128    UIImageType *m_gameImage;
     129
     130    QTimer      *timer;
    128131};
    129132
    130133#endif
  • mythgame/mythgame/game_settings.xml

     
    2121      <text>Game Players</text>
    2222      <text lang="IT">Impostazioni generali</text>
    2323      <text lang="ES">Opciones Reproductores</text>
    24       <text lang="CA">Opcions Generals</text>
    25       <text lang="DE">Grundeinstellungen</text>
     24      <text lang="CA"></text>
     25      <text lang="DE">Spielestarter</text>
    2626      <text lang="DK">Spil Systemer</text>
    2727      <text lang="NL">Algemeen</text>
    2828      <text lang="PT">Jogadores</text>
     
    5050      <text>Clear Game Data</text>
    5151      <text lang="IT">Impostazioni generali</text>
    5252      <text lang="ES">Borrar Datos</text>
    53       <text lang="CA">Opcions Generals</text>
    54       <text lang="DE">Grundeinstellungen</text>
     53      <text lang="CA"></text>
     54      <text lang="DE">Loesche Spieleliste</text>
    5555      <text lang="DK">Slet spil data</text>
    56       <text lang="NL">Algemeen</text>
     56      <text lang="NL"></text>
    5757      <text lang="PT">Apagar Dados de Jogos</text>
    5858      <text lang="SV">Generella instÀllningar</text>
    5959      <text lang="SI">SploÅ¡ne nastavitve</text>
     
    6161      <action>CLEAR_GAME_DATA</action>
    6262   </button>
    6363
     64   <button>
     65      <type>GAME_SETTINGS_GENERAL</type>
     66      <text>Generate Screenshots</text>
     67      <text lang="IT"></text>
     68      <text lang="ES"></text>
     69      <text lang="CA"></text>
     70      <text lang="DE">Screenshots erzeugen</text>
     71      <text lang="DK"></text>
     72      <text lang="NL"></text>
     73      <text lang="PT"></text>
     74      <text lang="SV"></text>
     75      <text lang="SI"></text>
     76      <text lang="FI"></text>
     77      <action>GENERATE_SCREENSHOTS</action>
     78   </button>
    6479
    6580</mythmenu>
  • mythgame/mythgame/gamehandler.cpp

     
    33#include "rom_metadata.h"
    44
    55#include <qobject.h>
     6#include <qapplication.h>
     7#include <qtimer.h>
     8#include <qprocess.h>
    69#include <qptrlist.h>
    710#include <qstringlist.h>
    811#include <iostream>
     
    1417#include <mythtv/mythdialogs.h>
    1518#include <mythtv/util.h>
    1619
     20QProcess *process;
     21QString screencmd;
     22
    1723using namespace std;
    1824
    1925static QPtrList<GameHandler> *handlers = 0;
     
    6470void GameHandler::updateSettings(GameHandler *handler)
    6571{
    6672    MSqlQuery query(MSqlQuery::InitCon());
    67     query.exec("SELECT rompath, workingpath, commandline, screenshots, gameplayerid, gametype, extensions, spandisks  FROM gameplayers WHERE playername = \"" + handler->SystemName() + "\";");
     73    query.exec("SELECT rompath, workingpath, commandline, screenshots, gameplayerid, gametype, extensions, spandisks, screenshotenabled, screenshotcmd FROM gameplayers WHERE playername = \"" + handler->SystemName() + "\";");
    6874
    6975    query.next();
    7076    handler->rompath = query.value(0).toString();
     
    7581    handler->gametype = query.value(5).toString();
    7682    handler->validextensions = QStringList::split(",", query.value(6).toString().stripWhiteSpace().remove(" "));
    7783    handler->spandisks = query.value(7).toInt();
     84    handler->screenshotenabled = query.value(8).toInt();
     85    handler->screenshotcmd = query.value(9).toInt();
    7886
    7987}
    8088
     
    127135        }
    128136    }
    129137
     138<<<<<<< .mine
    130139    if (romDB.count() == 0)
     140        cerr << "No romDB data read from database. Not imported?" << endl;
     141    else
     142        cerr << "Loaded " << romDB.count() << " items from romDB Database" << endl;
     143=======
     144    if (romDB.count() == 0)
    131145        cerr << "No romDB data read from database. Not imported?" << endl;
    132146    else
    133147        cerr << "Loaded " << romDB.count() << " items from romDB Database" << endl;
     148>>>>>>> .r9935
    134149
    135150}
    136151
     
    723738    else if (!(handler = GetHandler(romdata)))
    724739    {
    725740        // Couldn't get handler so abort.
    726         return;
     741        return ;
    727742    }
    728743    QString exec = handler->SystemCmdLine();
    729744
     
    806821    handlers->append(handler);
    807822}
    808823
     824void GameHandler::generateScreenshots(void)
     825{
     826    checkHandlers();
     827
     828    GameHandler *handler = handlers->first();
     829
     830    MSqlQuery query(MSqlQuery::InitCon());
     831    cout << "SCreensh. erz" << endl;
     832    while(handler)
     833    {
     834        updateSettings(handler);
     835        cout << handler->SystemName() << endl;
     836        if (handler->ScreenShotEnabled())
     837        {
     838
     839        QString thequery;       
     840        thequery = QString("SELECT romname, rompath, gamename, diskcount "
     841                           "FROM gamemetadata WHERE system = '%1';")
     842                           .arg(handler->SystemName());
     843                           
     844        query.exec(thequery);
     845        cout << query.lastQuery() << endl;
     846
     847        if (query.isActive() && query.size() >0)
     848        {
     849        while (query.next())
     850        {
     851            QString romname = query.value(0).toString();
     852            QString rompath = query.value(1).toString();
     853            int diskcount   = query.value(3).toInt();
     854            //Get the Extension via the RomInfo Class
     855                RomInfo temp;
     856                temp.setRomname(romname);
     857            QString extension = temp.getExtension();
     858           
     859            QString basename = romname.left(romname.length() - (extension.length() + 2));
     860               
     861            QString exec = handler->SystemCmdLine();
     862
     863            if (handler->GameType() != "PC")
     864            {
     865                QString arg = "\"" + rompath +
     866                               "/" + romname + "\"";
     867
     868                // If they specified a %s in the commandline place the romname
     869                // in that location, otherwise tack it on to the end of
     870                // the command.
     871                if (exec.contains("%s") || handler->SpanDisks())
     872                {
     873                    exec = exec.replace(QRegExp("%s"),arg);
     874
     875                    if (handler->SpanDisks())
     876                    {
     877                        QRegExp rxp = QRegExp( "%d[0-4]", TRUE, FALSE );
     878
     879                        if (exec.contains(rxp))
     880                        {
     881                            if (diskcount > 1)
     882                            {
     883                                // Chop off the extension, .  and last character of the name which we are assuming is the disk #
     884                                QString rom;
     885                                QString diskid[] = { "%d0", "%d1", "%d2", "%d3", "%d4", "%d5", "%d6" };
     886
     887                                for (int disk = 1; disk <= diskcount; disk++)
     888                                {
     889                                    rom = QString("\"%1/%2%3.%4\"")
     890                                                .arg(rompath)
     891                                                .arg(basename)
     892                                                .arg(disk)
     893                                                .arg(extension);
     894                                    exec = exec.replace(QRegExp(diskid[disk]),rom);
     895                                }
     896                            }
     897                           
     898                            else
     899                            {   // If there is only one disk make sure we replace %d1 just like %s
     900                                exec = exec.replace(QRegExp("%d1"),arg);
     901                            }
     902                        }
     903                    }
     904                }
     905                else
     906                {
     907                    exec = exec + " \"" +
     908                            rompath + "/" +
     909                            romname + "\"";
     910                }
     911            }
     912
     913            QString savedir = QDir::currentDirPath ();
     914            QDir d;
     915            if (handler->SystemWorkingPath()) {
     916                if (!d.cd(handler->SystemWorkingPath()))
     917                {
     918                cout << "Failed to change to specified Working Directory : " << handler->SystemWorkingPath() << endl;
     919                }
     920            }
     921       
     922            if (handler->ScreenShotCmd().length() < 2)
     923                screencmd = gContext->GetSetting("GameScreenshotCmd");
     924            else
     925                screencmd = handler->ScreenShotCmd();
     926           
     927            if (screencmd.contains("%p"))
     928                {
     929                QString reptxt = handler->SystemScreenShots() + "/" + basename;
     930                screencmd = screencmd.replace(QRegExp("%p"),reptxt);       
     931                }
     932
     933            if (screencmd.contains("%s"))
     934                {
     935                QString reptxt = rompath + "/" + romname;
     936                screencmd = screencmd.replace(QRegExp("%s"),reptxt);       
     937                }
     938
     939            process = new QProcess();
     940           
     941            QStringList lst( QStringList::split( " ", exec ) );
     942           
     943            process->setArguments(lst);
     944
     945            QString ShotTime = gContext->GetSetting("GameScreenshotTime");
     946            int myShotTime = ShotTime.toInt() * 1000;
     947
     948            QTimer::singleShot( myShotTime, this, SLOT( screenshotTimeout() ) );
     949            if (!process->start())
     950                cout << "Error running Process:" << exec << endl;
     951           
     952            while (process->isRunning()){ qApp->processEvents(); }
     953           
     954       
     955        }
     956        }
     957        }
     958        handler = handlers->next();
     959       
     960    }
     961}
     962void GameHandler::screenshotTimeout(void)
     963{
     964    myth_system(screencmd);
     965    process->kill();
     966}
  • mythgame/mythgame/gamehandler.h

     
    5353
    5454typedef QMap <QString, GameScan> GameScanMap;
    5555
    56 class GameHandler
    57 {
     56class GameHandler : public QObject
     57
     58 
     59  Q_OBJECT
     60 
    5861  public:
    5962    GameHandler()
    6063    {
     
    7881    void VerifyGameDB(GameHandler *handler);
    7982
    8083    static void clearAllGameData(void);
     84    void generateScreenshots(void);
    8185
    8286    static int buildFileCount(QString directory, GameHandler *handler);
    8387    void buildFileList(QString directory, GameHandler *handler,
     
    96100
    97101    static RomInfo* create_rominfo(RomInfo* parent);
    98102    int SpanDisks() const { return spandisks; }
     103    int ScreenShotEnabled() const { return screenshotenabled; }
    99104    QString SystemName() const { return systemname; }
    100105    QString SystemCmdLine() const { return commandline; }
    101106    QString SystemRomPath() const { return rompath; }
     
    103108    QString SystemScreenShots() const { return screenshots; }
    104109    uint GamePlayerID() const { return gameplayerid; }
    105110    QString GameType() const { return gametype; }
     111    QString ScreenShotCmd() const { return screenshotcmd; }
     112   
     113  public slots:
     114    void screenshotTimeout(void);
    106115
    107116  protected:
    108117    static GameHandler* GetHandler(RomInfo *rominfo);
     
    110119
    111120    bool rebuild;
    112121    int spandisks;
     122    int screenshotenabled;
    113123    QString systemname;
    114124    QString rompath;
    115125    QString commandline;
     
    117127    QString screenshots;
    118128    uint gameplayerid;
    119129    QString gametype;
     130    QString screenshotcmd;
    120131    QStringList validextensions;
    121132
    122133    RomDBMap romDB;
  • mythgame/mythgame/dbcheck.cpp

     
    1010
    1111#include "gamesettings.h"
    1212
    13 const QString currentDatabaseVersion = "1012";
     13const QString currentDatabaseVersion = "1013";
    1414
    1515static bool UpdateDBVersionNumber(const QString &newnumber)
    1616{
     
    320320    }
    321321
    322322
     323    if (dbver == "1012")
     324    {
     325        const QString updates[] = {
     326"ALTER TABLE gameplayers ADD COLUMN screenshotcmd text NOT NULL default ''; ",
     327"ALTER TABLE gameplayers ADD COLUMN screenshotenabled tinyint(1) NOT NULL default '0'; ",
     328""
     329};
    323330
     331        if (!performActualUpdate(updates, "1013", dbver))
     332            return false;
     333    }
    324334
    325335
     336
     337
     338
    326339    return true;
    327340}
  • mythgame/mythgame/main.cpp

     
    3333        settings.exec();
    3434    }
    3535
    36     if (sel == "game_players")
     36    else if (sel == "game_players")
    3737    {
    3838        MythGamePlayerEditor mgpe;
    3939        mgpe.exec();
     
    4242    {
    4343        GameHandler::processAllGames();
    4444    }
    45     if (sel == "clear_game_data")
     45   
     46    else if (sel == "clear_game_data")
    4647    {
    4748        GameHandler::clearAllGameData();
    4849    }
    4950
     51    else if (sel == "generate_screenshots")
     52    {
     53        GameHandler myHandler;
     54        myHandler.generateScreenshots();
     55    }
     56
    5057}
    5158
    5259void runMenu(QString which_menu)
  • mythgame/mythgame/gametree.cpp

     
    136136
    137137    m_gameTree = new GenericTree("game root", 0, false);
    138138
     139    timer = new QTimer( this );
     140    connect( timer, SIGNAL(timeout()),  SLOT(showImageTimeout()) );
     141         
    139142    wireUpTheme();
    140143    //  create system filter to only select games where handlers are present
    141144    QString systemFilter;
     
    251254            if (romInfo->ImagePath())
    252255            {
    253256                m_gameImage->SetImage(romInfo->ImagePath());
    254                 m_gameImage->LoadImage();
     257                if ( timer->isActive() )
     258                    timer->changeInterval(300);
     259                else
     260                    timer->start(300, true);
    255261            }
    256262        }
    257263    }
    258264    else
    259265    {   // Otherwise use some defaults.
     266        timer->stop();
    260267        m_gameImage->SetImage("");
    261268        m_gameTitle->SetText("");
    262269        m_gameSystem->SetText("Unknown");
     
    267274
    268275}
    269276
     277void GameTree::showImageTimeout(void)
     278{
     279    m_gameImage->LoadImage();
     280}
     281
    270282QString getElement(QStringList list, int pos)
    271283{
    272284    int curpos = 0;
  • mythgame/mythgame/gamesettings.cpp

     
    7676    return gc;
    7777}   
    7878
     79static HostLineEdit *GameScreenshotCmd()
     80{
     81    HostLineEdit *gc = new HostLineEdit("GameScreenshotCmd");
     82    gc->setLabel(QObject::tr("Screenshot Command"));
     83    gc->setValue("/usr/bin/scrot --quality 1 \"%p.png\"");
     84    gc->setHelpText(QObject::tr("Programm wich generate Screenshots "
     85                    "when the Rom ist started in Background "
     86                    "use %s for romname and %p for the imagename without extension."));
     87    return gc;
     88}
    7989
     90static HostLineEdit *GameScreenshotTime()
     91{
     92    HostLineEdit *gc = new HostLineEdit("GameScreenshotTime");
     93    gc->setLabel(QObject::tr("Screenshot Timeout:"));
     94    gc->setValue("10");
     95    gc->setHelpText(QObject::tr("Enter Time (in seconds) after wich a Screenshot is taken"));
     96    return gc;
     97}
     98
    8099MythGameGeneralSettings::MythGameGeneralSettings()
    81100{
    82101    VerticalConfigurationGroup *general = new VerticalConfigurationGroup(false);
     
    87106    general->addChild(GameRemovalPrompt());
    88107    general->addChild(GameShowFileNames());
    89108
     109    VerticalConfigurationGroup *screenshot = new VerticalConfigurationGroup(false);
     110    screenshot->setLabel(QObject::tr("MythGame Settings -- Screenshots"));
     111    screenshot->addChild(GameScreenshotCmd());
     112    screenshot->addChild(GameScreenshotTime());
     113
    90114    addChild(general);
     115    addChild(screenshot);
    91116
    92117}
    93118
     
    183208    };
    184209};
    185210
     211class GenerateScreenshots: virtual public MGSetting, virtual public CheckBoxSetting {
     212public:
     213    GenerateScreenshots(const MythGamePlayerSettings& parent):
     214        MGSetting(parent, "screenshotenabled") {
     215        setLabel(QObject::tr("Generation of SCreenshots Enabled"));
     216        setHelpText(QObject::tr("This Setting means that this Gameplayer is included in the generation of Screenshots."));
     217    };
     218};
     219
     220class GenerateScreenshotsCmd: virtual public MGSetting, virtual public LineEditSetting {
     221public:
     222    GenerateScreenshotsCmd(const MythGamePlayerSettings& parent):
     223        MGSetting(parent, "screenshotcmd") {
     224        setLabel(QObject::tr("Screenshot Command"));
     225        setHelpText(QObject::tr("If you want another Command then the global to Generate Screenshots, Enter it here!"));
     226    };
     227};
     228
    186229MythGamePlayerSettings::MythGamePlayerSettings()
    187230{
    188231    // must be first
     
    198241    group->addChild(new WorkingDirPath(*this));
    199242    group->addChild(new Extensions(*this));
    200243    group->addChild(new AllowMultipleRoms(*this));
     244    group->addChild(new GenerateScreenshots(*this));
     245    group->addChild(new GenerateScreenshotsCmd(*this));
    201246    addChild(group);
    202247};
    203248