SystemData::SystemData(const std::string& name, const std::string& fullName, const std::string& startPath, const std::vector<std::string>& extensions, 
	const std::string& command, const std::vector<PlatformIds::PlatformId>& platformIds, const std::string& themeFolder)
{
	mName = name;
	mFullName = fullName;
	mStartPath = startPath;

	//expand home symbol if the startpath contains ~
	if(mStartPath[0] == '~')
	{
		mStartPath.erase(0, 1);
		mStartPath.insert(0, getHomePath());
	}

	mSearchExtensions = extensions;
	mLaunchCommand = command;
	mPlatformIds = platformIds;
	mThemeFolder = themeFolder;

	mRootFolder = new FileData(FOLDER, mStartPath, this);
	mRootFolder->metadata.set("name", mFullName);

	if(!Settings::getInstance()->getBool("ParseGamelistOnly"))
		populateFolder(mRootFolder);

	if(!Settings::getInstance()->getBool("IgnoreGamelist"))
		parseGamelist(this);

	mRootFolder->sort(FileSorts::SortTypes.at(0));

	loadTheme();
}
SystemData::SystemData(std::string name, std::string startPath, std::string extension, std::string command)
{
	mName = name;

	//expand home symbol if the startpath contains it
	if(startPath[0] == '~')
        {
                startPath.erase(0, 1);

                std::string home = getenv("HOME");
                if(home.empty())
                {
                        std::cerr << "ERROR - System start path contains ~ but $HOME is not set!\n";
                        return;
                }else{
                        startPath.insert(0, home);
                }
        }

	mStartPath = startPath;
	mSearchExtension = extension;
	mLaunchCommand = command;


	mRootFolder = new FolderData(this, mStartPath, "Search Root");

	if(!PARSEGAMELISTONLY)
		populateFolder(mRootFolder);

	parseGamelist(this);

	mRootFolder->sort();
}
SystemData::SystemData(std::string name, std::string descName, std::string startPath, std::string extension, std::string command)
{
	mName = name;
	mDescName = descName;

	//expand home symbol if the startpath contains ~
	if(startPath[0] == '~')
	{
		startPath.erase(0, 1);
		std::string home = getHomePath();
		startPath.insert(0, home);
        }

	mStartPath = startPath;
	mSearchExtension = extension;
	mLaunchCommand = command;

	mRootFolder = new FolderData(this, mStartPath, "Search Root");

	if(!PARSEGAMELISTONLY)
		populateFolder(mRootFolder);

	if(!IGNOREGAMELIST)
		parseGamelist(this);

	mRootFolder->sort();
}