* @brief Resolve a checkpoint reference (path / timestamp / label) to an absolute path. */
| 872 | * @brief Resolve a checkpoint reference (path / timestamp / label) to an absolute path. |
| 873 | */ |
| 874 | static QString resolveCheckpoint(const QJsonObject& params) |
| 875 | { |
| 876 | if (params.contains(QStringLiteral("path"))) |
| 877 | return params.value(QStringLiteral("path")).toString(); |
| 878 | |
| 879 | const auto rows = Misc::BackupManager::instance().list(); |
| 880 | if (params.contains(QStringLiteral("timestamp"))) { |
| 881 | const auto needle = params.value(QStringLiteral("timestamp")).toString(); |
| 882 | for (const auto& v : rows) { |
| 883 | const auto row = v.toMap(); |
| 884 | if (row.value(QStringLiteral("timestamp")).toString() == needle) |
| 885 | return row.value(QStringLiteral("path")).toString(); |
| 886 | } |
| 887 | } |
| 888 | if (params.contains(QStringLiteral("label"))) { |
| 889 | const auto needle = params.value(QStringLiteral("label")).toString(); |
| 890 | for (const auto& v : rows) { |
| 891 | const auto row = v.toMap(); |
| 892 | if (row.value(QStringLiteral("label")).toString() == needle) |
| 893 | return row.value(QStringLiteral("path")).toString(); |
| 894 | } |
| 895 | } |
| 896 | return QString(); |
| 897 | } |
| 898 | |
| 899 | /** |
| 900 | * @brief Restore a previously taken snapshot into ProjectModel and persist it to disk; the |