Fix error when event was lost after add(event:) error

This commit is contained in:
Selim Mustafaev 2022-03-20 09:58:24 +03:00
parent fe3f45a5f4
commit 57930a46ce
5 changed files with 87 additions and 64 deletions

2
.gitignore vendored
View File

@ -2,4 +2,6 @@ design/generated/
.DS_Store
AutoCat.xcodeproj/project.xcworkspace/xcuserdata/
AutoCat.xcodeproj/xcuserdata/
xcuserdata/
.build/
.idea/

View File

@ -1080,7 +1080,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 89;
CURRENT_PROJECT_VERSION = 90;
DEVELOPMENT_TEAM = 46DTTB8X4S;
INFOPLIST_FILE = AutoCat/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
@ -1105,7 +1105,7 @@
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 89;
CURRENT_PROJECT_VERSION = 90;
DEVELOPMENT_TEAM = 46DTTB8X4S;
INFOPLIST_FILE = AutoCat/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;

View File

@ -17,210 +17,210 @@
<key>DifferenceKit (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>9</integer>
</dict>
<key>DifferenceKit (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>10</integer>
</dict>
<key>DifferenceKit (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>8</integer>
</dict>
<key>Eureka (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>3</integer>
</dict>
<key>Eureka (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>4</integer>
</dict>
<key>Eureka (Playground) 3.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>17</integer>
<integer>18</integer>
</dict>
<key>Eureka (Playground) 4.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>18</integer>
<integer>19</integer>
</dict>
<key>Eureka (Playground) 5.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>19</integer>
<integer>21</integer>
</dict>
<key>Eureka (Playground) 6.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>20</integer>
<integer>23</integer>
</dict>
<key>Eureka (Playground) 7.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>21</integer>
<integer>25</integer>
</dict>
<key>Eureka (Playground) 8.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>22</integer>
<integer>27</integer>
</dict>
<key>Eureka (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>1</integer>
<integer>2</integer>
</dict>
<key>GettingStarted (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>15</integer>
<integer>16</integer>
</dict>
<key>GettingStarted (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>16</integer>
<integer>17</integer>
</dict>
<key>GettingStarted (Playground) 3.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>14</integer>
</dict>
<key>GettingStarted (Playground) 4.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>18</integer>
<integer>20</integer>
</dict>
<key>GettingStarted (Playground) 5.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>21</integer>
<integer>26</integer>
</dict>
<key>GettingStarted (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>12</integer>
</dict>
<key>Rx (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>6</integer>
</dict>
<key>Rx (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>7</integer>
</dict>
<key>Rx (Playground) 3.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>19</integer>
<integer>22</integer>
</dict>
<key>Rx (Playground) 4.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>20</integer>
<integer>24</integer>
</dict>
<key>Rx (Playground) 5.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>22</integer>
<integer>28</integer>
</dict>
<key>Rx (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>5</integer>
</dict>
<key>SwiftDate (Playground) 1.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>13</integer>
</dict>
<key>SwiftDate (Playground) 2.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>14</integer>
<integer>15</integer>
</dict>
<key>SwiftDate (Playground) 3.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>24</integer>
<integer>29</integer>
</dict>
<key>SwiftDate (Playground) 4.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>26</integer>
<integer>30</integer>
</dict>
<key>SwiftDate (Playground) 5.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>28</integer>
<integer>31</integer>
</dict>
<key>SwiftDate (Playground).xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<false />
<key>orderHint</key>
<integer>11</integer>
</dict>
@ -230,7 +230,7 @@
<key>7A1146FC23FDE7E500B424AF</key>
<dict>
<key>primary</key>
<true/>
<true />
</dict>
</dict>
</dict>

View File

@ -216,7 +216,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
var events: [VehicleEvent] = []
do {
let realm = try Realm()
if let dbVehicle = realm.object(ofType: Vehicle.self, forPrimaryKey: numberNormalized), dbVehicle.unrecognized {
if let dbVehicle = realm.object(ofType: Vehicle.self, forPrimaryKey: numberNormalized) {
events.append(contentsOf: dbVehicle.events.map { $0.clone() })
}
} catch {
@ -398,7 +398,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
}
return Single.zip(eventSingle, checkSingle).flatMap { eventResult, vehicleResult in
let errors = [eventResult.error, vehicleResult.error].map { error -> Error? in
var errors = [eventResult.error, vehicleResult.error].map { error -> Error? in
if let clerror = error as? CLError {
if clerror.code != .denied {
return CocoaError.error(NSLocalizedString("Location error", comment: ""), reason: clerror.code.description)
@ -413,15 +413,17 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
RxLocationManager.resetLastEvent()
if vehicleResult.error != nil {
let realm = try Realm()
if let event = eventResult.event {
try realm.write {
vehicleResult.vehicle.events.append(event)
vehicleResult.vehicle.updatedDate = Date().timeIntervalSince1970
vehicleResult.vehicle.synchronized = false
}
let realm = try Realm()
let dbVehicle = realm.object(ofType: Vehicle.self, forPrimaryKey: vehicleResult.vehicle.getNumber())
if let event = eventResult.event, let vehicle = dbVehicle {
try realm.write {
vehicle.events.append(event)
vehicle.updatedDate = Date().timeIntervalSince1970
vehicle.synchronized = false
}
}
if vehicleResult.error != nil {
return .just((vehicle: vehicleResult.vehicle, errors: errors))
} else {
if let event = eventResult.event {
@ -431,6 +433,10 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
try self.save(vehicle: $0)
return (vehicle: $0, errors: errors)
}
.catchError { error in
errors.append(error)
return .just((vehicle: vehicleResult.vehicle, errors: errors))
}
} else {
return .just((vehicle: vehicleResult.vehicle, errors: errors))
}

View File

@ -12,11 +12,13 @@ class EventPin: NSObject, MKAnnotation {
var coordinate: CLLocationCoordinate2D
var title: String?
var subtitle: String?
var id: String
init(coordinate: CLLocationCoordinate2D, title: String?, subtitle: String) {
init(id: String, coordinate: CLLocationCoordinate2D, title: String?, subtitle: String) {
self.coordinate = coordinate
self.title = title
self.subtitle = subtitle
self.id = id
}
convenience init(event: VehicleEvent) {
@ -29,9 +31,9 @@ class EventPin: NSObject, MKAnnotation {
let dateStr = formatter.string(from: date)
if let number = event.number {
self.init(coordinate: coordinate, title: number, subtitle: dateStr)
self.init(id: event.id, coordinate: coordinate, title: number, subtitle: dateStr)
} else {
self.init(coordinate: coordinate, title: dateStr, subtitle: address)
self.init(id: event.id, coordinate: coordinate, title: dateStr, subtitle: address)
}
}
}
@ -189,6 +191,19 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele
return configuration
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let event = self.vehicle?.events[indexPath.row],
let pin = pins.first(where: { $0.id == event.id }) else {
return
}
tableView.deselectRow(at: indexPath, animated: true)
switchMode(modeButton)
map.setCenter(pin.coordinate, animated: true)
map.selectAnnotation(pin, animated: true)
}
// MARK: - Event actions
func deleteEvent(index: Int, completion: ((Bool) -> Void)? = nil) {