From 7e451e9e01a8274e8ccaeda1955789c47bb1ed3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=85=B1=E5=A4=A9=E5=B0=8F=E7=A6=BD=E5=85=BD?= Date: Wed, 6 Nov 2024 23:49:28 +0800 Subject: [PATCH] update gallery --- lib/src/service/gallery_download_service.dart | 42 ++++++++++++++++++- lib/src/service/schedule_service.dart | 6 +-- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/lib/src/service/gallery_download_service.dart b/lib/src/service/gallery_download_service.dart index ef3d6211..fae8b3a5 100644 --- a/lib/src/service/gallery_download_service.dart +++ b/lib/src/service/gallery_download_service.dart @@ -998,6 +998,15 @@ class GalleryDownloadService extends GetxController with GridBasePageServiceMixi GalleryDownloadInfo galleryDownloadInfo = galleryDownloadInfos[gallery.gid]!; + /// If this is a update from old gallery, try to copy from existing old image first + if (gallery.oldVersionGalleryUrl != null) { + await _tryCopyImageInfoFromHref(gallery.oldVersionGalleryUrl!, gallery, serialNo); + + if (galleryDownloadInfo.images[serialNo] != null) { + return; + } + } + GalleryImage image; try { image = await retry( @@ -1080,7 +1089,7 @@ class GalleryDownloadService extends GetxController with GridBasePageServiceMixi /// If this is a update from old gallery, try to copy from existing old image first if (gallery.oldVersionGalleryUrl != null) { - await _tryCopyImageInfo(gallery.oldVersionGalleryUrl!, gallery, serialNo); + await _tryCopyImageInfoFromImage(gallery.oldVersionGalleryUrl!, gallery, serialNo); if (image.downloadStatus == DownloadStatus.downloaded) { return; @@ -1196,8 +1205,37 @@ class GalleryDownloadService extends GetxController with GridBasePageServiceMixi ); } + Future _tryCopyImageInfoFromHref(String oldVersionGalleryUrl, GalleryDownloadedData newGallery, int newImageSerialNo) async { + GalleryDownloadedData? oldGallery = gallerys.firstWhereOrNull((e) => e.galleryUrl == oldVersionGalleryUrl); + if (oldGallery == null) { + return; + } + + String? newImageHash = galleryDownloadInfos[newGallery.gid]!.imageHrefs[newImageSerialNo]!.originImageHash; + if (newImageHash == null) { + return; + } + + int? oldImageSerialNo = galleryDownloadInfos[oldGallery.gid]?.images.firstIndexWhereOrNull((e) => e?.imageHash == newImageHash); + if (oldImageSerialNo == null) { + return; + } + + GalleryImage oldImage = galleryDownloadInfos[oldGallery.gid]!.images[oldImageSerialNo]!; + GalleryImage newImage = oldImage.copyWith( + path: _computeImageDownloadRelativePath(newGallery.title, newGallery.gid, oldImage.url, newImageSerialNo), + downloadStatus: DownloadStatus.downloading, + ); + + await _saveNewImageInfoInDatabase(newImage, newImageSerialNo, newGallery.gid); + galleryDownloadInfos[newGallery.gid]!.images[newImageSerialNo] = newImage; + + await _copyImageInfo(oldImage, newGallery, newImageSerialNo); + await superResolutionService.copyImageInfo(oldGallery, newGallery, oldImageSerialNo, newImageSerialNo); + } + /// If two images' [imageHash] is equal, they are the same image. - Future _tryCopyImageInfo(String oldVersionGalleryUrl, GalleryDownloadedData newGallery, int newImageSerialNo) async { + Future _tryCopyImageInfoFromImage(String oldVersionGalleryUrl, GalleryDownloadedData newGallery, int newImageSerialNo) async { GalleryDownloadedData? oldGallery = gallerys.firstWhereOrNull((e) => e.galleryUrl == oldVersionGalleryUrl); if (oldGallery == null) { return; diff --git a/lib/src/service/schedule_service.dart b/lib/src/service/schedule_service.dart index 35fc1499..7b0853b5 100644 --- a/lib/src/service/schedule_service.dart +++ b/lib/src/service/schedule_service.dart @@ -61,7 +61,7 @@ class ScheduleService with JHLifeCircleBeanErrorCatch implements JHLifeCircleBea try { latestVersion = (await retry( - () => ehRequest.get(url: url, parser: EHSpiderParser.githubReleasePage2LatestVersion), + () => ehRequest.get(url: url, parser: EHSpiderParser.githubReleasePage2LatestVersion), maxAttempts: 3, )) .trim() @@ -88,7 +88,7 @@ class ScheduleService with JHLifeCircleBeanErrorCatch implements JHLifeCircleBea Get.dialog(UpdateDialog(currentVersion: currentVersion, latestVersion: latestVersion)); }); } - + Future refreshGalleryTags() async { int pageNo = 1; List gallerys = await GalleryDao.selectGallerysForTagRefresh(pageNo, 25); @@ -143,7 +143,7 @@ class ScheduleService with JHLifeCircleBeanErrorCatch implements JHLifeCircleBea ); log.trace('refreshArchiveTags success, pageNo: $pageNo, archives: ${archives.map((a) => a.gid).toList()}'); } catch (e) { - log.warning('refreshArchiveTags error, archives: $archives', e); + log.warning('refreshArchiveTags error, archives: ${archives.map((a) => a.gid).toList()}', e); } pageNo++;