From 17c41be8775a82245a64fee94b1774186f896fce Mon Sep 17 00:00:00 2001 From: Thomas Ricouard Date: Wed, 9 Jun 2021 12:32:24 +0200 Subject: [PATCH] iOS 15 WIP --- .../MovieSwift.xcodeproj/project.pbxproj | 4 ++-- .../custom list/CustomListDetail.swift | 1 + .../custom list/CustomListForm.swift | 1 + .../components/fan club/FanClubHome.swift | 3 +++ .../components/movieDetail/MovieDetail.swift | 3 ++- .../movieDetail/rows/MovieCoverRow.swift | 3 +-- .../movieDetail/rows/MovieCrosslineRow.swift | 3 +-- .../movieDetail/rows/MoviePostersRow.swift | 3 +-- .../components/moviesGrid/MovieGridRow.swift | 3 +-- .../grid/rows/MoviesHomeGridMoviesRow.swift | 3 +-- .../moviesList/base/MoviesList.swift | 2 +- .../components/moviesList/rows/MovieRow.swift | 3 +-- .../rows/PeopleDetailMovieRow.swift | 3 +-- .../Backend/services/ImageService.swift | 2 +- .../Shared/views/MoviePosterImage.swift | 19 +++++-------------- 15 files changed, 23 insertions(+), 33 deletions(-) diff --git a/MovieSwift/MovieSwift.xcodeproj/project.pbxproj b/MovieSwift/MovieSwift.xcodeproj/project.pbxproj index 48eb7ab1..42f8e9fc 100644 --- a/MovieSwift/MovieSwift.xcodeproj/project.pbxproj +++ b/MovieSwift/MovieSwift.xcodeproj/project.pbxproj @@ -1238,7 +1238,7 @@ DEVELOPMENT_TEAM = Z6P74P6T99; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = MovieSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -1272,7 +1272,7 @@ DEVELOPMENT_TEAM = Z6P74P6T99; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = MovieSwift/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; "IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/MovieSwift/MovieSwift/views/components/custom list/CustomListDetail.swift b/MovieSwift/MovieSwift/views/components/custom list/CustomListDetail.swift index dcf6e501..88835588 100644 --- a/MovieSwift/MovieSwift/views/components/custom list/CustomListDetail.swift +++ b/MovieSwift/MovieSwift/views/components/custom list/CustomListDetail.swift @@ -135,6 +135,7 @@ struct CustomListDetail : View { .sheet(isPresented: $isEditingFormPresented, content: { CustomListForm(editingListId: self.listId).environmentObject(self.store) }) + .listStyle(.plain) .environment(\.editMode, .constant(isSearching ? .active : .inactive)) } } diff --git a/MovieSwift/MovieSwift/views/components/custom list/CustomListForm.swift b/MovieSwift/MovieSwift/views/components/custom list/CustomListForm.swift index 47f2bfb1..40cde85f 100644 --- a/MovieSwift/MovieSwift/views/components/custom list/CustomListForm.swift +++ b/MovieSwift/MovieSwift/views/components/custom list/CustomListForm.swift @@ -121,6 +121,7 @@ struct CustomListForm : View { coverSection buttonsSection } + .listStyle(.plain) .navigationBarTitle(Text("New list")) } .navigationViewStyle(StackNavigationViewStyle()) diff --git a/MovieSwift/MovieSwift/views/components/fan club/FanClubHome.swift b/MovieSwift/MovieSwift/views/components/fan club/FanClubHome.swift index b7e2d831..d8fdfccb 100644 --- a/MovieSwift/MovieSwift/views/components/fan club/FanClubHome.swift +++ b/MovieSwift/MovieSwift/views/components/fan club/FanClubHome.swift @@ -17,6 +17,7 @@ struct FanClubHome: ConnectedView { } @State private var currentPage = 1 + @State private var searchText = "" func map(state: AppState , dispatch: @escaping DispatchFunction) -> Props { Props(peoples: state.peoplesState.fanClub.map{ $0 }.sorted(), @@ -56,9 +57,11 @@ struct FanClubHome: ConnectedView { } } } + .listStyle(.insetGrouped) .navigationBarTitle("Fan Club") .animation(.spring()) } + .searchable(text: $searchText) .onAppear { if self.currentPage == 1{ props.dispatch(PeopleActions.FetchPopular(page: self.currentPage)) diff --git a/MovieSwift/MovieSwift/views/components/movieDetail/MovieDetail.swift b/MovieSwift/MovieSwift/views/components/movieDetail/MovieDetail.swift index b98233ac..bb1560f7 100644 --- a/MovieSwift/MovieSwift/views/components/movieDetail/MovieDetail.swift +++ b/MovieSwift/MovieSwift/views/components/movieDetail/MovieDetail.swift @@ -163,7 +163,7 @@ struct MovieDetail: ConnectedView { if props.similar?.isEmpty == false { MovieCrosslineRow(title: "Similar Movies", movies: props.similar ?? []) } - if props.recommended?.isEmpty == false { + if props.recommended?.isEmpty == false { MovieCrosslineRow(title: "Recommended Movies", movies: props.recommended ?? []) } if props.movie.images?.posters?.isEmpty == false { @@ -182,6 +182,7 @@ struct MovieDetail: ConnectedView { topSection(props: props) bottomSection(props: props) } + .listStyle(.plain) .navigationBarTitle(Text(props.movie.userTitle), displayMode: .large) .navigationBarItems(trailing: Button(action: onAddButton) { Image(systemName: "text.badge.plus").imageScale(.large) diff --git a/MovieSwift/MovieSwift/views/components/movieDetail/rows/MovieCoverRow.swift b/MovieSwift/MovieSwift/views/components/movieDetail/rows/MovieCoverRow.swift index b50e75ff..f1a5f017 100644 --- a/MovieSwift/MovieSwift/views/components/movieDetail/rows/MovieCoverRow.swift +++ b/MovieSwift/MovieSwift/views/components/movieDetail/rows/MovieCoverRow.swift @@ -29,8 +29,7 @@ struct MovieCoverRow : ConnectedView { fill: false) VStack(alignment: .leading) { HStack(spacing: 16) { - MoviePosterImage(imageLoader: ImageLoaderCache.shared.loaderFor(path: props.movie.poster_path, - size: .medium), + MoviePosterImage(posterURL: ImageService.Size.medium.path(poster: props.movie.poster_path ?? ""), posterSize: .medium) .padding(.leading, 16) VStack(alignment: .leading, spacing: 16) { diff --git a/MovieSwift/MovieSwift/views/components/movieDetail/rows/MovieCrosslineRow.swift b/MovieSwift/MovieSwift/views/components/movieDetail/rows/MovieCrosslineRow.swift index 12eecc89..7564642e 100644 --- a/MovieSwift/MovieSwift/views/components/movieDetail/rows/MovieCrosslineRow.swift +++ b/MovieSwift/MovieSwift/views/components/movieDetail/rows/MovieCrosslineRow.swift @@ -52,8 +52,7 @@ struct MovieDetailRowItem: View { NavigationLink(destination: MovieDetail(movieId: movie.id)) { VStack(alignment: .center) { ZStack(alignment: .topLeading) { - MoviePosterImage(imageLoader: ImageLoaderCache.shared.loaderFor(path: movie.poster_path, - size: .medium), + MoviePosterImage(posterURL: ImageService.Size.medium.path(poster: movie.poster_path ?? ""), posterSize: .medium) ListImage(movieId: movie.id) diff --git a/MovieSwift/MovieSwift/views/components/movieDetail/rows/MoviePostersRow.swift b/MovieSwift/MovieSwift/views/components/movieDetail/rows/MoviePostersRow.swift index 5b62772a..2e601cf2 100644 --- a/MovieSwift/MovieSwift/views/components/movieDetail/rows/MoviePostersRow.swift +++ b/MovieSwift/MovieSwift/views/components/movieDetail/rows/MoviePostersRow.swift @@ -21,8 +21,7 @@ struct MoviePostersRow : View { ScrollView(.horizontal, showsIndicators: false) { HStack(spacing: 32) { ForEach(self.posters) { poster in - MoviePosterImage(imageLoader: ImageLoaderCache.shared.loaderFor(path: poster.file_path, - size: .medium), + MoviePosterImage(posterURL: ImageService.Size.medium.path(poster: poster.file_path), posterSize: .medium) .onTapGesture { withAnimation { diff --git a/MovieSwift/MovieSwift/views/components/moviesGrid/MovieGridRow.swift b/MovieSwift/MovieSwift/views/components/moviesGrid/MovieGridRow.swift index d2020dd6..6cc340c6 100644 --- a/MovieSwift/MovieSwift/views/components/moviesGrid/MovieGridRow.swift +++ b/MovieSwift/MovieSwift/views/components/moviesGrid/MovieGridRow.swift @@ -24,8 +24,7 @@ struct MovieGridRow: ConnectedView { func body(props: Props) -> some View { - MoviePosterImage(imageLoader: ImageLoaderCache.shared.loaderFor(path: props.movie.poster_path, - size: .medium), + MoviePosterImage(posterURL: ImageService.Size.medium.path(poster: props.movie.poster_path ?? ""), posterSize: .medium) } } diff --git a/MovieSwift/MovieSwift/views/components/moviesHome/grid/rows/MoviesHomeGridMoviesRow.swift b/MovieSwift/MovieSwift/views/components/moviesHome/grid/rows/MoviesHomeGridMoviesRow.swift index 85d7fcac..836f7815 100644 --- a/MovieSwift/MovieSwift/views/components/moviesHome/grid/rows/MoviesHomeGridMoviesRow.swift +++ b/MovieSwift/MovieSwift/views/components/moviesHome/grid/rows/MoviesHomeGridMoviesRow.swift @@ -33,8 +33,7 @@ struct MoviesHomeGridMoviesRow: ConnectedView { ForEach(props.movies) { movie in NavigationLink(destination: MovieDetail(movieId: movie.id)) { ZStack { - MoviePosterImage(imageLoader: ImageLoaderCache.shared.loaderFor(path: movie.poster_path, - size: .medium), + MoviePosterImage(posterURL: ImageService.Size.medium.path(poster: movie.poster_path ?? ""), posterSize: .medium) .contextMenu{ MovieContextMenu(movieId: movie.id) } ListImage(movieId: movie.id) diff --git a/MovieSwift/MovieSwift/views/components/moviesList/base/MoviesList.swift b/MovieSwift/MovieSwift/views/components/moviesList/base/MoviesList.swift index f863fefd..c47ee9aa 100644 --- a/MovieSwift/MovieSwift/views/components/moviesList/base/MoviesList.swift +++ b/MovieSwift/MovieSwift/views/components/moviesList/base/MoviesList.swift @@ -167,7 +167,7 @@ struct MoviesList: ConnectedView { } } } - .listStyle(PlainListStyle()) + .listStyle(.plain) .onAppear { if selectedItem != nil { selectedItem = nil diff --git a/MovieSwift/MovieSwift/views/components/moviesList/rows/MovieRow.swift b/MovieSwift/MovieSwift/views/components/moviesList/rows/MovieRow.swift index 4830f084..ac260db7 100644 --- a/MovieSwift/MovieSwift/views/components/moviesList/rows/MovieRow.swift +++ b/MovieSwift/MovieSwift/views/components/moviesList/rows/MovieRow.swift @@ -33,8 +33,7 @@ struct MovieRow: ConnectedView { func body(props: Props) -> some View { HStack { ZStack(alignment: .topLeading) { - MoviePosterImage(imageLoader: ImageLoaderCache.shared.loaderFor(path: props.movie.poster_path, - size: .medium), + MoviePosterImage(posterURL: ImageService.Size.medium.path(poster: props.movie.poster_path ?? ""), posterSize: .medium) if displayListImage { ListImage(movieId: movieId) diff --git a/MovieSwift/MovieSwift/views/components/peopleDetail/rows/PeopleDetailMovieRow.swift b/MovieSwift/MovieSwift/views/components/peopleDetail/rows/PeopleDetailMovieRow.swift index 7ff2279d..52f9e35c 100644 --- a/MovieSwift/MovieSwift/views/components/peopleDetail/rows/PeopleDetailMovieRow.swift +++ b/MovieSwift/MovieSwift/views/components/peopleDetail/rows/PeopleDetailMovieRow.swift @@ -24,8 +24,7 @@ struct PeopleDetailMovieRow : View { var body: some View { HStack { ZStack { - MoviePosterImage(imageLoader: ImageLoaderCache.shared.loaderFor(path: movie.poster_path, - size: .small), + MoviePosterImage(posterURL: ImageService.Size.small.path(poster: movie.poster_path ?? ""), posterSize: .small) ListImage(movieId: movieId) }.fixedSize() diff --git a/MovieSwift/Packages/Backend/Sources/Backend/services/ImageService.swift b/MovieSwift/Packages/Backend/Sources/Backend/services/ImageService.swift index a8452f2e..e678ba70 100644 --- a/MovieSwift/Packages/Backend/Sources/Backend/services/ImageService.swift +++ b/MovieSwift/Packages/Backend/Sources/Backend/services/ImageService.swift @@ -20,7 +20,7 @@ public class ImageService { case cast = "https://image.tmdb.org/t/p/w185/" case original = "https://image.tmdb.org/t/p/original/" - func path(poster: String) -> URL { + public func path(poster: String) -> URL { return URL(string: rawValue)!.appendingPathComponent(poster) } } diff --git a/MovieSwift/Shared/views/MoviePosterImage.swift b/MovieSwift/Shared/views/MoviePosterImage.swift index 453c33f2..724d0532 100644 --- a/MovieSwift/Shared/views/MoviePosterImage.swift +++ b/MovieSwift/Shared/views/MoviePosterImage.swift @@ -10,25 +10,16 @@ import SwiftUI import Backend struct MoviePosterImage: View { - @ObservedObject var imageLoader: ImageLoader - @State var isImageLoaded = false + let posterURL: URL? let posterSize: PosterStyle.Size var body: some View { - if let image = imageLoader.image { - Image(uiImage: image) - .resizable() - .renderingMode(.original) - .posterStyle(loaded: true, size: posterSize) - .onAppear{ - isImageLoaded = true - } - .animation(.easeInOut) - .transition(.opacity) - } else { + AsyncImage(url: posterURL) { + $0.resizable() + } placeholder: { Rectangle() .foregroundColor(.gray) - .posterStyle(loaded: false, size: posterSize) } + .posterStyle(loaded: true, size: posterSize) } }