Skip to content

Commit 157e227

Browse files
author
Achyut Kumar M
committed
exclude original
1 parent 94537e6 commit 157e227

File tree

2 files changed

+63
-64
lines changed

2 files changed

+63
-64
lines changed

GoInfoGame/GoInfoGame/AppQuestManager.swift

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -70,32 +70,17 @@ class AppQuestManager {
7070

7171
let allOriginalNodes = dbInstance.getNodes().filter { $0.isOriginal && $0.tags.count != 0 }
7272

73-
let nodesFromStorage = allOriginalNodes.compactMap { original in
74-
if let edited = self.dbInstance.getNode(id: original.id, version: .edited),
75-
edited.tags.count != 0,
76-
edited.tags["ext:gig_complete"] != "yes" {
77-
return edited
78-
} else if original.tags["ext:gig_complete"] != "yes" {
79-
return original
80-
} else {
81-
return nil
82-
}
73+
74+
let nodesFromStorage: [StoredNode] = allOriginalNodes.compactMap { original in
75+
original.tags["ext:gig_complete"] == "yes" ? nil : original
8376
}
8477

8578
let allOriginalWays = dbInstance.getWays().filter {
8679
$0.isOriginal && $0.tags.count != 0
8780
}
8881

89-
let waysFromStorage = allOriginalWays.compactMap { original in
90-
if let edited = self.dbInstance.getWay(id: original.id, version: .edited),
91-
edited.tags.count != 0,
92-
edited.tags["ext:gig_complete"] != "yes" {
93-
return edited
94-
} else if original.tags["ext:gig_complete"] != "yes" {
95-
return original
96-
} else {
97-
return nil
98-
}
82+
let waysFromStorage: [StoredWay] = allOriginalWays.compactMap { original in
83+
original.tags["ext:gig_complete"] == "yes" ? nil : original
9984
}
10085

10186

GoInfoGame/GoInfoGame/quests/QuestUndoManager.swift

Lines changed: 58 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class MapUndoManager {
2424

2525
func undo(for id: Int64, type: ElementType) {
2626
MapUndoManager.shared.isUndoInProgress = true
27+
2728
switch type {
2829
case .way:
2930
guard let original = DatabaseConnector.shared.getWay(id: Int(id), version: .original),
@@ -32,15 +33,26 @@ class MapUndoManager {
3233
return
3334
}
3435

35-
try? realm.write {
36-
edited.tags.removeAll()
37-
original.tags.forEach { edited.tags[$0.key] = $0.value }
36+
do {
37+
try realm.write {
38+
edited.tags.removeAll()
39+
40+
for entry in original.tags {
41+
let key = entry.key
42+
let value = entry.value
43+
if key != "ext:gig_complete", key != "ext:gig_last_updated" {
44+
edited.tags[key] = value
45+
}
46+
}
3847

39-
edited.polyline.removeAll()
40-
edited.polyline.append(objectsIn: original.polyline)
48+
edited.polyline.removeAll()
49+
edited.polyline.append(objectsIn: original.polyline)
4150

42-
edited.nodes.removeAll()
43-
edited.nodes.append(objectsIn: original.nodes)
51+
edited.nodes.removeAll()
52+
edited.nodes.append(objectsIn: original.nodes)
53+
}
54+
} catch {
55+
print("❌ Realm write failed during undo (way): \(error)")
4456
}
4557

4658
updateTagsHandler?(id, edited.tags.toDictionary(), .way)
@@ -52,10 +64,25 @@ class MapUndoManager {
5264
return
5365
}
5466

55-
try? realm.write {
56-
edited.tags.removeAll()
57-
original.tags.forEach { edited.tags[$0.key] = $0.value }
58-
edited.point = original.point
67+
do {
68+
try realm.write {
69+
// Step 1: Clear all tags in edited
70+
edited.tags.removeAll()
71+
72+
// Step 2: Copy original tags except gig tags
73+
for entry in original.tags {
74+
let key = entry.key
75+
let value = entry.value
76+
if key != "ext:gig_complete", key != "ext:gig_last_updated" {
77+
edited.tags[key] = value
78+
}
79+
}
80+
81+
// Step 3: Restore location
82+
edited.point = original.point
83+
}
84+
} catch {
85+
print("❌ Realm write failed during undo (node): \(error)")
5986
}
6087

6188
updateTagsHandler?(id, edited.tags.toDictionary(), .node)
@@ -66,53 +93,40 @@ class MapUndoManager {
6693
}
6794

6895

96+
97+
98+
func fetchUndoItems() -> [UndoItem] {
99+
var items: [UndoItem] = []
100+
101+
102+
103+
104+
return items
105+
106+
}
107+
69108

70109
func getUndoItems() -> [UndoItem] {
71-
let excludedKeys: Set<String> = ["ext:gig_complete", "ext:gig_last_updated"]
72110
var items: [UndoItem] = []
73111

74-
let editedNodes = realm.objects(StoredNode.self)
112+
let editedNodes = realm.objects(StoredNode.self).filter("isOriginal == false")
75113
for edited in editedNodes {
76-
guard let original = DatabaseConnector.shared.getNode(id: edited.id, version: .original) else {
77-
print("⚠️ Original node not found for id: \(edited.id)")
78-
continue
79-
}
80-
81-
let changedKeys = Set(edited.tags.keys)
82-
.union(original.tags.keys)
83-
.filter { key in
84-
edited.tags[key] != original.tags[key] && !excludedKeys.contains(key)
85-
}
86-
87-
if !changedKeys.isEmpty {
88-
items.append(UndoItem(elementId: edited.id, type: .node, changedKeys: Array(changedKeys)))
114+
let keys = Array(edited.tags.keys)
115+
if !keys.isEmpty {
116+
items.append(UndoItem(elementId: edited.id, type: .node, changedKeys: keys))
89117
}
90118
}
91119

92-
let editedWays = realm.objects(StoredWay.self)
120+
let editedWays = realm.objects(StoredWay.self).filter("isOriginal == false")
93121
for edited in editedWays {
94-
guard let original = DatabaseConnector.shared.getWay(id: edited.id, version: .original) else {
95-
print("⚠️ Original way not found for id: \(edited.id)")
96-
continue
97-
}
98-
99-
let changedKeys = Set(edited.tags.keys)
100-
.union(original.tags.keys)
101-
.filter { key in
102-
edited.tags[key] != original.tags[key] && !excludedKeys.contains(key)
103-
}
104-
105-
if !changedKeys.isEmpty {
106-
items.append(UndoItem(elementId: edited.id, type: .way, changedKeys: Array(changedKeys)))
122+
let keys = Array(edited.tags.keys)
123+
if !keys.isEmpty {
124+
items.append(UndoItem(elementId: edited.id, type: .way, changedKeys: keys))
107125
}
108126
}
109127

110128
return items
111129
}
112-
113-
114-
115-
116130
}
117131

118132
extension MapUndoManager {

0 commit comments

Comments
 (0)