diff --git a/Marlin/Marlin/DataSources/DFRS/DFRS+Decodable.swift b/Marlin/Marlin/DataSources/DFRS/DFRS+Decodable.swift index c7f77e1b..a9e3e9fb 100644 --- a/Marlin/Marlin/DataSources/DFRS/DFRS+Decodable.swift +++ b/Marlin/Marlin/DataSources/DFRS/DFRS+Decodable.swift @@ -165,13 +165,10 @@ struct DFRSProperties: Decodable { static func parsePosition(position: String) -> CLLocationCoordinate2D { var latitude = 0.0 var longitude = 0.0 - - let pattern = #""" - (?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[NS])\ - \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[EW]) - """# + // swiftlint:disable line_length + let pattern = #"(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[NS]) \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[EW])"# + // swiftlint:enable line_length + let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(position.startIndex.. CLLocationCoordinate2D { var latitude = 0.0 var longitude = 0.0 - - let pattern = #""" - (?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[NS])\ - \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[EW]) - """# + // swiftlint:disable line_length + let pattern = #"(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[NS]) \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[EW])"# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(position.startIndex.. CLLocationCoordinate2D { var latitude = 0.0 var longitude = 0.0 - - let pattern = #""" - (?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[NS])\ - \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[EW]) - """# + // swiftlint:disable line_length + let pattern = #"(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[NS]) \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[EW])"# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(position.startIndex..[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[NS])\ - \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[EW]) - """# + // swiftlint:disable line_length + let pattern = #"(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[NS]) \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[EW])"# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(position.startIndex..(Azimuth coverage)?).?((?(\d*))\°)?\ - ((?[0-9]*)[\`'])?(-(?(\d*))\°)?(?[0-9]*)[\`']?\..* - """# + // swiftlint:disable line_length + let pattern = #"(?(Azimuth coverage)?).?((?(\d*))\°)?((?[0-9]*)[\`'])?(-(?(\d*))\°)?(?[0-9]*)[\`']?\..*"# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(remarks.startIndex..(Visible)?)(?(bscured)?)((?[A-Z]+)?)\.?\ - (?(\(unintensified\))?)(?(\(bscured\))?)\ - ( (?(\d*))°)?((?[0-9]*)[\`'])?(-(?(\d*))°)\ - (?[0-9]*)[\`']? - """# + // swiftlint:disable line_length + let pattern = #"(?(Visible)?)(?(bscured)?)((?[A-Z]+)?)\.?(?(\(unintensified\))?)(?(\(bscured\))?)( (?(\d*))°)?((?[0-9]*)[\`'])?(-(?(\d*))°)(?[0-9]*)[\`']?"# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(remarks.startIndex..(Azimuth coverage)?).?\ - ((?(\d*))\°)?((?[0-9]*)[\`'])?\ - (-(?(\d*))\°)?(?[0-9]*)[\`']?\..* - """# + // swiftlint:disable line_length + let pattern = #"(?(Azimuth coverage)?).?((?(\d*))\°)?((?[0-9]*)[\`'])?(-(?(\d*))\°)?(?[0-9]*)[\`']?\..*"# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(remarks.startIndex..(Visible)?)(?(bscured)?)\ - ((?[A-Z]+)?)\.?(?(\(unintensified\))?)\ - (?(\(bscured\))?)( (?(\d*))°)?((?[0-9]*)[\`'])?\ - (-(?(\d*))°)(?[0-9]*)[\`']? - """# + // swiftlint:disable line_length + let pattern = #"(?(Visible)?)(?(bscured)?)((?[A-Z]+)?)\.?(?(\(unintensified\))?)(?(\(bscured\))?)( (?(\d*))°)?((?[0-9]*)[\`'])?(-(?(\d*))°)(?[0-9]*)[\`']?"# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(remarks.startIndex..(Azimuth coverage)?).?((?(\d*))\^)?((?[0-9]*)[\`'])?\ - (-(?(\d*))\^)?(?[0-9]*)[\`']?\. - """# + // swiftlint:disable line_length + let pattern = #"(?(Azimuth coverage)?).?((?(\d*))\^)?((?[0-9]*)[\`'])?(-(?(\d*))\^)?(?[0-9]*)[\`']?\."# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(remarks.startIndex..[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[NS])\ - \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"\ - (?[EW]) - """# + // swiftlint:disable line_length + let pattern = #"(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[NS]) \n(?[0-9]*)°(?[0-9]*)'(?[0-9]*\.?[0-9]*)\"(?[EW])"# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(position.startIndex..(Azimuth coverage)?).?\ - ((?(\d*))\^)?((?[0-9]*)[\`'])?\ - (-(?(\d*))\^)?(?[0-9]*)[\`']?\. - """# + // swiftlint:disable line_length + let pattern = #"(?(Azimuth coverage)?).?((?(\d*))\^)?((?[0-9]*)[\`'])?(-(?(\d*))\^)?(?[0-9]*)[\`']?\."# + // swiftlint:enable line_length let regex = try? NSRegularExpression(pattern: pattern, options: []) let nsrange = NSRange(remarks.startIndex..-?[0-9]*\.?\d+)[\s°-]*(?\d{1,2}\.?\d+)?\ - [\s\`'-]*(?\d{1,2}\.?\d+)?[\s\"\ - ]?(?([NOEWS])?)[\s,]*(?-?[0-9]*\.?\d+)\ - [\s°-]*(?\d{1,2}\.?\d+)?[\s\`'-]*\ - (?\d{1,2}\.?\d+)?[\s\" ]*(?([NOEWS])?) - """# + // swiftlint:disable line_length + let pattern = #"(?-?[0-9]*\.?\d+)[\s°-]*(?\d{1,2}\.?\d+)?[\s\`'-]*(?\d{1,2}\.?\d+)?[\s\" ]?(?([NOEWS])?)[\s,]*(?-?[0-9]*\.?\d+)[\s°-]*(?\d{1,2}\.?\d+)?[\s\`'-]*(?\d{1,2}\.?\d+)?[\s\" ]*(?([NOEWS])?)"# + // swiftlint:enable line_length var foundLat: Bool = false var foundLon: Bool = false @@ -811,10 +807,9 @@ extension CLLocationCoordinate2D { extension Double { init?(coordinateString: String) { - let pattern = #""" - (?-?[0-9]*\.?\d+)[\s°-]*(?\d{1,2}\.?\d+)?[\s\`'-]*\ - (?\d{1,2}\.?\d+)?[\s\" ]?(?([NOEWS])?) - """# + // swiftlint:disable line_length + let pattern = #"(?-?[0-9]*\.?\d+)[\s°-]*(?\d{1,2}\.?\d+)?[\s\`'-]*(?\d{1,2}\.?\d+)?[\s\" ]?(?([NOEWS])?)"# + // swiftlint:enable line_length var found: Bool = false var degrees: Double = 0.0 diff --git a/Marlin/Marlin/Marlin-Bridging-Header.h b/Marlin/Marlin/Marlin-Bridging-Header.h index 58fd4d51..80a990a0 100644 --- a/Marlin/Marlin/Marlin-Bridging-Header.h +++ b/Marlin/Marlin/Marlin-Bridging-Header.h @@ -15,6 +15,7 @@ #import "SFGeometry.h" #import "SFPoint.h" #import "SFGeometryCollection.h" +#import "SFGeometryUtils.h" //#import "sf-ios-umbrella.h" diff --git a/Marlin/MarlinTests/MarlinFullFlowTest.swift b/Marlin/MarlinTests/MarlinFullFlowTest.swift index c65f7860..d3e90439 100644 --- a/Marlin/MarlinTests/MarlinFullFlowTest.swift +++ b/Marlin/MarlinTests/MarlinFullFlowTest.swift @@ -35,7 +35,7 @@ final class MarlinFullFlowTest: XCTestCase { .removeDuplicates() .sink { output in TestHelpers.clearData() - for dataSource in MSI.shared.masterDataList { + for dataSource in MSI.shared.mainDataList { switch dataSource { case let mapImage as MapImage.Type: mapImage.imageCache.clearCache() @@ -67,7 +67,7 @@ final class MarlinFullFlowTest: XCTestCase { return } - for dataSource in MSI.shared.masterDataList { + for dataSource in MSI.shared.mainDataList { switch dataSource { case let mapImage as MapImage.Type: mapImage.imageCache.clearCache() @@ -252,7 +252,7 @@ final class MarlinFullFlowTest: XCTestCase { return } - for dataSource in MSI.shared.masterDataList { + for dataSource in MSI.shared.mainDataList { switch dataSource { case let mapImage as MapImage.Type: mapImage.imageCache.clearCache() diff --git a/Marlin/MarlinTests/Views/BadgeTests.swift b/Marlin/MarlinTests/Views/BadgeTests.swift index 3a0a169c..a95db52f 100644 --- a/Marlin/MarlinTests/Views/BadgeTests.swift +++ b/Marlin/MarlinTests/Views/BadgeTests.swift @@ -21,7 +21,7 @@ final class BadgeTests: XCTestCase { } func testCheckBadge() { - let badge = CheckBadge(on: Binding.constant(true)) + let badge = CheckBadge(checked: Binding.constant(true)) let controller = UIHostingController(rootView: badge) let window = TestHelpers.getKeyWindowVisible() window.rootViewController = controller diff --git a/Marlin/MarlinTests/Views/DataLoadedNotificationBannerTests.swift b/Marlin/MarlinTests/Views/DataLoadedNotificationBannerTests.swift index 4b00e10d..85798b40 100644 --- a/Marlin/MarlinTests/Views/DataLoadedNotificationBannerTests.swift +++ b/Marlin/MarlinTests/Views/DataLoadedNotificationBannerTests.swift @@ -20,7 +20,7 @@ final class DataLoadedNotificationBannerTests: XCTestCase { func testShowNotification() { let appState = AppState() - appState.dataSourceBatchImportNotificationsPending = [ + appState.dsBatchImportNotificationsPending = [ Asam.key : [DataSourceUpdatedNotification(key: Asam.key, updates: 1, inserts: 3)] ] appState.loadingDataSource[MockDataSourceNonMappable.key] = false @@ -36,7 +36,7 @@ final class DataLoadedNotificationBannerTests: XCTestCase { func testExpandNotification() { let appState = AppState() - appState.dataSourceBatchImportNotificationsPending = [ + appState.dsBatchImportNotificationsPending = [ Asam.key : [DataSourceUpdatedNotification(key: Asam.key, updates: 1, inserts: 3)], Modu.key : [DataSourceUpdatedNotification(key: Modu.key, updates: 1, inserts: 3)], Light.key : [DataSourceUpdatedNotification(key: Light.key, updates: 1, inserts: 3)], @@ -61,7 +61,7 @@ final class DataLoadedNotificationBannerTests: XCTestCase { func testClearNotification() { let appState = AppState() - appState.dataSourceBatchImportNotificationsPending = [ + appState.dsBatchImportNotificationsPending = [ Asam.key : [DataSourceUpdatedNotification(key: Asam.key, updates: 1, inserts: 3)] ] appState.loadingDataSource[MockDataSourceNonMappable.key] = false @@ -74,20 +74,20 @@ final class DataLoadedNotificationBannerTests: XCTestCase { let controller = UIHostingController(rootView: view) let window = TestHelpers.getKeyWindowVisible() window.rootViewController = controller - XCTAssertFalse(appState.dataSourceBatchImportNotificationsPending.isEmpty) + XCTAssertFalse(appState.dsBatchImportNotificationsPending.isEmpty) tester().waitForView(withAccessibilityLabel: "3 new \(Asam.fullDataSourceName)") tester().waitForView(withAccessibilityLabel: "Clear") let lastDate = appState.lastNotificationRequestDate appState.consolidatedDataLoadedNotification = "" tester().tapView(withAccessibilityLabel: "Clear") XCTAssertNotEqual(lastDate, appState.lastNotificationRequestDate) - XCTAssertTrue(appState.dataSourceBatchImportNotificationsPending.isEmpty) + XCTAssertTrue(appState.dsBatchImportNotificationsPending.isEmpty) tester().waitForAbsenceOfView(withAccessibilityLabel: "3 new \(Asam.fullDataSourceName)") } func testShowNotificationAddExtra() { let appState = AppState() - appState.dataSourceBatchImportNotificationsPending = [ + appState.dsBatchImportNotificationsPending = [ Asam.key : [DataSourceUpdatedNotification(key: Asam.key, updates: 1, inserts: 3)] ] appState.consolidatedDataLoadedNotification = "3 new \(Asam.fullDataSourceName)" @@ -99,7 +99,7 @@ final class DataLoadedNotificationBannerTests: XCTestCase { window.rootViewController = controller tester().waitForView(withAccessibilityLabel: "3 new \(Asam.fullDataSourceName)") - appState.dataSourceBatchImportNotificationsPending = [ + appState.dsBatchImportNotificationsPending = [ Asam.key : [DataSourceUpdatedNotification(key: Asam.key, updates: 1, inserts: 12)] ] appState.consolidatedDataLoadedNotification = "15 new \(Asam.fullDataSourceName)" @@ -109,7 +109,7 @@ final class DataLoadedNotificationBannerTests: XCTestCase { func testOnlyShowDataSourcesWithInserts() { let appState = AppState() - appState.dataSourceBatchImportNotificationsPending = [ + appState.dsBatchImportNotificationsPending = [ Asam.key : [DataSourceUpdatedNotification(key: Asam.key, updates: 1, inserts: 3)], Modu.key : [DataSourceUpdatedNotification(key: Modu.key, updates: 2, inserts: 0)] ] @@ -125,7 +125,7 @@ final class DataLoadedNotificationBannerTests: XCTestCase { func testShowPreviousInsertsIfNewWithOnlyUpdatesComesIn() { let appState = AppState() - appState.dataSourceBatchImportNotificationsPending = [ + appState.dsBatchImportNotificationsPending = [ Asam.key : [DataSourceUpdatedNotification(key: Asam.key, updates: 1, inserts: 3)] ] appState.consolidatedDataLoadedNotification = "3 new \(Asam.fullDataSourceName)" @@ -137,7 +137,7 @@ final class DataLoadedNotificationBannerTests: XCTestCase { window.rootViewController = controller tester().waitForView(withAccessibilityLabel: "3 new \(Asam.fullDataSourceName)") - appState.dataSourceBatchImportNotificationsPending = [ + appState.dsBatchImportNotificationsPending = [ Asam.key : [DataSourceUpdatedNotification(key: Asam.key, updates: 1, inserts: 0)] ] appState.consolidatedDataLoadedNotification = "3 new \(Asam.fullDataSourceName)"