feat: UI 2.0 and other Improvements (#357)

Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
PartyDonut 2025-06-01 10:37:19 +02:00 committed by GitHub
parent 9ca06eaa37
commit e7b5bb40ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
169 changed files with 4584 additions and 3626 deletions

View file

@ -199,20 +199,20 @@ extension EpisodeListExtensions on List<EpisodeModel> {
}
EpisodeModel? get nextUp {
final episodes = whereNot((element) => element.season <= 0).toList();
final episodes = where((e) => e.season > 0 && e.status == EpisodeStatus.available).toList();
if (episodes.isEmpty) return null;
final lastProgress = episodes
.lastIndexWhere((element) => element.userData.progress != 0 && element.status == EpisodeStatus.available);
final lastPlayed =
episodes.lastIndexWhere((element) => element.userData.played && element.status == EpisodeStatus.available);
final lastWatchedIndex = [
episodes.lastIndexWhere((e) => e.userData.progress != 0),
episodes.lastIndexWhere((e) => e.userData.played),
].reduce((a, b) => a > b ? a : b);
if (lastProgress == -1 && lastPlayed == -1) {
return episodes.firstWhereOrNull((element) => element.status == EpisodeStatus.available);
} else {
return episodes
.getRange(lastProgress > lastPlayed ? lastProgress : lastPlayed + 1, episodes.length)
.firstWhereOrNull((element) => element.status == EpisodeStatus.available);
if (lastWatchedIndex >= 0 && lastWatchedIndex + 1 < episodes.length) {
final next = episodes.sublist(lastWatchedIndex + 1).firstWhereOrNull((e) => e.status == EpisodeStatus.available);
if (next != null) return next;
}
return episodes.firstOrNull;
}
bool get allPlayed {

View file

@ -1,5 +1,6 @@
import 'package:fladder/screens/details_screens/series_detail_screen.dart';
import 'package:flutter/widgets.dart';
import 'package:dart_mappable/dart_mappable.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fladder/jellyfin/jellyfin_open_api.swagger.dart' as dto;
@ -9,8 +10,7 @@ import 'package:fladder/models/items/images_models.dart';
import 'package:fladder/models/items/item_shared_models.dart';
import 'package:fladder/models/items/overview_model.dart';
import 'package:fladder/models/items/season_model.dart';
import 'package:dart_mappable/dart_mappable.dart';
import 'package:fladder/screens/details_screens/series_detail_screen.dart';
part 'series_model.mapper.dart';