MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / parserSetCode

Method parserSetCode

app/src/API/Handlers/ProjectHandler.cpp:2920–2993  ·  view source on GitHub ↗

* @brief Set frame parser code for a source. */

Source from the content-addressed store, hash-verified

2918 * @brief Set frame parser code for a source.
2919 */
2920API::CommandResponse API::Handlers::ProjectHandler::parserSetCode(const QString& id,
2921 const QJsonObject& params)
2922{
2923 if (!params.contains(QStringLiteral("code"))) {
2924 return CommandResponse::makeError(
2925 id, ErrorCode::MissingParam, QStringLiteral("Missing required parameter: code"));
2926 }
2927
2928 const QString code = params.value(QStringLiteral("code")).toString();
2929 const int sourceId = params.contains(Keys::SourceId) ? params.value(Keys::SourceId).toInt() : 0;
2930 auto& model = DataModel::ProjectModel::instance();
2931 const int srcCount = static_cast<int>(model.sources().size());
2932
2933 if (sourceId < 0 || sourceId >= srcCount)
2934 return CommandResponse::makeError(
2935 id, ErrorCode::InvalidParam, QStringLiteral("Invalid sourceId"));
2936
2937 const bool hasLanguage = params.contains(QStringLiteral("language"));
2938 int savedLanguage = 0;
2939 if (hasLanguage) {
2940 const int language = params.value(QStringLiteral("language")).toInt();
2941 if (language != SerialStudio::JavaScript && language != SerialStudio::Lua
2942 && language != SerialStudio::Native)
2943 return CommandResponse::makeError(
2944 id,
2945 ErrorCode::InvalidParam,
2946 QStringLiteral("Invalid language: must be 0 (JavaScript), 1 (Lua) or 2 (Built-In)"));
2947
2948 if (language == SerialStudio::Native)
2949 return setNativeParserFromDescriptor(id, sourceId, code);
2950
2951 savedLanguage = model.frameParserLanguage(sourceId);
2952
2953 model.updateSourceFrameParserLanguage(sourceId, language);
2954
2955 auto& parser = DataModel::FrameParser::instance();
2956 const bool prevSuppress = model.suppressMessageBoxes();
2957 model.setSuppressMessageBoxes(true);
2958 parser.setSuppressMessageBoxes(true);
2959
2960 const bool ok = parser.loadScript(sourceId, code, false);
2961
2962 parser.setSuppressMessageBoxes(prevSuppress);
2963 model.setSuppressMessageBoxes(prevSuppress);
2964
2965 if (!ok) {
2966 model.updateSourceFrameParserLanguage(sourceId, savedLanguage);
2967 return CommandResponse::makeError(
2968 id,
2969 ErrorCode::InvalidParam,
2970 QStringLiteral("Script engine rejected the parser code (check logs)"));
2971 }
2972 }
2973
2974 if (sourceId == 0)
2975 model.setFrameParserCode(code);
2976 else
2977 model.updateSourceFrameParser(sourceId, code);

Callers

nothing calls this directly

Calls 14

detectLanguageMismatchFunction · 0.85
frameParserLanguageMethod · 0.80
suppressMessageBoxesMethod · 0.80
setFrameParserCodeMethod · 0.80
lengthMethod · 0.80
isEmptyMethod · 0.80
containsMethod · 0.45
valueMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected