void LandingTargetEstimator::_check_params(const bool force) { bool updated; parameter_update_s paramUpdate; orb_check(_parameterSub, &updated); if (updated) { orb_copy(ORB_ID(parameter_update), _parameterSub, ¶mUpdate); } if (updated || force) { _update_params(); } }
void dt_lib_init_presets(dt_lib_module_t *module) { // since lighttable presets can't end up in styles or any other place outside of the presets table it is // sufficient // to update that very table here and assume that everything is up to date elsewhere. // the intended logic is as follows: // - no set_params -> delete all presets // - op_version >= module_version -> done // - op_version < module_version -> // - module has legacy_params -> try to update // - module doesn't have legacy_params -> delete it if(module->set_params == NULL) { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "DELETE FROM data.presets WHERE operation=?1", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, module->plugin_name, -1, SQLITE_TRANSIENT); sqlite3_step(stmt); sqlite3_finalize(stmt); } else { sqlite3_stmt *stmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "SELECT rowid, op_version, op_params, name FROM data.presets WHERE operation=?1", -1, &stmt, NULL); DT_DEBUG_SQLITE3_BIND_TEXT(stmt, 1, module->plugin_name, -1, SQLITE_TRANSIENT); while(sqlite3_step(stmt) == SQLITE_ROW) { int rowid = sqlite3_column_int(stmt, 0); int op_version = sqlite3_column_int(stmt, 1); void *op_params = (void *)sqlite3_column_blob(stmt, 2); size_t op_params_size = sqlite3_column_bytes(stmt, 2); const char *name = (char *)sqlite3_column_text(stmt, 3); int version = module->version(module); if(op_version < version) { size_t new_params_size = 0; void *new_params = NULL; if(module->legacy_params && (new_params = _update_params(module, op_params, op_params_size, op_version, version, &new_params_size))) { // write the updated preset back to db fprintf(stderr, "[lighttable_init_presets] updating '%s' preset '%s' from version %d to version %d\n", module->plugin_name, name, op_version, version); sqlite3_stmt *innerstmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "UPDATE data.presets SET op_version=?1, op_params=?2 WHERE rowid=?3", -1, &innerstmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(innerstmt, 1, version); DT_DEBUG_SQLITE3_BIND_BLOB(innerstmt, 2, new_params, new_params_size, SQLITE_TRANSIENT); DT_DEBUG_SQLITE3_BIND_INT(innerstmt, 3, rowid); sqlite3_step(innerstmt); sqlite3_finalize(innerstmt); } else { // delete the preset fprintf(stderr, "[lighttable_init_presets] Can't upgrade '%s' preset '%s' from version %d to %d, " "no legacy_params() implemented or unable to update\n", module->plugin_name, name, op_version, version); sqlite3_stmt *innerstmt; DT_DEBUG_SQLITE3_PREPARE_V2(dt_database_get(darktable.db), "DELETE FROM data.presets WHERE rowid=?1", -1, &innerstmt, NULL); DT_DEBUG_SQLITE3_BIND_INT(innerstmt, 1, rowid); sqlite3_step(innerstmt); sqlite3_finalize(innerstmt); } free(new_params); } } sqlite3_finalize(stmt); } if(module->init_presets) module->init_presets(module); }