From 33b07566cbc07295131e9fe0e14643fbd9c5d14a Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Thu, 22 Feb 2024 14:13:53 -0500 Subject: Revamp EpisodeIconView + format item.overview properly Some metadata sources use '
' instead of '\n' for newlines. This fixes that for the most part. --- Jel/Extensions/BaseItemDtoExtensions.swift | 36 ++++++++++++++++++++++ Jel/Extensions/JellyfinKitExtensions.swift | 28 ----------------- Jel/Views/Item/ItemMediaView.swift | 2 +- .../Item/Series/ItemSeriesEpisodeIconView.swift | 24 +++++++-------- Jel/Views/Item/Types/ItemPersonView.swift | 2 +- Jel/Views/Item/Types/ItemSeasonView.swift | 2 +- 6 files changed, 51 insertions(+), 43 deletions(-) create mode 100644 Jel/Extensions/BaseItemDtoExtensions.swift delete mode 100644 Jel/Extensions/JellyfinKitExtensions.swift (limited to 'Jel') diff --git a/Jel/Extensions/BaseItemDtoExtensions.swift b/Jel/Extensions/BaseItemDtoExtensions.swift new file mode 100644 index 0000000..27771bb --- /dev/null +++ b/Jel/Extensions/BaseItemDtoExtensions.swift @@ -0,0 +1,36 @@ +// +// JellyfinKitExtensions.swift +// Jel +// +// Created by zerocool on 12/24/23. +// + +import Foundation +import JellyfinKit + +extension BaseItemDto { + func getRuntime() -> String? { + let formatter: DateComponentsFormatter = { + let localFormatter = DateComponentsFormatter() + localFormatter.unitsStyle = .brief + localFormatter.allowedUnits = [.hour, .minute] + + return localFormatter + }() + + if let runTimeTicks = self.runTimeTicks { + let text = formatter.string(from: Double(runTimeTicks / 10_000_000)) + return text + } + + return nil + } +} + +extension BaseItemDto { + var overviewNL: String? { + get { + self.overview?.replacingOccurrences(of: "
", with: "\n") + } + } +} diff --git a/Jel/Extensions/JellyfinKitExtensions.swift b/Jel/Extensions/JellyfinKitExtensions.swift deleted file mode 100644 index 197731c..0000000 --- a/Jel/Extensions/JellyfinKitExtensions.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// JellyfinKitExtensions.swift -// Jel -// -// Created by zerocool on 12/24/23. -// - -import Foundation -import JellyfinKit - -extension BaseItemDto { - func getRuntime() -> String? { - let formatter: DateComponentsFormatter = { - let localFormatter = DateComponentsFormatter() - localFormatter.unitsStyle = .brief - localFormatter.allowedUnits = [.hour, .minute] - - return localFormatter - }() - - if let runTimeTicks = self.runTimeTicks { - let text = formatter.string(from: Double(runTimeTicks / 10_000_000)) - return text - } - - return nil - } -} diff --git a/Jel/Views/Item/ItemMediaView.swift b/Jel/Views/Item/ItemMediaView.swift index efcfb55..515cf47 100644 --- a/Jel/Views/Item/ItemMediaView.swift +++ b/Jel/Views/Item/ItemMediaView.swift @@ -19,7 +19,7 @@ struct ItemMediaView: View { .font(.headline) .frame(maxWidth: .infinity, alignment: .leading) - ExpandableText((item.overview ?? "").replacingOccurrences(of: "
", with: "")) + ExpandableText((item.overviewNL ?? "").replacingOccurrences(of: "
", with: "")) .lineLimit(8) } } diff --git a/Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift b/Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift index 9217bea..c198e66 100644 --- a/Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift +++ b/Jel/Views/Item/Series/ItemSeriesEpisodeIconView.swift @@ -14,30 +14,30 @@ struct ItemSeriesEpisodeIconView: View { @EnvironmentObject var size: ScreenSize - var iconWidthMultiplier: CGFloat = 0.35 + var iconWidthMultiplier: CGFloat = 0.5 var body: some View { VStack(alignment: .leading) { - HStack(alignment: .top) { - ItemIconView(item: item, width: (size.size.width * iconWidthMultiplier), height: (size.size.width * iconWidthMultiplier) / 1.7) + HStack { + ItemIconView(item: item, + width: (size.size.width * iconWidthMultiplier), + height: (size.size.width * iconWidthMultiplier) / 1.7, + contentMode: .fill) VStack(alignment: .leading) { Text("Episode \(item.indexNumber ?? 0)") - .foregroundStyle(Color.secondary) - .font(.caption) - Text(item.name ?? "---") - .bold() - .lineLimit(nil) - - Text(item.overview ?? "") - .foregroundStyle(Color.secondary) + .foregroundStyle(.secondary) .font(.callout) - Spacer() + Text(item.name ?? "---") + .bold() } .frame(height: (size.size.width * iconWidthMultiplier) / 1.7) } + ExpandableText((item.overviewNL ?? "").replacingOccurrences(of: "
", with: "\n")) + .foregroundColor(.secondary) } + .padding(.vertical) } } diff --git a/Jel/Views/Item/Types/ItemPersonView.swift b/Jel/Views/Item/Types/ItemPersonView.swift index 9aad716..15a300c 100644 --- a/Jel/Views/Item/Types/ItemPersonView.swift +++ b/Jel/Views/Item/Types/ItemPersonView.swift @@ -44,7 +44,7 @@ struct ItemPersonView: View { .font(.title) .padding([.horizontal, .top]) - if let overview = item.overview { + if let overview = item.overviewNL { ExpandableText(overview) .lineLimit(8) .padding([.horizontal, .bottom]) diff --git a/Jel/Views/Item/Types/ItemSeasonView.swift b/Jel/Views/Item/Types/ItemSeasonView.swift index f73c9a5..7eae8bb 100644 --- a/Jel/Views/Item/Types/ItemSeasonView.swift +++ b/Jel/Views/Item/Types/ItemSeasonView.swift @@ -13,7 +13,7 @@ struct ItemSeasonView: View { var body: some View { VStack { - if item.overview != nil { + if item.overviewNL != nil { ItemMediaView(item: item) .padding([.horizontal, .bottom]) } -- cgit v1.2.3