Skip to content

Commit 0c21ff9

Browse files
changed pre-rolls to be a per-user preference
1 parent 2e3afff commit 0c21ff9

1 file changed

Lines changed: 99 additions & 6 deletions

File tree

lib/preference/user_preferences.dart

Lines changed: 99 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import 'home_section_config.dart';
66
import 'preference_constants.dart';
77

88
class UserPreferences extends ChangeNotifier {
9+
static const _lastServerIdPreferenceKey = 'pref_last_server_id';
10+
static const _lastUserIdPreferenceKey = 'pref_last_user_id';
11+
912
static const mediaBarModeMoonfin = 'moonfin';
1013
static const mediaBarModeMakd = 'makd';
1114
static const mediaBarModeOff = 'off';
@@ -48,9 +51,89 @@ class UserPreferences extends ChangeNotifier {
4851
}
4952
}
5053

51-
T get<T>(Preference<T> pref) => _store.get(pref);
54+
String? _activeProfileScopeSuffix() {
55+
final serverId = (_store.getString(_lastServerIdPreferenceKey) ?? '')
56+
.trim();
57+
final userId = (_store.getString(_lastUserIdPreferenceKey) ?? '').trim();
58+
if (serverId.isEmpty || userId.isEmpty) {
59+
return null;
60+
}
61+
return '${serverId}_$userId';
62+
}
63+
64+
Preference<String>? _scopedResumeSubtractDurationPreference() {
65+
final scopeSuffix = _activeProfileScopeSuffix();
66+
if (scopeSuffix == null) {
67+
return null;
68+
}
69+
return Preference(
70+
key: 'pref_resume_preroll_$scopeSuffix',
71+
defaultValue: '0',
72+
);
73+
}
74+
75+
Preference<bool>? _scopedCinemaModeEnabledPreference() {
76+
final scopeSuffix = _activeProfileScopeSuffix();
77+
if (scopeSuffix == null) {
78+
return null;
79+
}
80+
return Preference(
81+
key: 'pref_enable_cinema_mode_$scopeSuffix',
82+
defaultValue: true,
83+
);
84+
}
85+
86+
bool _isResumeSubtractDurationPreference<T>(Preference<T> pref) {
87+
return pref.key == resumeSubtractDuration.key;
88+
}
89+
90+
bool _isCinemaModeEnabledPreference<T>(Preference<T> pref) {
91+
return pref.key == cinemaModeEnabled.key;
92+
}
93+
94+
T get<T>(Preference<T> pref) {
95+
if (_isResumeSubtractDurationPreference(pref)) {
96+
final scoped = _scopedResumeSubtractDurationPreference();
97+
if (scoped != null && _store.containsKey(scoped.key)) {
98+
return _store.get(scoped) as T;
99+
}
100+
return _store.get(resumeSubtractDuration) as T;
101+
}
102+
103+
if (_isCinemaModeEnabledPreference(pref)) {
104+
final scoped = _scopedCinemaModeEnabledPreference();
105+
if (scoped != null && _store.containsKey(scoped.key)) {
106+
return _store.get(scoped) as T;
107+
}
108+
return _store.get(cinemaModeEnabled) as T;
109+
}
110+
111+
return _store.get(pref);
112+
}
52113

53114
Future<void> set<T>(Preference<T> pref, T value) async {
115+
if (_isResumeSubtractDurationPreference(pref)) {
116+
final scoped = _scopedResumeSubtractDurationPreference();
117+
if (scoped != null) {
118+
await _store.set(scoped, value as String);
119+
} else {
120+
await _store.set(resumeSubtractDuration, value as String);
121+
}
122+
notifyListeners();
123+
return;
124+
}
125+
126+
if (_isCinemaModeEnabledPreference(pref)) {
127+
final scoped = _scopedCinemaModeEnabledPreference();
128+
if (scoped != null) {
129+
await _store.set(scoped, value as bool);
130+
} else {
131+
await _store.set(cinemaModeEnabled, value as bool);
132+
}
133+
notifyListeners();
134+
return;
135+
}
136+
54137
await _store.set(pref, value);
55138
notifyListeners();
56139
}
@@ -59,8 +142,21 @@ class UserPreferences extends ChangeNotifier {
59142

60143
bool containsPreferenceKey(String key) => _store.containsKey(key);
61144

62-
bool containsPreference<T>(Preference<T> pref) =>
63-
_store.containsKey(pref.key);
145+
bool containsPreference<T>(Preference<T> pref) {
146+
if (_isResumeSubtractDurationPreference(pref)) {
147+
final scoped = _scopedResumeSubtractDurationPreference();
148+
return (scoped != null && _store.containsKey(scoped.key)) ||
149+
_store.containsKey(resumeSubtractDuration.key);
150+
}
151+
152+
if (_isCinemaModeEnabledPreference(pref)) {
153+
final scoped = _scopedCinemaModeEnabledPreference();
154+
return (scoped != null && _store.containsKey(scoped.key)) ||
155+
_store.containsKey(cinemaModeEnabled.key);
156+
}
157+
158+
return _store.containsKey(pref.key);
159+
}
64160

65161
AudioOutputMode resolveAudioOutputMode() => get(audioOutputMode);
66162

@@ -950,9 +1046,6 @@ class UserPreferences extends ChangeNotifier {
9501046
static Preference<bool> libraryFavoriteFilter(String libraryId) =>
9511047
Preference(key: 'library_fav_filter_$libraryId', defaultValue: false);
9521048

953-
static Preference<String> libraryLetterFilter(String libraryId) =>
954-
Preference(key: 'library_letter_filter_$libraryId', defaultValue: '');
955-
9561049
static EnumPreference<ImageType> libraryImageType(String libraryId) =>
9571050
EnumPreference(
9581051
key: 'library_image_type_$libraryId',

0 commit comments

Comments
 (0)