-
-
Notifications
You must be signed in to change notification settings - Fork 14
commit a1d543b
abduznik edited this page May 23, 2026
·
1 revision
Commit: a1d543b88cb840640dce9d507dbba6fac550727d
Author: abduznik
Date: 2026-04-29
Why: Adds a new feature or capability to the application.
lib/core/romm/romm_service.dart | 21 +++++++++++++++++++++
lib/providers/paginated_games_provider.dart | 6 ++++++
lib/ui/screens/library_screen.dart | 18 ++++++++++++------
3 files changed, 39 insertions(+), 6 deletions(-)
lib/core/romm/romm_service.dartlib/providers/paginated_games_provider.dartlib/ui/screens/library_screen.dart
diff --git a/lib/core/romm/romm_service.dart b/lib/core/romm/romm_service.dart
index 9a6d36f..f8bceb2 100644
--- a/lib/core/romm/romm_service.dart
+++ b/lib/core/romm/romm_service.dart
@@ -250,6 +250,27 @@ class RommService {
return _fetchPaginatedGames(params);
}
+ Future<List<Game>> getRecentlyAdded({int limit = 15}) async {
+ try {
+ final response = await _dio.get(
+ '/api/roms',
+ queryParameters: {
+ 'limit': limit,
+ 'order_by': 'id',
+ 'order_dir': 'desc',
+ 'with_char_index': false,
+ 'with_filter_values': false
+ },
+ options: _authOptions
+ );
+ if (response.statusCode == 200) {
+ final List<dynamic> items = response.data is Map ? (response.data['items'] ?? []) : (response.data is List ? response.data : []);
+ return items.map((e) => Game.fromJson(e as Map<String, dynamic>)).toList();
+ }
+ return [];
+ } catch (_) { return []; }
+ }
+
Future<List<Game>> getRecentlyPlayed({int limit = 15}) async {
try {
final response = await _dio.get('/api/roms', queryParameters: {'limit': limit, 'order_by': 'last_played', 'order_dir': 'desc', 'last_played': true, 'with_char_index': false, 'with_filter_values': false}, options: _authOptions);
diff --git a/lib/providers/paginated_games_provider.dart b/lib/providers/paginated_games_provider.dart
index 535981e..b33a1da 100644
--- a/lib/providers/paginated_games_provider.dart
+++ b/lib/providers/paginated_games_provider.dart
@@ -375,3 +375,9 @@ final recentlyPlayedProvider = FutureProvider<List<Game>>((ref) async {
if (service == null) return [];
return service.getRecentlyPlayed(limit: 15);
});
+
+final recentlyAddedProvider = FutureProvider<List<Game>>((ref) async {
+ final service = ref.watch(rommServiceProvider);
+ if (service == null) return [];
+ return service.getRecentlyAdded(limit: 15);
+});
diff --git a/lib/ui/screens/library_screen.dart b/lib/ui/screens/library_screen.dart
index 6c6fdd7..7c931a0 100644
--- a/lib/ui/screens/library_screen.dart
+++ b/lib/ui/screens/library_screen.dart
@@ -64,6 +64,8 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen> with LibraryActio
Future<void> _refreshLibrary() async {
ref.invalidate(platformsProvider);
+ ref.invalidate(recentlyAddedProvider);
+ ref.invalidate(recentlyPlayedProvider);
ref.read(paginatedGamesProvider.notifier).reset();
await ref.read(paginatedGamesProvider.notifier).loadInitial(
platformId: ref.read(selectedPlatformIdProvider)?.toString(),
@@ -533,12 +535,16 @@ class _LibraryScreenState extends ConsumerState<LibraryScreen> with LibraryActio
),
),
// 2. Recently Added
- _buildHorizontalShelf(
- context: context,
- title: 'Recently Added',
- icon: Icons.new_releases_outlined,
- games: displayGames.take(15).toList(),
- ref: ref,
+ ref.watch(recentlyAddedProvider).when(
+ loading: () => const SizedBox.shrink(),
+ error: (e, s) => const SizedBox.shrink(),
+ data: (games) => _buildHorizontalShelf(
+ context: context,
+ title: 'Recently Added',
+ icon: Icons.new_releases_outlined,
+ games: games,
+ ref: ref,
+ ),
),
// 3. Installed Games
metadataCacheAsync.when(