diff --git a/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist b/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist
index cc65585..825a033 100644
--- a/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -7,28 +7,28 @@
AutoCat.xcscheme_^#shared#^_
orderHint
- 0
+ 1
Eureka (Playground) 1.xcscheme
isShown
orderHint
- 9
+ 5
Eureka (Playground) 2.xcscheme
isShown
orderHint
- 10
+ 6
Eureka (Playground).xcscheme
isShown
orderHint
- 3
+ 4
GettingStarted (Playground) 1.xcscheme
@@ -70,7 +70,7 @@
isShown
orderHint
- 5
+ 10
Rx (Playground) 1.xcscheme
@@ -84,28 +84,28 @@
isShown
orderHint
- 4
+ 3
Rx (Playground).xcscheme
isShown
orderHint
- 1
+ 0
SwiftDate (Playground) 1.xcscheme
isShown
orderHint
- 7
+ 8
SwiftDate (Playground) 2.xcscheme
isShown
orderHint
- 8
+ 9
SwiftDate (Playground) 3.xcscheme
@@ -133,7 +133,7 @@
isShown
orderHint
- 6
+ 7
diff --git a/AutoCat/Cells/AudioRecordCell.swift b/AutoCat/Cells/AudioRecordCell.swift
index cb61062..8c233ee 100644
--- a/AutoCat/Cells/AudioRecordCell.swift
+++ b/AutoCat/Cells/AudioRecordCell.swift
@@ -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)
diff --git a/AutoCat/Cells/VehicleCell.swift b/AutoCat/Cells/VehicleCell.swift
index 974e40c..eef8b5d 100644
--- a/AutoCat/Cells/VehicleCell.swift
+++ b/AutoCat/Cells/VehicleCell.swift
@@ -17,7 +17,7 @@ class VehicleCell: UITableViewCell {
func configure(with vehicle: Vehicle) {
self.name.text = vehicle.brand?.name?.original ?? ""
- self.plate.number = PlateNumber(vehicle.number)
+ self.plate.number = PlateNumber(vehicle.getNumber())
if vehicle.unrecognized {
self.plate.foreground = .systemRed
} else if vehicle.outdated {
diff --git a/AutoCat/Controllers/CheckController.swift b/AutoCat/Controllers/CheckController.swift
index 0cfb280..6cb6188 100644
--- a/AutoCat/Controllers/CheckController.swift
+++ b/AutoCat/Controllers/CheckController.swift
@@ -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
}
diff --git a/AutoCat/Controllers/Location/EventsController.swift b/AutoCat/Controllers/Location/EventsController.swift
index fe293e6..b44f414 100644
--- a/AutoCat/Controllers/Location/EventsController.swift
+++ b/AutoCat/Controllers/Location/EventsController.swift
@@ -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
diff --git a/AutoCat/Controllers/ReportController.swift b/AutoCat/Controllers/ReportController.swift
index fa02288..e5a1465 100644
--- a/AutoCat/Controllers/ReportController.swift
+++ b/AutoCat/Controllers/ReportController.swift
@@ -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.generate(for: vehicle.number), let url = URL(string: Constants.reportLinkBaseURL + "?token=" + jwt) {
+ if let jwt = try? JWT.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)
diff --git a/AutoCat/Extensions/Dated.swift b/AutoCat/Extensions/Dated.swift
index 9d552cc..42472b6 100644
--- a/AutoCat/Extensions/Dated.swift
+++ b/AutoCat/Extensions/Dated.swift
@@ -19,7 +19,7 @@ extension Vehicle: Dated {
extension AudioRecord: Dated {
var date: Date {
- Date(timeIntervalSince1970: self.addedDate)
+ Date(timeIntervalSince1970: self.getAddedDate())
}
}
diff --git a/AutoCat/Extensions/VehicleReportImage.swift b/AutoCat/Extensions/VehicleReportImage.swift
index 8f85918..7174e6d 100644
--- a/AutoCat/Extensions/VehicleReportImage.swift
+++ b/AutoCat/Extensions/VehicleReportImage.swift
@@ -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 ?? "", 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" }
diff --git a/AutoCat/Models/AudioRecord.swift b/AutoCat/Models/AudioRecord.swift
index 48546f1..a6c828e 100644
--- a/AutoCat/Models/AudioRecord.swift
+++ b/AutoCat/Models/AudioRecord.swift
@@ -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
+ }
}
diff --git a/AutoCat/Models/Vehicle.swift b/AutoCat/Models/Vehicle.swift
index acffe89..c7c1d64 100644
--- a/AutoCat/Models/Vehicle.swift
+++ b/AutoCat/Models/Vehicle.swift
@@ -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()
let events = List()
- 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
}
diff --git a/AutoCat/Utils/Constants.swift b/AutoCat/Utils/Constants.swift
index fd8bd02..34e7169 100644
--- a/AutoCat/Utils/Constants.swift
+++ b/AutoCat/Utils/Constants.swift
@@ -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