All checks were successful
ci/woodpecker/tag/woodpecker Pipeline was successful
69 lines
2 KiB
Dart
69 lines
2 KiB
Dart
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:worldhopper/repositories/series_reading_mode_repository.dart';
|
|
|
|
part 'reading_mode_provider.g.dart';
|
|
|
|
/// Reading direction modes for the image reader
|
|
enum ReadingMode {
|
|
ltr,
|
|
rtl,
|
|
verticalContinuous,
|
|
}
|
|
|
|
/// Key for storing reading mode preference in SharedPreferences
|
|
const String _readingModeKey = 'image_reader_reading_mode';
|
|
|
|
/// Provider for image reader reading mode state management
|
|
@riverpod
|
|
class ReadingModeNotifier extends _$ReadingModeNotifier {
|
|
@override
|
|
ReadingMode build() {
|
|
_loadReadingMode();
|
|
return ReadingMode.ltr; // Default value until loaded
|
|
}
|
|
|
|
/// Load reading mode from SharedPreferences
|
|
Future<void> _loadReadingMode() async {
|
|
final prefs = await SharedPreferences.getInstance();
|
|
final readingModeString = prefs.getString(_readingModeKey);
|
|
|
|
if (readingModeString != null) {
|
|
final readingMode = ReadingMode.values.firstWhere(
|
|
(m) => m.name == readingModeString,
|
|
orElse: () => ReadingMode.ltr,
|
|
);
|
|
state = readingMode;
|
|
}
|
|
}
|
|
|
|
/// Set reading mode and persist to SharedPreferences
|
|
Future<void> setReadingMode(ReadingMode mode) async {
|
|
state = mode;
|
|
final prefs = await SharedPreferences.getInstance();
|
|
await prefs.setString(_readingModeKey, mode.name);
|
|
}
|
|
}
|
|
|
|
/// Provider for per-series reading mode overrides.
|
|
/// Parameterized by seriesFeedUrl. Returns null when no override is set.
|
|
@riverpod
|
|
class SeriesReadingModeNotifier extends _$SeriesReadingModeNotifier {
|
|
@override
|
|
ReadingMode? build(String seriesFeedUrl) {
|
|
_load(seriesFeedUrl);
|
|
return null;
|
|
}
|
|
|
|
Future<void> _load(String seriesFeedUrl) async {
|
|
final repo = SeriesReadingModeRepository();
|
|
final mode = await repo.getReadingMode(seriesFeedUrl);
|
|
state = mode;
|
|
}
|
|
|
|
Future<void> setReadingMode(ReadingMode mode) async {
|
|
state = mode;
|
|
final repo = SeriesReadingModeRepository();
|
|
await repo.setReadingMode(seriesFeedUrl, mode);
|
|
}
|
|
}
|