124 lines
2.8 KiB
Dart
124 lines
2.8 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
|
|
import 'package:f0ckapp/models/MediaItem.dart';
|
|
import 'package:f0ckapp/services/Api.dart';
|
|
|
|
class MediaProvider extends ChangeNotifier {
|
|
int _typeid = 0;
|
|
int _mode = 0;
|
|
bool _random = false;
|
|
String? _tag;
|
|
int _crossAxisCount = 0;
|
|
List<MediaItem> _mediaItems = [];
|
|
bool _isLoading = false;
|
|
bool _muted = false;
|
|
final storage = FlutterSecureStorage(
|
|
aOptions: const AndroidOptions(encryptedSharedPreferences: true),
|
|
);
|
|
|
|
List<String> types = ["alles", "image", "video", "audio"];
|
|
List<String> modes = ["sfw", "nsfw", "untagged", "all"];
|
|
|
|
String get type => types[_typeid];
|
|
int get typeid => _typeid;
|
|
int get mode => _mode;
|
|
bool get random => _random;
|
|
String? get tag => _tag;
|
|
int get crossAxisCount => _crossAxisCount;
|
|
List<MediaItem> get mediaItems => _mediaItems;
|
|
bool get isLoading => _isLoading;
|
|
bool get muted => _muted;
|
|
|
|
Function get resetMedia => _resetMedia;
|
|
|
|
MediaProvider() {
|
|
_loadMutedState();
|
|
}
|
|
|
|
void setType(String type) {
|
|
_typeid = types.indexOf(type);
|
|
_resetMedia();
|
|
}
|
|
|
|
void setMode(int mode) {
|
|
_mode = mode;
|
|
_resetMedia();
|
|
}
|
|
|
|
void toggleRandom() {
|
|
_random = !_random;
|
|
_resetMedia();
|
|
}
|
|
|
|
void setTag(String? tag) {
|
|
_tag = tag;
|
|
_resetMedia();
|
|
}
|
|
|
|
void setCrossAxisCount(int crossAxisCount) {
|
|
_crossAxisCount = crossAxisCount;
|
|
notifyListeners();
|
|
}
|
|
|
|
void setMediaItems(List<MediaItem> mediaItems) {
|
|
if (_mediaItems != mediaItems) {
|
|
_mediaItems.clear();
|
|
_mediaItems.addAll(mediaItems);
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
void addMediaItems(List<MediaItem> newItems) {
|
|
_mediaItems.addAll(newItems);
|
|
notifyListeners();
|
|
}
|
|
|
|
void _resetMedia() {
|
|
_mediaItems.clear();
|
|
notifyListeners();
|
|
loadMedia();
|
|
}
|
|
|
|
void toggleMute() {
|
|
_muted = !_muted;
|
|
_saveMutedState();
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> _loadMutedState() async {
|
|
_muted = (await storage.read(key: 'muted') == 'true');
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> _saveMutedState() async {
|
|
await storage.write(key: 'muted', value: _muted ? 'false' : 'true');
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> loadMedia({bool notify = true}) async {
|
|
if (_isLoading) return;
|
|
_isLoading = true;
|
|
if (notify) notifyListeners();
|
|
|
|
try {
|
|
final newMedia = await fetchMedia(
|
|
older: _mediaItems.isNotEmpty ? _mediaItems.last.id : null,
|
|
type: type,
|
|
mode: mode,
|
|
random: random,
|
|
tag: tag,
|
|
);
|
|
|
|
if (_mediaItems != newMedia) {
|
|
addMediaItems(newMedia);
|
|
if (notify) notifyListeners();
|
|
}
|
|
} catch (e) {
|
|
debugPrint('Fehler beim Laden der Medien: $e');
|
|
} finally {
|
|
_isLoading = false;
|
|
}
|
|
}
|
|
}
|