bool LoadJsonFromFile(const char * filePath, Json::Value &jsonData) { IFileStream currentFile; if (!currentFile.Open(filePath)) { _ERROR("%s: couldn't open file (%s) Error (%d)", __FUNCTION__, filePath, GetLastError()); return true; } char buf[512]; std::string jsonString; while (!currentFile.HitEOF()){ currentFile.ReadString(buf, sizeof(buf) / sizeof(buf[0])); jsonString.append(buf); } currentFile.Close(); Json::Features features; features.all(); Json::Reader reader(features); bool parseSuccess = reader.parse(jsonString, jsonData); if (!parseSuccess) { _ERROR("%s: Error occured parsing json for %s.", __FUNCTION__, filePath); return true; } return false; }
void ImportTranslationFiles(BSScaleformTranslator * translator) { char appdataPath[MAX_PATH]; ASSERT(SUCCEEDED(SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, appdataPath))); std::string modlistPath = appdataPath; modlistPath += "\\Skyrim Special Edition\\plugins.txt"; // Parse mod list file to acquire translation filenames IFileStream modlistFile; if(modlistFile.Open(modlistPath.c_str())) { while(!modlistFile.HitEOF()) { char buf[512]; modlistFile.ReadString(buf, 512, '\n', '\r'); // skip comments if(buf[0] == '#') continue; // Determine extension type std::string line = buf; // SE: added this if (line.length() > 0) { if (line.front() != '*') continue; // Skip not enabled files line = line.substr(1); // Remove the * from name } std::string::size_type lastDelim = line.rfind('.'); if(lastDelim != std::string::npos) { std::string ext = line.substr(lastDelim); if(_stricmp(ext.c_str(), ".ESM") == 0 || _stricmp(ext.c_str(),".ESP") == 0) { std::string name = line.substr(0, lastDelim); ParseTranslation(translator, name); } } } } modlistFile.Close(); }