Added truRIP superdat and directory structure support.

This commit is contained in:
Pieter Hulshoff 2018-07-12 21:23:48 +02:00 committed by Vincent-FK
parent 0a3fa3957f
commit aaa1eb05d9
19 changed files with 1857 additions and 16077 deletions

View File

@ -0,0 +1,17 @@
up = Up, joyHat0Up
down = Down, joyHat0Down
left = Left, joyHat0Left
right = Right, joyHat0Right
pageUp = PageDown
pageDown = PageUp
letterUp = M
letterDown = N
favPlaylist = F
nextPlaylist = F2
prevPlaylist = F1
addPlaylist = I
removePlaylist = O
random = R
select = Return, 1, joyButton10
back = Escape, joyButton6
quit = Q

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -286,6 +286,7 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info, std::string me
std::string launcher; std::string launcher;
bool showMissing = false; bool showMissing = false;
bool romHierarchy = false; bool romHierarchy = false;
bool truRIP = false;
if (mergedCollectionName != "") if (mergedCollectionName != "")
{ {
@ -299,6 +300,9 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info, std::string me
} }
(void)conf_.getProperty("collections." + info->name + ".list.includeMissingItems", showMissing); (void)conf_.getProperty("collections." + info->name + ".list.includeMissingItems", showMissing);
(void)conf_.getProperty("collections." + info->name + ".list.romHierarchy", romHierarchy); (void)conf_.getProperty("collections." + info->name + ".list.romHierarchy", romHierarchy);
(void)conf_.getProperty("collections." + info->name + ".list.truRIP", truRIP);
if (truRIP)
romHierarchy = true;
// If no merged file exists, or it is empty, attempt to use the include and exclude from the subcollection // If no merged file exists, or it is empty, attempt to use the include and exclude from the subcollection
// If this not a merged collection, the size will be 0 anyways and the code below will still execute // If this not a merged collection, the size will be 0 anyways and the code below will still execute
@ -338,7 +342,7 @@ bool CollectionInfoBuilder::ImportDirectory(CollectionInfo *info, std::string me
rompath = path; rompath = path;
path = ""; path = "";
} }
ImportRomDirectory(rompath, info, includeFilter, excludeFilter, romHierarchy); ImportRomDirectory(rompath, info, includeFilter, excludeFilter, romHierarchy, truRIP);
} while (path != ""); } while (path != "");
} }
@ -439,7 +443,7 @@ void CollectionInfoBuilder::addPlaylists(CollectionInfo *info)
} }
void CollectionInfoBuilder::ImportRomDirectory(std::string path, CollectionInfo *info, std::map<std::string, Item *> includeFilter, std::map<std::string, Item *> excludeFilter, bool romHierarchy) void CollectionInfoBuilder::ImportRomDirectory(std::string path, CollectionInfo *info, std::map<std::string, Item *> includeFilter, std::map<std::string, Item *> excludeFilter, bool romHierarchy, bool truRIP)
{ {
DIR *dp; DIR *dp;
@ -466,7 +470,7 @@ void CollectionInfoBuilder::ImportRomDirectory(std::string path, CollectionInfo
struct stat sb; struct stat sb;
if (romHierarchy && file != "." && file != ".." && stat( Utils::combinePath( path, file ).c_str(), &sb ) == 0 && S_ISDIR( sb.st_mode )) if (romHierarchy && file != "." && file != ".." && stat( Utils::combinePath( path, file ).c_str(), &sb ) == 0 && S_ISDIR( sb.st_mode ))
{ {
ImportRomDirectory( Utils::combinePath( path, file ), info, includeFilter, excludeFilter, romHierarchy ); ImportRomDirectory( Utils::combinePath( path, file ), info, includeFilter, excludeFilter, romHierarchy, truRIP );
} }
else if (file != "." && file != "..") else if (file != "." && file != "..")
{ {
@ -496,6 +500,14 @@ void CollectionInfoBuilder::ImportRomDirectory(std::string path, CollectionInfo
i->collectionInfo = info; i->collectionInfo = info;
i->filepath = path + Utils::pathSeparator; i->filepath = path + Utils::pathSeparator;
if ( truRIP )
{
i->file = basename;
i->name = Utils::getFileName( path );
i->fullTitle = i->name;
i->title = i->name;
}
info->items.push_back(i); info->items.push_back(i);
} }
} }

View File

@ -41,5 +41,5 @@ private:
MetadataDatabase &metaDB_; MetadataDatabase &metaDB_;
bool ImportBasicList(CollectionInfo *info, std::string file, std::map<std::string, Item *> &list); bool ImportBasicList(CollectionInfo *info, std::string file, std::map<std::string, Item *> &list);
bool ImportDirectory(CollectionInfo *info, std::string mergedCollectionName); bool ImportDirectory(CollectionInfo *info, std::string mergedCollectionName);
void ImportRomDirectory(std::string path, CollectionInfo *info, std::map<std::string, Item *> includeFilter, std::map<std::string, Item *> excludeFilter, bool romHierarchy); void ImportRomDirectory(std::string path, CollectionInfo *info, std::map<std::string, Item *> includeFilter, std::map<std::string, Item *> excludeFilter, bool romHierarchy, bool truRIP);
}; };

