diff --git a/src/app/RackWidget.cpp b/src/app/RackWidget.cpp index 0dbf8af9..21123b6b 100644 --- a/src/app/RackWidget.cpp +++ b/src/app/RackWidget.cpp @@ -86,8 +86,10 @@ void RackWidget::savePatch(std::string filename) { void RackWidget::loadPatch(std::string filename) { printf("Loading patch %s\n", filename.c_str()); FILE *file = fopen(filename.c_str(), "r"); - if (!file) + if (!file) { + // Exit silently return; + } json_error_t error; json_t *rootJ = json_loadf(file, 0, &error); @@ -97,7 +99,8 @@ void RackWidget::loadPatch(std::string filename) { json_decref(rootJ); } else { - printf("JSON parsing error at %s %d:%d %s\n", error.source, error.line, error.column, error.text); + std::string message = stringf("JSON parsing error at %s %d:%d %s\n", error.source, error.line, error.column, error.text); + osdialog_message(OSDIALOG_WARNING, OSDIALOG_OK, message.c_str()); } fclose(file); @@ -168,12 +171,14 @@ json_t *RackWidget::toJson() { } void RackWidget::fromJson(json_t *rootJ) { + std::string message; + // version json_t *versionJ = json_object_get(rootJ, "version"); if (versionJ) { const char *version = json_string_value(versionJ); if (gApplicationVersion != version) - printf("JSON version mismatch, attempting to convert JSON version %s to %s\n", version, gApplicationVersion.c_str()); + message += stringf("This patch was created with Rack %s. Saving it will convert it to a Rack %s patch.\n\n", version, gApplicationVersion.c_str()); } // modules @@ -183,10 +188,14 @@ void RackWidget::fromJson(json_t *rootJ) { size_t moduleId; json_t *moduleJ; json_array_foreach(modulesJ, moduleId, moduleJ) { - // Get plugin json_t *pluginSlugJ = json_object_get(moduleJ, "plugin"); if (!pluginSlugJ) continue; + json_t *modelSlugJ = json_object_get(moduleJ, "model"); + if (!modelSlugJ) continue; const char *pluginSlug = json_string_value(pluginSlugJ); + const char *modelSlug = json_string_value(modelSlugJ); + + // Search for plugin Plugin *plugin = NULL; for (Plugin *p : gPlugins) { if (p->slug == pluginSlug) { @@ -194,18 +203,23 @@ void RackWidget::fromJson(json_t *rootJ) { break; } } - if (!plugin) continue; + if (!plugin) { + message += stringf("Could not find plugin \"%s\" for module \"%s\".\n", pluginSlug, modelSlug); + continue; + } - // Get model - json_t *modelSlug = json_object_get(moduleJ, "model"); + // Get for model Model *model = NULL; for (Model *m : plugin->models) { - if (m->slug == json_string_value(modelSlug)) { + if (m->slug == modelSlug) { model = m; break; } } - if (!model) continue; + if (!model) { + message += stringf("Could not find module \"%s\" in plugin \"%s\".\n", modelSlug, pluginSlug); + continue; + } // Create ModuleWidget ModuleWidget *moduleWidget = model->createModuleWidget(); @@ -244,6 +258,11 @@ void RackWidget::fromJson(json_t *rootJ) { // Add wire to rack wireContainer->addChild(wireWidget); } + + // Display a message if we have something to say + if (!message.empty()) { + osdialog_message(OSDIALOG_INFO, OSDIALOG_OK, message.c_str()); + } } void RackWidget::addModule(ModuleWidget *m) {