Removing vehicles from local db
This commit is contained in:
parent
dde3c91502
commit
c46d113832
@ -7,28 +7,28 @@
|
||||
<key>AutoCat.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>Eureka (Playground) 1.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>9</integer>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
<key>Eureka (Playground) 2.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>10</integer>
|
||||
<integer>6</integer>
|
||||
</dict>
|
||||
<key>Eureka (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
<key>GettingStarted (Playground) 1.xcscheme</key>
|
||||
<dict>
|
||||
@ -70,7 +70,7 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
<integer>10</integer>
|
||||
</dict>
|
||||
<key>Rx (Playground) 1.xcscheme</key>
|
||||
<dict>
|
||||
@ -84,28 +84,28 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>4</integer>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>Rx (Playground).xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>SwiftDate (Playground) 1.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>7</integer>
|
||||
<integer>8</integer>
|
||||
</dict>
|
||||
<key>SwiftDate (Playground) 2.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>8</integer>
|
||||
<integer>9</integer>
|
||||
</dict>
|
||||
<key>SwiftDate (Playground) 3.xcscheme</key>
|
||||
<dict>
|
||||
@ -133,7 +133,7 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>6</integer>
|
||||
<integer>7</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
@ -39,7 +39,7 @@ class AudioRecordCell: UITableViewCell {
|
||||
|
||||
func configure(with record: AudioRecord) {
|
||||
self.record = record
|
||||
self.date.text = self.dateFormatter.string(from: Date(timeIntervalSince1970: record.addedDate))
|
||||
self.date.text = self.dateFormatter.string(from: Date(timeIntervalSince1970: record.getAddedDate()))
|
||||
self.number.text = record.number ?? "Unrecognized"
|
||||
self.duration.text = self.componentsFormatter.string(from: record.duration)
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@ class VehicleCell: UITableViewCell {
|
||||
|
||||
func configure(with vehicle: Vehicle) {
|
||||
self.name.text = vehicle.brand?.name?.original ?? "<unknown>"
|
||||
self.plate.number = PlateNumber(vehicle.number)
|
||||
self.plate.number = PlateNumber(vehicle.getNumber())
|
||||
if vehicle.unrecognized {
|
||||
self.plate.foreground = .systemRed
|
||||
} else if vehicle.outdated {
|
||||
|
||||
@ -185,7 +185,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
eventSingle
|
||||
.flatMap { event in event.findAddress().map{ event }.catchErrorJustReturn(event) }
|
||||
.flatMap {
|
||||
Api.add(event: $0, to: vehicle.number)
|
||||
Api.add(event: $0, to: vehicle.getNumber())
|
||||
}
|
||||
.subscribe(onSuccess: self.save(vehicle:), onError: { print("Error adding event: \($0)") })
|
||||
.disposed(by: self.bag)
|
||||
@ -209,7 +209,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
if let detail = detail {
|
||||
detail.popToRootViewController(animated: true)
|
||||
let report = detail.viewControllers.first as? ReportController
|
||||
report?.number = vehicle.number
|
||||
report?.number = vehicle.getNumber()
|
||||
splitViewController.showDetailViewController(detail, sender: self)
|
||||
//self.performSegue(withIdentifier: "OpenDetailSegue", sender: self)
|
||||
}
|
||||
@ -252,7 +252,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
eventAction = .sendSpecific(savedEvent.freeze())
|
||||
}
|
||||
|
||||
Api.checkVehicle(by: vehicle.number, force: true)
|
||||
Api.checkVehicle(by: vehicle.getNumber(), force: true)
|
||||
.observeOn(MainScheduler.instance)
|
||||
.subscribe(onSuccess: { vehicle in
|
||||
self.onReceivedVehicle(vehicle, action: eventAction)
|
||||
@ -264,7 +264,21 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
}
|
||||
updateAction.image = UIImage(systemName: "arrow.2.circlepath")
|
||||
updateAction.backgroundColor = .systemBlue
|
||||
let configuration = UISwipeActionsConfiguration(actions: [updateAction])
|
||||
|
||||
let removeAction = UIContextualAction(style: .destructive, title: "Remove") { action, view, completion in
|
||||
if let realm = vehicle.realm {
|
||||
do {
|
||||
try realm.write {
|
||||
realm.delete(vehicle)
|
||||
}
|
||||
} catch {
|
||||
print(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
removeAction.image = UIImage(systemName: "trash")
|
||||
|
||||
let configuration = UISwipeActionsConfiguration(actions: [updateAction, removeAction])
|
||||
configuration.performsFirstActionWithFullSwipe = false
|
||||
return configuration
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
self.title = self.vehicle?.number ?? "Events"
|
||||
self.title = self.vehicle?.getNumber() ?? "Events"
|
||||
|
||||
#if targetEnvironment(macCatalyst)
|
||||
self.map.showsZoomControls = true
|
||||
@ -207,7 +207,7 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele
|
||||
controller.onDone = { newEvent in
|
||||
self.navigationController?.popViewController(animated: true, completion: {
|
||||
IHProgressHUD.show()
|
||||
Api.add(event: newEvent, to: vehicle.number)
|
||||
Api.add(event: newEvent, to: vehicle.getNumber())
|
||||
.observeOn(MainScheduler.instance)
|
||||
.subscribe(onSuccess: { self.update(vehicle: $0) }, onError:
|
||||
{ error in
|
||||
|
||||
@ -204,9 +204,9 @@ class ReportController: UIViewController, UICollectionViewDataSource, UICollecti
|
||||
if let idSection = ReportIdSection(rawValue: indexPath.item) {
|
||||
switch idSection {
|
||||
case .number:
|
||||
var num = vehicle.number
|
||||
var num = vehicle.getNumber()
|
||||
if vehicle.outdated, let current = vehicle.currentNumber {
|
||||
num = "\(vehicle.number) (\(current))"
|
||||
num = "\(vehicle.getNumber()) (\(current))"
|
||||
}
|
||||
cell?.configure(param: idSection.description, value: num)
|
||||
break
|
||||
@ -423,7 +423,7 @@ class ReportController: UIViewController, UICollectionViewDataSource, UICollecti
|
||||
let shareLink = UIAlertAction(title: "As link", style: .default) { _ in
|
||||
guard let vehicle = self.vehicle else { return }
|
||||
|
||||
if let jwt = try? JWT<EmptyPayload>.generate(for: vehicle.number), let url = URL(string: Constants.reportLinkBaseURL + "?token=" + jwt) {
|
||||
if let jwt = try? JWT<EmptyPayload>.generate(for: vehicle.getNumber()), let url = URL(string: Constants.reportLinkBaseURL + "?token=" + jwt) {
|
||||
let controller = UIActivityViewController(activityItems: [url], applicationActivities: nil)
|
||||
controller.popoverPresentationController?.barButtonItem = sender
|
||||
self.present(controller, animated: true)
|
||||
@ -449,7 +449,7 @@ class ReportController: UIViewController, UICollectionViewDataSource, UICollecti
|
||||
guard let url = self.reportImageUrl else { return nil }
|
||||
|
||||
let metadata = LPLinkMetadata()
|
||||
metadata.title = self.vehicle?.number
|
||||
metadata.title = self.vehicle?.getNumber()
|
||||
metadata.originalURL = url
|
||||
metadata.url = url
|
||||
metadata.imageProvider = NSItemProvider.init(contentsOf: url)
|
||||
@ -463,7 +463,7 @@ class ReportController: UIViewController, UICollectionViewDataSource, UICollecti
|
||||
let sheet = UIAlertController(title: "Copy to pasteboard", message: nil, preferredStyle: .actionSheet)
|
||||
sheet.popoverPresentationController?.barButtonItem = self.copyBarItem
|
||||
let cancel = UIAlertAction(title: "Cancel", style: .cancel) { _ in sheet.dismiss(animated: true, completion: nil) }
|
||||
let copyPlateNumber = UIAlertAction(title: "Plate number", style: .default) { _ in UIPasteboard.general.string = self.vehicle?.number }
|
||||
let copyPlateNumber = UIAlertAction(title: "Plate number", style: .default) { _ in UIPasteboard.general.string = self.vehicle?.getNumber() }
|
||||
let copyVin = UIAlertAction(title: "VIN", style: .default) { _ in UIPasteboard.general.string = self.vehicle?.vin1 }
|
||||
sheet.addAction(copyPlateNumber)
|
||||
sheet.addAction(copyVin)
|
||||
|
||||
@ -19,7 +19,7 @@ extension Vehicle: Dated {
|
||||
|
||||
extension AudioRecord: Dated {
|
||||
var date: Date {
|
||||
Date(timeIntervalSince1970: self.addedDate)
|
||||
Date(timeIntervalSince1970: self.getAddedDate())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -68,7 +68,7 @@ extension Vehicle {
|
||||
UIRectFill(rect)
|
||||
|
||||
y += 12
|
||||
"\(self.brand?.name?.original ?? "Unknown model") (\(self.number))".draw(with: CGRect(x: 0, y: y, width: w, height: 30), options: .usesLineFragmentOrigin, attributes: titleAttributes, context: nil)
|
||||
"\(self.brand?.name?.original ?? "Unknown model") (\(self.getNumber()))".draw(with: CGRect(x: 0, y: y, width: w, height: 30), options: .usesLineFragmentOrigin, attributes: titleAttributes, context: nil)
|
||||
y += 50
|
||||
"GENERAL".draw(with: CGRect(x: 15, y: y, width: w - 15, height: 24), options: .usesLineFragmentOrigin, attributes: headerAttributes, context: nil)
|
||||
y += 24
|
||||
@ -93,7 +93,7 @@ extension Vehicle {
|
||||
y += 24
|
||||
self.drawLine(y: y, width: w, margin: 0, context: ctx)
|
||||
y += 1/UIScreen.main.scale
|
||||
self.drawCell(y: y, width: w, height: cellHeight, title: "Plate number", value: self.number, context: ctx)
|
||||
self.drawCell(y: y, width: w, height: cellHeight, title: "Plate number", value: self.getNumber(), context: ctx)
|
||||
y += cellHeight
|
||||
self.drawCell(y: y, width: w, height: cellHeight, title: "VIN", value: self.vin1 ?? "<unknown>", context: ctx)
|
||||
y += cellHeight
|
||||
@ -216,7 +216,7 @@ extension Vehicle {
|
||||
}
|
||||
text += "Steering wheel position: \(position)\n"
|
||||
text += "Japanese: \(self.isJapanese ? "yes" : "no")\n"
|
||||
text += "Plate number: \(self.number)\n"
|
||||
text += "Plate number: \(self.getNumber())\n"
|
||||
if let vin = self.vin1 { text += "VIN: \(vin)\n" }
|
||||
if let sts = self.sts { text += "STS: \(sts)\n" }
|
||||
if let pts = self.pts { text += "PTS: \(pts)\n" }
|
||||
|
||||
@ -7,7 +7,7 @@ class AudioRecord: Object, IdentifiableType {
|
||||
@objc dynamic var path: String = ""
|
||||
@objc dynamic var number: String?
|
||||
@objc dynamic var rawText: String = ""
|
||||
@objc dynamic var addedDate: TimeInterval = Date().timeIntervalSince1970
|
||||
@objc private dynamic var addedDate: TimeInterval = Date().timeIntervalSince1970
|
||||
@objc dynamic var duration: TimeInterval = 0
|
||||
@objc dynamic var event: VehicleEvent?
|
||||
|
||||
@ -35,4 +35,12 @@ class AudioRecord: Object, IdentifiableType {
|
||||
override class func ignoredProperties() -> [String] {
|
||||
return ["identity", "identifier"]
|
||||
}
|
||||
|
||||
func getAddedDate() -> TimeInterval {
|
||||
if self.identifier == 0 {
|
||||
self.identifier = self.addedDate
|
||||
}
|
||||
|
||||
return self.addedDate
|
||||
}
|
||||
}
|
||||
|
||||
@ -73,7 +73,7 @@ class Vehicle: Object, Decodable, IdentifiableType {
|
||||
@objc dynamic var year: Int = 0
|
||||
@objc dynamic var category: String?
|
||||
@objc dynamic var engine: VehicleEngine?
|
||||
@objc dynamic var number: String = ""
|
||||
@objc private dynamic var number: String = ""
|
||||
@objc dynamic var currentNumber: String?
|
||||
@objc dynamic var vin1: String?
|
||||
@objc dynamic var vin2: String?
|
||||
@ -87,7 +87,15 @@ class Vehicle: Object, Decodable, IdentifiableType {
|
||||
let ownershipPeriods = List<VehicleOwnershipPeriod>()
|
||||
let events = List<VehicleEvent>()
|
||||
|
||||
var identity: String { number }
|
||||
//var identity: String { number }
|
||||
|
||||
var identifier: String = ""
|
||||
var identity: String {
|
||||
if self.identifier.isEmpty {
|
||||
self.identifier = self.number
|
||||
}
|
||||
return self.identifier
|
||||
}
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case brand
|
||||
@ -141,21 +149,40 @@ class Vehicle: Object, Decodable, IdentifiableType {
|
||||
if let eventsArray = try container.decodeIfPresent([VehicleEvent].self, forKey: .events) {
|
||||
self.events.append(objectsIn: eventsArray)
|
||||
}
|
||||
|
||||
print("Init from decoder - \(self.number)")
|
||||
self.identifier = self.number
|
||||
}
|
||||
|
||||
required init() {
|
||||
|
||||
super.init()
|
||||
print("Init - \(self.number)")
|
||||
self.identifier = self.number
|
||||
}
|
||||
|
||||
init(_ number: String) {
|
||||
print("Init with number - \(number)")
|
||||
self.identifier = number
|
||||
self.number = number
|
||||
self.addedDate = Date().timeIntervalSince1970*1000
|
||||
}
|
||||
|
||||
func getNumber() -> String {
|
||||
if self.identifier.isEmpty {
|
||||
self.identifier = self.number
|
||||
}
|
||||
|
||||
return self.number
|
||||
}
|
||||
|
||||
override static func primaryKey() -> String? {
|
||||
return "number"
|
||||
}
|
||||
|
||||
override class func ignoredProperties() -> [String] {
|
||||
return ["identity", "identifier"]
|
||||
}
|
||||
|
||||
var unrecognized: Bool {
|
||||
return self.brand == nil
|
||||
}
|
||||
|
||||
@ -3,9 +3,9 @@ import Foundation
|
||||
enum Constants {
|
||||
static var baseUrl: String {
|
||||
#if DEBUG
|
||||
//return "http://127.0.0.1:3000/"
|
||||
return "http://127.0.0.1:3000/"
|
||||
//return "http://192.168.1.67:3000/"
|
||||
return "https://vps.aliencat.pro:8443/"
|
||||
//return "https://vps.aliencat.pro:8443/"
|
||||
#else
|
||||
return "https://vps.aliencat.pro:8443/"
|
||||
#endif
|
||||
|
||||
Loading…
Reference in New Issue
Block a user