Skip to content

Commit

Permalink
MainView Changed, now we can interact with the episodes.
Browse files Browse the repository at this point in the history
  • Loading branch information
jsanzdev committed Jan 6, 2023
1 parent 182d1d1 commit 0c4f147
Show file tree
Hide file tree
Showing 9 changed files with 104 additions and 55 deletions.
4 changes: 4 additions & 0 deletions BBTGuide.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
09418CD7293BBD37000B34EF /* DetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09418CD6293BBD37000B34EF /* DetailViewModel.swift */; };
097041232947AC7B007910B8 /* SeasonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097041222947AC7B007910B8 /* SeasonsView.swift */; };
097041252947AD1B007910B8 /* SeasonsDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 097041242947AD1B007910B8 /* SeasonsDetailView.swift */; };
09A127A329689C65006502F7 /* AllEpisodesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09A127A229689C65006502F7 /* AllEpisodesView.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
Expand All @@ -45,6 +46,7 @@
09418CD6293BBD37000B34EF /* DetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailViewModel.swift; sourceTree = "<group>"; };
097041222947AC7B007910B8 /* SeasonsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeasonsView.swift; sourceTree = "<group>"; };
097041242947AD1B007910B8 /* SeasonsDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeasonsDetailView.swift; sourceTree = "<group>"; };
09A127A229689C65006502F7 /* AllEpisodesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllEpisodesView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -109,6 +111,7 @@
isa = PBXGroup;
children = (
097041222947AC7B007910B8 /* SeasonsView.swift */,
09A127A229689C65006502F7 /* AllEpisodesView.swift */,
097041242947AD1B007910B8 /* SeasonsDetailView.swift */,
09418CD0293BBCFB000B34EF /* EpisodeDetailView.swift */,
09418CD2293BBD19000B34EF /* TabController.swift */,
Expand Down Expand Up @@ -236,6 +239,7 @@
09418CD5293BBD25000B34EF /* FavoritesView.swift in Sources */,
09418CD1293BBCFB000B34EF /* EpisodeDetailView.swift in Sources */,
09395CCA2953657100F3EC3D /* RatingView.swift in Sources */,
09A127A329689C65006502F7 /* AllEpisodesView.swift in Sources */,
097041252947AD1B007910B8 /* SeasonsDetailView.swift in Sources */,
097041232947AC7B007910B8 /* SeasonsView.swift in Sources */,
09418CCF293B7D1D000B34EF /* SeasonCell.swift in Sources */,
Expand Down
51 changes: 51 additions & 0 deletions BBTGuide/AllEpisodesView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//
// AllEpisodesView.swift
// BBTGuide
//
// Created by Jesus Sanz on 6/1/23.
//

import SwiftUI

struct AllEpisodesView: View {
@EnvironmentObject var episodesVM:EpisodesViewModel
@State var path = NavigationPath()

var body: some View {
NavigationStack(path: $path) {
List {
ForEach(episodesVM.seasonsSection, id:\.self) { episodes in
DisclosureGroup {
ForEach(episodes) { episode in
NavigationLink(value: episode) {
EpisodeCell(detailVM: DetailViewModel(episode: episode))
}
}
} label: {
SeasonCell(season: episodes)
}
}
.swipeActions(edge: .leading, allowsFullSwipe: true) {
Button {
} label: {
Image(systemName: "eye.circle.fill")
}
}
.tint(.green)
}
.listStyle(.sidebar)
.navigationDestination(for: Episode.self) { episode in
EpisodeDetailView(detailVM: DetailViewModel(episode: episode))
}
.navigationTitle("The Big Bang Theory")
.searchable(text: $episodesVM.search)
}
}
}

struct AllEpisodesView_Previews: PreviewProvider {
static var previews: some View {
AllEpisodesView()
.environmentObject(EpisodesViewModel())
}
}
26 changes: 5 additions & 21 deletions BBTGuide/DetailViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,15 @@ import SwiftUI

