| 601 | } |
| 602 | |
| 603 | void InstanceList::saveGroupList() |
| 604 | { |
| 605 | qDebug() << "Will save group list now."; |
| 606 | if (!m_instancesProbed) { |
| 607 | qDebug() << "Group saving prevented because we don't know the full list of instances yet."; |
| 608 | return; |
| 609 | } |
| 610 | WatchLock foo(m_watcher, m_instDir); |
| 611 | QString groupFileName = m_instDir + "/instgroups.json"; |
| 612 | QMap<QString, QSet<QString>> reverseGroupMap; |
| 613 | for (auto iter = m_instanceGroupIndex.begin(); iter != m_instanceGroupIndex.end(); iter++) { |
| 614 | QString id = iter.key(); |
| 615 | QString group = iter.value(); |
| 616 | if (group.isEmpty()) |
| 617 | continue; |
| 618 | if (!instanceSet.contains(id)) { |
| 619 | qDebug() << "Skipping saving missing instance" << id << "to groups list."; |
| 620 | continue; |
| 621 | } |
| 622 | |
| 623 | if (!reverseGroupMap.count(group)) { |
| 624 | QSet<QString> set; |
| 625 | set.insert(id); |
| 626 | reverseGroupMap[group] = set; |
| 627 | } else { |
| 628 | QSet<QString>& set = reverseGroupMap[group]; |
| 629 | set.insert(id); |
| 630 | } |
| 631 | } |
| 632 | QJsonObject toplevel; |
| 633 | toplevel.insert("formatVersion", QJsonValue(QString("1"))); |
| 634 | QJsonObject groupsArr; |
| 635 | for (auto iter = reverseGroupMap.begin(); iter != reverseGroupMap.end(); iter++) { |
| 636 | auto list = iter.value(); |
| 637 | auto name = iter.key(); |
| 638 | QJsonObject groupObj; |
| 639 | QJsonArray instanceArr; |
| 640 | groupObj.insert("hidden", QJsonValue(m_collapsedGroups.contains(name))); |
| 641 | for (auto item : list) { |
| 642 | instanceArr.append(QJsonValue(item)); |
| 643 | } |
| 644 | groupObj.insert("instances", instanceArr); |
| 645 | groupsArr.insert(name, groupObj); |
| 646 | } |
| 647 | toplevel.insert("groups", groupsArr); |
| 648 | QJsonDocument doc(toplevel); |
| 649 | try { |
| 650 | FS::write(groupFileName, doc.toJson()); |
| 651 | qDebug() << "Group list saved."; |
| 652 | } catch (const FS::FileSystemException& e) { |
| 653 | qCritical() << "Failed to write instance group file :" << e.cause(); |
| 654 | } |
| 655 | } |
| 656 | |
| 657 | void InstanceList::loadGroupList() |
| 658 | { |