upgrade notificationtags/v0.6.0
@@ -150,7 +150,8 @@ void openBrowser(std::string url); | |||
// logger.cpp | |||
//////////////////// | |||
extern FILE *gLogFile; | |||
void loggerInit(); | |||
void loggerDestroy(); | |||
void debug(const char *format, ...); | |||
void info(const char *format, ...); | |||
void warn(const char *format, ...); | |||
@@ -114,6 +114,7 @@ void ModuleWidget::fromJson(json_t *rootJ) { | |||
json_t *paramJ; | |||
json_array_foreach(paramsJ, i, paramJ) { | |||
if (legacy && legacy <= 1) { | |||
// Legacy 1 mode | |||
// The index in the array we're iterating is the index of the ParamWidget in the params vector. | |||
if (i < params.size()) { | |||
// Create upgraded version of param JSON object | |||
@@ -9,27 +9,6 @@ | |||
namespace rack { | |||
static std::string newVersion = ""; | |||
#if defined(RELEASE) | |||
static void checkVersion() { | |||
json_t *resJ = requestJson(METHOD_GET, gApiHost + "/version", NULL); | |||
if (resJ) { | |||
json_t *versionJ = json_object_get(resJ, "version"); | |||
if (versionJ) { | |||
const char *version = json_string_value(versionJ); | |||
if (version && strlen(version) > 0 && version != gApplicationVersion) { | |||
newVersion = version; | |||
} | |||
} | |||
json_decref(resJ); | |||
} | |||
} | |||
#endif | |||
RackScene::RackScene() { | |||
scrollWidget = new RackScrollWidget(); | |||
{ | |||
@@ -46,12 +25,6 @@ RackScene::RackScene() { | |||
gToolbar = new Toolbar(); | |||
addChild(gToolbar); | |||
scrollWidget->box.pos.y = gToolbar->box.size.y; | |||
// Check for new version | |||
#if defined(RELEASE) | |||
std::thread versionThread(checkVersion); | |||
versionThread.detach(); | |||
#endif | |||
} | |||
void RackScene::step() { | |||
@@ -68,17 +41,6 @@ void RackScene::step() { | |||
Scene::step(); | |||
zoomWidget->box.size = gRackWidget->box.size.mult(zoomWidget->zoom); | |||
// Version popup message | |||
if (!newVersion.empty()) { | |||
std::string versionMessage = stringf("Rack %s is available.\n\nYou have Rack %s.\n\nWould you like to download the new version on the website?", newVersion.c_str(), gApplicationVersion.c_str()); | |||
if (osdialog_message(OSDIALOG_INFO, OSDIALOG_YES_NO, versionMessage.c_str())) { | |||
std::thread t(openBrowser, "https://vcvrack.com/"); | |||
t.detach(); | |||
windowClose(); | |||
} | |||
newVersion = ""; | |||
} | |||
} | |||
void RackScene::draw(NVGcontext *vg) { | |||
@@ -225,8 +225,6 @@ void RackWidget::fromJson(json_t *rootJ) { | |||
json_t *versionJ = json_object_get(rootJ, "version"); | |||
if (versionJ) { | |||
version = json_string_value(versionJ); | |||
if (!version.empty() && gApplicationVersion != version) | |||
message += stringf("This patch was created with Rack %s. Saving it will convert it to a Rack %s patch.\n\n", version.c_str(), gApplicationVersion.c_str()); | |||
} | |||
// Detect old patches with ModuleWidget::params/inputs/outputs indices. | |||
@@ -234,6 +232,7 @@ void RackWidget::fromJson(json_t *rootJ) { | |||
int legacy = 0; | |||
if (startsWith(version, "0.3.") || startsWith(version, "0.4.") || startsWith(version, "0.5.") || version == "" || version == "dev") { | |||
legacy = 1; | |||
message += "This patch was created with Rack 0.5 or earlier. Saving it will convert it to a Rack 0.6+ patch.\n\n"; | |||
} | |||
if (legacy) { | |||
info("Loading patch using legacy mode %d", legacy); | |||
@@ -246,9 +245,10 @@ void RackWidget::fromJson(json_t *rootJ) { | |||
size_t moduleId; | |||
json_t *moduleJ; | |||
json_array_foreach(modulesJ, moduleId, moduleJ) { | |||
// Set legacy property | |||
if (legacy) | |||
json_object_set_new(moduleJ, "legacy", json_integer(legacy)); | |||
// Add "legacy" property if in legacy mode | |||
if (legacy) { | |||
json_object_set(moduleJ, "legacy", json_integer(legacy)); | |||
} | |||
json_t *pluginSlugJ = json_object_get(moduleJ, "plugin"); | |||
if (!pluginSlugJ) continue; | |||
@@ -259,7 +259,7 @@ void RackWidget::fromJson(json_t *rootJ) { | |||
Model *model = pluginGetModel(pluginSlug, modelSlug); | |||
if (!model) { | |||
message += stringf("Could not find module \"%s\" in plugin \"%s\"\n", modelSlug.c_str(), pluginSlug.c_str()); | |||
message += stringf("Could not find module \"%s\" of plugin \"%s\"\n", modelSlug.c_str(), pluginSlug.c_str()); | |||
continue; | |||
} | |||
@@ -292,6 +292,8 @@ void RackWidget::fromJson(json_t *rootJ) { | |||
Port *outputPort = NULL; | |||
Port *inputPort = NULL; | |||
if (legacy && legacy <= 1) { | |||
// Legacy 1 mode | |||
// The index of the "ports" array is the index of the Port in the `outputs` and `inputs` vector. | |||
outputPort = outputModuleWidget->outputs[outputId]; | |||
inputPort = inputModuleWidget->inputs[inputId]; | |||
} | |||
@@ -14,11 +14,7 @@ using namespace rack; | |||
int main(int argc, char* argv[]) { | |||
randomInit(); | |||
#ifdef RELEASE | |||
std::string logFilename = assetLocal("log.txt"); | |||
gLogFile = fopen(logFilename.c_str(), "w"); | |||
#endif | |||
loggerInit(); | |||
info("Rack %s", gApplicationVersion.c_str()); | |||
@@ -64,10 +60,7 @@ int main(int argc, char* argv[]) { | |||
bridgeDestroy(); | |||
engineDestroy(); | |||
pluginDestroy(); | |||
#ifdef RELEASE | |||
fclose(gLogFile); | |||
#endif | |||
loggerDestroy(); | |||
return 0; | |||
} |
@@ -1,49 +1,66 @@ | |||
#include "util/common.hpp" | |||
#include "asset.hpp" | |||
#include <stdarg.h> | |||
namespace rack { | |||
FILE *gLogFile = stderr; | |||
static FILE *logFile = stderr; | |||
static auto startTime = std::chrono::high_resolution_clock::now(); | |||
void loggerInit() { | |||
#ifdef RELEASE | |||
std::string logFilename = assetLocal("log.txt"); | |||
gLogFile = fopen(logFilename.c_str(), "w"); | |||
#endif | |||
} | |||
void loggerDestroy() { | |||
#ifdef RELEASE | |||
fclose(gLogFile); | |||
#endif | |||
} | |||
static void printTimestamp() { | |||
} | |||
static void printLog(const char *type, const char *format, va_list args) { | |||
auto nowTime = std::chrono::high_resolution_clock::now(); | |||
int duration = std::chrono::duration_cast<std::chrono::milliseconds>(nowTime - startTime).count(); | |||
printTimestamp(); | |||
fprintf(logFile, "[%s %.03f] ", duration / 1000.0, type); | |||
vfprintf(logFile, format, args); | |||
fprintf(logFile, "\n"); | |||
fflush(logFile); | |||
} | |||
void debug(const char *format, ...) { | |||
va_list args; | |||
va_start(args, format); | |||
fprintf(gLogFile, "[debug] "); | |||
vfprintf(gLogFile, format, args); | |||
fprintf(gLogFile, "\n"); | |||
fflush(gLogFile); | |||
printLog("debug", format, args); | |||
va_end(args); | |||
} | |||
void info(const char *format, ...) { | |||
va_list args; | |||
va_start(args, format); | |||
fprintf(gLogFile, "[info] "); | |||
vfprintf(gLogFile, format, args); | |||
fprintf(gLogFile, "\n"); | |||
fflush(gLogFile); | |||
printLog("info", format, args); | |||
va_end(args); | |||
} | |||
void warn(const char *format, ...) { | |||
va_list args; | |||
va_start(args, format); | |||
fprintf(gLogFile, "[warning] "); | |||
vfprintf(gLogFile, format, args); | |||
fprintf(gLogFile, "\n"); | |||
fflush(gLogFile); | |||
printLog("warn", format, args); | |||
va_end(args); | |||
} | |||
void fatal(const char *format, ...) { | |||
va_list args; | |||
va_start(args, format); | |||
fprintf(gLogFile, "[fatal] "); | |||
vfprintf(gLogFile, format, args); | |||
fprintf(gLogFile, "\n"); | |||
fflush(gLogFile); | |||
printLog("fatal", format, args); | |||
va_end(args); | |||
} | |||