bool CreateCollectionDialog::validate(JSONFrame* frame, mongo::BSONObj& bsonObj, bool silentOnSuccess /* = true */) { try { bsonObj = mongo::Robomongo::fromjson(jsonText(frame).toStdString()); } catch (const mongo::Robomongo::ParseMsgAssertionException &ex) { // v0.9 QString message = QtUtils::toQString(ex.reason()); int offset = ex.offset(); int line = 0, pos = 0; frame->sciScintilla()->lineIndexFromPosition(offset, &line, &pos); frame->sciScintilla()->setCursorPosition(line, pos); int lineHeight = frame->sciScintilla()->lineLength(line); frame->sciScintilla()->fillIndicatorRange(line, pos, line, lineHeight, 0); message = QString(tr("Unable to parse JSON:<br /> <b>%1</b>, at (%2, %3).")) .arg(message).arg(line + 1).arg(pos + 1); QMessageBox::critical(NULL, tr("Parsing error"), message); frame->setFocus(); activateWindow(); return false; } if (!silentOnSuccess) { QMessageBox::information(NULL, tr("Validation"), tr("JSON is valid!")); frame->setFocus(); activateWindow(); } return true; }
bool DocumentTextEditor::validate(bool silentOnSuccess /* = true */) { QString text = jsonText(); int len = 0; try { std::string textString = QtUtils::toStdString(text); const char *json = textString.c_str(); int jsonLen = textString.length(); int offset = 0; _obj.clear(); while (offset != jsonLen) { mongo::BSONObj doc = mongo::Robomongo::fromjson(json+offset, &len); _obj.push_back(doc); offset += len; } } catch (const mongo::Robomongo::ParseMsgAssertionException &ex) { // v0.9 QString message = QtUtils::toQString(ex.reason()); int offset = ex.offset(); int line = 0, pos = 0; _queryText->sciScintilla()->lineIndexFromPosition(offset, &line, &pos); _queryText->sciScintilla()->setCursorPosition(line, pos); int lineHeight = _queryText->sciScintilla()->lineLength(line); _queryText->sciScintilla()->fillIndicatorRange(line, pos, line, lineHeight, 0); message = QString("Unable to parse JSON:<br /> <b>%1</b>, at (%2, %3).") .arg(message).arg(line + 1).arg(pos + 1); QMessageBox::critical(NULL, "Parsing error", message); _queryText->setFocus(); activateWindow(); return false; } if (!silentOnSuccess) { QMessageBox::information(NULL, "Validation", "JSON is valid!"); _queryText->setFocus(); activateWindow(); } return true; }
void dbload() { // If the file doesn't exist, there is no DB to load if(!FileExists(dbpath)) return; dprintf("Loading database..."); DWORD ticks = GetTickCount(); // Multi-byte (UTF8) file path converted to UTF16 WString databasePathW = StringUtils::Utf8ToUtf16(dbpath); // Decompress the file if compression was enabled bool useCompression = !settingboolget("Engine", "DisableDatabaseCompression"); LZ4_STATUS lzmaStatus = LZ4_INVALID_ARCHIVE; { lzmaStatus = LZ4_decompress_fileW(databasePathW.c_str(), databasePathW.c_str()); // Check return code if(useCompression && lzmaStatus != LZ4_SUCCESS && lzmaStatus != LZ4_INVALID_ARCHIVE) { dputs("\nInvalid database file!"); return; } } // Read the database file Handle hFile = CreateFileW(databasePathW.c_str(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0); if(!hFile) { dputs("\nFailed to open database file!"); return; } unsigned int jsonFileSize = GetFileSize(hFile, 0); if(!jsonFileSize) { dputs("\nEmpty database file!"); return; } Memory<char*> jsonText(jsonFileSize + 1); DWORD read = 0; if(!ReadFile(hFile, jsonText(), jsonFileSize, &read, 0)) { dputs("\nFailed to read database file!"); return; } hFile.Close(); // Deserialize JSON JSON root = json_loads(jsonText(), 0, 0); if(lzmaStatus != LZ4_INVALID_ARCHIVE && useCompression) LZ4_compress_fileW(databasePathW.c_str(), databasePathW.c_str()); // Validate JSON load status if(!root) { dputs("\nInvalid database file (JSON)!"); return; } // Finally load all structures CommentCacheLoad(root); LabelCacheLoad(root); BookmarkCacheLoad(root); FunctionCacheLoad(root); LoopCacheLoad(root); BpCacheLoad(root); // Free root json_decref(root); dprintf("%ums\n", GetTickCount() - ticks); }