From 52fffbf0d6a9217a092de2dd1db35e5c4197a9e5 Mon Sep 17 00:00:00 2001 From: Sean Molenaar Date: Mon, 27 Jan 2025 21:27:21 +0100 Subject: [PATCH] Cleanup --- Fosdem.xcodeproj/project.pbxproj | 12 +++- Fosdem/{Views => }/EventTypeColor.swift | 0 Fosdem/{Views => }/EventTypeIcon.swift | 0 Fosdem/Import/XmlFinder.swift | 48 --------------- Fosdem/ListPredicateType.swift | 41 +++++++++++++ Fosdem/Models/Event.swift | 2 +- Fosdem/Models/Link.swift | 2 + Fosdem/Models/ManagedObjectProtocol.swift | 17 ------ Fosdem/{Views => }/TrackColor.swift | 0 Fosdem/Views/ListPredicate.swift | 72 ----------------------- Fosdem/Views/ListPredicateType.swift | 34 +++++++++++ Fosdem/Views/ListSettings.swift | 32 ---------- README.md | 1 - 13 files changed, 87 insertions(+), 174 deletions(-) rename Fosdem/{Views => }/EventTypeColor.swift (100%) rename Fosdem/{Views => }/EventTypeIcon.swift (100%) delete mode 100644 Fosdem/Import/XmlFinder.swift create mode 100644 Fosdem/ListPredicateType.swift delete mode 100644 Fosdem/Models/ManagedObjectProtocol.swift rename Fosdem/{Views => }/TrackColor.swift (100%) delete mode 100644 Fosdem/Views/ListPredicate.swift create mode 100644 Fosdem/Views/ListPredicateType.swift diff --git a/Fosdem.xcodeproj/project.pbxproj b/Fosdem.xcodeproj/project.pbxproj index c31069c..b41c652 100644 --- a/Fosdem.xcodeproj/project.pbxproj +++ b/Fosdem.xcodeproj/project.pbxproj @@ -48,6 +48,7 @@ 92CE31B128FC4A940073813E /* EventListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92CE31B028FC4A940073813E /* EventListView.swift */; }; 92D9E7B8291D7B9B007D203D /* HTMLFormattedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92D9E7B7291D7B9B007D203D /* HTMLFormattedText.swift */; }; 92D9E7BA291D95E1007D203D /* EventDetailHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92D9E7B9291D95E1007D203D /* EventDetailHeader.swift */; }; + 92E5C1152D4820A60017CEE0 /* ListPredicateType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92E5C1142D4820A60017CEE0 /* ListPredicateType.swift */; }; 92F70AA02922B49A000BE6CB /* UrlHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92F70A9F2922B49A000BE6CB /* UrlHelper.swift */; }; /* End PBXBuildFile section */ @@ -116,6 +117,8 @@ 92CE31B028FC4A940073813E /* EventListView.swift */ = {isa = PBXFileReference; explicitFileType = sourcecode.swift; path = EventListView.swift; sourceTree = ""; }; 92D9E7B7291D7B9B007D203D /* HTMLFormattedText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HTMLFormattedText.swift; sourceTree = ""; }; 92D9E7B9291D95E1007D203D /* EventDetailHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDetailHeader.swift; sourceTree = ""; }; + 92E5C1142D4820A60017CEE0 /* ListPredicateType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListPredicateType.swift; sourceTree = ""; }; + 92E5C1162D4822DF0017CEE0 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 92F70A9F2922B49A000BE6CB /* UrlHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UrlHelper.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -184,9 +187,6 @@ 925B0260298EAE0E00AFA83D /* LiveIcon.swift */, 925B0262298EB2A400AFA83D /* VideoPlayer.swift */, 9268D799298F251E0067A6B1 /* ListSettings.swift */, - 92BD1D2D2B5C345700DB8FC1 /* EventTypeIcon.swift */, - 92BD1D2F2B5C34F100DB8FC1 /* EventTypeColor.swift */, - 92BD1D312B5C374A00DB8FC1 /* TrackColor.swift */, ); path = Views; sourceTree = ""; @@ -194,6 +194,7 @@ 14D2770C2205D07200740042 = { isa = PBXGroup; children = ( + 92E5C1162D4822DF0017CEE0 /* README.md */, 925F4A7C2B285A70007E9D1D /* Localizable.xcstrings */, 92A57B392988FD1C00C0BB78 /* Package.swift */, 92A2BDF92948CC5E0034864F /* FosdemTests.xctestplan */, @@ -225,6 +226,10 @@ 14D277242205D07500740042 /* Assets.xcassets */, 14D277292205D07500740042 /* Info.plist */, 92C22E6129806F61006D7B5C /* privacy.md */, + 92E5C1142D4820A60017CEE0 /* ListPredicateType.swift */, + 92BD1D2D2B5C345700DB8FC1 /* EventTypeIcon.swift */, + 92BD1D2F2B5C34F100DB8FC1 /* EventTypeColor.swift */, + 92BD1D312B5C374A00DB8FC1 /* TrackColor.swift */, ); path = Fosdem; sourceTree = ""; @@ -474,6 +479,7 @@ 92F70AA02922B49A000BE6CB /* UrlHelper.swift in Sources */, 9290384C2C9613FD002201FC /* ScheduleFetchingActor.swift in Sources */, 92D9E7B8291D7B9B007D203D /* HTMLFormattedText.swift in Sources */, + 92E5C1152D4820A60017CEE0 /* ListPredicateType.swift in Sources */, 142A87442224752E0034F6D7 /* EventType.swift in Sources */, 92BD1D322B5C374A00DB8FC1 /* TrackColor.swift in Sources */, ); diff --git a/Fosdem/Views/EventTypeColor.swift b/Fosdem/EventTypeColor.swift similarity index 100% rename from Fosdem/Views/EventTypeColor.swift rename to Fosdem/EventTypeColor.swift diff --git a/Fosdem/Views/EventTypeIcon.swift b/Fosdem/EventTypeIcon.swift similarity index 100% rename from Fosdem/Views/EventTypeIcon.swift rename to Fosdem/EventTypeIcon.swift diff --git a/Fosdem/Import/XmlFinder.swift b/Fosdem/Import/XmlFinder.swift deleted file mode 100644 index 05f42c9..0000000 --- a/Fosdem/Import/XmlFinder.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// XmlFinder.swift -// Fosdem -// -// Created by Sean Molenaar on 02/02/2019. -// Copyright © 2019 Sean Molenaar. All rights reserved. -// - -import Foundation -import SwiftyXMLParser - -final class XmlFinder { - static func getChildString(_ object: XML.Element, element: String) -> String? { - return XmlFinder.getChildElement(object, element: element)?.text - } - - static func getChildDate(_ object: XML.Element, element: String, timezone: String = "Z") -> Date? { - guard let text = XmlFinder.getChildElement(object, element: element)?.text else { - return nil - } - return parseDateString(text, timezone: timezone) - } - - static func parseDateString(_ element: String, timezone: String) -> Date? { - let formatter = ISO8601DateFormatter() - return formatter.date(from: "\(element)T00:00:00\(timezone)") - } - - static func parseTimeString(_ element: String, base: Date? = nil) -> TimeInterval? { - let time = element.split(separator: ":") - guard let hoursString = time.first, - let minutesString = time.last, - let hours = Int(hoursString), - let minutes = Int(minutesString) else { - return nil - } - let interval = (hours * 60 + minutes) * 60 - guard let base = base else { - return Double(interval) - } - let date = base.addingTimeInterval(Double(interval)) - return date.timeIntervalSince(base) - } - - static func getChildElement(_ object: XML.Element, element: String) -> XML.Element? { - return object.childElements.first { $0.name == element } - } -} diff --git a/Fosdem/ListPredicateType.swift b/Fosdem/ListPredicateType.swift new file mode 100644 index 0000000..4e037c0 --- /dev/null +++ b/Fosdem/ListPredicateType.swift @@ -0,0 +1,41 @@ +// +// ListPredicateType.swift +// Fosdem +// +// Created by Sean Molenaar on 27/01/2025. +// Copyright © 2025 Sean Molenaar. All rights reserved. +// + +import Foundation + +enum ListPredicateType { + case person + case room + case track + + static var all: [ListPredicateType] { + return [.track, .person, .room] + } + + static func getName(_ type: ListPredicateType) -> String { + switch type { + case .person: + return String(localized: "People") + case .room: + return String(localized: "Rooms") + case .track: + return String(localized: "Tracks") + } + } + + static func getIcon(_ type: ListPredicateType) -> String { + switch type { + case .person: + return "person" + case .room: + return "door.left.hand.open" + case .track: + return "road.lanes" + } + } +} diff --git a/Fosdem/Models/Event.swift b/Fosdem/Models/Event.swift index 934cf6c..63d6d46 100644 --- a/Fosdem/Models/Event.swift +++ b/Fosdem/Models/Event.swift @@ -25,7 +25,7 @@ public class Event { public var room: Room public var track: Track! - public var type: EventType? + public var type: EventType! public var userInfo: EventUserInfo? diff --git a/Fosdem/Models/Link.swift b/Fosdem/Models/Link.swift index c08e7a0..6dee40f 100644 --- a/Fosdem/Models/Link.swift +++ b/Fosdem/Models/Link.swift @@ -21,6 +21,8 @@ public class Link { public var isVideo: Bool { return type.contains(/video/) || name.lowercased().contains(/video recording/) } + + @Transient public var isStreamableVideo: Bool { return url.absoluteString.contains(/\.mp4$/) } diff --git a/Fosdem/Models/ManagedObjectProtocol.swift b/Fosdem/Models/ManagedObjectProtocol.swift deleted file mode 100644 index 4138b0c..0000000 --- a/Fosdem/Models/ManagedObjectProtocol.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// ManagedObjectProtocol.swift -// Fosdem -// -// Created by Sean Molenaar on 07/02/2019. -// Copyright © 2019 Sean Molenaar. All rights reserved. -// - -import Foundation -import CoreData -import SwiftyXMLParser - -protocol ManagedObjectProtocol { - static var elementName: String { get } - - static func build(_ element: XML.Element) -> NSManagedObject? -} diff --git a/Fosdem/Views/TrackColor.swift b/Fosdem/TrackColor.swift similarity index 100% rename from Fosdem/Views/TrackColor.swift rename to Fosdem/TrackColor.swift diff --git a/Fosdem/Views/ListPredicate.swift b/Fosdem/Views/ListPredicate.swift deleted file mode 100644 index b7b7af0..0000000 --- a/Fosdem/Views/ListPredicate.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// ListPredicate.swift -// Fosdem -// -// Created by Sean Molenaar on 05/02/2023. -// Copyright © 2023 Sean Molenaar. All rights reserved. -// - -import Foundation -import SwiftUI - -class ListSettings: ObservableObject { - @AppStorage(wrappedValue: false, "onlyBookmarks") var onlyBookmarks: Bool - @AppStorage(wrappedValue: false, "futureOnly") var onlyFuture: Bool - @AppStorage(wrappedValue: false, "localTime") var localTime: Bool - @AppStorage(wrappedValue: SettingsHelper.DEFAULTYEAR, "year") var year: String - - @Published var query: String? - - var isFiltering: Bool { - onlyBookmarks || onlyFuture || ( query != nil && !query!.isEmpty ) - } - - public func predicate(_ type: ListPredicateType) -> Predicate? { - var predicate: Predicate? - - if type == .person { - let basePredicate = #Predicate { !$0.authors.isEmpty } - if predicate != nil { - predicate = #Predicate { predicate!.evaluate($0) && basePredicate.evaluate($0) } - } else { - predicate = basePredicate - } - } - - if onlyBookmarks { - let basePredicate = #Predicate { $0.userInfo?.favorite ?? false } - if predicate != nil { - predicate = #Predicate { predicate!.evaluate($0) && basePredicate.evaluate($0) } - } else { - predicate = basePredicate - } - } - if onlyFuture { - let now = Date() - let basePredicate = #Predicate { $0.end > now } - if predicate != nil { - predicate = #Predicate { predicate!.evaluate($0) && basePredicate.evaluate($0) } - } else { - predicate = basePredicate - } - } - if let query = query, !query.isEmpty { - let basePredicate = #Predicate { - $0.title.localizedStandardContains(query) || $0.trackName.localizedStandardContains(query) - } - if predicate != nil { - predicate = #Predicate { predicate!.evaluate($0) && basePredicate.evaluate($0) } - } else { - predicate = basePredicate - } - } - - return predicate - } -} - -enum ListPredicateType { - case person - case room - case track -} diff --git a/Fosdem/Views/ListPredicateType.swift b/Fosdem/Views/ListPredicateType.swift new file mode 100644 index 0000000..04ef393 --- /dev/null +++ b/Fosdem/Views/ListPredicateType.swift @@ -0,0 +1,34 @@ +import Foundation +import SwiftUI + +enum ListPredicateType { + case person + case room + case track + + static var all: [ListPredicateType] { + return [.track, .person, .room] + } + + static func getName(_ type: ListPredicateType) -> String { + switch type { + case .person: + return "People" + case .room: + return "Rooms" + case .track: + return "Tracks" + } + } + + static func getIcon(_ type: ListPredicateType) -> String { + switch type { + case .person: + return "person" + case .room: + return "door.left.hand.open" + case .track: + return "road.lanes" + } + } +} \ No newline at end of file diff --git a/Fosdem/Views/ListSettings.swift b/Fosdem/Views/ListSettings.swift index e5d2cbb..6a710b1 100644 --- a/Fosdem/Views/ListSettings.swift +++ b/Fosdem/Views/ListSettings.swift @@ -92,35 +92,3 @@ class ListSettings: ObservableObject { return predicate } } - -enum ListPredicateType { - case person - case room - case track - - static var all: [ListPredicateType] { - return [.track, .person, .room] - } - - static func getName(_ type: ListPredicateType) -> String { - switch type { - case .person: - return "People" - case .room: - return "Rooms" - case .track: - return "Tracks" - } - } - - static func getIcon(_ type: ListPredicateType) -> String { - switch type { - case .person: - return "person" - case .room: - return "door.left.hand.open" - case .track: - return "road.lanes" - } - } -} diff --git a/README.md b/README.md index a009e02..a163737 100644 --- a/README.md +++ b/README.md @@ -5,4 +5,3 @@ Store: https://apps.apple.com/nl/app/fosdem-helper/id1667646664 ## TODO: - People links -- Livestream view