This commit is contained in:
		@@ -14,6 +14,7 @@ class MediaController extends GetxController {
 | 
			
		||||
  RxBool loading = false.obs;
 | 
			
		||||
  RxBool atEnd = false.obs;
 | 
			
		||||
  RxBool atStart = false.obs;
 | 
			
		||||
  Rxn<String> errorMessage = Rxn<String>();
 | 
			
		||||
 | 
			
		||||
  RxInt typeIndex = 0.obs;
 | 
			
		||||
  RxInt modeIndex = 0.obs;
 | 
			
		||||
@@ -22,12 +23,10 @@ class MediaController extends GetxController {
 | 
			
		||||
 | 
			
		||||
  void setTypeIndex(int idx) {
 | 
			
		||||
    typeIndex.value = idx;
 | 
			
		||||
    fetchInitial();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setModeIndex(int idx) {
 | 
			
		||||
    modeIndex.value = idx;
 | 
			
		||||
    fetchInitial();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setTag(String? newTag, {bool reload = true}) {
 | 
			
		||||
@@ -37,6 +36,10 @@ class MediaController extends GetxController {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void toggleRandom() {
 | 
			
		||||
    random.value = random.value == 0 ? 1 : 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<List<Favorite>?> toggleFavorite(
 | 
			
		||||
    MediaItem item,
 | 
			
		||||
    bool isFavorite,
 | 
			
		||||
@@ -51,6 +54,7 @@ class MediaController extends GetxController {
 | 
			
		||||
  Future<Feed?> _fetchItems({int? older, int? newer}) async {
 | 
			
		||||
    if (loading.value) return null;
 | 
			
		||||
    loading.value = true;
 | 
			
		||||
    errorMessage.value = null;
 | 
			
		||||
    try {
 | 
			
		||||
      return await _api.fetchItems(
 | 
			
		||||
        older: older,
 | 
			
		||||
@@ -61,11 +65,10 @@ class MediaController extends GetxController {
 | 
			
		||||
        tag: tag.value,
 | 
			
		||||
      );
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      Get.snackbar(
 | 
			
		||||
        'Fehler beim Laden',
 | 
			
		||||
        'Die Daten konnten nicht abgerufen werden. Wo Internet?',
 | 
			
		||||
        snackPosition: SnackPosition.BOTTOM,
 | 
			
		||||
      );
 | 
			
		||||
      final String errorText =
 | 
			
		||||
          'Die Daten konnten nicht abgerufen werden. Wo Internet?';
 | 
			
		||||
      errorMessage.value = errorText;
 | 
			
		||||
      Get.snackbar('Fehler beim Laden', errorText);
 | 
			
		||||
      return null;
 | 
			
		||||
    } finally {
 | 
			
		||||
      loading.value = false;
 | 
			
		||||
@@ -73,7 +76,7 @@ class MediaController extends GetxController {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> fetchInitial({int? id}) async {
 | 
			
		||||
    final result = await _fetchItems(older: id);
 | 
			
		||||
    final Feed? result = await _fetchItems(older: id);
 | 
			
		||||
    if (result != null) {
 | 
			
		||||
      items.assignAll(result.items);
 | 
			
		||||
      atEnd.value = result.atEnd;
 | 
			
		||||
@@ -83,7 +86,7 @@ class MediaController extends GetxController {
 | 
			
		||||
 | 
			
		||||
  Future<void> fetchMore() async {
 | 
			
		||||
    if (items.isEmpty || atEnd.value) return;
 | 
			
		||||
    final result = await _fetchItems(older: items.last.id);
 | 
			
		||||
    final Feed? result = await _fetchItems(older: items.last.id);
 | 
			
		||||
    if (result != null) {
 | 
			
		||||
      final Set<int> existingIds = items.map((e) => e.id).toSet();
 | 
			
		||||
      final List<MediaItem> newItems = result.items
 | 
			
		||||
@@ -95,10 +98,9 @@ class MediaController extends GetxController {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<int> fetchNewer() async {
 | 
			
		||||
    if (items.isEmpty || atStart.value) return 0;
 | 
			
		||||
    final oldLength = items.length;
 | 
			
		||||
    final result = await _fetchItems(newer: items.first.id);
 | 
			
		||||
  Future<void> fetchNewer() async {
 | 
			
		||||
    if (items.isEmpty || atStart.value) return;
 | 
			
		||||
    final Feed? result = await _fetchItems(newer: items.first.id);
 | 
			
		||||
    if (result != null) {
 | 
			
		||||
      final Set<int> existingIds = items.map((e) => e.id).toSet();
 | 
			
		||||
      final List<MediaItem> newItems = result.items
 | 
			
		||||
@@ -107,9 +109,8 @@ class MediaController extends GetxController {
 | 
			
		||||
      items.insertAll(0, newItems);
 | 
			
		||||
      items.refresh();
 | 
			
		||||
      atStart.value = result.atStart;
 | 
			
		||||
      return items.length - oldLength;
 | 
			
		||||
    }
 | 
			
		||||
    return 0;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> handleRefresh() async {
 | 
			
		||||
@@ -122,15 +123,11 @@ class MediaController extends GetxController {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  Future<void> handleLoading() async {
 | 
			
		||||
    if (loading.value) return;
 | 
			
		||||
    if (!loading.value && !atEnd.value) {
 | 
			
		||||
      await fetchMore();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void toggleRandom() {
 | 
			
		||||
    random.value = random.value == 1 ? 0 : 1;
 | 
			
		||||
    fetchInitial();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  bool get isRandomEnabled => random.value == 1;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user