Skip to content

Commit 7de2263

Browse files
author
Achyut Kumar M
committed
modify getChangesets and add getUndoItems list
1 parent 72e8aab commit 7de2263

File tree

2 files changed

+50
-5
lines changed

2 files changed

+50
-5
lines changed

GoInfoGame/GoInfoGame/DataBase/DatabaseConnector.swift

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Foundation
99
import RealmSwift
1010
import MapKit
1111
import osmapi
12+
import osmparser
1213

1314
class DatabaseConnector {
1415
static let shared = DatabaseConnector()
@@ -446,12 +447,24 @@ class DatabaseConnector {
446447
/// - parameter synced: Optional variable of whether synced or non synced
447448
/// - Returns: an instance of `Results<StoredChangeset>`
448449
func getChangesets(synced: Bool = false) -> Results<StoredChangeset> {
449-
450-
if (synced == true){
451-
return realm.objects(StoredChangeset.self).where({$0.changesetId != -1 })
450+
let results: Results<StoredChangeset>
451+
if synced {
452+
results = realm.objects(StoredChangeset.self).where { $0.changesetId != -1 }
453+
} else {
454+
results = realm.objects(StoredChangeset.self).where { $0.changesetId == -1 }
452455
}
453-
return realm.objects(StoredChangeset.self).where({$0.changesetId == -1 })
456+
print("Found \(results.count) changesets for synced=\(synced)")
457+
return results
458+
}
459+
460+
func getChangeset(for id: Int64, type: ElementType) -> StoredChangeset? {
461+
let storedType: StoredElementEnum = (type == .way) ? .way : .node
462+
let stringId = String(id)
463+
return realm.objects(StoredChangeset.self)
464+
.filter("elementId == %@ AND elementType == %@", stringId, storedType.rawValue)
465+
.first
454466
}
467+
455468
/// Assigns changesetId for a stored changeset
456469
/// - parameter obj: Internal id for the changeset in the database (unique ID)
457470
/// - parameter changesetId: Assigned changeset ID from the server

GoInfoGame/GoInfoGame/quests/QuestUndoManager.swift

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ class MapUndoManager {
4343
}
4444

4545
updateTagsHandler?(id, current.tags.toDictionary(), .way)
46+
47+
if let changeset = DatabaseConnector.shared.getChangeset(for: id, type: type) {
48+
try? realm.write {
49+
realm.delete(changeset)
50+
}
51+
}
4652

4753
case .node:
4854
guard let original = DatabaseConnector.shared.getNode(id: Int(id), version: .original),
@@ -56,15 +62,31 @@ class MapUndoManager {
5662
original.tags.forEach { current.tags[$0.key] = $0.value }
5763

5864
current.point = original.point
59-
current.version += 1
65+
// current.version += 1
6066
}
6167

6268
updateTagsHandler?(id, current.tags.toDictionary(), .node)
69+
70+
if let changeset = DatabaseConnector.shared.getChangeset(for: id, type: type) {
71+
try? realm.write {
72+
realm.delete(changeset)
73+
}
74+
}
6375

6476
default:
6577
print(" Unknown element type")
6678
}
6779
}
80+
81+
func getUndoItems() -> [UndoItem] {
82+
let changesets = DatabaseConnector.shared.getChangesets(synced: true)
83+
84+
return changesets.compactMap { cs in
85+
guard let type = cs.elementType.toElementType() else { return nil }
86+
let changedKeys = cs.tags.map { $0.key }
87+
return UndoItem(elementId: Int(cs.elementId) ?? -1, type: type, changedKeys: changedKeys)
88+
}
89+
}
6890
}
6991

7092
extension Map where Key == String, Value == String {
@@ -76,3 +98,13 @@ extension Map where Key == String, Value == String {
7698
return dict
7799
}
78100
}
101+
102+
extension StoredElementEnum {
103+
func toElementType() -> ElementType? {
104+
switch self {
105+
case .node: return .node
106+
case .way: return .way
107+
default: return nil
108+
}
109+
}
110+
}

0 commit comments

Comments
 (0)