Skip to content

Commit

Permalink
migrate to observation
Browse files Browse the repository at this point in the history
  • Loading branch information
bourvill committed Jan 30, 2024
1 parent caf32a6 commit 4a80797
Show file tree
Hide file tree
Showing 9 changed files with 33 additions and 25 deletions.
4 changes: 2 additions & 2 deletions App/Features/Entry/EntryView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ struct EntryView: View {
@Environment(\.dismiss) private var dismiss
@Environment(AppSync.self) var appSync: AppSync
#if os(iOS)
@EnvironmentObject var player: PlayerPublisher
@Environment(PlayerPublisher.self) var player: PlayerPublisher
#endif
@ObservedObject var entry: Entry
@State var showTag: Bool = false
Expand Down Expand Up @@ -138,7 +138,7 @@ struct EntryView: View {
let coreData = Container.shared.coreData()
EntryView(entry: Entry(context: coreData.viewContext))
#if os(iOS)
.environmentObject(PlayerPublisher())
.environment(PlayerPublisher())
#endif
.environment(\.managedObjectContext, coreData.viewContext)
}
Expand Down
2 changes: 1 addition & 1 deletion App/Features/Entry/Picture/EntryPicture.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import SwiftUI
import UIKit

struct EntryPicture: View {
@StateObject var imagePublisher = ImageDownloaderPublisher()
@State var imagePublisher = ImageDownloaderPublisher()

var url: String?

Expand Down
9 changes: 6 additions & 3 deletions App/Features/Entry/Picture/ImageDownloaderPublisher.swift
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
#if os(iOS)
import Combine
import Factory
import Foundation
import Observation
import SwiftUI
import UIKit

final class ImageDownloaderPublisher: ObservableObject {
@Observable
final class ImageDownloaderPublisher {
@ObservationIgnored
@Injected(\.imageDownloader) private var imageDownloader
@Published var image: UIImage?
var image: UIImage?

@MainActor
func loadImage(url: String?) async {
Expand Down
2 changes: 1 addition & 1 deletion App/Features/Error/ErrorView.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import SwiftUI

struct ErrorView: View {
@EnvironmentObject var errorViewModel: ErrorViewModel
@Environment(ErrorViewModel.self) var errorViewModel: ErrorViewModel
var body: some View {
errorViewModel.lastError.map {
Text($0.localizedDescription)
Expand Down
13 changes: 8 additions & 5 deletions App/Features/Error/ErrorViewModel.swift
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
import Combine
import Foundation
import Observation

final class ErrorViewModel: ObservableObject {
@Observable
final class ErrorViewModel {
private var resetAfter: Double
private(set) var lastError: WallabagError?

init(_ resetAfter: Double = 10) {
self.resetAfter = resetAfter
}

@Published private(set) var lastError: WallabagError?

func setLast(_ error: WallabagError) {
lastError = error
DispatchQueue.main.asyncAfter(deadline: .now() + resetAfter) { [weak self] in
self?.lastError = nil
Task.detached { [weak self] in
guard let self else { return }
try? await Task.sleep(for: .seconds(resetAfter))
lastError = nil
}
}
}
2 changes: 1 addition & 1 deletion App/Features/MainView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import SwiftUI

struct MainView: View {
@EnvironmentObject var appState: AppState
@EnvironmentObject var player: PlayerPublisher
@Environment(PlayerPublisher.self) var player
@Environment(Router.self) var router: Router

var body: some View {
Expand Down
11 changes: 6 additions & 5 deletions App/Features/Player/PlayerPublisher.swift
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import AVFoundation
import Combine
import Foundation
import MediaPlayer
import Observation
import SwiftUI

#if os(iOS)
final class PlayerPublisher: ObservableObject {
@Observable
final class PlayerPublisher {
static var shared = PlayerPublisher()
private var speecher = AVSpeechSynthesizer()
private var utterance: AVSpeechUtterance?

@Published var podcast: Podcast?
@Published var showPlayer: Bool = false
@Published private(set) var isPlaying = false {
var podcast: Podcast?
var showPlayer: Bool = false
private(set) var isPlaying = false {
willSet {
if newValue {
play()
Expand Down
6 changes: 3 additions & 3 deletions App/Features/Player/PlayerView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import SwiftUI

#if os(iOS)
struct PlayerView: View {
@EnvironmentObject var playerPublisher: PlayerPublisher
@Environment(PlayerPublisher.self) var playerPublisher: PlayerPublisher

var body: some View {
VStack {
Expand Down Expand Up @@ -65,11 +65,11 @@ import SwiftUI

static var previews: some View {
PlayerView()
.environmentObject(PlayerPublisher())
.environment(PlayerPublisher())
.previewLayout(.sizeThatFits)

PlayerView()
.environmentObject(player)
.environment(player)
.previewLayout(.sizeThatFits)
}
}
Expand Down
9 changes: 5 additions & 4 deletions App/WallabagApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@ struct WallabagApp: App {
@State private var router = Container.shared.router()
@State private var appSync = Container.shared.appSync()
@State private var wallabagPlusStore = Container.shared.wallabagPlusStore()
@State private var errorHandler = Container.shared.errorHandler()

@InjectedObject(\.appState) private var appState
#if os(iOS)
@InjectedObject(\.playerPublisher) private var playerPublisher
@State private var playerPublisher = Container.shared.playerPublisher()
#endif
@InjectedObject(\.errorHandler) private var errorHandler

@InjectedObject(\.appSetting) private var appSetting
@Injected(\.coreDataSync) private var coreDataSync
@Injected(\.coreData) private var coreData
Expand All @@ -31,12 +32,12 @@ struct WallabagApp: App {
MainView()
.environmentObject(appState)
#if os(iOS)
.environmentObject(playerPublisher)
.environment(playerPublisher)
#endif
.environment(router)
.environment(appSync)
.environment(wallabagPlusStore)
.environmentObject(errorHandler)
.environment(errorHandler)
.environmentObject(appSetting)
.environment(\.managedObjectContext, coreData.viewContext)
.subscriptionStatusTask(for: wallabagPlusStore.groupID) { task in
Expand Down

0 comments on commit 4a80797

Please sign in to comment.