#include "migration.hpp" #include "logic/mappings.hpp" #include "logic/main-settings.hpp" #include "options/group.hpp" #include #include #include #include using namespace migrations; struct mappings_from_2_3_0_rc11 : migration { static QList> get_old_splines() { QList> ret; static const char* names[] = { "tx", "tx_alt", "ty", "ty_alt", "tz", "tz_alt", "rx", "rx_alt", "ry", "ry_alt", "rz", "rz_alt", }; std::shared_ptr settings_ = options::group::ini_file(); QSettings& settings(*settings_); for (const char* name : names) { QList points; settings.beginGroup(QString("Curves-%1").arg(name)); const int max = settings.value("point-count", 0).toInt(); for (int i = 0; i < max; i++) { QPointF new_point(settings.value(QString("point-%1-x").arg(i), 0).toDouble(), settings.value(QString("point-%1-y").arg(i), 0).toDouble()); points.append(new_point); } settings.endGroup(); ret.append(points); } return ret; } QString unique_date() const override { return "20160909_00"; } QString name() const override { return "mappings to 2.3.0-rc12"; } static Mappings get_new_mappings() { main_settings s; return Mappings(std::vector{&s.a_x, &s.a_y, &s.a_z, &s.a_yaw, &s.a_pitch, &s.a_roll}); } bool should_run() const override { Mappings m = get_new_mappings(); // run only if no new splines were set for (int i = 0; i < 6; i++) if (m(i).spline_main.get_point_count() || m(i).spline_alt.get_point_count()) return false; // run only if old splines exist for (const QList& points : get_old_splines()) if (points.size()) return true; // no splines exit at all return false; } void run() override { const QList> old_mappings = get_old_splines(); Mappings m = get_new_mappings(); std::shared_ptr s_ = options::group::ini_file(); QSettings& s = *s_; for (int i = 0; i < 12; i++) { spline& spl = (i % 2) == 0 ? m(i / 2).spline_main : m(i / 2).spline_alt; spl.removeAllPoints(); const QList& points = old_mappings[i]; for (const QPointF& pt : points) spl.addPoint(pt); spl.save(s); } } }; OPENTRACK_MIGRATION(mappings_from_2_3_0_rc11);