Adding notes
This commit is contained in:
parent
c1097249c3
commit
d656cc1698
@ -50,6 +50,8 @@
|
|||||||
7A6DD90A24329541009DE740 /* RoadNumbers2.0.otf in Resources */ = {isa = PBXBuildFile; fileRef = 7A6DD90924329541009DE740 /* RoadNumbers2.0.otf */; };
|
7A6DD90A24329541009DE740 /* RoadNumbers2.0.otf in Resources */ = {isa = PBXBuildFile; fileRef = 7A6DD90924329541009DE740 /* RoadNumbers2.0.otf */; };
|
||||||
7A6DD90C24335A6D009DE740 /* FlagLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6DD90B24335A6D009DE740 /* FlagLayer.swift */; };
|
7A6DD90C24335A6D009DE740 /* FlagLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6DD90B24335A6D009DE740 /* FlagLayer.swift */; };
|
||||||
7A6E03282485951700DB22ED /* OwnersController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6E03272485951700DB22ED /* OwnersController.swift */; };
|
7A6E03282485951700DB22ED /* OwnersController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6E03272485951700DB22ED /* OwnersController.swift */; };
|
||||||
|
7A6F095E26DB9F85003A965D /* NotesController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6F095D26DB9F85003A965D /* NotesController.swift */; };
|
||||||
|
7A6F096026DBF588003A965D /* VehicleNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6F095F26DBF588003A965D /* VehicleNote.swift */; };
|
||||||
7A7547E024032CB6004E8406 /* VehiclePhotoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A7547DF24032CB6004E8406 /* VehiclePhotoCell.swift */; };
|
7A7547E024032CB6004E8406 /* VehiclePhotoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A7547DF24032CB6004E8406 /* VehiclePhotoCell.swift */; };
|
||||||
7A761C042677F18E0005F28F /* Api.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11474323FF06CA00B424AF /* Api.swift */; };
|
7A761C042677F18E0005F28F /* Api.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11474323FF06CA00B424AF /* Api.swift */; };
|
||||||
7A761C052677F1BC0005F28F /* CocoaError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A27ADF824A09CAD0035F39E /* CocoaError.swift */; };
|
7A761C052677F1BC0005F28F /* CocoaError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A27ADF824A09CAD0035F39E /* CocoaError.swift */; };
|
||||||
@ -68,25 +70,21 @@
|
|||||||
7A8AB76B25A1D95500ECF2C1 /* SourceStatusRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A8AB76A25A1D95500ECF2C1 /* SourceStatusRow.swift */; };
|
7A8AB76B25A1D95500ECF2C1 /* SourceStatusRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A8AB76A25A1D95500ECF2C1 /* SourceStatusRow.swift */; };
|
||||||
7A96AE2D246B2B7400297C33 /* GoogleSignInController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A96AE2C246B2B7400297C33 /* GoogleSignInController.swift */; };
|
7A96AE2D246B2B7400297C33 /* GoogleSignInController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A96AE2C246B2B7400297C33 /* GoogleSignInController.swift */; };
|
||||||
7A96AE2F246B2BCD00297C33 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A96AE2E246B2BCD00297C33 /* WebKit.framework */; };
|
7A96AE2F246B2BCD00297C33 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7A96AE2E246B2BCD00297C33 /* WebKit.framework */; };
|
||||||
|
7A99406426E4BFAE002E9CB6 /* VehicleNoteCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A99406326E4BFAE002E9CB6 /* VehicleNoteCell.swift */; };
|
||||||
7A9FEEC82529AB23001CA50E /* RxRealmDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A9FEEC72529AB23001CA50E /* RxRealmDataSource.swift */; };
|
7A9FEEC82529AB23001CA50E /* RxRealmDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A9FEEC72529AB23001CA50E /* RxRealmDataSource.swift */; };
|
||||||
7AA7BC2C25A5DFB80053A5D5 /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11471C23FEA18700B424AF /* RxSwift */; };
|
7AA54C1C26CD977A00F2BF28 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 7AA54C1B26CD977A00F2BF28 /* RxCocoa */; };
|
||||||
7AA7BC2D25A5DFB80053A5D5 /* RxRelay in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11471E23FEA18700B424AF /* RxRelay */; };
|
7AA54C1E26CD977A00F2BF28 /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7AA54C1D26CD977A00F2BF28 /* RxSwift */; settings = {ATTRIBUTES = (Required, ); }; };
|
||||||
7AA7BC2E25A5DFB80053A5D5 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11472023FEA18700B424AF /* RxCocoa */; };
|
7AA54C2026CD977A00F2BF28 /* RxRealm in Frameworks */ = {isa = PBXBuildFile; productRef = 7AA54C1F26CD977A00F2BF28 /* RxRealm */; };
|
||||||
7AA7BC2F25A5DFB80053A5D5 /* RxBlocking in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11472223FEA18700B424AF /* RxBlocking */; };
|
|
||||||
7AA7BC3025A5DFB80053A5D5 /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11472523FEA1F400B424AF /* Realm */; };
|
|
||||||
7AA7BC3125A5DFB80053A5D5 /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11472723FEA1F400B424AF /* RealmSwift */; };
|
|
||||||
7AA7BC3225A5DFB80053A5D5 /* RxRealm in Frameworks */ = {isa = PBXBuildFile; productRef = 7A530B8A240181F500CBFE6E /* RxRealm */; };
|
|
||||||
7AA7BC3325A5DFB80053A5D5 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF58D332402A91C00CE01A0 /* Kingfisher */; };
|
7AA7BC3325A5DFB80053A5D5 /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF58D332402A91C00CE01A0 /* Kingfisher */; };
|
||||||
7AA7BC3425A5DFB80053A5D5 /* SwiftDate in Frameworks */ = {isa = PBXBuildFile; productRef = 7A051610241412CA00FC55AC /* SwiftDate */; };
|
|
||||||
7AA7BC3525A5DFB80053A5D5 /* ExceptionCatcher in Frameworks */ = {isa = PBXBuildFile; productRef = 7A813DC02508C4D900CC93B9 /* ExceptionCatcher */; };
|
7AA7BC3525A5DFB80053A5D5 /* ExceptionCatcher in Frameworks */ = {isa = PBXBuildFile; productRef = 7A813DC02508C4D900CC93B9 /* ExceptionCatcher */; };
|
||||||
7AA7BC3625A5DFB80053A5D5 /* PKHUD in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABDE1C2532F3EB0041AFC6 /* PKHUD */; };
|
7AA7BC3625A5DFB80053A5D5 /* PKHUD in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABDE1C2532F3EB0041AFC6 /* PKHUD */; };
|
||||||
7AA7BC3725A5DFB80053A5D5 /* DifferenceKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABDE22253327F10041AFC6 /* DifferenceKit */; };
|
|
||||||
7AA7BC3825A5DFB80053A5D5 /* Eureka in Frameworks */ = {isa = PBXBuildFile; productRef = 7AEF47A3253DC4D2001D6238 /* Eureka */; };
|
7AA7BC3825A5DFB80053A5D5 /* Eureka in Frameworks */ = {isa = PBXBuildFile; productRef = 7AEF47A3253DC4D2001D6238 /* Eureka */; };
|
||||||
7AABB1F0267E9CAA00D7AB32 /* DifferenceKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABB1EF267E9CAA00D7AB32 /* DifferenceKit */; };
|
7AABB1F0267E9CAA00D7AB32 /* DifferenceKit in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABB1EF267E9CAA00D7AB32 /* DifferenceKit */; settings = {ATTRIBUTES = (Required, ); }; };
|
||||||
7AABB1F2267E9CC800D7AB32 /* SwiftDate in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABB1F1267E9CC800D7AB32 /* SwiftDate */; };
|
7AABB1F2267E9CC800D7AB32 /* SwiftDate in Frameworks */ = {isa = PBXBuildFile; productRef = 7AABB1F1267E9CC800D7AB32 /* SwiftDate */; };
|
||||||
7AABDE26253350C30041AFC6 /* RxSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AABDE25253350C30041AFC6 /* RxSectionedDataSource.swift */; };
|
7AABDE26253350C30041AFC6 /* RxSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AABDE25253350C30041AFC6 /* RxSectionedDataSource.swift */; };
|
||||||
7AB67E8C2435C38700258F61 /* CustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB67E8B2435C38700258F61 /* CustomTextField.swift */; };
|
7AB67E8C2435C38700258F61 /* CustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB67E8B2435C38700258F61 /* CustomTextField.swift */; };
|
||||||
7AB67E8E2435D1A000258F61 /* CustomButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB67E8D2435D1A000258F61 /* CustomButton.swift */; };
|
7AB67E8E2435D1A000258F61 /* CustomButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB67E8D2435D1A000258F61 /* CustomButton.swift */; };
|
||||||
|
7AC76D7B270083AE0084DB27 /* TextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC76D7A270083AE0084DB27 /* TextView.swift */; };
|
||||||
7ADF6C93250B954900F237B2 /* Navigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ADF6C92250B954900F237B2 /* Navigation.swift */; };
|
7ADF6C93250B954900F237B2 /* Navigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ADF6C92250B954900F237B2 /* Navigation.swift */; };
|
||||||
7ADF6C95250D037700F237B2 /* ShowEventController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ADF6C94250D037700F237B2 /* ShowEventController.swift */; };
|
7ADF6C95250D037700F237B2 /* ShowEventController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ADF6C94250D037700F237B2 /* ShowEventController.swift */; };
|
||||||
7ADF6C97250F41B000F237B2 /* PNKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ADF6C96250F41B000F237B2 /* PNKeyboard.swift */; };
|
7ADF6C97250F41B000F237B2 /* PNKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ADF6C96250F41B000F237B2 /* PNKeyboard.swift */; };
|
||||||
@ -104,8 +102,6 @@
|
|||||||
7AF6D1E92677A8410086EA64 /* FakeLocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF6D1E82677A8410086EA64 /* FakeLocationManager.swift */; };
|
7AF6D1E92677A8410086EA64 /* FakeLocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AF6D1E82677A8410086EA64 /* FakeLocationManager.swift */; };
|
||||||
7AF6D2042677C03B0086EA64 /* AutoCatCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AF6D1EF2677C03B0086EA64 /* AutoCatCore.framework */; };
|
7AF6D2042677C03B0086EA64 /* AutoCatCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AF6D1EF2677C03B0086EA64 /* AutoCatCore.framework */; };
|
||||||
7AF6D2052677C03B0086EA64 /* AutoCatCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7AF6D1EF2677C03B0086EA64 /* AutoCatCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
7AF6D2052677C03B0086EA64 /* AutoCatCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7AF6D1EF2677C03B0086EA64 /* AutoCatCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
7AF6D20F2677C0EA0086EA64 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF6D20E2677C0EA0086EA64 /* RxCocoa */; };
|
|
||||||
7AF6D2112677C0EA0086EA64 /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF6D2102677C0EA0086EA64 /* RxSwift */; };
|
|
||||||
7AF6D2122677C12E0086EA64 /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A000AA124C2EEDE001F5B00 /* Location.swift */; };
|
7AF6D2122677C12E0086EA64 /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A000AA124C2EEDE001F5B00 /* Location.swift */; };
|
||||||
7AF6D2132677C15A0086EA64 /* AudioRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A659B5824A2B1BA0043A0F2 /* AudioRecord.swift */; };
|
7AF6D2132677C15A0086EA64 /* AudioRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A659B5824A2B1BA0043A0F2 /* AudioRecord.swift */; };
|
||||||
7AF6D2142677C1680086EA64 /* VehicleEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAE6AD224CDDF950023860B /* VehicleEvent.swift */; };
|
7AF6D2142677C1680086EA64 /* VehicleEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AAE6AD224CDDF950023860B /* VehicleEvent.swift */; };
|
||||||
@ -124,7 +120,6 @@
|
|||||||
7AF6D2212677C1680086EA64 /* PagedResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6841A913FABBB0AB20DEF4FC /* PagedResponse.swift */; };
|
7AF6D2212677C1680086EA64 /* PagedResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6841A913FABBB0AB20DEF4FC /* PagedResponse.swift */; };
|
||||||
7AF6D2232677C2B40086EA64 /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF6D2222677C2B40086EA64 /* Realm */; };
|
7AF6D2232677C2B40086EA64 /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF6D2222677C2B40086EA64 /* Realm */; };
|
||||||
7AF6D2252677C2B40086EA64 /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF6D2242677C2B40086EA64 /* RealmSwift */; };
|
7AF6D2252677C2B40086EA64 /* RealmSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF6D2242677C2B40086EA64 /* RealmSwift */; };
|
||||||
7AF6D2272677C2B40086EA64 /* RxRealm in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF6D2262677C2B40086EA64 /* RxRealm */; };
|
|
||||||
7AF6D2282677C2DC0086EA64 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A96AE30246B2FE400297C33 /* Constants.swift */; };
|
7AF6D2282677C2DC0086EA64 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A96AE30246B2FE400297C33 /* Constants.swift */; };
|
||||||
7AF6D22A2677C3AD0086EA64 /* Exportable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE8424D26109F78002F6B31 /* Exportable.swift */; };
|
7AF6D22A2677C3AD0086EA64 /* Exportable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE8424D26109F78002F6B31 /* Exportable.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
@ -230,6 +225,8 @@
|
|||||||
7A6DD90B24335A6D009DE740 /* FlagLayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlagLayer.swift; sourceTree = "<group>"; };
|
7A6DD90B24335A6D009DE740 /* FlagLayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlagLayer.swift; sourceTree = "<group>"; };
|
||||||
7A6DD90D24337930009DE740 /* PlateNumber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlateNumber.swift; sourceTree = "<group>"; };
|
7A6DD90D24337930009DE740 /* PlateNumber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlateNumber.swift; sourceTree = "<group>"; };
|
||||||
7A6E03272485951700DB22ED /* OwnersController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OwnersController.swift; sourceTree = "<group>"; };
|
7A6E03272485951700DB22ED /* OwnersController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OwnersController.swift; sourceTree = "<group>"; };
|
||||||
|
7A6F095D26DB9F85003A965D /* NotesController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotesController.swift; sourceTree = "<group>"; };
|
||||||
|
7A6F095F26DBF588003A965D /* VehicleNote.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleNote.swift; sourceTree = "<group>"; };
|
||||||
7A7547DF24032CB6004E8406 /* VehiclePhotoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehiclePhotoCell.swift; sourceTree = "<group>"; };
|
7A7547DF24032CB6004E8406 /* VehiclePhotoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehiclePhotoCell.swift; sourceTree = "<group>"; };
|
||||||
7A761C0A267E8FF90005F28F /* Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = "<group>"; };
|
7A761C0A267E8FF90005F28F /* Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = "<group>"; };
|
||||||
7A813DBD2506A57100CC93B9 /* AuthenticationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AuthenticationServices.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/AuthenticationServices.framework; sourceTree = DEVELOPER_DIR; };
|
7A813DBD2506A57100CC93B9 /* AuthenticationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AuthenticationServices.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/AuthenticationServices.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
@ -247,12 +244,14 @@
|
|||||||
7A96AE2E246B2BCD00297C33 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/WebKit.framework; sourceTree = DEVELOPER_DIR; };
|
7A96AE2E246B2BCD00297C33 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/WebKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||||
7A96AE30246B2FE400297C33 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
|
7A96AE30246B2FE400297C33 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
|
||||||
7A96AE32246C095700297C33 /* Base64FS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base64FS.swift; sourceTree = "<group>"; };
|
7A96AE32246C095700297C33 /* Base64FS.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base64FS.swift; sourceTree = "<group>"; };
|
||||||
|
7A99406326E4BFAE002E9CB6 /* VehicleNoteCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleNoteCell.swift; sourceTree = "<group>"; };
|
||||||
7A9FEEC72529AB23001CA50E /* RxRealmDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxRealmDataSource.swift; sourceTree = "<group>"; };
|
7A9FEEC72529AB23001CA50E /* RxRealmDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxRealmDataSource.swift; sourceTree = "<group>"; };
|
||||||
7AABDE25253350C30041AFC6 /* RxSectionedDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxSectionedDataSource.swift; sourceTree = "<group>"; };
|
7AABDE25253350C30041AFC6 /* RxSectionedDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RxSectionedDataSource.swift; sourceTree = "<group>"; };
|
||||||
7AAE6AD224CDDF950023860B /* VehicleEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleEvent.swift; sourceTree = "<group>"; };
|
7AAE6AD224CDDF950023860B /* VehicleEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleEvent.swift; sourceTree = "<group>"; };
|
||||||
7AB562B9249C9E9B00473D53 /* VehicleRegion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleRegion.swift; sourceTree = "<group>"; };
|
7AB562B9249C9E9B00473D53 /* VehicleRegion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleRegion.swift; sourceTree = "<group>"; };
|
||||||
7AB67E8B2435C38700258F61 /* CustomTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTextField.swift; sourceTree = "<group>"; };
|
7AB67E8B2435C38700258F61 /* CustomTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTextField.swift; sourceTree = "<group>"; };
|
||||||
7AB67E8D2435D1A000258F61 /* CustomButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomButton.swift; sourceTree = "<group>"; };
|
7AB67E8D2435D1A000258F61 /* CustomButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomButton.swift; sourceTree = "<group>"; };
|
||||||
|
7AC76D7A270083AE0084DB27 /* TextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextView.swift; sourceTree = "<group>"; };
|
||||||
7ADF6C92250B954900F237B2 /* Navigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Navigation.swift; sourceTree = "<group>"; };
|
7ADF6C92250B954900F237B2 /* Navigation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Navigation.swift; sourceTree = "<group>"; };
|
||||||
7ADF6C94250D037700F237B2 /* ShowEventController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowEventController.swift; sourceTree = "<group>"; };
|
7ADF6C94250D037700F237B2 /* ShowEventController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShowEventController.swift; sourceTree = "<group>"; };
|
||||||
7ADF6C96250F41B000F237B2 /* PNKeyboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PNKeyboard.swift; sourceTree = "<group>"; };
|
7ADF6C96250F41B000F237B2 /* PNKeyboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PNKeyboard.swift; sourceTree = "<group>"; };
|
||||||
@ -282,21 +281,12 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
7AA7BC3125A5DFB80053A5D5 /* RealmSwift in Frameworks */,
|
|
||||||
7AA7BC3525A5DFB80053A5D5 /* ExceptionCatcher in Frameworks */,
|
7AA7BC3525A5DFB80053A5D5 /* ExceptionCatcher in Frameworks */,
|
||||||
7AA7BC3025A5DFB80053A5D5 /* Realm in Frameworks */,
|
|
||||||
7AA7BC2C25A5DFB80053A5D5 /* RxSwift in Frameworks */,
|
|
||||||
7AA7BC2F25A5DFB80053A5D5 /* RxBlocking in Frameworks */,
|
|
||||||
7AA7BC3825A5DFB80053A5D5 /* Eureka in Frameworks */,
|
7AA7BC3825A5DFB80053A5D5 /* Eureka in Frameworks */,
|
||||||
7AA7BC3325A5DFB80053A5D5 /* Kingfisher in Frameworks */,
|
7AA7BC3325A5DFB80053A5D5 /* Kingfisher in Frameworks */,
|
||||||
7A813DBE2506A57100CC93B9 /* AuthenticationServices.framework in Frameworks */,
|
7A813DBE2506A57100CC93B9 /* AuthenticationServices.framework in Frameworks */,
|
||||||
7AA7BC3625A5DFB80053A5D5 /* PKHUD in Frameworks */,
|
7AA7BC3625A5DFB80053A5D5 /* PKHUD in Frameworks */,
|
||||||
7AA7BC2E25A5DFB80053A5D5 /* RxCocoa in Frameworks */,
|
|
||||||
7AA7BC3425A5DFB80053A5D5 /* SwiftDate in Frameworks */,
|
|
||||||
7AF6D2042677C03B0086EA64 /* AutoCatCore.framework in Frameworks */,
|
7AF6D2042677C03B0086EA64 /* AutoCatCore.framework in Frameworks */,
|
||||||
7AA7BC3725A5DFB80053A5D5 /* DifferenceKit in Frameworks */,
|
|
||||||
7AA7BC3225A5DFB80053A5D5 /* RxRealm in Frameworks */,
|
|
||||||
7AA7BC2D25A5DFB80053A5D5 /* RxRelay in Frameworks */,
|
|
||||||
7A96AE2F246B2BCD00297C33 /* WebKit.framework in Frameworks */,
|
7A96AE2F246B2BCD00297C33 /* WebKit.framework in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
@ -312,13 +302,13 @@
|
|||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
7AA54C1E26CD977A00F2BF28 /* RxSwift in Frameworks */,
|
||||||
7AABB1F0267E9CAA00D7AB32 /* DifferenceKit in Frameworks */,
|
7AABB1F0267E9CAA00D7AB32 /* DifferenceKit in Frameworks */,
|
||||||
7AF6D2252677C2B40086EA64 /* RealmSwift in Frameworks */,
|
7AF6D2252677C2B40086EA64 /* RealmSwift in Frameworks */,
|
||||||
|
7AA54C1C26CD977A00F2BF28 /* RxCocoa in Frameworks */,
|
||||||
7AF6D2232677C2B40086EA64 /* Realm in Frameworks */,
|
7AF6D2232677C2B40086EA64 /* Realm in Frameworks */,
|
||||||
7AF6D2112677C0EA0086EA64 /* RxSwift in Frameworks */,
|
|
||||||
7AABB1F2267E9CC800D7AB32 /* SwiftDate in Frameworks */,
|
7AABB1F2267E9CC800D7AB32 /* SwiftDate in Frameworks */,
|
||||||
7AF6D20F2677C0EA0086EA64 /* RxCocoa in Frameworks */,
|
7AA54C2026CD977A00F2BF28 /* RxRealm in Frameworks */,
|
||||||
7AF6D2272677C2B40086EA64 /* RxRealm in Frameworks */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
@ -417,6 +407,7 @@
|
|||||||
7A11471723FDEBFA00B424AF /* ReportController.swift */,
|
7A11471723FDEBFA00B424AF /* ReportController.swift */,
|
||||||
7A3F07AC2436350B00E59687 /* SearchController.swift */,
|
7A3F07AC2436350B00E59687 /* SearchController.swift */,
|
||||||
7AEFE727240455E200910EB7 /* SettingsController.swift */,
|
7AEFE727240455E200910EB7 /* SettingsController.swift */,
|
||||||
|
7A6F095D26DB9F85003A965D /* NotesController.swift */,
|
||||||
);
|
);
|
||||||
path = Controllers;
|
path = Controllers;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -460,6 +451,7 @@
|
|||||||
7A2DE69725868AC800A113FC /* VehicleAd.swift */,
|
7A2DE69725868AC800A113FC /* VehicleAd.swift */,
|
||||||
7AAE6AD224CDDF950023860B /* VehicleEvent.swift */,
|
7AAE6AD224CDDF950023860B /* VehicleEvent.swift */,
|
||||||
7AB562B9249C9E9B00473D53 /* VehicleRegion.swift */,
|
7AB562B9249C9E9B00473D53 /* VehicleRegion.swift */,
|
||||||
|
7A6F095F26DBF588003A965D /* VehicleNote.swift */,
|
||||||
);
|
);
|
||||||
path = Models;
|
path = Models;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -490,6 +482,7 @@
|
|||||||
7AE26A3224EEF9EC00625033 /* UIViewControllerExt.swift */,
|
7AE26A3224EEF9EC00625033 /* UIViewControllerExt.swift */,
|
||||||
7A8A220A248D67B60073DFD9 /* VehicleReportImage.swift */,
|
7A8A220A248D67B60073DFD9 /* VehicleReportImage.swift */,
|
||||||
7A761C0A267E8FF90005F28F /* Error.swift */,
|
7A761C0A267E8FF90005F28F /* Error.swift */,
|
||||||
|
7AC76D7A270083AE0084DB27 /* TextView.swift */,
|
||||||
);
|
);
|
||||||
path = Extensions;
|
path = Extensions;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -502,6 +495,7 @@
|
|||||||
7A1090E724A394F100B4F0B2 /* AudioRecordCell.swift */,
|
7A1090E724A394F100B4F0B2 /* AudioRecordCell.swift */,
|
||||||
7A813DC22508EE4F00CC93B9 /* EventCell.swift */,
|
7A813DC22508EE4F00CC93B9 /* EventCell.swift */,
|
||||||
7AEFC3BD2529D3CC00BADFB2 /* ConfigurableCell.swift */,
|
7AEFC3BD2529D3CC00BADFB2 /* ConfigurableCell.swift */,
|
||||||
|
7A99406326E4BFAE002E9CB6 /* VehicleNoteCell.swift */,
|
||||||
);
|
);
|
||||||
path = Cells;
|
path = Cells;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -644,18 +638,9 @@
|
|||||||
);
|
);
|
||||||
name = AutoCat;
|
name = AutoCat;
|
||||||
packageProductDependencies = (
|
packageProductDependencies = (
|
||||||
7A11471C23FEA18700B424AF /* RxSwift */,
|
|
||||||
7A11471E23FEA18700B424AF /* RxRelay */,
|
|
||||||
7A11472023FEA18700B424AF /* RxCocoa */,
|
|
||||||
7A11472223FEA18700B424AF /* RxBlocking */,
|
|
||||||
7A11472523FEA1F400B424AF /* Realm */,
|
|
||||||
7A11472723FEA1F400B424AF /* RealmSwift */,
|
|
||||||
7A530B8A240181F500CBFE6E /* RxRealm */,
|
|
||||||
7AF58D332402A91C00CE01A0 /* Kingfisher */,
|
7AF58D332402A91C00CE01A0 /* Kingfisher */,
|
||||||
7A051610241412CA00FC55AC /* SwiftDate */,
|
|
||||||
7A813DC02508C4D900CC93B9 /* ExceptionCatcher */,
|
7A813DC02508C4D900CC93B9 /* ExceptionCatcher */,
|
||||||
7AABDE1C2532F3EB0041AFC6 /* PKHUD */,
|
7AABDE1C2532F3EB0041AFC6 /* PKHUD */,
|
||||||
7AABDE22253327F10041AFC6 /* DifferenceKit */,
|
|
||||||
7AEF47A3253DC4D2001D6238 /* Eureka */,
|
7AEF47A3253DC4D2001D6238 /* Eureka */,
|
||||||
);
|
);
|
||||||
productName = AutoCat;
|
productName = AutoCat;
|
||||||
@ -695,13 +680,13 @@
|
|||||||
);
|
);
|
||||||
name = AutoCatCore;
|
name = AutoCatCore;
|
||||||
packageProductDependencies = (
|
packageProductDependencies = (
|
||||||
7AF6D20E2677C0EA0086EA64 /* RxCocoa */,
|
|
||||||
7AF6D2102677C0EA0086EA64 /* RxSwift */,
|
|
||||||
7AF6D2222677C2B40086EA64 /* Realm */,
|
7AF6D2222677C2B40086EA64 /* Realm */,
|
||||||
7AF6D2242677C2B40086EA64 /* RealmSwift */,
|
7AF6D2242677C2B40086EA64 /* RealmSwift */,
|
||||||
7AF6D2262677C2B40086EA64 /* RxRealm */,
|
|
||||||
7AABB1EF267E9CAA00D7AB32 /* DifferenceKit */,
|
7AABB1EF267E9CAA00D7AB32 /* DifferenceKit */,
|
||||||
7AABB1F1267E9CC800D7AB32 /* SwiftDate */,
|
7AABB1F1267E9CC800D7AB32 /* SwiftDate */,
|
||||||
|
7AA54C1B26CD977A00F2BF28 /* RxCocoa */,
|
||||||
|
7AA54C1D26CD977A00F2BF28 /* RxSwift */,
|
||||||
|
7AA54C1F26CD977A00F2BF28 /* RxRealm */,
|
||||||
);
|
);
|
||||||
productName = AutoCatCore;
|
productName = AutoCatCore;
|
||||||
productReference = 7AF6D1EF2677C03B0086EA64 /* AutoCatCore.framework */;
|
productReference = 7AF6D1EF2677C03B0086EA64 /* AutoCatCore.framework */;
|
||||||
@ -805,6 +790,7 @@
|
|||||||
7A813DC9250B5C9700CC93B9 /* LocationRow.swift in Sources */,
|
7A813DC9250B5C9700CC93B9 /* LocationRow.swift in Sources */,
|
||||||
7A2DE69B25869ABD00A113FC /* AdsController.swift in Sources */,
|
7A2DE69B25869ABD00A113FC /* AdsController.swift in Sources */,
|
||||||
7A6DD90824329144009DE740 /* CenterTextLayer.swift in Sources */,
|
7A6DD90824329144009DE740 /* CenterTextLayer.swift in Sources */,
|
||||||
|
7A99406426E4BFAE002E9CB6 /* VehicleNoteCell.swift in Sources */,
|
||||||
7A8AB76B25A1D95500ECF2C1 /* SourceStatusRow.swift in Sources */,
|
7A8AB76B25A1D95500ECF2C1 /* SourceStatusRow.swift in Sources */,
|
||||||
7A813DC32508EE4F00CC93B9 /* EventCell.swift in Sources */,
|
7A813DC32508EE4F00CC93B9 /* EventCell.swift in Sources */,
|
||||||
7A3F07AD2436350B00E59687 /* SearchController.swift in Sources */,
|
7A3F07AD2436350B00E59687 /* SearchController.swift in Sources */,
|
||||||
@ -827,12 +813,14 @@
|
|||||||
7A27ADF7249FEF690035F39E /* Recorder.swift in Sources */,
|
7A27ADF7249FEF690035F39E /* Recorder.swift in Sources */,
|
||||||
7A3F07AB24360DC800E59687 /* Dated.swift in Sources */,
|
7A3F07AB24360DC800E59687 /* Dated.swift in Sources */,
|
||||||
7A33381124990DAE00D878F1 /* FiltersController.swift in Sources */,
|
7A33381124990DAE00D878F1 /* FiltersController.swift in Sources */,
|
||||||
|
7AC76D7B270083AE0084DB27 /* TextView.swift in Sources */,
|
||||||
7A1090E824A394F100B4F0B2 /* AudioRecordCell.swift in Sources */,
|
7A1090E824A394F100B4F0B2 /* AudioRecordCell.swift in Sources */,
|
||||||
7A64AE762469DFB600ABE48E /* ContentTransformers.swift in Sources */,
|
7A64AE762469DFB600ABE48E /* ContentTransformers.swift in Sources */,
|
||||||
7A11471823FDEBFA00B424AF /* ReportController.swift in Sources */,
|
7A11471823FDEBFA00B424AF /* ReportController.swift in Sources */,
|
||||||
7AE24C5F251F1B4E00758E39 /* Buttons.swift in Sources */,
|
7AE24C5F251F1B4E00758E39 /* Buttons.swift in Sources */,
|
||||||
7A11471A23FE839000B424AF /* AuthController.swift in Sources */,
|
7A11471A23FE839000B424AF /* AuthController.swift in Sources */,
|
||||||
7A530B7A24001D3300CBFE6E /* CheckController.swift in Sources */,
|
7A530B7A24001D3300CBFE6E /* CheckController.swift in Sources */,
|
||||||
|
7A6F095E26DB9F85003A965D /* NotesController.swift in Sources */,
|
||||||
7A6E03282485951700DB22ED /* OwnersController.swift in Sources */,
|
7A6E03282485951700DB22ED /* OwnersController.swift in Sources */,
|
||||||
7A64AE742469DFB600ABE48E /* MediaContentView.swift in Sources */,
|
7A64AE742469DFB600ABE48E /* MediaContentView.swift in Sources */,
|
||||||
7A1090EC24A4E3E100B4F0B2 /* CellProgressView.swift in Sources */,
|
7A1090EC24A4E3E100B4F0B2 /* CellProgressView.swift in Sources */,
|
||||||
@ -887,6 +875,7 @@
|
|||||||
7AF6D2122677C12E0086EA64 /* Location.swift in Sources */,
|
7AF6D2122677C12E0086EA64 /* Location.swift in Sources */,
|
||||||
7AF6D2142677C1680086EA64 /* VehicleEvent.swift in Sources */,
|
7AF6D2142677C1680086EA64 /* VehicleEvent.swift in Sources */,
|
||||||
7AF6D2172677C1680086EA64 /* VehicleRegion.swift in Sources */,
|
7AF6D2172677C1680086EA64 /* VehicleRegion.swift in Sources */,
|
||||||
|
7A6F096026DBF588003A965D /* VehicleNote.swift in Sources */,
|
||||||
7AF6D21E2677C1680086EA64 /* PlateNumber.swift in Sources */,
|
7AF6D21E2677C1680086EA64 /* PlateNumber.swift in Sources */,
|
||||||
7AF6D21F2677C1680086EA64 /* Response.swift in Sources */,
|
7AF6D21F2677C1680086EA64 /* Response.swift in Sources */,
|
||||||
7A761C07267E8E7F0005F28F /* AnyEncodable.swift in Sources */,
|
7A761C07267E8E7F0005F28F /* AnyEncodable.swift in Sources */,
|
||||||
@ -1091,7 +1080,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 78;
|
CURRENT_PROJECT_VERSION = 79;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
@ -1116,7 +1105,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 78;
|
CURRENT_PROJECT_VERSION = 79;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
@ -1351,51 +1340,26 @@
|
|||||||
/* End XCRemoteSwiftPackageReference section */
|
/* End XCRemoteSwiftPackageReference section */
|
||||||
|
|
||||||
/* Begin XCSwiftPackageProductDependency section */
|
/* Begin XCSwiftPackageProductDependency section */
|
||||||
7A051610241412CA00FC55AC /* SwiftDate */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A05160F241412CA00FC55AC /* XCRemoteSwiftPackageReference "SwiftDate" */;
|
|
||||||
productName = SwiftDate;
|
|
||||||
};
|
|
||||||
7A11471C23FEA18700B424AF /* RxSwift */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A11471B23FEA18700B424AF /* XCRemoteSwiftPackageReference "RxSwift" */;
|
|
||||||
productName = RxSwift;
|
|
||||||
};
|
|
||||||
7A11471E23FEA18700B424AF /* RxRelay */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A11471B23FEA18700B424AF /* XCRemoteSwiftPackageReference "RxSwift" */;
|
|
||||||
productName = RxRelay;
|
|
||||||
};
|
|
||||||
7A11472023FEA18700B424AF /* RxCocoa */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A11471B23FEA18700B424AF /* XCRemoteSwiftPackageReference "RxSwift" */;
|
|
||||||
productName = RxCocoa;
|
|
||||||
};
|
|
||||||
7A11472223FEA18700B424AF /* RxBlocking */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A11471B23FEA18700B424AF /* XCRemoteSwiftPackageReference "RxSwift" */;
|
|
||||||
productName = RxBlocking;
|
|
||||||
};
|
|
||||||
7A11472523FEA1F400B424AF /* Realm */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A11472423FEA1F400B424AF /* XCRemoteSwiftPackageReference "realm-cocoa" */;
|
|
||||||
productName = Realm;
|
|
||||||
};
|
|
||||||
7A11472723FEA1F400B424AF /* RealmSwift */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A11472423FEA1F400B424AF /* XCRemoteSwiftPackageReference "realm-cocoa" */;
|
|
||||||
productName = RealmSwift;
|
|
||||||
};
|
|
||||||
7A530B8A240181F500CBFE6E /* RxRealm */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A530B89240181F500CBFE6E /* XCRemoteSwiftPackageReference "RxRealm" */;
|
|
||||||
productName = RxRealm;
|
|
||||||
};
|
|
||||||
7A813DC02508C4D900CC93B9 /* ExceptionCatcher */ = {
|
7A813DC02508C4D900CC93B9 /* ExceptionCatcher */ = {
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
package = 7A813DBF2508C4D900CC93B9 /* XCRemoteSwiftPackageReference "ExceptionCatcher" */;
|
package = 7A813DBF2508C4D900CC93B9 /* XCRemoteSwiftPackageReference "ExceptionCatcher" */;
|
||||||
productName = ExceptionCatcher;
|
productName = ExceptionCatcher;
|
||||||
};
|
};
|
||||||
|
7AA54C1B26CD977A00F2BF28 /* RxCocoa */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 7A11471B23FEA18700B424AF /* XCRemoteSwiftPackageReference "RxSwift" */;
|
||||||
|
productName = RxCocoa;
|
||||||
|
};
|
||||||
|
7AA54C1D26CD977A00F2BF28 /* RxSwift */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 7A11471B23FEA18700B424AF /* XCRemoteSwiftPackageReference "RxSwift" */;
|
||||||
|
productName = RxSwift;
|
||||||
|
};
|
||||||
|
7AA54C1F26CD977A00F2BF28 /* RxRealm */ = {
|
||||||
|
isa = XCSwiftPackageProductDependency;
|
||||||
|
package = 7A530B89240181F500CBFE6E /* XCRemoteSwiftPackageReference "RxRealm" */;
|
||||||
|
productName = RxRealm;
|
||||||
|
};
|
||||||
7AABB1EF267E9CAA00D7AB32 /* DifferenceKit */ = {
|
7AABB1EF267E9CAA00D7AB32 /* DifferenceKit */ = {
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
package = 7AABDE21253327F10041AFC6 /* XCRemoteSwiftPackageReference "DifferenceKit" */;
|
package = 7AABDE21253327F10041AFC6 /* XCRemoteSwiftPackageReference "DifferenceKit" */;
|
||||||
@ -1411,11 +1375,6 @@
|
|||||||
package = 7AABDE1B2532F3EB0041AFC6 /* XCRemoteSwiftPackageReference "PKHUD" */;
|
package = 7AABDE1B2532F3EB0041AFC6 /* XCRemoteSwiftPackageReference "PKHUD" */;
|
||||||
productName = PKHUD;
|
productName = PKHUD;
|
||||||
};
|
};
|
||||||
7AABDE22253327F10041AFC6 /* DifferenceKit */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7AABDE21253327F10041AFC6 /* XCRemoteSwiftPackageReference "DifferenceKit" */;
|
|
||||||
productName = DifferenceKit;
|
|
||||||
};
|
|
||||||
7AEF47A3253DC4D2001D6238 /* Eureka */ = {
|
7AEF47A3253DC4D2001D6238 /* Eureka */ = {
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
package = 7AEF47A2253DC4D2001D6238 /* XCRemoteSwiftPackageReference "Eureka" */;
|
package = 7AEF47A2253DC4D2001D6238 /* XCRemoteSwiftPackageReference "Eureka" */;
|
||||||
@ -1426,16 +1385,6 @@
|
|||||||
package = 7AF58D322402A91C00CE01A0 /* XCRemoteSwiftPackageReference "Kingfisher" */;
|
package = 7AF58D322402A91C00CE01A0 /* XCRemoteSwiftPackageReference "Kingfisher" */;
|
||||||
productName = Kingfisher;
|
productName = Kingfisher;
|
||||||
};
|
};
|
||||||
7AF6D20E2677C0EA0086EA64 /* RxCocoa */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A11471B23FEA18700B424AF /* XCRemoteSwiftPackageReference "RxSwift" */;
|
|
||||||
productName = RxCocoa;
|
|
||||||
};
|
|
||||||
7AF6D2102677C0EA0086EA64 /* RxSwift */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A11471B23FEA18700B424AF /* XCRemoteSwiftPackageReference "RxSwift" */;
|
|
||||||
productName = RxSwift;
|
|
||||||
};
|
|
||||||
7AF6D2222677C2B40086EA64 /* Realm */ = {
|
7AF6D2222677C2B40086EA64 /* Realm */ = {
|
||||||
isa = XCSwiftPackageProductDependency;
|
isa = XCSwiftPackageProductDependency;
|
||||||
package = 7A11472423FEA1F400B424AF /* XCRemoteSwiftPackageReference "realm-cocoa" */;
|
package = 7A11472423FEA1F400B424AF /* XCRemoteSwiftPackageReference "realm-cocoa" */;
|
||||||
@ -1446,11 +1395,6 @@
|
|||||||
package = 7A11472423FEA1F400B424AF /* XCRemoteSwiftPackageReference "realm-cocoa" */;
|
package = 7A11472423FEA1F400B424AF /* XCRemoteSwiftPackageReference "realm-cocoa" */;
|
||||||
productName = RealmSwift;
|
productName = RealmSwift;
|
||||||
};
|
};
|
||||||
7AF6D2262677C2B40086EA64 /* RxRealm */ = {
|
|
||||||
isa = XCSwiftPackageProductDependency;
|
|
||||||
package = 7A530B89240181F500CBFE6E /* XCRemoteSwiftPackageReference "RxRealm" */;
|
|
||||||
productName = RxRealm;
|
|
||||||
};
|
|
||||||
/* End XCSwiftPackageProductDependency section */
|
/* End XCSwiftPackageProductDependency section */
|
||||||
};
|
};
|
||||||
rootObject = 7A1146F523FDE7E500B424AF /* Project object */;
|
rootObject = 7A1146F523FDE7E500B424AF /* Project object */;
|
||||||
|
|||||||
@ -67,7 +67,7 @@
|
|||||||
BreakpointExtensionID = "Xcode.Breakpoint.SwiftErrorBreakpoint">
|
BreakpointExtensionID = "Xcode.Breakpoint.SwiftErrorBreakpoint">
|
||||||
<BreakpointContent
|
<BreakpointContent
|
||||||
uuid = "4F72AC4F-FBCE-4C10-8BC2-2F434652DB31"
|
uuid = "4F72AC4F-FBCE-4C10-8BC2-2F434652DB31"
|
||||||
shouldBeEnabled = "Yes"
|
shouldBeEnabled = "No"
|
||||||
ignoreCount = "0"
|
ignoreCount = "0"
|
||||||
continueAfterRunningActions = "No">
|
continueAfterRunningActions = "No">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
@ -76,7 +76,7 @@
|
|||||||
BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
|
BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
|
||||||
<BreakpointContent
|
<BreakpointContent
|
||||||
uuid = "42580582-DA14-40D4-869A-FF91FCA9957C"
|
uuid = "42580582-DA14-40D4-869A-FF91FCA9957C"
|
||||||
shouldBeEnabled = "Yes"
|
shouldBeEnabled = "No"
|
||||||
ignoreCount = "0"
|
ignoreCount = "0"
|
||||||
continueAfterRunningActions = "No"
|
continueAfterRunningActions = "No"
|
||||||
breakpointStackSelectionBehavior = "1"
|
breakpointStackSelectionBehavior = "1"
|
||||||
@ -84,5 +84,21 @@
|
|||||||
stopOnStyle = "0">
|
stopOnStyle = "0">
|
||||||
</BreakpointContent>
|
</BreakpointContent>
|
||||||
</BreakpointProxy>
|
</BreakpointProxy>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "CA002588-A70B-4F96-BD13-7CC6C39BC2D5"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
filePath = "../../../Library/Developer/Xcode/DerivedData/AutoCat-fhilwnlnsrpirleiajogdcyhyyey/SourcePackages/checkouts/RxSwift/RxCocoa/Foundation/URLSession+Rx.swift"
|
||||||
|
startingColumnNumber = "9223372036854775807"
|
||||||
|
endingColumnNumber = "9223372036854775807"
|
||||||
|
startingLineNumber = "193"
|
||||||
|
endingLineNumber = "193"
|
||||||
|
landmarkName = "data(request:)"
|
||||||
|
landmarkType = "7">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
</Breakpoints>
|
</Breakpoints>
|
||||||
</Bucket>
|
</Bucket>
|
||||||
|
|||||||
@ -26,7 +26,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
|
|
||||||
let config = Realm.Configuration(
|
let config = Realm.Configuration(
|
||||||
schemaVersion: 32,
|
schemaVersion: 35,
|
||||||
migrationBlock: { migration, oldSchemaVersion in
|
migrationBlock: { migration, oldSchemaVersion in
|
||||||
if oldSchemaVersion <= 3 {
|
if oldSchemaVersion <= 3 {
|
||||||
var numbers: [String] = []
|
var numbers: [String] = []
|
||||||
@ -140,7 +140,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
HUD.dimsBackground = true
|
HUD.dimsBackground = true
|
||||||
HUD.allowsInteraction = false
|
HUD.allowsInteraction = false
|
||||||
|
|
||||||
Logging.URLRequests = { _ in false };
|
//Logging.URLRequests = { _ in false };
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="pme-aR-UNJ">
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="pme-aR-UNJ">
|
||||||
<device id="retina4_7" orientation="portrait" appearance="dark"/>
|
<device id="retina4_7" orientation="portrait" appearance="dark"/>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="iOS"/>
|
<deployment identifier="iOS"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
|
||||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
@ -72,6 +72,79 @@
|
|||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="1094" y="2353"/>
|
<point key="canvasLocation" x="1094" y="2353"/>
|
||||||
</scene>
|
</scene>
|
||||||
|
<!--Notes Controller-->
|
||||||
|
<scene sceneID="MkZ-J0-OzU">
|
||||||
|
<objects>
|
||||||
|
<viewController storyboardIdentifier="NotesController" id="Z9b-nr-Xre" customClass="NotesController" customModule="AutoCat" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="yXB-Zh-8mU">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="P8L-hv-BMJ">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<prototypes>
|
||||||
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="none" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="VehicleNoteCell" id="J6y-ZM-MCf" customClass="VehicleNoteCell" customModule="AutoCat" customModuleProvider="target">
|
||||||
|
<rect key="frame" x="0.0" y="24.5" width="375" height="62"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="J6y-ZM-MCf" id="wBh-vB-ORX">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="62"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="wnx-I3-WKd">
|
||||||
|
<rect key="frame" x="16" y="11" width="343" height="40"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Some note about vehicle" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="P90-i3-hFg">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="343" height="17"/>
|
||||||
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="date" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6jy-cJ-rbF">
|
||||||
|
<rect key="frame" x="0.0" y="25" width="343" height="15"/>
|
||||||
|
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
||||||
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="trailingMargin" secondItem="wnx-I3-WKd" secondAttribute="trailing" id="6sm-CE-5i4"/>
|
||||||
|
<constraint firstItem="wnx-I3-WKd" firstAttribute="leading" secondItem="wBh-vB-ORX" secondAttribute="leadingMargin" id="GUA-uS-9Lc"/>
|
||||||
|
<constraint firstAttribute="bottomMargin" secondItem="wnx-I3-WKd" secondAttribute="bottom" id="Vc6-PA-ApE"/>
|
||||||
|
<constraint firstItem="wnx-I3-WKd" firstAttribute="top" secondItem="wBh-vB-ORX" secondAttribute="topMargin" id="yMv-Mu-URo"/>
|
||||||
|
</constraints>
|
||||||
|
</tableViewCellContentView>
|
||||||
|
<connections>
|
||||||
|
<outlet property="date" destination="6jy-cJ-rbF" id="3rT-KG-jbc"/>
|
||||||
|
<outlet property="noteText" destination="P90-i3-hFg" id="L7m-DE-JOe"/>
|
||||||
|
</connections>
|
||||||
|
</tableViewCell>
|
||||||
|
</prototypes>
|
||||||
|
<connections>
|
||||||
|
<outlet property="dataSource" destination="Z9b-nr-Xre" id="5uP-Qe-g06"/>
|
||||||
|
<outlet property="delegate" destination="Z9b-nr-Xre" id="c45-KP-Wem"/>
|
||||||
|
</connections>
|
||||||
|
</tableView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="lTb-Q2-gfw"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="P8L-hv-BMJ" secondAttribute="bottom" id="Rmj-6p-gt5"/>
|
||||||
|
<constraint firstItem="P8L-hv-BMJ" firstAttribute="leading" secondItem="lTb-Q2-gfw" secondAttribute="leading" id="UYg-XA-NX0"/>
|
||||||
|
<constraint firstItem="P8L-hv-BMJ" firstAttribute="top" secondItem="lTb-Q2-gfw" secondAttribute="top" id="fgf-Du-DxG"/>
|
||||||
|
<constraint firstItem="P8L-hv-BMJ" firstAttribute="trailing" secondItem="lTb-Q2-gfw" secondAttribute="trailing" id="qh5-eJ-MUc"/>
|
||||||
|
</constraints>
|
||||||
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="notesTable" destination="P8L-hv-BMJ" id="97A-qf-on9"/>
|
||||||
|
</connections>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="InU-Kk-GEn" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="1880.8" y="2352.7736131934034"/>
|
||||||
|
</scene>
|
||||||
<!--Osago Controller-->
|
<!--Osago Controller-->
|
||||||
<scene sceneID="LgB-gR-z4l">
|
<scene sceneID="LgB-gR-z4l">
|
||||||
<objects>
|
<objects>
|
||||||
@ -100,14 +173,14 @@
|
|||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="EventCell" id="QIb-Hv-tvk" customClass="EventCell" customModule="AutoCat" customModuleProvider="target">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="EventCell" id="QIb-Hv-tvk" customClass="EventCell" customModule="AutoCat" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="28" width="375" height="127.5"/>
|
<rect key="frame" x="0.0" y="24.5" width="375" height="130.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="QIb-Hv-tvk" id="Ypt-ch-fGT">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="QIb-Hv-tvk" id="Ypt-ch-fGT">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="127.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="130.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="HP8-oO-yhP">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="HP8-oO-yhP">
|
||||||
<rect key="frame" x="8" y="8" width="359" height="111.5"/>
|
<rect key="frame" x="8" y="8" width="359" height="114.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xcQ-Wz-gJ0">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xcQ-Wz-gJ0">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="359" height="50"/>
|
<rect key="frame" x="0.0" y="0.0" width="359" height="50"/>
|
||||||
@ -116,7 +189,7 @@
|
|||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1tQ-zM-6T9">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1tQ-zM-6T9">
|
||||||
<rect key="frame" x="0.0" y="58" width="359" height="53.5"/>
|
<rect key="frame" x="0.0" y="58" width="359" height="56.5"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@ -196,23 +269,23 @@
|
|||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="VehicleCell" id="VEP-QD-i6y" customClass="VehicleCell" customModule="AutoCat" customModuleProvider="target">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="VehicleCell" id="VEP-QD-i6y" customClass="VehicleCell" customModule="AutoCat" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="28" width="375" height="85"/>
|
<rect key="frame" x="0.0" y="24.5" width="375" height="81.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="VEP-QD-i6y" id="8hH-8I-XLB">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="VEP-QD-i6y" id="8hH-8I-XLB">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="85"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="81.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="E0H-HY-s2L">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="E0H-HY-s2L">
|
||||||
<rect key="frame" x="8" y="8" width="359" height="69"/>
|
<rect key="frame" x="8" y="8" width="359" height="65.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Kia Optima" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AQY-7N-q8D">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Kia Optima" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AQY-7N-q8D">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="359" height="20.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="359" height="17"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" tag="8" contentMode="scaleToFill" alignment="bottom" translatesAutoresizingMaskIntoConstraints="NO" id="vMC-Bk-8rZ">
|
<stackView opaque="NO" tag="8" contentMode="scaleToFill" alignment="bottom" translatesAutoresizingMaskIntoConstraints="NO" id="vMC-Bk-8rZ">
|
||||||
<rect key="frame" x="0.0" y="28.5" width="359" height="40.5"/>
|
<rect key="frame" x="0.0" y="25" width="359" height="40.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cvf-vM-QnT" customClass="PlateView" customModule="AutoCat" customModuleProvider="target">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cvf-vM-QnT" customClass="PlateView" customModule="AutoCat" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.5" width="303" height="40"/>
|
<rect key="frame" x="0.0" y="0.5" width="303" height="40"/>
|
||||||
@ -222,16 +295,16 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="bottom" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="quG-e3-h5v">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="bottom" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="quG-e3-h5v">
|
||||||
<rect key="frame" x="303" y="0.5" width="56" height="40"/>
|
<rect key="frame" x="303" y="3.5" width="56" height="37"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="1.01.2021" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RPA-NR-0C6">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="1.01.2021" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="RPA-NR-0C6">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="56" height="16"/>
|
<rect key="frame" x="3.5" y="0.0" width="52.5" height="14.5"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aOM-gr-Yem">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aOM-gr-Yem">
|
||||||
<rect key="frame" x="23" y="24" width="33" height="16"/>
|
<rect key="frame" x="25" y="22.5" width="31" height="14.5"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
||||||
<color key="textColor" systemColor="tertiaryLabelColor"/>
|
<color key="textColor" systemColor="tertiaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@ -393,7 +466,7 @@
|
|||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="AudioRecordCell" id="mzE-bt-IiX" customClass="AudioRecordCell" customModule="AutoCat" customModuleProvider="target">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="AudioRecordCell" id="mzE-bt-IiX" customClass="AudioRecordCell" customModule="AutoCat" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="28" width="375" height="50.5"/>
|
<rect key="frame" x="0.0" y="24.5" width="375" height="50.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="mzE-bt-IiX" id="bqu-eN-DJP">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="mzE-bt-IiX" id="bqu-eN-DJP">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="50.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="50.5"/>
|
||||||
@ -487,10 +560,10 @@
|
|||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="Peq-Zq-kNT">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="16" translatesAutoresizingMaskIntoConstraints="NO" id="Peq-Zq-kNT">
|
||||||
<rect key="frame" x="62.5" y="68" width="250" height="114.5"/>
|
<rect key="frame" x="62.5" y="68" width="250" height="110.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="A001AA 777" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="8FU-Gy-4MU" customClass="SwiftMaskTextfield" customModule="AutoCat" customModuleProvider="target">
|
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="A001AA 777" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="8FU-Gy-4MU" customClass="SwiftMaskTextfield" customModule="AutoCat" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="250" height="50.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="250" height="46.5"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle0"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle0"/>
|
||||||
<textInputTraits key="textInputTraits" returnKeyType="done"/>
|
<textInputTraits key="textInputTraits" returnKeyType="done"/>
|
||||||
<connections>
|
<connections>
|
||||||
@ -499,7 +572,7 @@
|
|||||||
</connections>
|
</connections>
|
||||||
</textField>
|
</textField>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ync-fd-xQI" customClass="CustomButton" customModule="AutoCat" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ync-fd-xQI" customClass="CustomButton" customModule="AutoCat" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="66.5" width="250" height="48"/>
|
<rect key="frame" x="0.0" y="62.5" width="250" height="48"/>
|
||||||
<color key="backgroundColor" systemColor="systemBlueColor"/>
|
<color key="backgroundColor" systemColor="systemBlueColor"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstAttribute="height" constant="48" id="YE0-lL-OwL"/>
|
<constraint firstAttribute="height" constant="48" id="YE0-lL-OwL"/>
|
||||||
@ -518,27 +591,27 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</stackView>
|
</stackView>
|
||||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="onDrag" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="JKr-UE-x8f">
|
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="onDrag" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="JKr-UE-x8f">
|
||||||
<rect key="frame" x="0.0" y="206.5" width="375" height="411.5"/>
|
<rect key="frame" x="0.0" y="202.5" width="375" height="415.5"/>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
<prototypes>
|
<prototypes>
|
||||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="VehicleCell" id="3ON-lr-UlV" customClass="VehicleCell" customModule="AutoCat" customModuleProvider="target">
|
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="VehicleCell" id="3ON-lr-UlV" customClass="VehicleCell" customModule="AutoCat" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="28" width="375" height="85"/>
|
<rect key="frame" x="0.0" y="24.5" width="375" height="81.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="3ON-lr-UlV" id="IGw-UK-ebp">
|
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="3ON-lr-UlV" id="IGw-UK-ebp">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="375" height="85"/>
|
<rect key="frame" x="0.0" y="0.0" width="375" height="81.5"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="6IZ-gM-D28">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="6IZ-gM-D28">
|
||||||
<rect key="frame" x="8" y="8" width="359" height="69"/>
|
<rect key="frame" x="8" y="8" width="359" height="65.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Kia Optima" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h3N-1o-J20">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Kia Optima" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h3N-1o-J20">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="359" height="20.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="359" height="17"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" alignment="bottom" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="nX1-KA-jqp">
|
<stackView opaque="NO" contentMode="scaleToFill" alignment="bottom" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="nX1-KA-jqp">
|
||||||
<rect key="frame" x="0.0" y="28.5" width="359" height="40.5"/>
|
<rect key="frame" x="0.0" y="25" width="359" height="40.5"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VHX-o0-3BP" customClass="PlateView" customModule="AutoCat" customModuleProvider="target">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="VHX-o0-3BP" customClass="PlateView" customModule="AutoCat" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="0.5" width="295" height="40"/>
|
<rect key="frame" x="0.0" y="0.5" width="295" height="40"/>
|
||||||
@ -548,16 +621,16 @@
|
|||||||
</constraints>
|
</constraints>
|
||||||
</view>
|
</view>
|
||||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="bottom" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="ApN-fV-Qw4">
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="bottom" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="ApN-fV-Qw4">
|
||||||
<rect key="frame" x="303" y="0.5" width="56" height="40"/>
|
<rect key="frame" x="303" y="3.5" width="56" height="37"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="1.01.2021" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rKr-3e-WYb">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="1.01.2021" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="rKr-3e-WYb">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="56" height="16"/>
|
<rect key="frame" x="3.5" y="0.0" width="52.5" height="14.5"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor"/>
|
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UOb-db-Sty">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UOb-db-Sty">
|
||||||
<rect key="frame" x="23" y="24" width="33" height="16"/>
|
<rect key="frame" x="25" y="22.5" width="31" height="14.5"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleFootnote"/>
|
||||||
<color key="textColor" systemColor="tertiaryLabelColor"/>
|
<color key="textColor" systemColor="tertiaryLabelColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
@ -855,6 +928,7 @@
|
|||||||
<tabBarItem key="tabBarItem" title="Check" image="check" landscapeImage="check-compact" id="QJd-35-4OB"/>
|
<tabBarItem key="tabBarItem" title="Check" image="check" landscapeImage="check-compact" id="QJd-35-4OB"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="AAc-4d-GNh">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="AAc-4d-GNh">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<nil name="viewControllers"/>
|
<nil name="viewControllers"/>
|
||||||
@ -873,6 +947,7 @@
|
|||||||
<tabBarItem key="tabBarItem" title="Search" image="search" landscapeImage="search-compact" id="gDG-z8-R0t"/>
|
<tabBarItem key="tabBarItem" title="Search" image="search" landscapeImage="search-compact" id="gDG-z8-R0t"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="vdY-9n-hjX">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="vdY-9n-hjX">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<nil name="viewControllers"/>
|
<nil name="viewControllers"/>
|
||||||
@ -890,6 +965,7 @@
|
|||||||
<navigationController storyboardIdentifier="ReportNavController" automaticallyAdjustsScrollViewInsets="NO" id="Km4-b6-SGW" sceneMemberID="viewController">
|
<navigationController storyboardIdentifier="ReportNavController" automaticallyAdjustsScrollViewInsets="NO" id="Km4-b6-SGW" sceneMemberID="viewController">
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="JaO-tp-k6N">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="JaO-tp-k6N">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<nil name="viewControllers"/>
|
<nil name="viewControllers"/>
|
||||||
@ -908,6 +984,7 @@
|
|||||||
<tabBarItem key="tabBarItem" title="Records" image="record" landscapeImage="record-compact" id="lxF-EY-z8V"/>
|
<tabBarItem key="tabBarItem" title="Records" image="record" landscapeImage="record-compact" id="lxF-EY-z8V"/>
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="8YG-pw-LE7">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="8YG-pw-LE7">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<nil name="viewControllers"/>
|
<nil name="viewControllers"/>
|
||||||
@ -925,6 +1002,7 @@
|
|||||||
<navigationController storyboardIdentifier="GlobalEventsNavigation" automaticallyAdjustsScrollViewInsets="NO" id="HWa-Ea-ZKD" sceneMemberID="viewController">
|
<navigationController storyboardIdentifier="GlobalEventsNavigation" automaticallyAdjustsScrollViewInsets="NO" id="HWa-Ea-ZKD" sceneMemberID="viewController">
|
||||||
<toolbarItems/>
|
<toolbarItems/>
|
||||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="REm-5j-xeL">
|
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="REm-5j-xeL">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<nil name="viewControllers"/>
|
<nil name="viewControllers"/>
|
||||||
|
|||||||
21
AutoCat/Cells/VehicleNoteCell.swift
Normal file
21
AutoCat/Cells/VehicleNoteCell.swift
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import UIKit
|
||||||
|
import AutoCatCore
|
||||||
|
|
||||||
|
class VehicleNoteCell: UITableViewCell {
|
||||||
|
|
||||||
|
@IBOutlet weak var noteText: UILabel!
|
||||||
|
@IBOutlet weak var date: UILabel!
|
||||||
|
|
||||||
|
private var dateFormatter = DateFormatter()
|
||||||
|
|
||||||
|
override func awakeFromNib() {
|
||||||
|
super.awakeFromNib()
|
||||||
|
self.dateFormatter.dateStyle = .medium
|
||||||
|
self.dateFormatter.timeStyle = .medium
|
||||||
|
}
|
||||||
|
|
||||||
|
func configure(with note: VehicleNote) {
|
||||||
|
self.noteText.text = note.text
|
||||||
|
self.date.text = self.dateFormatter.string(from: Date(timeIntervalSince1970: note.date))
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -10,7 +10,6 @@ import AutoCatCore
|
|||||||
enum EventAction: Equatable {
|
enum EventAction: Equatable {
|
||||||
case doNotSend
|
case doNotSend
|
||||||
case receiveAndSend
|
case receiveAndSend
|
||||||
case sendSpecific(VehicleEvent)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum HistoryFilter {
|
enum HistoryFilter {
|
||||||
@ -24,7 +23,6 @@ extension String.StringInterpolation {
|
|||||||
switch value {
|
switch value {
|
||||||
case .doNotSend: appendLiteral("do not send"); break
|
case .doNotSend: appendLiteral("do not send"); break
|
||||||
case .receiveAndSend: appendLiteral("receive and send"); break
|
case .receiveAndSend: appendLiteral("receive and send"); break
|
||||||
case .sendSpecific(let event): appendLiteral("send specific (\(event.latitude), \(event.longitude)"); break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -91,11 +89,13 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
|||||||
case .checkNumber(let number, let event):
|
case .checkNumber(let number, let event):
|
||||||
ad.quickAction = .none
|
ad.quickAction = .none
|
||||||
var action: EventAction = .receiveAndSend
|
var action: EventAction = .receiveAndSend
|
||||||
|
var events: [VehicleEvent] = []
|
||||||
if let event = event {
|
if let event = event {
|
||||||
action = .sendSpecific(event)
|
events = [event]
|
||||||
|
action = .doNotSend
|
||||||
}
|
}
|
||||||
HUD.show(.progress)
|
HUD.show(.progress)
|
||||||
self.check(number: number, action: action).subscribe { (vehicle, errors) in
|
self.check(number: number, action: action, notes: [], events: events).subscribe { (vehicle, errors) in
|
||||||
if !vehicle.unrecognized {
|
if !vehicle.unrecognized {
|
||||||
self.updateDetailController(with: vehicle)
|
self.updateDetailController(with: vehicle)
|
||||||
}
|
}
|
||||||
@ -214,7 +214,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
|||||||
self.check.isEnabled = false
|
self.check.isEnabled = false
|
||||||
|
|
||||||
HUD.show(.progress)
|
HUD.show(.progress)
|
||||||
self.check(number: numberNormalized, action: .receiveAndSend).subscribe { (vehicle, errors) in
|
self.check(number: numberNormalized, action: .receiveAndSend, notes: [], events: []).subscribe { (vehicle, errors) in
|
||||||
if !vehicle.unrecognized {
|
if !vehicle.unrecognized {
|
||||||
self.updateDetailController(with: vehicle)
|
self.updateDetailController(with: vehicle)
|
||||||
}
|
}
|
||||||
@ -317,13 +317,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
|||||||
|
|
||||||
func update(vehicle: Vehicle) {
|
func update(vehicle: Vehicle) {
|
||||||
HUD.show(.progress)
|
HUD.show(.progress)
|
||||||
|
self.check(number: vehicle.getNumber(), action: .doNotSend, notes: Array(vehicle.notes), events: Array(vehicle.events), force: true).subscribe { (vehicle, errors) in
|
||||||
var eventAction: EventAction = .doNotSend
|
|
||||||
if vehicle.unrecognized, let savedEvent = vehicle.events.first {
|
|
||||||
eventAction = .sendSpecific(savedEvent)
|
|
||||||
}
|
|
||||||
|
|
||||||
self.check(number: vehicle.getNumber(), action: eventAction, force: true).subscribe { (vehicle, errors) in
|
|
||||||
if !vehicle.unrecognized {
|
if !vehicle.unrecognized {
|
||||||
self.updateDetailController(with: vehicle)
|
self.updateDetailController(with: vehicle)
|
||||||
}
|
}
|
||||||
@ -359,10 +353,6 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getEvent(for action: EventAction) -> Single<VehicleEvent> {
|
func getEvent(for action: EventAction) -> Single<VehicleEvent> {
|
||||||
if case .sendSpecific(let event) = action {
|
|
||||||
return Single.just(event)
|
|
||||||
}
|
|
||||||
|
|
||||||
if let event = RxLocationManager.lastEvent, (Date().timeIntervalSince1970 - event.date) < 100 {
|
if let event = RxLocationManager.lastEvent, (Date().timeIntervalSince1970 - event.date) < 100 {
|
||||||
return Single<VehicleEvent>.just(event)
|
return Single<VehicleEvent>.just(event)
|
||||||
} else {
|
} else {
|
||||||
@ -370,7 +360,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func check(number: String, action: EventAction, force: Bool = false) -> Single<(vehicle: Vehicle, errors: [Error])> {
|
func check(number: String, action: EventAction, notes: [VehicleNote], events: [VehicleEvent], force: Bool = false) -> Single<(vehicle: Vehicle, errors: [Error])> {
|
||||||
var eventSingle: Single<(event: VehicleEvent?, error: Error?)> = .just((event: nil, error: nil))
|
var eventSingle: Single<(event: VehicleEvent?, error: Error?)> = .just((event: nil, error: nil))
|
||||||
if action != .doNotSend {
|
if action != .doNotSend {
|
||||||
eventSingle = self.getEvent(for: action)
|
eventSingle = self.getEvent(for: action)
|
||||||
@ -380,7 +370,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
|||||||
.catchError { .just((event: nil, error: $0)) }
|
.catchError { .just((event: nil, error: $0)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
let checkSingle = Api.checkVehicle(by: number, force: force)
|
let checkSingle = Api.checkVehicle(by: number, notes: notes, events: events, force: force)
|
||||||
.observeOn(MainScheduler.instance)
|
.observeOn(MainScheduler.instance)
|
||||||
.map { (vehicle: Vehicle) -> (vehicle: Vehicle, error: Error?) in
|
.map { (vehicle: Vehicle) -> (vehicle: Vehicle, error: Error?) in
|
||||||
try self.save(vehicle: vehicle)
|
try self.save(vehicle: vehicle)
|
||||||
|
|||||||
@ -198,19 +198,15 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele
|
|||||||
}
|
}
|
||||||
|
|
||||||
let event = vehicle.events[index]
|
let event = vehicle.events[index]
|
||||||
if let eventId = event.id {
|
HUD.show(.progress)
|
||||||
HUD.show(.progress)
|
Api.remove(event: event.id).observeOn(MainScheduler.instance).subscribe(onSuccess: { vehicle in
|
||||||
Api.remove(event: eventId).observeOn(MainScheduler.instance).subscribe(onSuccess: { vehicle in
|
let result = self.update(vehicle: vehicle)
|
||||||
let result = self.update(vehicle: vehicle)
|
completion?(result)
|
||||||
completion?(result)
|
}, onError: { error in
|
||||||
}, onError: { error in
|
completion?(false)
|
||||||
completion?(false)
|
HUD.show(error: error)
|
||||||
HUD.show(error: error)
|
print(error)
|
||||||
print(error)
|
}).disposed(by: self.bag)
|
||||||
}).disposed(by: self.bag)
|
|
||||||
} else {
|
|
||||||
self.showAlert(title: "Error", message: "Event ID is not found. Please try to update vehicle record, containing this event.")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func editEvent(index: Int) {
|
func editEvent(index: Int) {
|
||||||
|
|||||||
268
AutoCat/Controllers/NotesController.swift
Normal file
268
AutoCat/Controllers/NotesController.swift
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
import UIKit
|
||||||
|
import AutoCatCore
|
||||||
|
import MobileCoreServices
|
||||||
|
import PKHUD
|
||||||
|
import RxSwift
|
||||||
|
import ExceptionCatcher
|
||||||
|
import RealmSwift
|
||||||
|
|
||||||
|
class NotesController: UIViewController, UITableViewDataSource, UITableViewDelegate {
|
||||||
|
|
||||||
|
@IBOutlet weak var notesTable: UITableView!
|
||||||
|
|
||||||
|
private var textView = UITextView()
|
||||||
|
private var bag = DisposeBag()
|
||||||
|
|
||||||
|
var vehicle: Vehicle? {
|
||||||
|
didSet {
|
||||||
|
if self.isViewLoaded {
|
||||||
|
self.notesTable.reloadData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
self.title = NSLocalizedString("Notes", comment: "")
|
||||||
|
self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addNote(_:)))
|
||||||
|
self.notesTable.reloadData()
|
||||||
|
self.hideKeyboardWhenTappedAround()
|
||||||
|
}
|
||||||
|
|
||||||
|
@discardableResult
|
||||||
|
func update(vehicle: Vehicle) -> Bool {
|
||||||
|
do {
|
||||||
|
if let v = self.vehicle, let realm = v.realm, !v.isFrozen {
|
||||||
|
try ExceptionCatcher.catch {
|
||||||
|
try realm.write {
|
||||||
|
realm.add(vehicle, update: .all)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self.vehicle?.notes.removeAll()
|
||||||
|
self.vehicle?.notes.append(objectsIn: vehicle.notes)
|
||||||
|
}
|
||||||
|
self.notesTable.reloadData()
|
||||||
|
return true
|
||||||
|
} catch {
|
||||||
|
self.show(error: error)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - UITableViewDataSource
|
||||||
|
|
||||||
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
return self.vehicle?.notes.count ?? 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
|
guard let cell = tableView.dequeueReusableCell(withIdentifier: "VehicleNoteCell", for: indexPath) as? VehicleNoteCell else {
|
||||||
|
return UITableViewCell()
|
||||||
|
}
|
||||||
|
|
||||||
|
if let note = self.vehicle?.notes[indexPath.row] {
|
||||||
|
cell.configure(with: note)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - UITableViewDelegate
|
||||||
|
|
||||||
|
func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
|
||||||
|
return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in
|
||||||
|
let copy = UIAction(title: NSLocalizedString("Copy", comment: ""), image: UIImage(systemName: "doc.on.doc")) { action in
|
||||||
|
self.copyNote(index: indexPath.row)
|
||||||
|
}
|
||||||
|
|
||||||
|
let edit = UIAction(title: NSLocalizedString("Edit", comment: ""), image: UIImage(systemName: "pencil")) { action in
|
||||||
|
self.editNote(index: indexPath.row)
|
||||||
|
}
|
||||||
|
|
||||||
|
let delete = UIAction(title: NSLocalizedString("Delete", comment: ""), image: UIImage(systemName: "trash"), attributes: .destructive) { action in
|
||||||
|
self.deleteNote(index: indexPath.row)
|
||||||
|
}
|
||||||
|
|
||||||
|
return UIMenu(title: NSLocalizedString("Actions", comment: ""), children: [copy, edit, delete])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
|
||||||
|
let copy = UIContextualAction(style: .normal, title: NSLocalizedString("Copy", comment: "")) { action, view, completion in
|
||||||
|
self.copyNote(index: indexPath.row)
|
||||||
|
completion(true)
|
||||||
|
}
|
||||||
|
copy.image = UIImage(systemName: "doc.on.doc")
|
||||||
|
copy.backgroundColor = .systemBlue
|
||||||
|
|
||||||
|
let delete = UIContextualAction(style: .destructive, title: NSLocalizedString("Delete", comment: "")) { action, view, completion in
|
||||||
|
self.deleteNote(index: indexPath.row, completion: completion)
|
||||||
|
}
|
||||||
|
delete.image = UIImage(systemName: "trash")
|
||||||
|
|
||||||
|
let edit = UIContextualAction(style: .normal, title: NSLocalizedString("Edit", comment: "")) { action, view, completion in
|
||||||
|
self.editNote(index: indexPath.row)
|
||||||
|
completion(true)
|
||||||
|
}
|
||||||
|
edit.image = UIImage(systemName: "pencil")
|
||||||
|
edit.backgroundColor = .systemBlue
|
||||||
|
|
||||||
|
let configuration = UISwipeActionsConfiguration(actions: [delete, edit, copy])
|
||||||
|
configuration.performsFirstActionWithFullSwipe = false
|
||||||
|
return configuration
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Actions
|
||||||
|
|
||||||
|
@objc func addNote(_ sender: UIBarButtonItem) {
|
||||||
|
guard let vehicle = self.vehicle else {
|
||||||
|
HUD.flash(.labeledError(title: nil, subtitle: "Unknown vehicle"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
self.showAddNoteAlert(text: nil) { noteText in
|
||||||
|
let note = VehicleNote(text: noteText)
|
||||||
|
|
||||||
|
if vehicle.unrecognized {
|
||||||
|
if let realm = vehicle.realm {
|
||||||
|
try? realm.write {
|
||||||
|
vehicle.notes.append(note)
|
||||||
|
vehicle.updatedDate = Date().timeIntervalSince1970
|
||||||
|
}
|
||||||
|
self.notesTable.reloadData()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
HUD.show(.progress)
|
||||||
|
Api.add(notes: [note], to: vehicle.getNumber())
|
||||||
|
.observeOn(MainScheduler.instance)
|
||||||
|
.subscribe(onSuccess: {
|
||||||
|
HUD.hide()
|
||||||
|
self.update(vehicle: $0)
|
||||||
|
}, onError: { error in
|
||||||
|
HUD.hide()
|
||||||
|
self.show(error: error)
|
||||||
|
})
|
||||||
|
.disposed(by: self.bag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyNote(index: Int) {
|
||||||
|
guard let vehicle = self.vehicle else {
|
||||||
|
HUD.flash(.labeledError(title: nil, subtitle: "Unknown vehicle"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
UIPasteboard.general.setValue(vehicle.notes[index].text, forPasteboardType: kUTTypePlainText as String)
|
||||||
|
}
|
||||||
|
|
||||||
|
func editNote(index: Int) {
|
||||||
|
guard let vehicle = self.vehicle else {
|
||||||
|
HUD.flash(.labeledError(title: nil, subtitle: "Unknown vehicle"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let note = vehicle.notes[index]
|
||||||
|
self.showAddNoteAlert(text: note.text) { noteText in
|
||||||
|
|
||||||
|
if vehicle.unrecognized {
|
||||||
|
if let realm = vehicle.realm {
|
||||||
|
try? realm.write {
|
||||||
|
note.text = noteText
|
||||||
|
vehicle.updatedDate = Date().timeIntervalSince1970
|
||||||
|
}
|
||||||
|
self.notesTable.reloadData()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
HUD.show(.progress)
|
||||||
|
let newNote = note.clone()
|
||||||
|
newNote.text = noteText
|
||||||
|
Api.edit(note: newNote)
|
||||||
|
.observeOn(MainScheduler.instance)
|
||||||
|
.subscribe(onSuccess: {
|
||||||
|
HUD.hide()
|
||||||
|
self.update(vehicle: $0)
|
||||||
|
}, onError: { error in
|
||||||
|
HUD.hide()
|
||||||
|
self.show(error: error)
|
||||||
|
})
|
||||||
|
.disposed(by: self.bag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func deleteNote(index: Int, completion: ((Bool) -> Void)? = nil) {
|
||||||
|
guard let vehicle = self.vehicle else {
|
||||||
|
HUD.flash(.labeledError(title: nil, subtitle: "Unknown vehicle"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let note = vehicle.notes[index]
|
||||||
|
|
||||||
|
if vehicle.unrecognized {
|
||||||
|
if let realm = vehicle.realm {
|
||||||
|
try? realm.write {
|
||||||
|
vehicle.notes.remove(at: index)
|
||||||
|
vehicle.updatedDate = Date().timeIntervalSince1970
|
||||||
|
realm.delete(note)
|
||||||
|
}
|
||||||
|
self.notesTable.reloadData()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
HUD.show(.progress)
|
||||||
|
Api.remove(note: note.id)
|
||||||
|
.observeOn(MainScheduler.instance)
|
||||||
|
.subscribe(onSuccess: { vehicle in
|
||||||
|
HUD.hide()
|
||||||
|
let result = self.update(vehicle: vehicle)
|
||||||
|
completion?(result)
|
||||||
|
}, onError: { error in
|
||||||
|
completion?(false)
|
||||||
|
HUD.hide()
|
||||||
|
self.show(error: error)
|
||||||
|
print(error)
|
||||||
|
}).disposed(by: self.bag)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Utils
|
||||||
|
|
||||||
|
func showAddNoteAlert(text: String?, completion: @escaping (String) -> Void) {
|
||||||
|
let alertController = UIAlertController(title: NSLocalizedString("New note", comment: ""), message: nil, preferredStyle: .alert)
|
||||||
|
|
||||||
|
let cancelAction = UIAlertAction.init(title: NSLocalizedString("Cancel", comment: ""), style: .default)
|
||||||
|
alertController.addAction(cancelAction)
|
||||||
|
|
||||||
|
let saveAction = UIAlertAction(title: NSLocalizedString("Done", comment: ""), style: .default) { (action) in
|
||||||
|
let enteredText = self.textView.text ?? ""
|
||||||
|
completion(enteredText)
|
||||||
|
}
|
||||||
|
alertController.addAction(saveAction)
|
||||||
|
self.textView = UITextView()
|
||||||
|
self.textView.text = text
|
||||||
|
self.textView.addDoneButton(title: NSLocalizedString("Done", comment: ""), target: self, selector: #selector(tapDone(sender:)))
|
||||||
|
self.textView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
alertController.view.addSubview(self.textView)
|
||||||
|
|
||||||
|
NSLayoutConstraint.activate([
|
||||||
|
self.textView.topAnchor.constraint(equalTo: alertController.view.topAnchor, constant: 60),
|
||||||
|
self.textView.bottomAnchor.constraint(equalTo: alertController.view.bottomAnchor, constant: -60),
|
||||||
|
self.textView.leadingAnchor.constraint(equalTo: alertController.view.leadingAnchor, constant: 8),
|
||||||
|
self.textView.trailingAnchor.constraint(equalTo: alertController.view.trailingAnchor, constant: -8),
|
||||||
|
self.textView.heightAnchor.constraint(greaterThanOrEqualToConstant: 100)
|
||||||
|
])
|
||||||
|
|
||||||
|
self.present(alertController, animated: true) {
|
||||||
|
self.textView.becomeFirstResponder()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func tapDone(sender: Any) {
|
||||||
|
self.textView.endEditing(true)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -127,6 +127,17 @@ class ReportController: FormViewController, MediaBrowserViewControllerDataSource
|
|||||||
self.navigationController?.pushViewController(controller, animated: true)
|
self.navigationController?.pushViewController(controller, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<< LabelRow("Notes") { row in
|
||||||
|
row.title = NSLocalizedString("Notes", comment: "")
|
||||||
|
}
|
||||||
|
.cellUpdate { cell, _ in cell.accessoryType = .disclosureIndicator }
|
||||||
|
.onCellSelection { _, row in
|
||||||
|
let sb = UIStoryboard(name: "Main", bundle: nil)
|
||||||
|
let controller = sb.instantiateViewController(identifier: "NotesController") as NotesController
|
||||||
|
controller.vehicle = self.vehicle
|
||||||
|
self.navigationController?.pushViewController(controller, animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
if Settings.shared.showDebugInfo {
|
if Settings.shared.showDebugInfo {
|
||||||
self.form +++ Section(NSLocalizedString("Debug info", comment: "noun"))
|
self.form +++ Section(NSLocalizedString("Debug info", comment: "noun"))
|
||||||
<<< SourceStatusRow("DebugAutocod") { $0.title = NSLocalizedString("Autocod", comment: "") }
|
<<< SourceStatusRow("DebugAutocod") { $0.title = NSLocalizedString("Autocod", comment: "") }
|
||||||
@ -178,6 +189,7 @@ class ReportController: FormViewController, MediaBrowserViewControllerDataSource
|
|||||||
self.update(row: "Owners", with: String(self.vehicle?.ownershipPeriods.count ?? 0))
|
self.update(row: "Owners", with: String(self.vehicle?.ownershipPeriods.count ?? 0))
|
||||||
self.update(row: "Photos", with: String(self.vehicle?.photos.count ?? 0))
|
self.update(row: "Photos", with: String(self.vehicle?.photos.count ?? 0))
|
||||||
self.update(row: "Ads", with: String(self.vehicle?.ads.count ?? 0))
|
self.update(row: "Ads", with: String(self.vehicle?.ads.count ?? 0))
|
||||||
|
self.update(row: "Notes", with: String(self.vehicle?.notes.count ?? 0))
|
||||||
|
|
||||||
if let dInfo = self.vehicle?.debugInfo {
|
if let dInfo = self.vehicle?.debugInfo {
|
||||||
self.update(sourceStatusRow: "DebugAutocod", with: dInfo.autocod)
|
self.update(sourceStatusRow: "DebugAutocod", with: dInfo.autocod)
|
||||||
|
|||||||
@ -158,7 +158,7 @@ class SearchController: UIViewController, UISearchResultsUpdating, UITableViewDe
|
|||||||
|
|
||||||
func update(vehicle: Vehicle, at indexPath: IndexPath) {
|
func update(vehicle: Vehicle, at indexPath: IndexPath) {
|
||||||
HUD.show(.progress)
|
HUD.show(.progress)
|
||||||
Api.checkVehicle(by: vehicle.getNumber(), force: true).observeOn(MainScheduler.instance).subscribe { newVehicle in
|
Api.checkVehicle(by: vehicle.getNumber(), notes: Array(vehicle.notes), events: [], force: true).observeOn(MainScheduler.instance).subscribe { newVehicle in
|
||||||
HUD.hide()
|
HUD.hide()
|
||||||
do {
|
do {
|
||||||
let realm = try Realm()
|
let realm = try Realm()
|
||||||
|
|||||||
@ -3,6 +3,11 @@ import PKHUD
|
|||||||
import AutoCatCore
|
import AutoCatCore
|
||||||
|
|
||||||
extension UIViewController {
|
extension UIViewController {
|
||||||
|
|
||||||
|
func show(error: Error) {
|
||||||
|
self.show(error: error, animated: true, completion: nil)
|
||||||
|
}
|
||||||
|
|
||||||
func show(error: Error, animated: Bool = true, completion: (() -> Void)? = nil) {
|
func show(error: Error, animated: Bool = true, completion: (() -> Void)? = nil) {
|
||||||
let msg = (error as NSError).displayMessage
|
let msg = (error as NSError).displayMessage
|
||||||
let alert = UIAlertController(title: msg.title, message: msg.body, preferredStyle: .alert)
|
let alert = UIAlertController(title: msg.title, message: msg.body, preferredStyle: .alert)
|
||||||
|
|||||||
16
AutoCat/Extensions/TextView.swift
Normal file
16
AutoCat/Extensions/TextView.swift
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UITextView {
|
||||||
|
|
||||||
|
func addDoneButton(title: String, target: Any, selector: Selector) {
|
||||||
|
|
||||||
|
let toolBar = UIToolbar(frame: CGRect(x: 0.0,
|
||||||
|
y: 0.0,
|
||||||
|
width: UIScreen.main.bounds.size.width,
|
||||||
|
height: 44.0))
|
||||||
|
let flexible = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
|
||||||
|
let barButton = UIBarButtonItem(title: title, style: .plain, target: target, action: selector)
|
||||||
|
toolBar.setItems([flexible, barButton], animated: false)
|
||||||
|
self.inputAccessoryView = toolBar
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -16,9 +16,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Added by" = "Добавлено";
|
"Added by" = "Добавлено";
|
||||||
|
|
||||||
/* sort by added time */
|
|
||||||
"added time" = "времени добавления";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Added time" = "Время добавления";
|
"Added time" = "Время добавления";
|
||||||
|
|
||||||
@ -31,12 +28,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Alternative order" = "Альтернативный порядок";
|
"Alternative order" = "Альтернативный порядок";
|
||||||
|
|
||||||
/* Added by */
|
|
||||||
"Anyone" = "Кем угодно";
|
|
||||||
|
|
||||||
/* Added by */
|
|
||||||
"Anyone but me" = "Кем угодно кроме меня";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"As link" = "В виде ссылки";
|
"As link" = "В виде ссылки";
|
||||||
|
|
||||||
@ -46,9 +37,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"As text and photos" = "В виде текста и фотографий";
|
"As text and photos" = "В виде текста и фотографий";
|
||||||
|
|
||||||
/* sort order */
|
|
||||||
"ascending" = "по возростанию";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"AutoCat Account" = "Аккаунт в АвтоКот";
|
"AutoCat Account" = "Аккаунт в АвтоКот";
|
||||||
|
|
||||||
@ -127,9 +115,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Delete" = "Удалить";
|
"Delete" = "Удалить";
|
||||||
|
|
||||||
/* sort order */
|
|
||||||
"descending" = "по убыванию";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Description" = "Описание";
|
"Description" = "Описание";
|
||||||
|
|
||||||
@ -181,9 +166,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"If enabled, app will try to recognize shortened plate numbers (without region) and add default region" = "Если опция включена, приложение попытается распознавать укороченные номера (без региона) и добавлять регион по умолчанию";
|
"If enabled, app will try to recognize shortened plate numbers (without region) and add default region" = "Если опция включена, приложение попытается распознавать укороченные номера (без региона) и добавлять регион по умолчанию";
|
||||||
|
|
||||||
/* Owner type */
|
|
||||||
"individual" = "Физ. лицо";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Insurance organization name" = "Наименование страховой организации";
|
"Insurance organization name" = "Наименование страховой организации";
|
||||||
|
|
||||||
@ -196,9 +178,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Left" = "Левый";
|
"Left" = "Левый";
|
||||||
|
|
||||||
/* Owner type */
|
|
||||||
"legal" = "Юр. лицо";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Link" = "Ссылка";
|
"Link" = "Ссылка";
|
||||||
|
|
||||||
@ -211,9 +190,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Main filters" = "Основные фильтры";
|
"Main filters" = "Основные фильтры";
|
||||||
|
|
||||||
/* Added by */
|
|
||||||
"Me" = "Мной";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Mileage" = "Пробег";
|
"Mileage" = "Пробег";
|
||||||
|
|
||||||
@ -223,12 +199,18 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"More actions" = "Больше действий";
|
"More actions" = "Больше действий";
|
||||||
|
|
||||||
|
/* No comment provided by engineer. */
|
||||||
|
"New note" = "Новая заметка";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"No" = "Нет";
|
"No" = "Нет";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Nomerogram" = "Номерограм";
|
"Nomerogram" = "Номерограм";
|
||||||
|
|
||||||
|
/* No comment provided by engineer. */
|
||||||
|
"Notes" = "Заметки";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"now" = "Настоящий момент";
|
"now" = "Настоящий момент";
|
||||||
|
|
||||||
@ -361,9 +343,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"To" = "По";
|
"To" = "По";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
|
||||||
"Today" = "Сегодня";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Unrecognized" = "Нераспознанные";
|
"Unrecognized" = "Нераспознанные";
|
||||||
|
|
||||||
@ -373,9 +352,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Update time" = "Время обновления";
|
"Update time" = "Время обновления";
|
||||||
|
|
||||||
/* sort by updated time */
|
|
||||||
"updated time" = "времени обновления";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Vehicle region" = "Регион регистрации ТС";
|
"Vehicle region" = "Регион регистрации ТС";
|
||||||
|
|
||||||
@ -409,9 +385,6 @@
|
|||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"Yes" = "Да";
|
"Yes" = "Да";
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
|
||||||
"Yesterday" = "Вчера";
|
|
||||||
|
|
||||||
/* No comment provided by engineer. */
|
/* No comment provided by engineer. */
|
||||||
"You are currently signed in with email %@. It will help to gather more data about vehicles." = "Сейчас вы залогинены с почтой %@. Это поможет собирать больше данных для отчета";
|
"You are currently signed in with email %@. It will help to gather more data about vehicles." = "Сейчас вы залогинены с почтой %@. Это поможет собирать больше данных для отчета";
|
||||||
|
|
||||||
|
|||||||
@ -183,6 +183,7 @@ public class Vehicle: Object, Decodable, Identifiable, Differentiable, Cloneable
|
|||||||
public var events = List<VehicleEvent>()
|
public var events = List<VehicleEvent>()
|
||||||
public var osagoContracts = List<Osago>()
|
public var osagoContracts = List<Osago>()
|
||||||
public var ads = List<VehicleAd>()
|
public var ads = List<VehicleAd>()
|
||||||
|
public var notes = List<VehicleNote>()
|
||||||
@objc public dynamic var debugInfo: DebugInfo?
|
@objc public dynamic var debugInfo: DebugInfo?
|
||||||
|
|
||||||
lazy var formatter: DateFormatter = {
|
lazy var formatter: DateFormatter = {
|
||||||
@ -223,6 +224,7 @@ public class Vehicle: Object, Decodable, Identifiable, Differentiable, Cloneable
|
|||||||
case events
|
case events
|
||||||
case osagoContracts
|
case osagoContracts
|
||||||
case ads
|
case ads
|
||||||
|
case notes
|
||||||
case debugInfo
|
case debugInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,6 +268,10 @@ public class Vehicle: Object, Decodable, Identifiable, Differentiable, Cloneable
|
|||||||
if let ads = try container.decodeIfPresent([VehicleAd].self, forKey: .ads) {
|
if let ads = try container.decodeIfPresent([VehicleAd].self, forKey: .ads) {
|
||||||
self.ads.append(objectsIn: ads)
|
self.ads.append(objectsIn: ads)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let notes = try container.decodeIfPresent([VehicleNote].self, forKey: .notes) {
|
||||||
|
self.notes.append(objectsIn: notes)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
required init() {
|
required init() {
|
||||||
@ -342,6 +348,10 @@ public class Vehicle: Object, Decodable, Identifiable, Differentiable, Cloneable
|
|||||||
let ads = List<VehicleAd>()
|
let ads = List<VehicleAd>()
|
||||||
ads.append(objectsIn: copy.ads.map { $0.clone() })
|
ads.append(objectsIn: copy.ads.map { $0.clone() })
|
||||||
self.ads = ads
|
self.ads = ads
|
||||||
|
|
||||||
|
let notes = List<VehicleNote>()
|
||||||
|
notes.append(objectsIn: copy.notes.map { $0.clone() })
|
||||||
|
self.notes = notes
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Exportable
|
// MARK: - Exportable
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import RxSwift
|
|||||||
import CoreLocation
|
import CoreLocation
|
||||||
|
|
||||||
public class VehicleEvent: Object, Codable, Cloneable {
|
public class VehicleEvent: Object, Codable, Cloneable {
|
||||||
@objc public dynamic var id: String?
|
@objc public dynamic var id: String = UUID().uuidString
|
||||||
@objc public dynamic var date: TimeInterval = Date().timeIntervalSince1970
|
@objc public dynamic var date: TimeInterval = Date().timeIntervalSince1970
|
||||||
@objc public dynamic var latitude: Double = 0
|
@objc public dynamic var latitude: Double = 0
|
||||||
@objc public dynamic var longitude: Double = 0
|
@objc public dynamic var longitude: Double = 0
|
||||||
@ -44,6 +44,10 @@ public class VehicleEvent: Object, Codable, Cloneable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override static func primaryKey() -> String? {
|
||||||
|
return "id"
|
||||||
|
}
|
||||||
|
|
||||||
public override static func ignoredProperties() -> [String] {
|
public override static func ignoredProperties() -> [String] {
|
||||||
return ["plateNumber"]
|
return ["plateNumber"]
|
||||||
}
|
}
|
||||||
|
|||||||
31
AutoCatCore/Models/VehicleNote.swift
Normal file
31
AutoCatCore/Models/VehicleNote.swift
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import Foundation
|
||||||
|
import RealmSwift
|
||||||
|
|
||||||
|
public class VehicleNote: Object, Codable, Cloneable {
|
||||||
|
@objc public dynamic var id: String = UUID().uuidString
|
||||||
|
@objc public dynamic var user: String = ""
|
||||||
|
@objc public dynamic var date: TimeInterval = Date().timeIntervalSince1970
|
||||||
|
@objc public dynamic var text: String = ""
|
||||||
|
|
||||||
|
// MARK: - Cloneable
|
||||||
|
|
||||||
|
public required init(copy: VehicleNote) {
|
||||||
|
self.id = copy.id
|
||||||
|
self.user = copy.user
|
||||||
|
self.date = copy.date
|
||||||
|
self.text = copy.text
|
||||||
|
}
|
||||||
|
|
||||||
|
required init() {
|
||||||
|
super.init()
|
||||||
|
}
|
||||||
|
|
||||||
|
public init(text: String) {
|
||||||
|
self.text = text
|
||||||
|
self.user = Settings.shared.user.email
|
||||||
|
}
|
||||||
|
|
||||||
|
public override static func primaryKey() -> String? {
|
||||||
|
return "id"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -209,15 +209,25 @@ public class Api {
|
|||||||
return self.makeGetRequest(api: "vehicles", params: params)
|
return self.makeGetRequest(api: "vehicles", params: params)
|
||||||
}
|
}
|
||||||
|
|
||||||
public static func checkVehicle(by number: String, force: Bool = false) -> Single<Vehicle> {
|
public static func checkVehicle(by number: String, notes: [VehicleNote], events: [VehicleEvent], force: Bool = false) -> Single<Vehicle> {
|
||||||
return self.refreshFbToken().flatMap { () -> Single<Vehicle> in
|
return self.refreshFbToken().flatMap { () -> Single<Vehicle> in
|
||||||
var body = [
|
var body = [
|
||||||
"number": number,
|
"number": AnyEncodable(number),
|
||||||
"forceUpdate": String(force)
|
"forceUpdate": AnyEncodable(force)
|
||||||
]
|
]
|
||||||
|
|
||||||
if let token = Settings.shared.user.firebaseIdToken {
|
if let token = Settings.shared.user.firebaseIdToken {
|
||||||
body["googleIdToken"] = token
|
body["googleIdToken"] = AnyEncodable(token)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !notes.isEmpty {
|
||||||
|
body["notes"] = AnyEncodable(notes)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !events.isEmpty {
|
||||||
|
body["events"] = AnyEncodable(events)
|
||||||
|
}
|
||||||
|
|
||||||
return self.makeBodyRequest(api: "vehicles/check", body: body).map { (vehicle: Vehicle) -> Vehicle in
|
return self.makeBodyRequest(api: "vehicles/check", body: body).map { (vehicle: Vehicle) -> Vehicle in
|
||||||
vehicle.addedDate = Date().timeIntervalSince1970
|
vehicle.addedDate = Date().timeIntervalSince1970
|
||||||
return vehicle
|
return vehicle
|
||||||
@ -280,4 +290,17 @@ public class Api {
|
|||||||
]
|
]
|
||||||
return self.makeBodyRequest(api: "vehicles/checkOsago", body: body)
|
return self.makeBodyRequest(api: "vehicles/checkOsago", body: body)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static func add(notes: [VehicleNote], to number: String) -> Single<Vehicle> {
|
||||||
|
let body = ["number": AnyEncodable(number), "notes": AnyEncodable(notes)]
|
||||||
|
return self.makeBodyRequest(api: "notes", body: body)
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func edit(note: VehicleNote) -> Single<Vehicle> {
|
||||||
|
return self.makeBodyRequest(api: "notes", body: ["note": note], method: "PUT")
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func remove(note id: String) -> Single<Vehicle> {
|
||||||
|
return self.makeBodyRequest(api: "notes", body: ["noteId": id], method: "DELETE")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user