00001
00002 #ifndef GAMEHANDLER_H_
00003 #define GAMEHANDLER_H_
00004
00005 #include <QStringList>
00006 #include <QMap>
00007 #include <QObject>
00008 #include <QEvent>
00009
00010 #include <mythdbcon.h>
00011
00012 #include "rom_metadata.h"
00013 #include "rominfo.h"
00014
00015 class MythMainWindow;
00016 class GameHandler;
00017
00018 enum GameFound
00019 {
00020 inNone,
00021 inFileSystem,
00022 inDatabase,
00023 inBoth
00024 };
00025
00026 class GameScan
00027 {
00028 public:
00029 GameScan(QString lromname = "", QString lromfullpath = "",
00030 int lfoundloc = 0, QString lgamename = "",
00031 QString lrompath = "") :
00032 romname(lromname), romfullpath(lromfullpath), gamename(lgamename),
00033 rompath(lrompath), foundloc(lfoundloc) {}
00034
00035 QString Rom(void) const { return romname; }
00036 QString RomFullPath(void) const { return romfullpath; }
00037 int FoundLoc(void) const { return foundloc; }
00038 void setLoc(int lfoundloc) { foundloc = lfoundloc; }
00039 QString GameName(void) const { return gamename; }
00040 QString RomPath(void) const { return rompath; }
00041
00042 private:
00043 QString romname;
00044 QString romfullpath;
00045 QString gamename;
00046 QString rompath;
00047 int foundloc;
00048 };
00049
00050 Q_DECLARE_METATYPE(GameScan)
00051
00052 typedef QMap<QString, GameScan> GameScanMap;
00053
00054 class MythUIProgressDialog;
00055 class GameHandler : public QObject
00056 {
00057 Q_OBJECT
00058
00059 public:
00060 GameHandler() : QObject(),
00061 rebuild(false), spandisks(0),
00062 systemname(QString::null), rompath(QString::null),
00063 commandline(QString::null), workingpath(QString::null),
00064 screenshots(QString::null), gameplayerid(0),
00065 gametype(QString::null),
00066 m_RemoveAll(false), m_KeepAll(false),
00067 m_progressDlg(NULL) {}
00068
00069 static void updateSettings(GameHandler*);
00070 static GameHandler *getHandler(uint i);
00071 static GameHandler *newHandler(QString name);
00072 static uint count(void);
00073 void InitMetaDataMap(QString GameType);
00074 void GetMetadata(GameHandler *handler, QString rom,
00075 QString* Genre, QString* Year, QString* Country,
00076 QString* CRC32, QString* GameName,
00077 QString* Plot, QString* Publisher, QString* Version,
00078 QString* Fanart, QString* Boxart);
00079
00080 void promptForRemoval(GameScan scan);
00081 void UpdateGameDB(GameHandler *handler);
00082 void VerifyGameDB(GameHandler *handler);
00083
00084 void clearAllGameData(void);
00085
00086 static int buildFileCount(QString directory, GameHandler *handler);
00087 void buildFileList(QString directory, GameHandler *handler,
00088 int* filecount);
00089
00090 void processGames(GameHandler *);
00091 static void processAllGames(void);
00092 static void registerHandler(GameHandler *);
00093 static void Launchgame(RomInfo *romdata, QString systemname);
00094 static void EditSettings(RomInfo *romdata);
00095 static void EditSystemSettings(RomInfo *romdata);
00096 static RomInfo* CreateRomInfo(RomInfo* parent);
00097
00098 void setRebuild(bool setrebuild) { rebuild = setrebuild; }
00099 bool needRebuild(void) const { return rebuild; }
00100
00101 static RomInfo* create_rominfo(RomInfo* parent);
00102 int SpanDisks() const { return spandisks; }
00103 QString SystemName() const { return systemname; }
00104 QString SystemCmdLine() const { return commandline; }
00105 QString SystemRomPath() const { return rompath; }
00106 QString SystemWorkingPath() const { return workingpath; }
00107 QString SystemScreenShots() const { return screenshots; }
00108 uint GamePlayerID() const { return gameplayerid; }
00109 QString GameType() const { return gametype; }
00110 QStringList ValidExtensions() const { return validextensions; }
00111
00112 void clearAllMetadata(void);
00113
00114 static GameHandler* GetHandler(RomInfo *rominfo);
00115 static GameHandler* GetHandlerByName(QString systemname);
00116
00117 protected:
00118 void customEvent(QEvent *event);
00119
00120 bool rebuild;
00121 int spandisks;
00122 QString systemname;
00123 QString rompath;
00124 QString commandline;
00125 QString workingpath;
00126 QString screenshots;
00127 uint gameplayerid;
00128 QString gametype;
00129 QStringList validextensions;
00130
00131 RomDBMap romDB;
00132 GameScanMap m_GameMap;
00133
00134 bool m_RemoveAll;
00135 bool m_KeepAll;
00136
00137 private:
00138 void CreateProgress(QString message);
00139 static GameHandler *newInstance;
00140
00141 MythUIProgressDialog *m_progressDlg;
00142 };
00143
00144 #endif