final class DetailViewModel:ObservableObject {
let persistence = ModelPersistence()
let episodeVM = EpisodesViewModel()
let episodesVM = EpisodesViewModel()

let episode:Episode


@Published var watched:Bool {
didSet {
episodeVM.updateEpisode(episode: saveEpisode(episode: episode))
}
}
@Published var favorite:Bool {
didSet {
episodeVM.updateEpisode(episode: saveEpisode(episode: episode))
}
}
@Published var score:Int {
didSet {
episodeVM.updateEpisode(episode: saveEpisode(episode: episode))
}
}
@Published var notes:String {
didSet {
episodeVM.updateEpisode(episode: saveEpisode(episode: episode))
}
}
@Published var watched = false
@Published var favorite = false
@Published var score = 0
@Published var notes = ""

init(episode:Episode) {
self.episode = episode
Expand Down
17 changes: 8 additions & 9 deletions BBTGuide/EpisodeCell.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,29 @@
import SwiftUI

struct EpisodeCell: View {

let episode:Episode
@ObservedObject var detailVM:DetailViewModel

var body: some View {
HStack {
VStack(alignment: .leading) {
HStack {
Text(episode.name)
Text(detailVM.episode.name)
.font(.headline)
Spacer()
RatingViewCell(rating: episode.score)
RatingViewCell(rating: detailVM.score)
}
. padding(.bottom, 10)
HStack {
VStack (alignment: .leading) {
Text("Runtime: \(episode.runtime)")
Text("Air date: \(episode.airdate)")
Text("Runtime: \(detailVM.episode.runtime)")
Text("Air date: \(detailVM.episode.airdate)")
}
.font(.caption)
Spacer()
if (episode.watched) {
if (detailVM.watched) {
Image(systemName: "eye.circle.fill")
}
if (episode.favorite) {
if (detailVM.favorite) {
Image(systemName: "star.circle.fill")
}
}
Expand All @@ -42,6 +41,6 @@ struct EpisodeCell: View {

struct EpisodeCell_Previews: PreviewProvider {
static var previews: some View {
EpisodeCell(episode: .episodeTest)
EpisodeCell(detailVM: DetailViewModel(episode: .episodeTest))
}
}
28 changes: 18 additions & 10 deletions BBTGuide/EpisodeDetailView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ struct EpisodeDetailView: View {

@Environment(\.colorScheme) var colorScheme

func save() {
episodesVM.updateEpisode(episode: detailVM.saveEpisode(episode: detailVM.episode))
//episodesVM.updateView()
}

var fillColor: Color {
if colorScheme == .dark {
return Color.black
Expand Down Expand Up @@ -54,15 +59,15 @@ struct EpisodeDetailView: View {
Spacer()
HStack {
Button {
detailVM.toggleFav()
detailVM.favorite.toggle()
} label: {
Image(systemName: "star.circle.fill")
.font(.system(size: 40, weight: .bold))
}
.tint(favoriteColor)
.controlSize(.large)
Button {
detailVM.toggleWatched()
detailVM.watched.toggle()
} label: {
Image(systemName:"eye.circle.fill")
.font(.system(size: 40, weight: .bold))
Expand Down Expand Up @@ -122,15 +127,18 @@ struct EpisodeDetailView: View {
.padding()
.navigationTitle(detailVM.episode.name)
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .confirmationAction) {
Button("Save") {
episodesVM.updateEpisode(episode: detailVM.saveEpisode(episode: detailVM.episode))
dismiss()
}
}
}
// .toolbar {
// ToolbarItem(placement: .confirmationAction) {
// Button("Save") {
// episodesVM.updateView()
// episodesVM.updateEpisode(episode: detailVM.saveEpisode(episode: detailVM.episode))
// dismiss()
// }
//
// }
// }
}
.onDisappear(perform: save)
}
}
}
Expand Down
12 changes: 8 additions & 4 deletions BBTGuide/EpisodesViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,20 @@ final class EpisodesViewModel:ObservableObject {
}

func refresh() {
self.episodes = persistence.loadData()
episodes = persistence.loadData()
}

func updateEpisode(episode: Episode) {
func updateEpisode(episode:Episode) {
if let index = episodes.firstIndex(where: {$0.id == episode.id }) {
episodes[index] = episode
}
}

func getEpisodeByID(id:Int) -> Episode {
episodes.first(where: {$0.id == id })!
func getEpisodeByID(id:Int) -> Episode? {
episodes.first(where: {$0.id == id })
}

func updateView(){
self.objectWillChange.send()
}
}
4 changes: 2 additions & 2 deletions BBTGuide/ModelDefinition.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import SwiftUI

struct Episode: Codable, Identifiable, Hashable {
struct Episode:Codable, Identifiable, Hashable {
let id: Int
let url: URL
let name: String
Expand All @@ -22,7 +22,7 @@ struct Episode: Codable, Identifiable, Hashable {
var notes:String
}

struct TempEpisode: Codable, Identifiable, Hashable {
struct TempEpisode:Codable, Identifiable, Hashable {
let id: Int
let url: URL
let name: String
Expand Down
15 changes: 7 additions & 8 deletions BBTGuide/SeasonsDetailView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,18 @@ struct SeasonsDetailView: View {
List {
ForEach(season, id:\.self) { episode in
NavigationLink(value: episode) {
EpisodeCell(episode: episode)
EpisodeCell(detailVM: DetailViewModel(episode: episode))
.swipeActions {
Button {
DetailViewModel(episode: episode).toggleWatched()
DetailViewModel(episode: episode).watched.toggle()
} label: {
Image(systemName: "eye.circle.fill")
}
}
.tint(.green)
.swipeActions(edge: .leading, allowsFullSwipe: true) {
Button {
DetailViewModel(episode: episode).toggleFav()
DetailViewModel(episode: episode).favorite.toggle()

} label: {
Image(systemName: "star.circle.fill")
Expand All @@ -36,12 +36,11 @@ struct SeasonsDetailView: View {
.tint(.yellow)
}
}
}
.listStyle(.sidebar)
.navigationTitle("Season \(season.first!.season)")
.searchable(text: $episodesVM.search)
}
.listStyle(.sidebar)
.navigationTitle("Season \(season.first!.season)")
.searchable(text: $episodesVM.search)
}

}

struct SeasonsDetailView_Previews: PreviewProvider {
Expand Down
2 changes: 1 addition & 1 deletion BBTGuide/TabController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import SwiftUI
struct TabController: View {
var body: some View {
TabView {
SeasonsView()
AllEpisodesView()
.tabItem {
Label("Seasons", systemImage: "popcorn.fill")
}
Expand Down

0 comments on commit 0c4f147

Please sign in to comment.