Skip to content

Commit 4e56cce

Browse files
committed
Fixed handling change set records with primary key ID. Fixed undo UI issues
1 parent 9e0d75a commit 4e56cce

File tree

6 files changed

+52
-62
lines changed

6 files changed

+52
-62
lines changed

GoInfoGame/GoInfoGame/DataBase/DatabaseConnector.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -414,11 +414,8 @@ class DatabaseConnector {
414414
return results
415415
}
416416

417-
func getChangeset(for id: Int64, type: ElementType) -> StoredChangeset? {
418-
let storedType: StoredElementEnum = (type == .way) ? .way : .node
419-
return realm.objects(StoredChangeset.self)
420-
.filter("elementId == %@ AND elementType == %@", id, storedType.rawValue)
421-
.first
417+
func getChangeset(for id: String) -> StoredChangeset? {
418+
return realm.object(ofType: StoredChangeset.self, forPrimaryKey: id)
422419
}
423420

424421
/// Assigns changesetId for a stored changeset

GoInfoGame/GoInfoGame/UI/Map/MapView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ struct MapView: View {
146146
},
147147
onRemovePreview: {
148148
},
149-
onRevert: { id, type in
150-
MapUndoManager.shared.undo(for: Int64(id), type: type)
149+
onRevert: { id in
150+
MapUndoManager.shared.undo(for: id)
151151
}
152152
)
153153
.padding(.bottom, 24)

GoInfoGame/GoInfoGame/UI/Utils/UndoButton.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import osmparser
1111
struct UndoButton: View {
1212
var onPreview: (Int, ElementType) -> Void
1313
var onRemovePreview: () -> Void
14-
var onRevert: (Int, ElementType) -> Void
14+
var onRevert: (String) -> Void
1515

1616
@State private var showSidebar = false
1717
@State private var undoItems: [UndoItem] = []
@@ -22,8 +22,8 @@ struct UndoButton: View {
2222
ZStack(alignment: .leading) {
2323
if showSidebar {
2424
UndoSidebarView(
25-
onUndo: { id, type in
26-
onRevert(id, type)
25+
onUndo: { id in
26+
onRevert(id)
2727
undoItems = MapUndoManager.shared.getUndoItems()
2828
withAnimation { showSidebar = false }
2929
},
@@ -65,7 +65,7 @@ struct UndoButton: View {
6565
}
6666

6767
VStack(spacing: 16) {
68-
Text("\(item.type == .way ? "Way" : "Node") #\(item.elementId)")
68+
Text("\(item.type == .way ? "Way" : "Node") #\(String(item.elementId))")
6969
.font(.headline)
7070

7171
if !item.changedKeys.isEmpty {
@@ -89,7 +89,7 @@ struct UndoButton: View {
8989
Spacer()
9090

9191
Button("Revert") {
92-
onRevert(item.elementId, item.type)
92+
onRevert(item.id)
9393
showUndoPopup = false
9494
showSidebar = false
9595
}

GoInfoGame/GoInfoGame/UI/Utils/UndoSidebarView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ struct UndoItem: Identifiable {
77
let elementId: Int
88
let type: ElementType
99
let changedKeys: [String]
10-
var id: String { "\(type)-\(elementId)" }
10+
var id: String
1111
}
1212

1313
struct UndoSidebarView: View {
1414
@State private var undoItems: [UndoItem] = []
15-
var onUndo: (Int, ElementType) -> Void
15+
var onUndo: (String) -> Void
1616
var onClose: () -> Void
1717
var onItemSelected: (UndoItem) -> Void
1818

GoInfoGame/GoInfoGame/quests/QuestProtocols.swift

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ class QuestBase {
3737

3838
private var elementSubmittingToPOSM: ElementSubmittingToPOSM?
3939

40+
init () {
41+
MapUndoManager.shared.updateTagsHandler = { [weak self] changeset in
42+
guard let changeSet = changeset else { return }
43+
44+
self?.updateUndoTags(changeSet: changeSet)
45+
}
46+
}
47+
4048
func updateUndoTags(changeSet: StoredChangeset) {
4149
// Convert from ElementType enum to StoredElementEnum
4250
Task.detached(operation: { @MainActor in
@@ -68,13 +76,6 @@ class QuestBase {
6876

6977
public func updateTags(id: Int64, tags:[String:String], type: ElementType, exclude_gig_tags: Bool = false) {
7078

71-
MapUndoManager.shared.updateTagsHandler = { [weak self] changeset in
72-
guard let changeSet = changeset else { return }
73-
74-
self?.updateUndoTags(changeSet: changeSet)
75-
}
76-
77-
7879
// Convert from ElementType enum to StoredElementEnum
7980
let storedElementType: StoredElementEnum = type == .way ? .way : .node
8081

@@ -106,10 +107,6 @@ class QuestBase {
106107
switch success {
107108
case .success(let success):
108109
if success {
109-
if MapUndoManager.shared.isUndoInProgress {
110-
MapUndoManager.shared.finalizeSuccessfulSubmit(id: Int(id), type: type)
111-
MapUndoManager.shared.isUndoInProgress = false
112-
}
113110

114111
MapViewPublisher.shared.dismissSheet.send(.submitted("\(id)"))
115112
}

GoInfoGame/GoInfoGame/quests/QuestUndoManager.swift

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,14 @@ class MapUndoManager {
1414

1515
private let realm: Realm
1616

17-
var isUndoInProgress: Bool = false
18-
1917
private init() {
2018
realm = try! Realm()
2119
}
2220

2321
var updateTagsHandler: ((_ changeset: StoredChangeset?) -> Void)?
2422

25-
func undo(for id: Int64, type: ElementType) {
26-
MapUndoManager.shared.isUndoInProgress = true
27-
28-
guard let changeSet = DatabaseConnector.shared.getChangeset(for: id, type: type) else {
23+
func undo(for id: String) {
24+
guard let changeSet = DatabaseConnector.shared.getChangeset(for: id) else {
2925
print("❌ Undo failed: Element not found")
3026
updateTagsHandler?(nil)
3127
return
@@ -42,7 +38,7 @@ class MapUndoManager {
4238
for edited in editedNodes {
4339
let keys = Array(edited.tags.keys)
4440
if !keys.isEmpty {
45-
items.append(UndoItem(elementId: edited.elementId, type: edited.elementType.elementType(), changedKeys: keys))
41+
items.append(UndoItem(elementId: edited.elementId, type: edited.elementType.elementType(), changedKeys: keys, id: edited.id))
4642
}
4743
}
4844

@@ -51,36 +47,36 @@ class MapUndoManager {
5147
}
5248

5349
extension MapUndoManager {
54-
func finalizeSuccessfulSubmit(id: Int, type: ElementType) {
55-
let realm = try! Realm()
56-
57-
try? realm.write {
58-
switch type {
59-
case .way:
60-
if let original = DatabaseConnector.shared.getWay(id: id, version: .original) {
61-
original.tags["ext:gig_complete"] = "yes"
62-
}
63-
if let edited = DatabaseConnector.shared.getWay(id: id, version: .edited) {
64-
realm.delete(edited)
65-
}
66-
67-
case .node:
68-
if let original = DatabaseConnector.shared.getNode(id: id, version: .original) {
69-
original.tags["ext:gig_complete"] = "yes"
70-
}
71-
if let edited = DatabaseConnector.shared.getNode(id: id, version: .edited) {
72-
realm.delete(edited)
73-
}
74-
75-
default:
76-
break
77-
}
78-
79-
if let changeset = DatabaseConnector.shared.getChangeset(for: Int64(id), type: type) {
80-
realm.delete(changeset)
81-
}
82-
}
83-
}
50+
// func finalizeSuccessfulSubmit(id: Int, type: ElementType) {
51+
// let realm = try! Realm()
52+
//
53+
// try? realm.write {
54+
// switch type {
55+
// case .way:
56+
// if let original = DatabaseConnector.shared.getWay(id: id, version: .original) {
57+
// original.tags["ext:gig_complete"] = "yes"
58+
// }
59+
// if let edited = DatabaseConnector.shared.getWay(id: id, version: .edited) {
60+
// realm.delete(edited)
61+
// }
62+
//
63+
// case .node:
64+
// if let original = DatabaseConnector.shared.getNode(id: id, version: .original) {
65+
// original.tags["ext:gig_complete"] = "yes"
66+
// }
67+
// if let edited = DatabaseConnector.shared.getNode(id: id, version: .edited) {
68+
// realm.delete(edited)
69+
// }
70+
//
71+
// default:
72+
// break
73+
// }
74+
//
75+
// if let changeset = DatabaseConnector.shared.getChangeset(for: Int64(id), type: type) {
76+
// realm.delete(changeset)
77+
// }
78+
// }
79+
// }
8480

8581

8682
}

0 commit comments

Comments
 (0)