From 01cbb287abcee43fc7206a966afdfeac008794d7 Mon Sep 17 00:00:00 2001 From: lzw-723 Date: Sat, 4 Apr 2026 17:24:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BA=E6=9F=A5=E8=AF=A2=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/domain/repositories/album_repository.dart | 10 +++++++++- bin/domain/repositories/photo_repository.dart | 17 +++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/bin/domain/repositories/album_repository.dart b/bin/domain/repositories/album_repository.dart index 17faec3..adb836d 100644 --- a/bin/domain/repositories/album_repository.dart +++ b/bin/domain/repositories/album_repository.dart @@ -6,10 +6,17 @@ import '../entities/album.dart'; class AlbumRepository { final String basePath; + final List _albums = List.empty(growable: true); + DateTime _updated = DateTime.utc(1970); AlbumRepository({required this.basePath}); Future> getAllAlbums() async { + if (DateTime.now().difference(_updated).inSeconds <= 60) { + return _albums; + } + _updated = DateTime.now(); + final dir = Directory(basePath); if (!await dir.exists()) { return []; @@ -29,7 +36,8 @@ class AlbumRepository { ); }) .toList(); - + _albums.clear(); + _albums.addAll(albums); return albums; } diff --git a/bin/domain/repositories/photo_repository.dart b/bin/domain/repositories/photo_repository.dart index 21207c4..976ca3a 100644 --- a/bin/domain/repositories/photo_repository.dart +++ b/bin/domain/repositories/photo_repository.dart @@ -1,3 +1,4 @@ +import 'dart:collection'; import 'dart:io'; import 'dart:typed_data'; @@ -6,12 +7,19 @@ import '../entities/photo.dart'; class PhotoRepository { final String basePath; + final Map> _map = HashMap(); + final Map _updatedMap = HashMap(); PhotoRepository(this.basePath); Future> getPhotosByAlbumId(int id) async { - final dir = Directory(basePath); + if (_updatedMap.containsKey(id) && + DateTime.now().difference(_updatedMap[id]!).inSeconds <= 60) { + return _map[id]!; + } + _updatedMap[id] = DateTime.now(); + final dir = Directory(basePath); if (!await dir.exists()) { return []; } @@ -57,10 +65,15 @@ class PhotoRepository { ); }); - return Future.wait(photoFutures); + final photos = await Future.wait(photoFutures); + _map[id] = List.from(photos); + return photos; } Future getPhotoById(int id) async { + try { + return _map.values.expand((l) => l).firstWhere((p) => p.id == id); + } catch (e) {} final dir = Directory(basePath); if (!await dir.exists()) {