diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift index 69741cf8..6511e0f0 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Database/FeedDB.swift @@ -8,6 +8,7 @@ public final class FeedDB { public var title: String = "" public var subtitle: String = "" public var pubDate: Date = Date() + public var author: String? public var artworkURL: String = "" public var link: String = "" public var categories: [String] = [] @@ -21,6 +22,7 @@ public final class FeedDB { title: String = "", subtitle: String = "", pubDate: Date = Date(), + author: String? = nil, artworkURL: String = "", link: String = "", categories: [String] = [], @@ -33,6 +35,7 @@ public final class FeedDB { self.title = title self.subtitle = subtitle self.pubDate = pubDate + self.author = author self.artworkURL = artworkURL self.link = link self.categories = categories diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift index db1d8c33..7c173d79 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/Parser/XMLPost.swift @@ -28,6 +28,7 @@ extension Array where Element == XMLPost { title: $0.title, subtitle: "", pubDate: $0.pubDate, + author: $0.creator, artworkURL: $0.artworkURL, link: $0.link, categories: $0.categories, diff --git a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift index 05389e24..5e825850 100644 --- a/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift +++ b/MacMagazine/Features/FeedLibrary/Sources/FeedLibrary/Services/StorageService.swift @@ -25,6 +25,7 @@ extension Database { existing.title = feed.title existing.subtitle = feed.subtitle existing.pubDate = feed.pubDate + existing.author = feed.author existing.artworkURL = feed.artworkURL existing.link = feed.link existing.categories = Array(Set(existing.categories + feed.categories)) diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift index 6f324bec..90c44941 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Model/CardContent.swift @@ -67,6 +67,7 @@ public struct CardContent { public let analytics: AnalyticsManager? public let title: String public let pubDate: Date + public let author: String? public let artworkUrl: String public let urlToShare: String public let favorite: Bool @@ -81,6 +82,7 @@ public struct CardContent { analytics: AnalyticsManager? = nil, title: String, pubDate: Date, + author: String? = nil, artworkUrl: String, urlToShare: String, favorite: Bool, @@ -91,6 +93,7 @@ public struct CardContent { self.title = title self.analytics = analytics self.pubDate = pubDate + self.author = author self.urlToShare = urlToShare self.artworkUrl = artworkUrl self.favorite = favorite diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift index c630a07a..60cb525d 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/GlassCardView.swift @@ -188,6 +188,7 @@ private extension GlassCardView { layout { innerLayout { dateRow + authorRow statistics } Spacer(minLength: 4) @@ -199,11 +200,24 @@ private extension GlassCardView { var dateRow: some View { MetadataContent( image: "calendar", - text: data.pubDate.toTimeAgoDisplay(showTime: false) + text: data.pubDate.toTimeAgoDisplay(showTime: true) ) .foregroundStyle(.white.opacity(0.9)) } + @ViewBuilder + var authorRow: some View { + if let authorName = data.author, !authorName.isEmpty { + MetadataContent( + image: "person.fill", + text: authorName + ) + .foregroundStyle(.white.opacity(0.9)) + } else { + EmptyView() + } + } + @ViewBuilder var duration: some View { if !data.type.duration.isEmpty { diff --git a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift index 81cdd551..a2948f39 100644 --- a/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift +++ b/MacMagazine/Features/MacMagazineUILibrary/Sources/MacMagazineUILibrary/Cards/Views/LeadingImageCard.swift @@ -62,6 +62,7 @@ private extension LeadingImageCard { VStack(alignment: .leading, spacing: 6) { titleRow dateRow + authorRow Spacer(minLength: 0) } .frame(maxWidth: .infinity, alignment: .leading) @@ -90,4 +91,18 @@ private extension LeadingImageCard { .foregroundStyle(.primary.opacity(0.9)) .font(.caption2) } + + @ViewBuilder + var authorRow: some View { + if let authorName = data.author, !authorName.isEmpty { + MetadataContent( + image: "person.fill", + text: authorName + ) + .foregroundStyle(.primary.opacity(0.9)) + .font(.caption2) + } else { + EmptyView() + } + } } diff --git a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift index fab160bc..8c067d96 100644 --- a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift +++ b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Extensions/FeedDBExtensions.swift @@ -21,6 +21,7 @@ extension FeedDB { analytics: analytics, title: self.title, pubDate: self.pubDate, + author: self.author, artworkUrl: self.artworkURL, urlToShare: self.link, favorite: self.favorite, diff --git a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift index 8e256304..f2cfdd72 100644 --- a/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift +++ b/MacMagazine/Features/NewsLibrary/Sources/NewsLibrary/Views/Mock/PreviewData.swift @@ -20,6 +20,7 @@ enum PreviewData { title: title, subtitle: "Subtítulo da notícia", pubDate: Date().addingTimeInterval(-3600), + author: "MacMagazine", artworkURL: "https://picsum.photos/id/\(Int.random(in: 100...500))/800/450", link: "https://www.macmagazine.com/", categories: categories, diff --git a/MacMagazine/MacMagazine/Features/News/NewsView.swift b/MacMagazine/MacMagazine/Features/News/NewsView.swift index f1a27f7e..83f3c4f4 100644 --- a/MacMagazine/MacMagazine/Features/News/NewsView.swift +++ b/MacMagazine/MacMagazine/Features/News/NewsView.swift @@ -27,7 +27,6 @@ struct NewsView: View { .toolbar(type: toolbarType, menu: favoriteButton, options: categoriesButton) - .onChange(of: viewModel.news) { _, newValue in let newCategory = newValue.toNewsCategory guard newsCategory != newCategory else { return }