Skip to content

Commit

Permalink
修复重试下载图片时数据库重复插入数据的bug
Browse files Browse the repository at this point in the history
Fix the bug of repeated data insertion in the database when retrying to download pictures
  • Loading branch information
jiangtian616 committed Jul 28, 2022
1 parent 6751afc commit 53c2cd5
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 7 deletions.
15 changes: 14 additions & 1 deletion lib/src/database/database.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions lib/src/database/gallery_downloaded.drift
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@ set path = :path
where gid = :gid
AND url = :url;

updateImageUrl:
update image
set url = :newUrl
where gid = :gid
AND serialNo = :serialNo;

deleteImage:
delete
from image
Expand Down
25 changes: 19 additions & 6 deletions lib/src/service/gallery_download_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -408,13 +408,13 @@ class GalleryDownloadService extends GetxController {
};
}

Future<void> _parseGalleryImageUrl(GalleryDownloadedData gallery, int serialNo, {bool useCache = true}) async {
Future<void> _parseGalleryImageUrl(GalleryDownloadedData gallery, int serialNo, {bool isNewImage = true}) async {
if (_taskHasBeenPausedOrRemoved(gallery)) {
return;
}

GalleryImage image;
AsyncTask<GalleryImage> task = _parseGalleryImageUrlTask(gallery, serialNo, useCache);
AsyncTask<GalleryImage> task = _parseGalleryImageUrlTask(gallery, serialNo, isNewImage);
gid2Tasks[gallery.gid]!.add(task);
try {
image = await retry(
Expand All @@ -423,7 +423,7 @@ class GalleryDownloadService extends GetxController {
onRetry: (e) => Log.download('ParseImageUrl failed, retry. Reason: ${(e as DioError).message}'),
maxAttempts: retryTimes,
);
} on CancelException catch (e) {
} on CancelException catch (_) {
return;
} on DioError catch (e) {
if (e.type == DioErrorType.cancel) {
Expand All @@ -435,7 +435,7 @@ class GalleryDownloadService extends GetxController {
await pauseAllDownloadGallery();
return;
}
await _parseGalleryImageUrl(gallery, serialNo, useCache: useCache);
await _parseGalleryImageUrl(gallery, serialNo, isNewImage: isNewImage);
return;
} finally {
gid2Tasks[gallery.gid]?.remove(task);
Expand All @@ -444,7 +444,12 @@ class GalleryDownloadService extends GetxController {
gid2Images[gallery.gid]![serialNo] = image;
image.path = _computeImageDownloadRelativePath(gallery, serialNo);
image.downloadStatus = DownloadStatus.downloading;
await _saveNewImageInfoInDatabase(image, serialNo, gallery.gid);
if (isNewImage) {
await _saveNewImageInfoInDatabase(image, serialNo, gallery.gid);
} else {
_updateImageUrl(image, gallery.gid, serialNo);
}

Log.download('parse image url: $serialNo success');
}

Expand Down Expand Up @@ -542,7 +547,7 @@ class GalleryDownloadService extends GetxController {
if (gid2ImageHrefs[gallery.gid]?[serialNo] == null) {
await _parseGalleryImageHref(gallery, serialNo);
}
await _parseGalleryImageUrl(gallery, serialNo, useCache: false);
await _parseGalleryImageUrl(gallery, serialNo, isNewImage: false);
_downloadGalleryImage(gallery, serialNo);
}

Expand Down Expand Up @@ -735,6 +740,14 @@ class GalleryDownloadService extends GetxController {
}
}

Future<void> _updateImageUrl(GalleryImage image, int gid, int serialNo) async {
appDb.updateImageUrl(image.url, gid, serialNo);

if (DownloadSetting.enableStoreMetadataForRestore.isTrue) {
_saveGalleryDownloadInfoInDisk(gallerys.firstWhere((e) => e.gid == gid));
}
}

/// a image has been downloaded successfully, update its status
Future<int> _updateImageDownloadStatusInDatabase(int gid, String url, DownloadStatus downloadStatus) {
return appDb.updateImageStatus(downloadStatus.index, gid, url);
Expand Down

0 comments on commit 53c2cd5

Please sign in to comment.