From 21e18649ba3429e80881bec6b9e6e18cd5862d09 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Sun, 6 Sep 2020 13:14:47 +0300 Subject: [PATCH] Fixing few GPS-related bugs --- AutoCat.xcodeproj/project.pbxproj | 4 ++-- .../xcdebugger/Breakpoints_v2.xcbkptlist | 18 +-------------- AutoCat/Cells/VehicleCell.swift | 2 +- AutoCat/Controllers/CheckController.swift | 23 ++++++++++++++++--- AutoCat/Controllers/EventsController.swift | 9 +++++++- AutoCat/Controllers/MainSplitController.swift | 2 +- AutoCat/Controllers/ReportController.swift | 16 ++++++++++++- AutoCat/Controllers/SearchController.swift | 2 +- AutoCat/Models/Vehicle.swift | 4 ++++ 9 files changed, 53 insertions(+), 27 deletions(-) diff --git a/AutoCat.xcodeproj/project.pbxproj b/AutoCat.xcodeproj/project.pbxproj index 10553d1..44e28f2 100644 --- a/AutoCat.xcodeproj/project.pbxproj +++ b/AutoCat.xcodeproj/project.pbxproj @@ -707,7 +707,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 22; + CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = 46DTTB8X4S; INFOPLIST_FILE = AutoCat/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -729,7 +729,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 22; + CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = 46DTTB8X4S; INFOPLIST_FILE = AutoCat/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; diff --git a/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 5ba1623..8efb0be 100644 --- a/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -8,7 +8,7 @@ BreakpointExtensionID = "Xcode.Breakpoint.SwiftErrorBreakpoint"> @@ -63,22 +63,6 @@ landmarkType = "7"> - - - - " self.plate.number = PlateNumber(vehicle.number) - self.plate.unrecognized = vehicle.brand == nil + self.plate.unrecognized = vehicle.unrecognized self.date.text = formatter.string(from: Date(timeIntervalSince1970: vehicle.addedDate/1000)) } diff --git a/AutoCat/Controllers/CheckController.swift b/AutoCat/Controllers/CheckController.swift index 993382f..d11d574 100644 --- a/AutoCat/Controllers/CheckController.swift +++ b/AutoCat/Controllers/CheckController.swift @@ -115,9 +115,20 @@ class CheckController: UIViewController, MaskedTextFieldDelegateListener, UITabl self.onReceivedVehicle(vehicle, event: event) }, onError: { err in if let realm = try? Realm() { + let vehicle = Vehicle(number) try? realm.write { - realm.add(Vehicle(number), update: .all) + realm.add(vehicle, update: .all) } + let eventSingle = event == nil ? self.getEvent() : Single.just(event!) + eventSingle + .flatMap { event in event.updateAddress().map{ [event] }.catchErrorJustReturn([event]) } + .catchErrorJustReturn([]) + .subscribe(onSuccess: { events in + try? realm.write { + vehicle.events.append(objectsIn: events) + } + }) + .disposed(by: self.bag) } IHProgressHUD.showError(withStatus: err.localizedDescription) print(err.localizedDescription) @@ -170,7 +181,7 @@ class CheckController: UIViewController, MaskedTextFieldDelegateListener, UITabl if let detail = detail { detail.popToRootViewController(animated: true) let report = detail.viewControllers.first as? ReportController - report?.vehicle = vehicle + report?.number = vehicle.number splitViewController.showDetailViewController(detail, sender: self) //self.performSegue(withIdentifier: "OpenDetailSegue", sender: self) } @@ -201,10 +212,16 @@ class CheckController: UIViewController, MaskedTextFieldDelegateListener, UITabl let updateAction = UIContextualAction(style: .normal, title: "Update") { action, view, completion in IHProgressHUD.show() + + var event: VehicleEvent? = nil + if vehicle.unrecognized, let savedEvent = vehicle.events.first { + event = savedEvent + } + Api.checkVehicle(by: vehicle.number, force: true) .observeOn(MainScheduler.instance) .subscribe(onSuccess: { vehicle in - self.onReceivedVehicle(vehicle, event: nil) + self.onReceivedVehicle(vehicle, event: event) }, onError: { err in IHProgressHUD.showError(withStatus: err.localizedDescription) print(err.localizedDescription) diff --git a/AutoCat/Controllers/EventsController.swift b/AutoCat/Controllers/EventsController.swift index 784bcfc..23dfdfd 100644 --- a/AutoCat/Controllers/EventsController.swift +++ b/AutoCat/Controllers/EventsController.swift @@ -37,6 +37,10 @@ class EventsController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + #if targetEnvironment(macCatalyst) + self.map.showsZoomControls = true + #endif + self.map.addAnnotations(self.pins) self.centerMap() } @@ -53,7 +57,10 @@ class EventsController: UIViewController { let center = CLLocationCoordinate2D(latitude: (minLat + maxLat)/2, longitude: (minLon + maxLon)/2) let leftTop = CLLocation(latitude: minLat, longitude: minLon) let rightBottom = CLLocation(latitude: maxLat, longitude: maxLon) - let diagonal = leftTop.distance(from: rightBottom) + var diagonal = leftTop.distance(from: rightBottom) + if diagonal < 1000 { + diagonal = 1000 + } let region = MKCoordinateRegion(center: center, latitudinalMeters: diagonal, longitudinalMeters: diagonal) self.map.setRegion(region, animated: true) diff --git a/AutoCat/Controllers/MainSplitController.swift b/AutoCat/Controllers/MainSplitController.swift index 15c947a..0a01342 100644 --- a/AutoCat/Controllers/MainSplitController.swift +++ b/AutoCat/Controllers/MainSplitController.swift @@ -51,7 +51,7 @@ class MainSplitController: UISplitViewController, UISplitViewControllerDelegate return false } - if detail.vehicle == nil { + if detail.number == nil { return false } diff --git a/AutoCat/Controllers/ReportController.swift b/AutoCat/Controllers/ReportController.swift index 2524521..1becca9 100644 --- a/AutoCat/Controllers/ReportController.swift +++ b/AutoCat/Controllers/ReportController.swift @@ -2,6 +2,7 @@ import UIKit import MagazineLayout import Kingfisher import LinkPresentation +import RealmSwift enum ReportSection: Int, CaseIterable, CustomStringConvertible { case header = 0 @@ -86,7 +87,7 @@ class ReportController: UIViewController, UICollectionViewDataSource, UICollecti private let fullWidth = MagazineLayoutItemSizeMode(widthMode: .fullWidth(respectsHorizontalInsets: true), heightMode: .dynamic) private var reportImageUrl: URL? - var vehicle: Vehicle? { + private var vehicle: Vehicle? { didSet { loadViewIfNeeded() self.collection.reloadData() @@ -94,6 +95,19 @@ class ReportController: UIViewController, UICollectionViewDataSource, UICollecti } } + private var notificationToken: NotificationToken? + var number: String? { + didSet { + if let realm = try? Realm(), let num = number { + let vehicles = realm.objects(Vehicle.self).filter("number = %@", num) + self.notificationToken?.invalidate() + self.notificationToken = vehicles.observe { _ in self.vehicle = vehicles.first } + } else { + self.vehicle = nil + } + } + } + // MARK: - Lifecycle override func viewDidLoad() { diff --git a/AutoCat/Controllers/SearchController.swift b/AutoCat/Controllers/SearchController.swift index d2a7f4b..eda2e89 100644 --- a/AutoCat/Controllers/SearchController.swift +++ b/AutoCat/Controllers/SearchController.swift @@ -67,7 +67,7 @@ class SearchController: UIViewController, UISearchResultsUpdating { if let detail = detail { detail.popToRootViewController(animated: true) let report = detail.viewControllers.first as? ReportController - report?.vehicle = vehicle + report?.number = vehicle.number splitViewController.showDetailViewController(detail, sender: self) //self.performSegue(withIdentifier: "OpenDetailSegue", sender: self) } diff --git a/AutoCat/Models/Vehicle.swift b/AutoCat/Models/Vehicle.swift index 97be39c..4a91ae0 100644 --- a/AutoCat/Models/Vehicle.swift +++ b/AutoCat/Models/Vehicle.swift @@ -138,4 +138,8 @@ class Vehicle: Object, Decodable, IdentifiableType { override static func primaryKey() -> String? { return "number" } + + var unrecognized: Bool { + return self.brand == nil + } }