瀏覽代碼

Fix: Clear stale shared media files from app cache

Neeraj Gupta 1 年之前
父節點
當前提交
77840dc3f6
共有 1 個文件被更改,包括 31 次插入5 次删除
  1. 31 5
      lib/utils/file_uploader.dart

+ 31 - 5
lib/utils/file_uploader.dart

@@ -10,6 +10,7 @@ import 'package:dio/dio.dart';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/foundation.dart';
 import 'package:logging/logging.dart';
 import 'package:logging/logging.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/configuration.dart';
+import "package:photos/core/constants.dart";
 import 'package:photos/core/errors.dart';
 import 'package:photos/core/errors.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/core/event_bus.dart';
 import 'package:photos/core/network/network.dart';
 import 'package:photos/core/network/network.dart';
@@ -34,6 +35,7 @@ import "package:photos/services/user_service.dart";
 import 'package:photos/utils/crypto_util.dart';
 import 'package:photos/utils/crypto_util.dart';
 import 'package:photos/utils/file_download_util.dart';
 import 'package:photos/utils/file_download_util.dart';
 import 'package:photos/utils/file_uploader_util.dart';
 import 'package:photos/utils/file_uploader_util.dart';
+import "package:photos/utils/file_util.dart";
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:shared_preferences/shared_preferences.dart';
 import 'package:tuple/tuple.dart';
 import 'package:tuple/tuple.dart';
 import "package:uuid/uuid.dart";
 import "package:uuid/uuid.dart";
@@ -307,12 +309,36 @@ class FileUploader {
         return file.path.contains(kUploadTempPrefix) &&
         return file.path.contains(kUploadTempPrefix) &&
             file.path.contains(".encrypted");
             file.path.contains(".encrypted");
       });
       });
-      if (filesToDelete.isEmpty) {
-        return;
+      if (filesToDelete.isNotEmpty) {
+        _logger.info('cleaning up state files ${filesToDelete.length}');
+        for (final file in filesToDelete) {
+          await file.delete();
+        }
       }
       }
-      _logger.info('cleaning up state files ${filesToDelete.length}');
-      for (final file in filesToDelete) {
-        await file.delete();
+
+      if (Platform.isAndroid) {
+        final sharedMediaDir =
+            Configuration.instance.getSharedMediaDirectory() + "/";
+        final sharedFiles = await Directory(sharedMediaDir).list().toList();
+        if (sharedFiles.isNotEmpty) {
+          _logger.info('Shared media directory cleanup ${sharedFiles.length}');
+          final int ownerID = Configuration.instance.getUserID()!;
+          final existingLocalFileIDs =
+              await FilesDB.instance.getExistingLocalFileIDs(ownerID);
+          final Set<String> trackedSharedFilePaths = {};
+          for (String localID in existingLocalFileIDs) {
+            if (localID.contains(sharedMediaIdentifier)) {
+              trackedSharedFilePaths
+                  .add(getSharedMediaPathFromLocalID(localID));
+            }
+          }
+          for (final file in sharedFiles) {
+            if (!trackedSharedFilePaths.contains(file.path)) {
+              _logger.info('Deleting stale shared media file ${file.path}');
+              await file.delete();
+            }
+          }
+        }
       }
       }
     } catch (e, s) {
     } catch (e, s) {
       _logger.severe("Failed to remove stale files", e, s);
       _logger.severe("Failed to remove stale files", e, s);