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 */; };
|
||||
7A6DD90C24335A6D009DE740 /* FlagLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6DD90B24335A6D009DE740 /* FlagLayer.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 */; };
|
||||
7A761C042677F18E0005F28F /* Api.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A11474323FF06CA00B424AF /* Api.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 */; };
|
||||
7A96AE2D246B2B7400297C33 /* GoogleSignInController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A96AE2C246B2B7400297C33 /* GoogleSignInController.swift */; };
|
||||
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 */; };
|
||||
7AA7BC2C25A5DFB80053A5D5 /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11471C23FEA18700B424AF /* RxSwift */; };
|
||||
7AA7BC2D25A5DFB80053A5D5 /* RxRelay in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11471E23FEA18700B424AF /* RxRelay */; };
|
||||
7AA7BC2E25A5DFB80053A5D5 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 7A11472023FEA18700B424AF /* RxCocoa */; };
|
||||
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 */; };
|
||||
7AA54C1C26CD977A00F2BF28 /* RxCocoa in Frameworks */ = {isa = PBXBuildFile; productRef = 7AA54C1B26CD977A00F2BF28 /* RxCocoa */; };
|
||||
7AA54C1E26CD977A00F2BF28 /* RxSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 7AA54C1D26CD977A00F2BF28 /* RxSwift */; settings = {ATTRIBUTES = (Required, ); }; };
|
||||
7AA54C2026CD977A00F2BF28 /* RxRealm in Frameworks */ = {isa = PBXBuildFile; productRef = 7AA54C1F26CD977A00F2BF28 /* RxRealm */; };
|
||||
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 */; };
|
||||
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 */; };
|
||||
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 */; };
|
||||
7AABDE26253350C30041AFC6 /* RxSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AABDE25253350C30041AFC6 /* RxSectionedDataSource.swift */; };
|
||||
7AB67E8C2435C38700258F61 /* CustomTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AB67E8B2435C38700258F61 /* CustomTextField.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 */; };
|
||||
7ADF6C95250D037700F237B2 /* ShowEventController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ADF6C94250D037700F237B2 /* ShowEventController.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 */; };
|
||||
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, ); }; };
|
||||
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 */; };
|
||||
7AF6D2132677C15A0086EA64 /* AudioRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A659B5824A2B1BA0043A0F2 /* AudioRecord.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 */; };
|
||||
7AF6D2232677C2B40086EA64 /* Realm in Frameworks */ = {isa = PBXBuildFile; productRef = 7AF6D2222677C2B40086EA64 /* Realm */; };
|
||||
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 */; };
|
||||
7AF6D22A2677C3AD0086EA64 /* Exportable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AE8424D26109F78002F6B31 /* Exportable.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
@ -230,6 +225,8 @@
|
||||
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>"; };
|
||||
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>"; };
|
||||
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; };
|
||||
@ -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; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
@ -282,21 +281,12 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
7AA7BC3125A5DFB80053A5D5 /* RealmSwift in Frameworks */,
|
||||
7AA7BC3525A5DFB80053A5D5 /* ExceptionCatcher in Frameworks */,
|
||||
7AA7BC3025A5DFB80053A5D5 /* Realm in Frameworks */,
|
||||
7AA7BC2C25A5DFB80053A5D5 /* RxSwift in Frameworks */,
|
||||
7AA7BC2F25A5DFB80053A5D5 /* RxBlocking in Frameworks */,
|
||||
7AA7BC3825A5DFB80053A5D5 /* Eureka in Frameworks */,
|
||||
7AA7BC3325A5DFB80053A5D5 /* Kingfisher in Frameworks */,
|
||||
7A813DBE2506A57100CC93B9 /* AuthenticationServices.framework in Frameworks */,
|
||||
7AA7BC3625A5DFB80053A5D5 /* PKHUD in Frameworks */,
|
||||
7AA7BC2E25A5DFB80053A5D5 /* RxCocoa in Frameworks */,
|
||||
7AA7BC3425A5DFB80053A5D5 /* SwiftDate in Frameworks */,
|
||||
7AF6D2042677C03B0086EA64 /* AutoCatCore.framework in Frameworks */,
|
||||
7AA7BC3725A5DFB80053A5D5 /* DifferenceKit in Frameworks */,
|
||||
7AA7BC3225A5DFB80053A5D5 /* RxRealm in Frameworks */,
|
||||
7AA7BC2D25A5DFB80053A5D5 /* RxRelay in Frameworks */,
|
||||
7A96AE2F246B2BCD00297C33 /* WebKit.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -312,13 +302,13 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
7AA54C1E26CD977A00F2BF28 /* RxSwift in Frameworks */,
|
||||
7AABB1F0267E9CAA00D7AB32 /* DifferenceKit in Frameworks */,
|
||||
7AF6D2252677C2B40086EA64 /* RealmSwift in Frameworks */,
|
||||
7AA54C1C26CD977A00F2BF28 /* RxCocoa in Frameworks */,
|
||||
7AF6D2232677C2B40086EA64 /* Realm in Frameworks */,
|
||||
7AF6D2112677C0EA0086EA64 /* RxSwift in Frameworks */,
|
||||
7AABB1F2267E9CC800D7AB32 /* SwiftDate in Frameworks */,
|
||||
7AF6D20F2677C0EA0086EA64 /* RxCocoa in Frameworks */,
|
||||
7AF6D2272677C2B40086EA64 /* RxRealm in Frameworks */,
|
||||
7AA54C2026CD977A00F2BF28 /* RxRealm in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -417,6 +407,7 @@
|
||||
7A11471723FDEBFA00B424AF /* ReportController.swift */,
|
||||
7A3F07AC2436350B00E59687 /* SearchController.swift */,
|
||||
7AEFE727240455E200910EB7 /* SettingsController.swift */,
|
||||
7A6F095D26DB9F85003A965D /* NotesController.swift */,
|
||||
);
|
||||
path = Controllers;
|
||||
sourceTree = "<group>";
|
||||
@ -460,6 +451,7 @@
|
||||
7A2DE69725868AC800A113FC /* VehicleAd.swift */,
|
||||
7AAE6AD224CDDF950023860B /* VehicleEvent.swift */,
|
||||
7AB562B9249C9E9B00473D53 /* VehicleRegion.swift */,
|
||||
7A6F095F26DBF588003A965D /* VehicleNote.swift */,
|
||||
);
|
||||
path = Models;
|
||||
sourceTree = "<group>";
|
||||
@ -490,6 +482,7 @@
|
||||
7AE26A3224EEF9EC00625033 /* UIViewControllerExt.swift */,
|
||||
7A8A220A248D67B60073DFD9 /* VehicleReportImage.swift */,
|
||||
7A761C0A267E8FF90005F28F /* Error.swift */,
|
||||
7AC76D7A270083AE0084DB27 /* TextView.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
@ -502,6 +495,7 @@
|
||||
7A1090E724A394F100B4F0B2 /* AudioRecordCell.swift */,
|
||||
7A813DC22508EE4F00CC93B9 /* EventCell.swift */,
|
||||
7AEFC3BD2529D3CC00BADFB2 /* ConfigurableCell.swift */,
|
||||
7A99406326E4BFAE002E9CB6 /* VehicleNoteCell.swift */,
|
||||
);
|
||||
path = Cells;
|
||||
sourceTree = "<group>";
|
||||
@ -644,18 +638,9 @@
|
||||
);
|
||||
name = AutoCat;
|
||||
packageProductDependencies = (
|
||||
7A11471C23FEA18700B424AF /* RxSwift */,
|
||||
7A11471E23FEA18700B424AF /* RxRelay */,
|
||||
7A11472023FEA18700B424AF /* RxCocoa */,
|
||||
7A11472223FEA18700B424AF /* RxBlocking */,
|
||||
7A11472523FEA1F400B424AF /* Realm */,
|
||||
7A11472723FEA1F400B424AF /* RealmSwift */,
|
||||
7A530B8A240181F500CBFE6E /* RxRealm */,
|
||||
7AF58D332402A91C00CE01A0 /* Kingfisher */,
|
||||
7A051610241412CA00FC55AC /* SwiftDate */,
|
||||
7A813DC02508C4D900CC93B9 /* ExceptionCatcher */,
|
||||
7AABDE1C2532F3EB0041AFC6 /* PKHUD */,
|
||||
7AABDE22253327F10041AFC6 /* DifferenceKit */,
|
||||
7AEF47A3253DC4D2001D6238 /* Eureka */,
|
||||
);
|
||||
productName = AutoCat;
|
||||
@ -695,13 +680,13 @@
|
||||
);
|
||||
name = AutoCatCore;
|
||||
packageProductDependencies = (
|
||||
7AF6D20E2677C0EA0086EA64 /* RxCocoa */,
|
||||
7AF6D2102677C0EA0086EA64 /* RxSwift */,
|
||||
7AF6D2222677C2B40086EA64 /* Realm */,
|
||||
7AF6D2242677C2B40086EA64 /* RealmSwift */,
|
||||
7AF6D2262677C2B40086EA64 /* RxRealm */,
|
||||
7AABB1EF267E9CAA00D7AB32 /* DifferenceKit */,
|
||||
7AABB1F1267E9CC800D7AB32 /* SwiftDate */,
|
||||
7AA54C1B26CD977A00F2BF28 /* RxCocoa */,
|
||||
7AA54C1D26CD977A00F2BF28 /* RxSwift */,
|
||||
7AA54C1F26CD977A00F2BF28 /* RxRealm */,
|
||||
);
|
||||
productName = AutoCatCore;
|
||||
productReference = 7AF6D1EF2677C03B0086EA64 /* AutoCatCore.framework */;
|
||||
@ -805,6 +790,7 @@
|
||||
7A813DC9250B5C9700CC93B9 /* LocationRow.swift in Sources */,
|
||||
7A2DE69B25869ABD00A113FC /* AdsController.swift in Sources */,
|
||||
7A6DD90824329144009DE740 /* CenterTextLayer.swift in Sources */,
|
||||
7A99406426E4BFAE002E9CB6 /* VehicleNoteCell.swift in Sources */,
|
||||
7A8AB76B25A1D95500ECF2C1 /* SourceStatusRow.swift in Sources */,
|
||||
7A813DC32508EE4F00CC93B9 /* EventCell.swift in Sources */,
|
||||
7A3F07AD2436350B00E59687 /* SearchController.swift in Sources */,
|
||||
@ -827,12 +813,14 @@
|
||||
7A27ADF7249FEF690035F39E /* Recorder.swift in Sources */,
|
||||
7A3F07AB24360DC800E59687 /* Dated.swift in Sources */,
|
||||
7A33381124990DAE00D878F1 /* FiltersController.swift in Sources */,
|
||||
7AC76D7B270083AE0084DB27 /* TextView.swift in Sources */,
|
||||
7A1090E824A394F100B4F0B2 /* AudioRecordCell.swift in Sources */,
|
||||
7A64AE762469DFB600ABE48E /* ContentTransformers.swift in Sources */,
|
||||
7A11471823FDEBFA00B424AF /* ReportController.swift in Sources */,
|
||||
7AE24C5F251F1B4E00758E39 /* Buttons.swift in Sources */,
|
||||
7A11471A23FE839000B424AF /* AuthController.swift in Sources */,
|
||||
7A530B7A24001D3300CBFE6E /* CheckController.swift in Sources */,
|
||||
7A6F095E26DB9F85003A965D /* NotesController.swift in Sources */,
|
||||
7A6E03282485951700DB22ED /* OwnersController.swift in Sources */,
|
||||
7A64AE742469DFB600ABE48E /* MediaContentView.swift in Sources */,
|
||||
7A1090EC24A4E3E100B4F0B2 /* CellProgressView.swift in Sources */,
|
||||
@ -887,6 +875,7 @@
|
||||
7AF6D2122677C12E0086EA64 /* Location.swift in Sources */,
|
||||
7AF6D2142677C1680086EA64 /* VehicleEvent.swift in Sources */,
|
||||
7AF6D2172677C1680086EA64 /* VehicleRegion.swift in Sources */,
|
||||
7A6F096026DBF588003A965D /* VehicleNote.swift in Sources */,
|
||||
7AF6D21E2677C1680086EA64 /* PlateNumber.swift in Sources */,
|
||||
7AF6D21F2677C1680086EA64 /* Response.swift in Sources */,
|
||||
7A761C07267E8E7F0005F28F /* AnyEncodable.swift in Sources */,
|
||||
@ -1091,7 +1080,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 78;
|
||||
CURRENT_PROJECT_VERSION = 79;
|
||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
@ -1116,7 +1105,7 @@
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 78;
|
||||
CURRENT_PROJECT_VERSION = 79;
|
||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
@ -1351,51 +1340,26 @@
|
||||
/* End XCRemoteSwiftPackageReference 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 */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 7A813DBF2508C4D900CC93B9 /* XCRemoteSwiftPackageReference "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 */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 7AABDE21253327F10041AFC6 /* XCRemoteSwiftPackageReference "DifferenceKit" */;
|
||||
@ -1411,11 +1375,6 @@
|
||||
package = 7AABDE1B2532F3EB0041AFC6 /* XCRemoteSwiftPackageReference "PKHUD" */;
|
||||
productName = PKHUD;
|
||||
};
|
||||
7AABDE22253327F10041AFC6 /* DifferenceKit */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 7AABDE21253327F10041AFC6 /* XCRemoteSwiftPackageReference "DifferenceKit" */;
|
||||
productName = DifferenceKit;
|
||||
};
|
||||
7AEF47A3253DC4D2001D6238 /* Eureka */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 7AEF47A2253DC4D2001D6238 /* XCRemoteSwiftPackageReference "Eureka" */;
|
||||
@ -1426,16 +1385,6 @@
|
||||
package = 7AF58D322402A91C00CE01A0 /* XCRemoteSwiftPackageReference "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 */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 7A11472423FEA1F400B424AF /* XCRemoteSwiftPackageReference "realm-cocoa" */;
|
||||
@ -1446,11 +1395,6 @@
|
||||
package = 7A11472423FEA1F400B424AF /* XCRemoteSwiftPackageReference "realm-cocoa" */;
|
||||
productName = RealmSwift;
|
||||
};
|
||||
7AF6D2262677C2B40086EA64 /* RxRealm */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 7A530B89240181F500CBFE6E /* XCRemoteSwiftPackageReference "RxRealm" */;
|
||||
productName = RxRealm;
|
||||
};
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
};
|
||||
rootObject = 7A1146F523FDE7E500B424AF /* Project object */;
|
||||
|
||||
@ -67,7 +67,7 @@
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.SwiftErrorBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "4F72AC4F-FBCE-4C10-8BC2-2F434652DB31"
|
||||
shouldBeEnabled = "Yes"
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No">
|
||||
</BreakpointContent>
|
||||
@ -76,7 +76,7 @@
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "42580582-DA14-40D4-869A-FF91FCA9957C"
|
||||
shouldBeEnabled = "Yes"
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
breakpointStackSelectionBehavior = "1"
|
||||
@ -84,5 +84,21 @@
|
||||
stopOnStyle = "0">
|
||||
</BreakpointContent>
|
||||
</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>
|
||||
</Bucket>
|
||||
|
||||
@ -26,7 +26,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
|
||||
let config = Realm.Configuration(
|
||||
schemaVersion: 32,
|
||||
schemaVersion: 35,
|
||||
migrationBlock: { migration, oldSchemaVersion in
|
||||
if oldSchemaVersion <= 3 {
|
||||
var numbers: [String] = []
|
||||
@ -140,7 +140,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
HUD.dimsBackground = true
|
||||
HUD.allowsInteraction = false
|
||||
|
||||
Logging.URLRequests = { _ in false };
|
||||
//Logging.URLRequests = { _ in false };
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
<?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"/>
|
||||
<dependencies>
|
||||
<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="System colors in document resources" minToolsVersion="11.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
@ -72,6 +72,79 @@
|
||||
</objects>
|
||||
<point key="canvasLocation" x="1094" y="2353"/>
|
||||
</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-->
|
||||
<scene sceneID="LgB-gR-z4l">
|
||||
<objects>
|
||||
@ -100,14 +173,14 @@
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<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"/>
|
||||
<subviews>
|
||||
<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>
|
||||
<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"/>
|
||||
@ -116,7 +189,7 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</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">
|
||||
<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"/>
|
||||
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@ -196,23 +269,23 @@
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<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"/>
|
||||
<subviews>
|
||||
<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>
|
||||
<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"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<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>
|
||||
<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"/>
|
||||
@ -222,16 +295,16 @@
|
||||
</constraints>
|
||||
</view>
|
||||
<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>
|
||||
<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"/>
|
||||
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</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">
|
||||
<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"/>
|
||||
<color key="textColor" systemColor="tertiaryLabelColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@ -393,7 +466,7 @@
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<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"/>
|
||||
@ -487,10 +560,10 @@
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<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>
|
||||
<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"/>
|
||||
<textInputTraits key="textInputTraits" returnKeyType="done"/>
|
||||
<connections>
|
||||
@ -499,7 +572,7 @@
|
||||
</connections>
|
||||
</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">
|
||||
<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"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="48" id="YE0-lL-OwL"/>
|
||||
@ -518,27 +591,27 @@
|
||||
</constraints>
|
||||
</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">
|
||||
<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"/>
|
||||
<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">
|
||||
<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"/>
|
||||
<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"/>
|
||||
<subviews>
|
||||
<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>
|
||||
<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"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<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>
|
||||
<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"/>
|
||||
@ -548,16 +621,16 @@
|
||||
</constraints>
|
||||
</view>
|
||||
<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>
|
||||
<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"/>
|
||||
<color key="textColor" systemColor="secondaryLabelColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</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">
|
||||
<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"/>
|
||||
<color key="textColor" systemColor="tertiaryLabelColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@ -855,6 +928,7 @@
|
||||
<tabBarItem key="tabBarItem" title="Check" image="check" landscapeImage="check-compact" id="QJd-35-4OB"/>
|
||||
<toolbarItems/>
|
||||
<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"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
@ -873,6 +947,7 @@
|
||||
<tabBarItem key="tabBarItem" title="Search" image="search" landscapeImage="search-compact" id="gDG-z8-R0t"/>
|
||||
<toolbarItems/>
|
||||
<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"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
@ -890,6 +965,7 @@
|
||||
<navigationController storyboardIdentifier="ReportNavController" automaticallyAdjustsScrollViewInsets="NO" id="Km4-b6-SGW" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<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"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
@ -908,6 +984,7 @@
|
||||
<tabBarItem key="tabBarItem" title="Records" image="record" landscapeImage="record-compact" id="lxF-EY-z8V"/>
|
||||
<toolbarItems/>
|
||||
<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"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
@ -925,6 +1002,7 @@
|
||||
<navigationController storyboardIdentifier="GlobalEventsNavigation" automaticallyAdjustsScrollViewInsets="NO" id="HWa-Ea-ZKD" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<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"/>
|
||||
</navigationBar>
|
||||
<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 {
|
||||
case doNotSend
|
||||
case receiveAndSend
|
||||
case sendSpecific(VehicleEvent)
|
||||
}
|
||||
|
||||
enum HistoryFilter {
|
||||
@ -24,7 +23,6 @@ extension String.StringInterpolation {
|
||||
switch value {
|
||||
case .doNotSend: appendLiteral("do not 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):
|
||||
ad.quickAction = .none
|
||||
var action: EventAction = .receiveAndSend
|
||||
var events: [VehicleEvent] = []
|
||||
if let event = event {
|
||||
action = .sendSpecific(event)
|
||||
events = [event]
|
||||
action = .doNotSend
|
||||
}
|
||||
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 {
|
||||
self.updateDetailController(with: vehicle)
|
||||
}
|
||||
@ -214,7 +214,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
self.check.isEnabled = false
|
||||
|
||||
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 {
|
||||
self.updateDetailController(with: vehicle)
|
||||
}
|
||||
@ -317,13 +317,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
|
||||
func update(vehicle: Vehicle) {
|
||||
HUD.show(.progress)
|
||||
|
||||
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
|
||||
self.check(number: vehicle.getNumber(), action: .doNotSend, notes: Array(vehicle.notes), events: Array(vehicle.events), force: true).subscribe { (vehicle, errors) in
|
||||
if !vehicle.unrecognized {
|
||||
self.updateDetailController(with: vehicle)
|
||||
}
|
||||
@ -359,10 +353,6 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
}
|
||||
|
||||
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 {
|
||||
return Single<VehicleEvent>.just(event)
|
||||
} 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))
|
||||
if action != .doNotSend {
|
||||
eventSingle = self.getEvent(for: action)
|
||||
@ -380,7 +370,7 @@ class CheckController: UIViewController, UITableViewDelegate, UITextFieldDelegat
|
||||
.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)
|
||||
.map { (vehicle: Vehicle) -> (vehicle: Vehicle, error: Error?) in
|
||||
try self.save(vehicle: vehicle)
|
||||
|
||||
@ -198,9 +198,8 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele
|
||||
}
|
||||
|
||||
let event = vehicle.events[index]
|
||||
if let eventId = event.id {
|
||||
HUD.show(.progress)
|
||||
Api.remove(event: eventId).observeOn(MainScheduler.instance).subscribe(onSuccess: { vehicle in
|
||||
Api.remove(event: event.id).observeOn(MainScheduler.instance).subscribe(onSuccess: { vehicle in
|
||||
let result = self.update(vehicle: vehicle)
|
||||
completion?(result)
|
||||
}, onError: { error in
|
||||
@ -208,9 +207,6 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele
|
||||
HUD.show(error: error)
|
||||
print(error)
|
||||
}).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) {
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
<<< 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 {
|
||||
self.form +++ Section(NSLocalizedString("Debug info", comment: "noun"))
|
||||
<<< 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: "Photos", with: String(self.vehicle?.photos.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 {
|
||||
self.update(sourceStatusRow: "DebugAutocod", with: dInfo.autocod)
|
||||
|
||||
@ -158,7 +158,7 @@ class SearchController: UIViewController, UISearchResultsUpdating, UITableViewDe
|
||||
|
||||
func update(vehicle: Vehicle, at indexPath: IndexPath) {
|
||||
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()
|
||||
do {
|
||||
let realm = try Realm()
|
||||
|
||||
@ -3,6 +3,11 @@ import PKHUD
|
||||
import AutoCatCore
|
||||
|
||||
extension UIViewController {
|
||||
|
||||
func show(error: Error) {
|
||||
self.show(error: error, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
func show(error: Error, animated: Bool = true, completion: (() -> Void)? = nil) {
|
||||
let msg = (error as NSError).displayMessage
|
||||
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. */
|
||||
"Added by" = "Добавлено";
|
||||
|
||||
/* sort by added time */
|
||||
"added time" = "времени добавления";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Added time" = "Время добавления";
|
||||
|
||||
@ -31,12 +28,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Alternative order" = "Альтернативный порядок";
|
||||
|
||||
/* Added by */
|
||||
"Anyone" = "Кем угодно";
|
||||
|
||||
/* Added by */
|
||||
"Anyone but me" = "Кем угодно кроме меня";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"As link" = "В виде ссылки";
|
||||
|
||||
@ -46,9 +37,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"As text and photos" = "В виде текста и фотографий";
|
||||
|
||||
/* sort order */
|
||||
"ascending" = "по возростанию";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"AutoCat Account" = "Аккаунт в АвтоКот";
|
||||
|
||||
@ -127,9 +115,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Delete" = "Удалить";
|
||||
|
||||
/* sort order */
|
||||
"descending" = "по убыванию";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Description" = "Описание";
|
||||
|
||||
@ -181,9 +166,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"If enabled, app will try to recognize shortened plate numbers (without region) and add default region" = "Если опция включена, приложение попытается распознавать укороченные номера (без региона) и добавлять регион по умолчанию";
|
||||
|
||||
/* Owner type */
|
||||
"individual" = "Физ. лицо";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Insurance organization name" = "Наименование страховой организации";
|
||||
|
||||
@ -196,9 +178,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Left" = "Левый";
|
||||
|
||||
/* Owner type */
|
||||
"legal" = "Юр. лицо";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Link" = "Ссылка";
|
||||
|
||||
@ -211,9 +190,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Main filters" = "Основные фильтры";
|
||||
|
||||
/* Added by */
|
||||
"Me" = "Мной";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Mileage" = "Пробег";
|
||||
|
||||
@ -223,12 +199,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"More actions" = "Больше действий";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New note" = "Новая заметка";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No" = "Нет";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Nomerogram" = "Номерограм";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notes" = "Заметки";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"now" = "Настоящий момент";
|
||||
|
||||
@ -361,9 +343,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To" = "По";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Today" = "Сегодня";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unrecognized" = "Нераспознанные";
|
||||
|
||||
@ -373,9 +352,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Update time" = "Время обновления";
|
||||
|
||||
/* sort by updated time */
|
||||
"updated time" = "времени обновления";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Vehicle region" = "Регион регистрации ТС";
|
||||
|
||||
@ -409,9 +385,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Yes" = "Да";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Yesterday" = "Вчера";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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 osagoContracts = List<Osago>()
|
||||
public var ads = List<VehicleAd>()
|
||||
public var notes = List<VehicleNote>()
|
||||
@objc public dynamic var debugInfo: DebugInfo?
|
||||
|
||||
lazy var formatter: DateFormatter = {
|
||||
@ -223,6 +224,7 @@ public class Vehicle: Object, Decodable, Identifiable, Differentiable, Cloneable
|
||||
case events
|
||||
case osagoContracts
|
||||
case ads
|
||||
case notes
|
||||
case debugInfo
|
||||
}
|
||||
|
||||
@ -266,6 +268,10 @@ public class Vehicle: Object, Decodable, Identifiable, Differentiable, Cloneable
|
||||
if let ads = try container.decodeIfPresent([VehicleAd].self, forKey: .ads) {
|
||||
self.ads.append(objectsIn: ads)
|
||||
}
|
||||
|
||||
if let notes = try container.decodeIfPresent([VehicleNote].self, forKey: .notes) {
|
||||
self.notes.append(objectsIn: notes)
|
||||
}
|
||||
}
|
||||
|
||||
required init() {
|
||||
@ -342,6 +348,10 @@ public class Vehicle: Object, Decodable, Identifiable, Differentiable, Cloneable
|
||||
let ads = List<VehicleAd>()
|
||||
ads.append(objectsIn: copy.ads.map { $0.clone() })
|
||||
self.ads = ads
|
||||
|
||||
let notes = List<VehicleNote>()
|
||||
notes.append(objectsIn: copy.notes.map { $0.clone() })
|
||||
self.notes = notes
|
||||
}
|
||||
|
||||
// MARK: - Exportable
|
||||
|
||||
@ -4,7 +4,7 @@ import RxSwift
|
||||
import CoreLocation
|
||||
|
||||
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 latitude: 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] {
|
||||
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)
|
||||
}
|
||||
|
||||
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
|
||||
var body = [
|
||||
"number": number,
|
||||
"forceUpdate": String(force)
|
||||
"number": AnyEncodable(number),
|
||||
"forceUpdate": AnyEncodable(force)
|
||||
]
|
||||
|
||||
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
|
||||
vehicle.addedDate = Date().timeIntervalSince1970
|
||||
return vehicle
|
||||
@ -280,4 +290,17 @@ public class Api {
|
||||
]
|
||||
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