89 lines
2.0 KiB
Dart
89 lines
2.0 KiB
Dart
import 'package:f0ckapp/services/Api.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:f0ckapp/models/MediaItem.dart';
|
|
|
|
class MediaProvider extends ChangeNotifier {
|
|
int _typeid = 0;
|
|
int _mode = 0;
|
|
bool _random = false;
|
|
String? _tag;
|
|
int _crossAxisCount = 0;
|
|
final List<MediaItem> _mediaItems = [];
|
|
bool _isLoading = false;
|
|
|
|
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;
|
|
|
|
void setType(String type) {
|
|
_typeid = types.indexOf(type);
|
|
loadMedia(reload: true);
|
|
}
|
|
|
|
void setMode(int mode) {
|
|
_mode = mode;
|
|
loadMedia(reload: true);
|
|
}
|
|
|
|
void toggleRandom() {
|
|
_random = !_random;
|
|
loadMedia(reload: true);
|
|
}
|
|
|
|
void setTag(String? tag) {
|
|
_tag = tag;
|
|
loadMedia(reload: true);
|
|
}
|
|
|
|
void setCrossAxisCount(int crossAxisCount) {
|
|
_crossAxisCount = crossAxisCount;
|
|
notifyListeners();
|
|
}
|
|
|
|
void setMediaItems(List<MediaItem> mediaItems) {
|
|
_mediaItems.clear();
|
|
addMediaItems(mediaItems);
|
|
notifyListeners();
|
|
}
|
|
|
|
void addMediaItems(List<MediaItem> newItems) {
|
|
_mediaItems.addAll(newItems);
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> loadMedia({bool reload = false}) async {
|
|
if (_isLoading) return;
|
|
_isLoading = true;
|
|
notifyListeners();
|
|
|
|
try {
|
|
final newMedia = await fetchMedia(
|
|
older: reload
|
|
? null
|
|
: _mediaItems.isNotEmpty
|
|
? _mediaItems.last.id
|
|
: null,
|
|
type: type,
|
|
mode: mode,
|
|
random: random,
|
|
tag: tag,
|
|
);
|
|
|
|
reload ? setMediaItems(newMedia) : addMediaItems(newMedia);
|
|
} catch (e) {
|
|
debugPrint('Fehler beim Laden der Medien: $e');
|
|
} finally {
|
|
_isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
}
|