View File

@ -25,6 +25,7 @@ Item::Item()
: collectionInfo(NULL) : collectionInfo(NULL)
, leaf(true) , leaf(true)
{ {
file = "";
} }
Item::~Item() Item::~Item()

View File

@ -29,6 +29,7 @@ public:
std::string lowercaseFullTitle(); std::string lowercaseFullTitle();
std::string name; std::string name;
std::string filepath; std::string filepath;
std::string file;
std::string title; std::string title;
std::string fullTitle; std::string fullTitle;
std::string year; std::string year;

View File

@ -604,7 +604,7 @@ bool MetadataDatabase::importTruriplist(std::string truriplistFile)
for(rapidxml::xml_node<> *game = root->first_node("game"); game; game = game->next_sibling("game")) for(rapidxml::xml_node<> *game = root->first_node("game"); game; game = game->next_sibling("game"))
{ {
rapidxml::xml_node<> *descriptionXml = game->first_node("description"); rapidxml::xml_node<> *descriptionXml = game->first_node("description");
rapidxml::xml_node<> *truripXml = game->first_node("trurip"); rapidxml::xml_node<> *truripXml = game->first_node("EmuArc");
if (!truripXml) if (!truripXml)
{ {
Logger::write(Logger::ZONE_ERROR, "Metadata", "Does not appear to be a TruripList SuperDat file (missing <trurip> tag)"); Logger::write(Logger::ZONE_ERROR, "Metadata", "Does not appear to be a TruripList SuperDat file (missing <trurip> tag)");
@ -615,6 +615,7 @@ bool MetadataDatabase::importTruriplist(std::string truriplistFile)
rapidxml::xml_node<> *developerXml = truripXml->first_node("developer"); rapidxml::xml_node<> *developerXml = truripXml->first_node("developer");
rapidxml::xml_node<> *yearXml = truripXml->first_node("year"); rapidxml::xml_node<> *yearXml = truripXml->first_node("year");
rapidxml::xml_node<> *genreXml = truripXml->first_node("genre"); rapidxml::xml_node<> *genreXml = truripXml->first_node("genre");
rapidxml::xml_node<> *subgenreXml = truripXml->first_node("subgenre");
rapidxml::xml_node<> *ratingXml = truripXml->first_node("ratings"); rapidxml::xml_node<> *ratingXml = truripXml->first_node("ratings");
rapidxml::xml_node<> *scoreXml = truripXml->first_node("score"); rapidxml::xml_node<> *scoreXml = truripXml->first_node("score");
rapidxml::xml_node<> *numberPlayersXml = truripXml->first_node("players"); rapidxml::xml_node<> *numberPlayersXml = truripXml->first_node("players");
@ -627,6 +628,7 @@ bool MetadataDatabase::importTruriplist(std::string truriplistFile)
std::string developer = (developerXml) ? developerXml->value() : ""; std::string developer = (developerXml) ? developerXml->value() : "";
std::string year = (yearXml) ? yearXml->value() : ""; std::string year = (yearXml) ? yearXml->value() : "";
std::string genre = (genreXml) ? genreXml->value() : ""; std::string genre = (genreXml) ? genreXml->value() : "";
genre = (subgenreXml && subgenreXml->value_size() != 0) ? genre + "_" + subgenreXml->value() : genre;
std::string rating = (ratingXml) ? ratingXml->value() : ""; std::string rating = (ratingXml) ? ratingXml->value() : "";
std::string score = (scoreXml) ? scoreXml->value() : ""; std::string score = (scoreXml) ? scoreXml->value() : "";
std::string numberPlayers = (numberPlayersXml) ? numberPlayersXml->value() : ""; std::string numberPlayers = (numberPlayersXml) ? numberPlayersXml->value() : "";

View File

@ -85,7 +85,10 @@ bool Launcher::run(std::string collection, Item *collectionItem)
} }
// It is ok to continue if the file could not be found. We could be launching a merged romset // It is ok to continue if the file could not be found. We could be launching a merged romset
if (collectionItem->file == "")
findFile(selectedItemsPath, matchedExtension, selectedItemsDirectory, collectionItem->name, extensionstr); findFile(selectedItemsPath, matchedExtension, selectedItemsDirectory, collectionItem->name, extensionstr);
else
findFile(selectedItemsPath, matchedExtension, selectedItemsDirectory, collectionItem->file, extensionstr);
args = replaceVariables(args, args = replaceVariables(args,
selectedItemsPath, selectedItemsPath,

View File

@ -148,12 +148,12 @@ void ReloadableMedia::reloadTexture()
{ {
// check the master collection for the system artifact // check the master collection for the system artifact
loadedComponent_ = findComponent(collectionName, "video", "video", true); loadedComponent_ = findComponent(collectionName, "video", "video", "", true);
// check the collection for the system artifact // check the collection for the system artifact
if(!loadedComponent_) if(!loadedComponent_)
{ {
loadedComponent_ = findComponent(selectedItem->collectionInfo->name, "video", "video", true); loadedComponent_ = findComponent(selectedItem->collectionInfo->name, "video", "video", "", true);
} }
} }
@ -165,12 +165,18 @@ void ReloadableMedia::reloadTexture()
{ {
// check the master collection for the artifact // check the master collection for the artifact
loadedComponent_ = findComponent(collectionName, "video", basename, false); loadedComponent_ = findComponent(collectionName, "video", basename, "", false);
// check the collection for the artifact // check the collection for the artifact
if(!loadedComponent_) if(!loadedComponent_)
{ {
loadedComponent_ = findComponent(selectedItem->collectionInfo->name, "video", basename, false); loadedComponent_ = findComponent(selectedItem->collectionInfo->name, "video", basename, "", false);
}
// check the rom directory for the artifact
if(!loadedComponent_)
{
loadedComponent_ = findComponent(selectedItem->collectionInfo->name, "video", "video", selectedItem->filepath, false);
} }
} }
@ -178,18 +184,18 @@ void ReloadableMedia::reloadTexture()
{ {
// check the master collection for the artifact // check the master collection for the artifact
loadedComponent_ = findComponent(collectionName, "video", basename, false); loadedComponent_ = findComponent(collectionName, "video", basename, "", false);
// check the collection for the artifact // check the collection for the artifact
if(!loadedComponent_) if(!loadedComponent_)
{ {
loadedComponent_ = findComponent(selectedItem->collectionInfo->name, "video", basename, false); loadedComponent_ = findComponent(selectedItem->collectionInfo->name, "video", basename, "", false);
} }
// check the submenu collection for the system artifact // check the submenu collection for the system artifact
if (!loadedComponent_) if (!loadedComponent_)
{ {
loadedComponent_ = findComponent(selectedItem->name, "video", "video", true); loadedComponent_ = findComponent(selectedItem->name, "video", "video", "", true);
} }
} }
@ -311,12 +317,12 @@ void ReloadableMedia::reloadTexture()
{ {
// check the master collection for the system artifact // check the master collection for the system artifact
loadedComponent_ = findComponent(collectionName, type_, type_, true); loadedComponent_ = findComponent(collectionName, type_, type_, "", true);
// check collection for the system artifact // check collection for the system artifact
if(!loadedComponent_) if(!loadedComponent_)
{ {
loadedComponent_ = findComponent(selectedItem->collectionInfo->name, type_, type_, true); loadedComponent_ = findComponent(selectedItem->collectionInfo->name, type_, type_, "", true);
} }
} }
@ -328,12 +334,18 @@ void ReloadableMedia::reloadTexture()
{ {
// check the master collection for the artifact // check the master collection for the artifact
loadedComponent_ = findComponent(collectionName, type_, basename, false); loadedComponent_ = findComponent(collectionName, type_, basename, "", false);
// check the collection for the artifact // check the collection for the artifact
if(!loadedComponent_) if(!loadedComponent_)
{ {
loadedComponent_ = findComponent(selectedItem->collectionInfo->name, type_, basename, false); loadedComponent_ = findComponent(selectedItem->collectionInfo->name, type_, basename, "", false);
}
// check the rom directory for the artifact
if(!loadedComponent_)
{
loadedComponent_ = findComponent(selectedItem->collectionInfo->name, type_, type_, selectedItem->filepath, false);
} }
} }
@ -341,18 +353,18 @@ void ReloadableMedia::reloadTexture()
{ {
// check the master collection for the artifact // check the master collection for the artifact
loadedComponent_ = findComponent(collectionName, type_, basename, false); loadedComponent_ = findComponent(collectionName, type_, basename, "", false);
// check the collection for the artifact // check the collection for the artifact
if(!loadedComponent_) if(!loadedComponent_)
{ {
loadedComponent_ = findComponent(selectedItem->collectionInfo->name, type_, basename, false); loadedComponent_ = findComponent(selectedItem->collectionInfo->name, type_, basename, "", false);
} }
// check the submenu collection for the system artifact // check the submenu collection for the system artifact
if (!loadedComponent_) if (!loadedComponent_)
{ {
loadedComponent_ = findComponent(selectedItem->name, type_, type_, true); loadedComponent_ = findComponent(selectedItem->name, type_, type_, "", true);
} }
} }
@ -377,7 +389,7 @@ void ReloadableMedia::reloadTexture()
} }
Component *ReloadableMedia::findComponent(std::string collection, std::string type, std::string basename, bool systemMode) Component *ReloadableMedia::findComponent(std::string collection, std::string type, std::string basename, std::string filepath, bool systemMode)
{ {
std::string imagePath; std::string imagePath;
Component *component = NULL; Component *component = NULL;
@ -417,6 +429,8 @@ Component *ReloadableMedia::findComponent(std::string collection, std::string ty
config_.getMediaPropertyAbsolutePath(collection, type, systemMode, imagePath); config_.getMediaPropertyAbsolutePath(collection, type, systemMode, imagePath);
} }
} }
if ( filepath != "" )
imagePath = filepath;
if(type == "video") if(type == "video")
{ {

View File

@ -33,7 +33,7 @@ public:
void draw(); void draw();
void freeGraphicsMemory(); void freeGraphicsMemory();
void allocateGraphicsMemory(); void allocateGraphicsMemory();
Component *findComponent(std::string collection, std::string type, std::string basename, bool systemMode); Component *findComponent(std::string collection, std::string type, std::string basename, std::string filepath, bool systemMode);
void enableTextFallback_(bool value); void enableTextFallback_(bool value);

View File

@ -173,12 +173,12 @@ void ReloadableScrollingText::reloadTexture( )
{ {
// check the master collection for the system artifact // check the master collection for the system artifact
loadText( collectionName, type_, type_, true ); loadText( collectionName, type_, type_, "", true );
// check collection for the system artifact // check collection for the system artifact
if (text_.empty( )) if (text_.empty( ))
{ {
loadText( selectedItem->collectionInfo->name, type_, type_, true ); loadText( selectedItem->collectionInfo->name, type_, type_, "", true );
} }
} }
@ -190,12 +190,12 @@ void ReloadableScrollingText::reloadTexture( )
{ {
// check the master collection for the artifact // check the master collection for the artifact
loadText( collectionName, type_, basename, false ); loadText( collectionName, type_, basename, "", false );
// check the collection for the artifact // check the collection for the artifact
if (text_.empty( )) if (text_.empty( ))
{ {
loadText( selectedItem->collectionInfo->name, type_, basename, false ); loadText( selectedItem->collectionInfo->name, type_, basename, "", false );
} }
} }
@ -203,18 +203,18 @@ void ReloadableScrollingText::reloadTexture( )
{ {
// check the master collection for the artifact // check the master collection for the artifact
loadText( collectionName, type_, basename, false ); loadText( collectionName, type_, basename, "", false );
// check the collection for the artifact // check the collection for the artifact
if (text_.empty( )) if (text_.empty( ))
{ {
loadText( selectedItem->collectionInfo->name, type_, basename, false ); loadText( selectedItem->collectionInfo->name, type_, basename, "", false );
} }
// check the submenu collection for the system artifact // check the submenu collection for the system artifact
if (text_.empty( )) if (text_.empty( ))
{ {
loadText( selectedItem->name, type_, type_, true ); loadText( selectedItem->name, type_, type_, "", true );
} }
} }
@ -222,6 +222,10 @@ void ReloadableScrollingText::reloadTexture( )
} }
} }
// Check for thext in the roms directory
if ( text_.empty( ))
loadText( selectedItem->filepath, type_, type_, selectedItem->filepath, false );
// Check for supported fields if text is still empty // Check for supported fields if text is still empty
if (text_.empty( )) if (text_.empty( ))
{ {
@ -378,7 +382,7 @@ void ReloadableScrollingText::reloadTexture( )
} }
void ReloadableScrollingText::loadText( std::string collection, std::string type, std::string basename, bool systemMode ) void ReloadableScrollingText::loadText( std::string collection, std::string type, std::string basename, std::string filepath, bool systemMode )
{ {
std::string textPath = ""; std::string textPath = "";
@ -398,6 +402,8 @@ void ReloadableScrollingText::loadText( std::string collection, std::string type
{ {
config_.getMediaPropertyAbsolutePath( collection, type, systemMode, textPath ); config_.getMediaPropertyAbsolutePath( collection, type, systemMode, textPath );
} }
if ( filepath != "" )
textPath = filepath;
textPath = Utils::combinePath( textPath, basename ); textPath = Utils::combinePath( textPath, basename );

View File

@ -35,7 +35,7 @@ public:
private: private:
void reloadTexture( ); void reloadTexture( );
void loadText( std::string collection, std::string type, std::string basename, bool systemMode ); void loadText( std::string collection, std::string type, std::string basename, std::string filepath, bool systemMode );
Configuration &config_; Configuration &config_;
bool systemMode_; bool systemMode_;
bool layoutMode_; bool layoutMode_;

View File

@ -671,6 +671,10 @@ bool ScrollingList::allocateTexture( unsigned int index, Item *item )
t = imageBuild.CreateImage( imagePath, page, imageType_, scaleX_, scaleY_ ); t = imageBuild.CreateImage( imagePath, page, imageType_, scaleX_, scaleY_ );
} }
// check rom directory path for art
if ( !t )
t = imageBuild.CreateImage( item->filepath, page, imageType_, scaleX_, scaleY_ );
if ( !t ) if ( !t )
{ {
t = new Text(item->title, page, fontInst_, scaleX_, scaleY_ ); t = new Text(item->title, page, fontInst_, scaleX_, scaleY_ );

View File

@ -21,7 +21,7 @@
std::string retrofe_version_major = "0"; std::string retrofe_version_major = "0";
std::string retrofe_version_minor = "8"; std::string retrofe_version_minor = "8";
std::string retrofe_version_build = "17"; std::string retrofe_version_build = "18";
std::string Version::getString( ) std::string Version::getString( )