| 666 | } |
| 667 | |
| 668 | void InstanceList::saveGroupList() |
| 669 | { |
| 670 | qDebug() << "Will save group list now."; |
| 671 | if (!m_instancesProbed) { |
| 672 | qDebug() << "Group saving prevented because we don't know the full list of instances yet."; |
| 673 | return; |
| 674 | } |
| 675 | WatchLock foo(m_watcher, m_instDir); |
| 676 | QString groupFileName = m_instDir + "/instgroups.json"; |
| 677 | QMap<QString, QSet<QString>> reverseGroupMap; |
| 678 | for (auto iter = m_instanceGroupIndex.begin(); iter != m_instanceGroupIndex.end(); iter++) { |
| 679 | const QString& id = iter.key(); |
| 680 | QString group = iter.value(); |
| 681 | if (group.isEmpty()) |
| 682 | continue; |
| 683 | if (!instanceSet.contains(id)) { |
| 684 | qDebug() << "Skipping saving missing instance" << id << "to groups list."; |
| 685 | continue; |
| 686 | } |
| 687 | |
| 688 | if (!reverseGroupMap.count(group)) { |
| 689 | QSet<QString> set; |
| 690 | set.insert(id); |
| 691 | reverseGroupMap[group] = set; |
| 692 | } else { |
| 693 | QSet<QString>& set = reverseGroupMap[group]; |
| 694 | set.insert(id); |
| 695 | } |
| 696 | } |
| 697 | QJsonObject toplevel; |
| 698 | toplevel.insert("formatVersion", QJsonValue(QString("1"))); |
| 699 | QJsonObject groupsArr; |
| 700 | for (auto iter = reverseGroupMap.begin(); iter != reverseGroupMap.end(); iter++) { |
| 701 | auto list = iter.value(); |
| 702 | auto name = iter.key(); |
| 703 | QJsonObject groupObj; |
| 704 | QJsonArray instanceArr; |
| 705 | groupObj.insert("hidden", QJsonValue(m_collapsedGroups.contains(name))); |
| 706 | for (auto item : list) { |
| 707 | instanceArr.append(QJsonValue(item)); |
| 708 | } |
| 709 | groupObj.insert("instances", instanceArr); |
| 710 | groupsArr.insert(name, groupObj); |
| 711 | } |
| 712 | toplevel.insert("groups", groupsArr); |
| 713 | // empty string represents ungrouped "group" |
| 714 | if (m_collapsedGroups.contains("")) { |
| 715 | QJsonObject ungrouped; |
| 716 | ungrouped.insert("hidden", QJsonValue(true)); |
| 717 | toplevel.insert("ungrouped", ungrouped); |
| 718 | } |
| 719 | QJsonDocument doc(toplevel); |
| 720 | try { |
| 721 | FS::write(groupFileName, doc.toJson()); |
| 722 | qDebug() << "Group list saved."; |
| 723 | } catch (const FS::FileSystemException& e) { |
| 724 | qCritical() << "Failed to write instance group file :" << e.cause(); |
| 725 | } |