1#include "DisplayConfigurationStorage.h"
4#include <QStandardPaths>
6#include <QJsonDocument>
10inline QString stringFromEdid(const miral::Edid& edid)
13 str += QString::fromStdString(edid.vendor);
14 str += QString("%1%2").arg(edid.product_code).arg(edid.serial_number);
16 for (int i = 0; i < 4; i++) {
17 str += QString::fromStdString(edid.descriptors[i].string_value());
24DisplayConfigurationStorage::DisplayConfigurationStorage()
28void DisplayConfigurationStorage::save(const miral::DisplayId &displayId, const miral::DisplayConfigurationOptions &options)
30 const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QStringLiteral("/unity8/");
31 QFile f(dbPath + stringFromEdid(displayId.edid) + ".edid");
34 if (options.used.is_set()) json.insert("used", options.used.value());
35 if (options.clone_output_index.is_set()) json.insert("clone_output_index", static_cast<int>(options.clone_output_index.value()));
36 if (options.mode.is_set()) {
37 auto const& mode = options.mode.value();
39 QString sz(QString("%1x%2").arg(mode.size.width.as_int()).arg(mode.size.height.as_int()));
40 QJsonObject jsonMode({
42 {"refresh_rate", mode.refresh_rate }
44 json.insert("mode", jsonMode);
46 if (options.orientation.is_set()) json.insert("orientation", static_cast<int>(options.orientation.value()));
47 if (options.form_factor.is_set()) json.insert("form_factor", static_cast<int>(options.form_factor.value()));
48 if (options.scale.is_set()) json.insert("scale", options.scale.value());
50 if (f.open(QIODevice::WriteOnly)) {
51 QJsonDocument saveDoc(json);
52 f.write(saveDoc.toJson());
56bool DisplayConfigurationStorage::load(const miral::DisplayId &displayId, miral::DisplayConfigurationOptions &options) const
58 const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QStringLiteral("/unity8/");
59 QFile f(dbPath + stringFromEdid(displayId.edid) + ".edid");
61 if (f.open(QIODevice::ReadOnly)) {
62 QByteArray saveData = f.readAll();
63 QJsonDocument loadDoc(QJsonDocument::fromJson(saveData));
65 QJsonObject json(loadDoc.object());
66 if (json.contains("used")) options.used = json["used"].toBool();
67 if (json.contains("clone_output_index")) options.clone_output_index = json["clone_output_index"].toInt();
68 if (json.contains("mode")) {
69 QJsonObject jsonMode = json["mode"].toObject();
71 if (jsonMode.contains("size") && jsonMode.contains("refresh_rate")) {
72 QString sz(jsonMode["size"].toString());
73 QStringList geo = sz.split("x", QString::SkipEmptyParts);
74 if (geo.count() == 2) {
75 miral::DisplayConfigurationOptions::DisplayMode mode;
76 mode.size = mir::geometry::Size(geo[0].toInt(), geo[1].toInt());
77 mode.refresh_rate = jsonMode["refresh_rate"].toDouble();
82 if (json.contains("orientation")) options.orientation = static_cast<MirOrientation>(json["orientation"].toInt());
83 if (json.contains("form_factor")) options.form_factor = static_cast<MirFormFactor>(json["form_factor"].toInt());
84 if (json.contains("scale")) options.scale = json["form_factor"].toDouble();
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list