damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

commit dec07df2c147735de2c8d1702d34b0203f263000
parent 53734ea4836f4fec6515c738a8db58febfdb963b
Author: Bryan Montz <bryanmontz@me.com>
Date:   Wed,  6 Sep 2023 11:23:33 -0500

video: add VideoController, which hold cached metadata and mute states

Closes: https://github.com/damus-io/damus/pull/1539
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mdamus.xcodeproj/project.pbxproj | 4++++
Mdamus/ContentView.swift | 3++-
Mdamus/Models/DamusState.swift | 4+++-
Adamus/Views/Video/VideoController.swift | 40++++++++++++++++++++++++++++++++++++++++
4 files changed, 49 insertions(+), 2 deletions(-)

diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj @@ -389,6 +389,7 @@ 504323A92A3495B6006AE6DC /* RelayModelCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504323A82A3495B6006AE6DC /* RelayModelCache.swift */; }; 5053ACA72A56DF3B00851AE3 /* DeveloperSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5053ACA62A56DF3B00851AE3 /* DeveloperSettingsView.swift */; }; 50A16FFB2AA6C06600DFEC1F /* AVPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A16FFA2AA6C06600DFEC1F /* AVPlayerView.swift */; }; + 50A16FFF2AA76A0900DFEC1F /* VideoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A16FFE2AA76A0900DFEC1F /* VideoController.swift */; }; 50A50A8D29A09E1C00C01BE7 /* RequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A50A8C29A09E1C00C01BE7 /* RequestTests.swift */; }; 50A60D142A28BEEE00186190 /* RelayLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A60D132A28BEEE00186190 /* RelayLog.swift */; }; 50B5685329F97CB400A23243 /* CredentialHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50B5685229F97CB400A23243 /* CredentialHandler.swift */; }; @@ -1065,6 +1066,7 @@ 504323A82A3495B6006AE6DC /* RelayModelCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayModelCache.swift; sourceTree = "<group>"; }; 5053ACA62A56DF3B00851AE3 /* DeveloperSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperSettingsView.swift; sourceTree = "<group>"; }; 50A16FFA2AA6C06600DFEC1F /* AVPlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVPlayerView.swift; sourceTree = "<group>"; }; + 50A16FFE2AA76A0900DFEC1F /* VideoController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoController.swift; sourceTree = "<group>"; }; 50A50A8C29A09E1C00C01BE7 /* RequestTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestTests.swift; sourceTree = "<group>"; }; 50A60D132A28BEEE00186190 /* RelayLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayLog.swift; sourceTree = "<group>"; }; 50B5685229F97CB400A23243 /* CredentialHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CredentialHandler.swift; sourceTree = "<group>"; }; @@ -1360,6 +1362,7 @@ isa = PBXGroup; children = ( 4C1A9A2929DDF54400516EAC /* DamusVideoPlayer.swift */, + 50A16FFE2AA76A0900DFEC1F /* VideoController.swift */, 4CCF9AAE2A1FDBDB00E03CFB /* VideoPlayer.swift */, 50A16FFA2AA6C06600DFEC1F /* AVPlayerView.swift */, ); @@ -2621,6 +2624,7 @@ 4CEE2AF7280B2DEA00AB5EEF /* ProfileName.swift in Sources */, 4CC7AAEB297F0AEC00430951 /* BuilderEventView.swift in Sources */, 31D2E847295218AF006D67F8 /* Shimmer.swift in Sources */, + 50A16FFF2AA76A0900DFEC1F /* VideoController.swift in Sources */, F7908E97298B1FDF00AB113A /* NIPURLBuilder.swift in Sources */, 4C285C8228385570008A31F1 /* CarouselView.swift in Sources */, 3A3040F129A8FF97008A0F29 /* LocalizationUtil.swift in Sources */, diff --git a/damus/ContentView.swift b/damus/ContentView.swift @@ -654,7 +654,8 @@ struct ContentView: View { wallet: WalletModel(settings: settings), nav: self.navigationCoordinator, user_search_cache: user_search_cache, - music: MusicController(onChange: music_changed) + music: MusicController(onChange: music_changed), + video: VideoController() ) home.damus_state = self.damus_state! diff --git a/damus/Models/DamusState.swift b/damus/Models/DamusState.swift @@ -33,6 +33,7 @@ struct DamusState { let nav: NavigationCoordinator let user_search_cache: UserSearchCache let music: MusicController? + let video: VideoController @discardableResult func add_zap(zap: Zapping) -> Bool { @@ -89,7 +90,8 @@ struct DamusState { wallet: WalletModel(settings: UserSettingsStore()), nav: NavigationCoordinator(), user_search_cache: user_search_cache, - music: nil + music: nil, + video: VideoController() ) } } diff --git a/damus/Views/Video/VideoController.swift b/damus/Views/Video/VideoController.swift @@ -0,0 +1,40 @@ +// +// VideoController.swift +// damus +// +// Created by Bryan Montz on 9/3/23. +// + +import Combine +import Foundation + +struct VideoMetadata { + let has_audio: Bool + let size: CGSize +} + +final class VideoController: ObservableObject { + private var mute_states: [URL: Bool] = [:] + private var metadatas: [URL: VideoMetadata] = [:] + + @Published var focused_model_id: UUID? + + func toggle_should_mute_video(url: URL) { + let state = mute_states[url] ?? true + mute_states[url] = !state + + objectWillChange.send() + } + + func should_mute_video(url: URL) -> Bool { + mute_states[url] ?? true + } + + func set_metadata(_ metadata: VideoMetadata, url: URL) { + metadatas[url] = metadata + } + + func metadata(for url: URL) -> VideoMetadata? { + metadatas[url] + } +}