Skip to content

Commit f7090b8

Browse files
authored
Replace Browser widget "Audio and video only" toggle with Mode picker (#219)
1 parent ca0923f commit f7090b8

File tree

4 files changed

+36
-12
lines changed

4 files changed

+36
-12
lines changed

Moblin/RemoteControl/RemoteControl.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,15 +223,15 @@ struct RemoteControlRemoteSceneSettingsWidgetTypeBrowser: Codable {
223223
var url: String
224224
var width: Int
225225
var height: Int
226-
var audioAndVideoOnly: Bool
226+
var mode: SettingsWidgetBrowserMode
227227
var fps: Float
228228
var styleSheet: String
229229

230230
init(browser: SettingsWidgetBrowser) {
231231
url = browser.url
232232
width = browser.width
233233
height = browser.height
234-
audioAndVideoOnly = browser.audioAndVideoOnly
234+
mode = browser.mode
235235
fps = browser.baseFps
236236
styleSheet = browser.styleSheet
237237
}
@@ -241,7 +241,7 @@ struct RemoteControlRemoteSceneSettingsWidgetTypeBrowser: Codable {
241241
browser.url = url
242242
browser.width = width
243243
browser.height = height
244-
browser.audioAndVideoOnly = audioAndVideoOnly
244+
browser.mode = mode
245245
browser.baseFps = fps
246246
browser.styleSheet = styleSheet
247247
return browser

Moblin/Various/Settings/SettingsScene.swift

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -773,11 +773,25 @@ class SettingsWidgetCrop: Codable {
773773
}
774774
}
775775

776+
enum SettingsWidgetBrowserMode: Codable, CaseIterable {
777+
case periodicAudioAndVideo
778+
case audioAndVideoOnly
779+
780+
func toString() -> String {
781+
switch self {
782+
case .periodicAudioAndVideo:
783+
return String(localized: "Periodic, audio and video")
784+
case .audioAndVideoOnly:
785+
return String(localized: "Audio and video only")
786+
}
787+
}
788+
}
789+
776790
class SettingsWidgetBrowser: Codable, ObservableObject {
777791
@Published var url: String = ""
778792
@Published var width: Int = 500
779793
@Published var height: Int = 500
780-
@Published var audioAndVideoOnly: Bool = false
794+
@Published var mode: SettingsWidgetBrowserMode = .periodicAudioAndVideo
781795
@Published var baseFps: Float = 5.0
782796
@Published var styleSheet: String = ""
783797
@Published var moblinAccess: Bool = false
@@ -789,6 +803,7 @@ class SettingsWidgetBrowser: Codable, ObservableObject {
789803
width,
790804
height,
791805
audioOnly,
806+
mode,
792807
fps,
793808
styleSheet,
794809
moblinAccess
@@ -799,7 +814,7 @@ class SettingsWidgetBrowser: Codable, ObservableObject {
799814
try container.encode(.url, url)
800815
try container.encode(.width, width)
801816
try container.encode(.height, height)
802-
try container.encode(.audioOnly, audioAndVideoOnly)
817+
try container.encode(.mode, mode)
803818
try container.encode(.fps, baseFps)
804819
try container.encode(.styleSheet, styleSheet)
805820
try container.encode(.moblinAccess, moblinAccess)
@@ -810,7 +825,12 @@ class SettingsWidgetBrowser: Codable, ObservableObject {
810825
url = container.decode(.url, String.self, "")
811826
width = container.decode(.width, Int.self, 500)
812827
height = container.decode(.height, Int.self, 500)
813-
audioAndVideoOnly = container.decode(.audioOnly, Bool.self, false)
828+
if let decodedMode = try? container.decode(SettingsWidgetBrowserMode.self, forKey: .mode) {
829+
mode = decodedMode
830+
} else {
831+
let audioOnly = container.decode(.audioOnly, Bool.self, false)
832+
mode = audioOnly ? .audioAndVideoOnly : .periodicAudioAndVideo
833+
}
814834
baseFps = container.decode(.fps, Float.self, 5.0)
815835
styleSheet = container.decode(.styleSheet, String.self, "")
816836
moblinAccess = container.decode(.moblinAccess, Bool.self, false)

Moblin/VideoEffects/Browser/BrowserEffect.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ final class BrowserEffect: VideoEffect {
7575
baseFps = Double(widget.baseFps)
7676
fps = baseFps
7777
isLoaded = false
78-
audioAndVideoOnly = widget.audioAndVideoOnly
78+
audioAndVideoOnly = widget.mode == .audioAndVideoOnly
7979
width = Double(widget.width)
8080
height = Double(widget.height)
8181
snapshotConfiguration = WKSnapshotConfiguration()

Moblin/View/Settings/Scenes/Widgets/Widget/Browser/WidgetBrowserSettingsView.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,15 @@ struct WidgetBrowserSettingsView: View {
8888
keyboardType: .numbersAndPunctuation)
8989
}
9090
Section {
91-
Toggle("Audio and video only", isOn: $browser.audioAndVideoOnly)
92-
.onChange(of: browser.audioAndVideoOnly) { _ in
93-
model.resetSelectedScene(changeScene: false)
91+
Picker("Mode", selection: $browser.mode) {
92+
ForEach(SettingsWidgetBrowserMode.allCases, id: \.self) {
93+
Text($0.toString())
9494
}
95-
if !browser.audioAndVideoOnly {
95+
}
96+
.onChange(of: browser.mode) { _ in
97+
model.resetSelectedScene(changeScene: false)
98+
}
99+
if browser.mode == .periodicAudioAndVideo {
96100
HStack {
97101
Text("Base FPS")
98102
SliderView(
@@ -108,7 +112,7 @@ struct WidgetBrowserSettingsView: View {
108112
}
109113
} footer: {
110114
Text("""
111-
When \"Audio and video only\" is enabled, images, text, GIFs etc. \
115+
When \"Audio and video only\" mode is selected, images, text, GIFs etc. \
112116
will only be shown when a video (.mp4/.mov) is playing, reducing overall \
113117
energy consumption.
114118
""")

0 commit comments

Comments
 (0)