From 88e6e14b206a1d5ea11a7a8445d588150d9fb58a Mon Sep 17 00:00:00 2001 From: Aiden Vigue Date: Sat, 22 May 2021 13:10:51 -0400 Subject: [PATCH] Fix iPadOS views --- JellyfinPlayer/EpisodeItemView.swift | 40 ++++++++++++++-------------- JellyfinPlayer/MovieItemView.swift | 31 +++++++++++---------- Release Notes.rtf | 7 +++-- 3 files changed, 40 insertions(+), 38 deletions(-) diff --git a/JellyfinPlayer/EpisodeItemView.swift b/JellyfinPlayer/EpisodeItemView.swift index be010605..603068af 100644 --- a/JellyfinPlayer/EpisodeItemView.swift +++ b/JellyfinPlayer/EpisodeItemView.swift @@ -6,6 +6,7 @@ // import SwiftUI +import UIKit import SwiftyRequest import SwiftyJSON import Introspect @@ -28,7 +29,6 @@ struct EpisodeItemView: View { formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" - print((globalData.server?.baseURI ?? "") + "/Users/\(globalData.user?.user_id ?? "")/PlayedItems/\(fullItem.Id)?DatePlayed=\(formatter.string(from: date).replacingOccurrences(of: ":", with: "%3A"))") let request = RestRequest(method: .post, url: (globalData.server?.baseURI ?? "") + "/Users/\(globalData.user?.user_id ?? "")/PlayedItems/\(fullItem.Id)?DatePlayed=\(formatter.string(from: date).replacingOccurrences(of: ":", with: "%3A"))") request.headerParameters["X-Emby-Authorization"] = globalData.authHeader request.contentType = "application/json" @@ -220,12 +220,12 @@ struct EpisodeItemView: View { .placeholder { Image(uiImage: UIImage(blurHash: (fullItem.BackdropBlurHash == "" ? "W$H.4}D%bdo#a#xbtpxVW?W?jXWsXVt7Rjf5axWqxbWXnhada{s-" : fullItem.BackdropBlurHash), size: CGSize(width: 32, height: 32))!) .resizable() - .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) + .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: UIDevice.current.userInterfaceIdiom == .pad ? 350 : (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) } .opacity(0.3) .aspectRatio(contentMode: .fill) - .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) + .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: UIDevice.current.userInterfaceIdiom == .pad ? 350 : (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) .shadow(radius: 5) .overlay( HStack() { @@ -277,8 +277,8 @@ struct EpisodeItemView: View { } } }.frame(maxWidth: .infinity, alignment: .leading) - }.frame(maxWidth: .infinity, alignment: .leading).offset(x: 0, y: -46).padding(.trailing, 16) - }.offset(x: 16, y: 40) + }.frame(maxWidth: .infinity, alignment: .leading).offset(x: 0, y: UIDevice.current.userInterfaceIdiom == .pad ? -98 : -46).padding(.trailing, 16) + }.offset(x: 16, y: UIDevice.current.userInterfaceIdiom == .pad ? 135 : 40) , alignment: .bottomLeading) VStack(alignment: .leading) { HStack() { @@ -390,7 +390,7 @@ struct EpisodeItemView: View { Spacer().frame(height: 3) } } - }.padding(EdgeInsets(top: 24, leading: 0, bottom: 0, trailing: 0)) + }.padding(EdgeInsets(top: UIDevice.current.userInterfaceIdiom == .pad ? 54 : 24, leading: 0, bottom: 0, trailing: 0)) } } } else { @@ -401,12 +401,12 @@ struct EpisodeItemView: View { .placeholder { Image(uiImage: UIImage(blurHash: (fullItem.BackdropBlurHash == "" ? "W$H.4}D%bdo#a#xbtpxVW?W?jXWsXVt7Rjf5axWqxbWXnhada{s-" : fullItem.BackdropBlurHash), size: CGSize(width: 32, height: 32))!) .resizable() - .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) + .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: geometry.size.height + geometry.safeAreaInsets.top + geometry.safeAreaInsets.bottom) } .opacity(0.3) .aspectRatio(contentMode: .fill) - .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) + .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: geometry.size.height + geometry.safeAreaInsets.top + geometry.safeAreaInsets.bottom) .edgesIgnoringSafeArea(.all) HStack() { VStack() { @@ -501,11 +501,11 @@ struct EpisodeItemView: View { } } } - } + }.padding(.trailing, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) if(fullItem.Tagline != "") { - Text(fullItem.Tagline).font(.body).italic().padding(.top, 3).fixedSize(horizontal: false, vertical: true).padding(.leading, 16).padding(.trailing,16) + Text(fullItem.Tagline).font(.body).italic().padding(.top, 3).fixedSize(horizontal: false, vertical: true).padding(.leading, 16).padding(.trailing, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } - Text(fullItem.Overview).font(.footnote).padding(.top, 3).fixedSize(horizontal: false, vertical: true).padding(.bottom, 3).padding(.leading, 16).padding(.trailing,16) + Text(fullItem.Overview).font(.footnote).padding(.top, 3).fixedSize(horizontal: false, vertical: true).padding(.bottom, 3).padding(.leading, 16).padding(.trailing, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) if(fullItem.Genres.count != 0) { ScrollView(.horizontal, showsIndicators: false) { HStack() { @@ -515,7 +515,7 @@ struct EpisodeItemView: View { Text(genre.Name).font(.footnote) } } - }.padding(.leading, 16).padding(.trailing,16) + }.padding(.leading, 16).padding(.trailing, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } } if(fullItem.Cast.count != 0) { @@ -547,7 +547,7 @@ struct EpisodeItemView: View { } Spacer().frame(width: 10) } - Spacer().frame(width: 16) + Spacer().frame(width: UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } } }.padding(.top, -3) @@ -556,31 +556,31 @@ struct EpisodeItemView: View { HStack() { Text("Directors:").font(.callout).fontWeight(.semibold) Text(fullItem.Directors.joined(separator: ", ")).font(.footnote).lineLimit(1).foregroundColor(Color.secondary) - }.padding(.leading, 16).padding(.trailing,16) + }.padding(.leading, 16).padding(.trailing, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } if(fullItem.Writers.count != 0) { HStack() { Text("Writers:").font(.callout).fontWeight(.semibold) Text(fullItem.Writers.joined(separator: ", ")).font(.footnote).lineLimit(1).foregroundColor(Color.secondary) - }.padding(.leading, 16).padding(.trailing,16) + }.padding(.leading, 16).padding(.trailing, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } if(fullItem.Studios.count != 0) { HStack() { Text("Studios:").font(.callout).fontWeight(.semibold) Text(fullItem.Studios.joined(separator: ", ")).font(.footnote).lineLimit(1).foregroundColor(Color.secondary) - }.padding(.leading, 16).padding(.trailing,16) + }.padding(.leading, 16).padding(.trailing, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } - Spacer().frame(height: 195); + Spacer().frame(height: 100); }.frame(maxHeight: .infinity) - }.padding(.trailing, 55) - }.padding(.top, 12) + } + }.padding(.top, 12).padding(.leading, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55).edgesIgnoringSafeArea(.leading) } } } } } .navigationBarTitleDisplayMode(.inline) - .navigationTitle(fullItem.Name) + .navigationTitle("\(fullItem.Name) - S\(String(fullItem.ParentIndexNumber ?? 0)):E\(String(fullItem.IndexNumber ?? 0)) - \(fullItem.SeriesName ?? "")") .supportedOrientations(.allButUpsideDown) .prefersHomeIndicatorAutoHidden(false) .withHostingWindow() { window in diff --git a/JellyfinPlayer/MovieItemView.swift b/JellyfinPlayer/MovieItemView.swift index f0ecd5f1..f7a0fcdd 100644 --- a/JellyfinPlayer/MovieItemView.swift +++ b/JellyfinPlayer/MovieItemView.swift @@ -76,7 +76,6 @@ struct MovieItemView: View { let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(secondsFromGMT: 0) - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ" print((globalData.server?.baseURI ?? "") + "/Users/\(globalData.user?.user_id ?? "")/PlayedItems/\(fullItem.Id)?DatePlayed=\(formatter.string(from: date).replacingOccurrences(of: ":", with: "%3A"))") let request = RestRequest(method: .post, url: (globalData.server?.baseURI ?? "") + "/Users/\(globalData.user?.user_id ?? "")/PlayedItems/\(fullItem.Id)?DatePlayed=\(formatter.string(from: date).replacingOccurrences(of: ":", with: "%3A"))") request.headerParameters["X-Emby-Authorization"] = globalData.authHeader @@ -267,12 +266,12 @@ struct MovieItemView: View { .placeholder { Image(uiImage: UIImage(blurHash: (fullItem.BackdropBlurHash == "" ? "W$H.4}D%bdo#a#xbtpxVW?W?jXWsXVt7Rjf5axWqxbWXnhada{s-" : fullItem.BackdropBlurHash), size: CGSize(width: 32, height: 32))!) .resizable() - .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) + .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: UIDevice.current.userInterfaceIdiom == .pad ? 350 : (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) } .opacity(0.3) .aspectRatio(contentMode: .fill) - .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) + .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: UIDevice.current.userInterfaceIdiom == .pad ? 350 : (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) .shadow(radius: 5) .overlay( HStack() { @@ -324,8 +323,8 @@ struct MovieItemView: View { } } }.frame(maxWidth: .infinity, alignment: .leading) - }.offset(x: 0, y: -46).padding(.trailing, 16) - }.offset(x: 16, y: 40) + }.offset(x: 0, y: UIDevice.current.userInterfaceIdiom == .pad ? -98 : -46).padding(.trailing, 16) + }.offset(x: 16, y: UIDevice.current.userInterfaceIdiom == .pad ? 135 : 40) , alignment: .bottomLeading) VStack(alignment: .leading) { HStack() { @@ -437,7 +436,7 @@ struct MovieItemView: View { Spacer().frame(height: 3) } } - }.padding(EdgeInsets(top: 24, leading: 0, bottom: 0, trailing: 0)) + }.padding(EdgeInsets(top: UIDevice.current.userInterfaceIdiom == .pad ? 54 : 24, leading: 0, bottom: 0, trailing: 0)) } } } else { @@ -448,12 +447,12 @@ struct MovieItemView: View { .placeholder { Image(uiImage: UIImage(blurHash: (fullItem.BackdropBlurHash == "" ? "W$H.4}D%bdo#a#xbtpxVW?W?jXWsXVt7Rjf5axWqxbWXnhada{s-" : fullItem.BackdropBlurHash), size: CGSize(width: 32, height: 32))!) .resizable() - .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) + .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: geometry.size.height + geometry.safeAreaInsets.top + geometry.safeAreaInsets.bottom) } .opacity(0.3) .aspectRatio(contentMode: .fill) - .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: (geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing) * 0.5625) + .frame(width: geometry.size.width + geometry.safeAreaInsets.leading + geometry.safeAreaInsets.trailing, height: geometry.size.height + geometry.safeAreaInsets.top + geometry.safeAreaInsets.bottom) .edgesIgnoringSafeArea(.all) HStack() { VStack() { @@ -549,9 +548,9 @@ struct MovieItemView: View { } } if(fullItem.Tagline != "") { - Text(fullItem.Tagline).font(.body).italic().padding(.top, 3).fixedSize(horizontal: false, vertical: true).padding(.leading, 16).padding(.trailing,16) + Text(fullItem.Tagline).font(.body).italic().padding(.top, 3).fixedSize(horizontal: false, vertical: true).padding(.leading, 16).padding(.trailing,UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } - Text(fullItem.Overview).font(.footnote).padding(.top, 3).fixedSize(horizontal: false, vertical: true).padding(.bottom, 3).padding(.leading, 16).padding(.trailing,16) + Text(fullItem.Overview).font(.footnote).padding(.top, 3).fixedSize(horizontal: false, vertical: true).padding(.bottom, 3).padding(.leading, 16).padding(.trailing,UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) if(fullItem.Genres.count != 0) { ScrollView(.horizontal, showsIndicators: false) { HStack() { @@ -561,7 +560,7 @@ struct MovieItemView: View { Text(genre.Name).font(.footnote) } } - }.padding(.leading, 16).padding(.trailing,16) + }.padding(.leading, 16).padding(.trailing,UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } } if(fullItem.Cast.count != 0) { @@ -593,7 +592,7 @@ struct MovieItemView: View { } Spacer().frame(width: 10) } - Spacer().frame(width: 16) + Spacer().frame(width: UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } } }.padding(.top, -3) @@ -602,24 +601,24 @@ struct MovieItemView: View { HStack() { Text("Directors:").font(.callout).fontWeight(.semibold) Text(fullItem.Directors.joined(separator: ", ")).font(.footnote).lineLimit(1).foregroundColor(Color.secondary) - }.padding(.leading, 16).padding(.trailing,16) + }.padding(.leading, 16).padding(.trailing,UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } if(fullItem.Writers.count != 0) { HStack() { Text("Writers:").font(.callout).fontWeight(.semibold) Text(fullItem.Writers.joined(separator: ", ")).font(.footnote).lineLimit(1).foregroundColor(Color.secondary) - }.padding(.leading, 16).padding(.trailing,16) + }.padding(.leading, 16).padding(.trailing,UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } if(fullItem.Studios.count != 0) { HStack() { Text("Studios:").font(.callout).fontWeight(.semibold) Text(fullItem.Studios.joined(separator: ", ")).font(.footnote).lineLimit(1).foregroundColor(Color.secondary) - }.padding(.leading, 16).padding(.trailing,16) + }.padding(.leading, 16).padding(.trailing,UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55) } Spacer().frame(height: 195); }.frame(maxHeight: .infinity) }.padding(.trailing, 55) - }.padding(.top, 12) + }.padding(.top, 12).padding(.leading, UIDevice.current.userInterfaceIdiom == .pad ? 16 : 55).edgesIgnoringSafeArea(.leading) } } } diff --git a/Release Notes.rtf b/Release Notes.rtf index 22077e93..c806fa37 100644 --- a/Release Notes.rtf +++ b/Release Notes.rtf @@ -36,6 +36,9 @@ \f0\b\fs26 1.0.0 (Build: 9)\ \pard\tx220\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li720\fi-720\pardirnatural\partightenfactor0 \ls3\ilvl0\cf0 {\listtext \uc0\u8259 } -\f1\b0 Fixed pointer dereferencing error in ContinueWatchingView:67 -\f0\b \ +\f1\b0\fs24 Fixed pointer dereferencing error in ContinueWatchingView:67\ +\ls3\ilvl0 +\f0\b {\listtext \uc0\u8259 } +\f1\b0 Fixed iPadOS bugs on movie & episode screen where images would not cover full page. +\f0\b\fs26 \ } \ No newline at end of file