Преглед изворни кода

DeveloperMode: Support for deleting local sync state

Signed-off-by: Neeraj Gupta <254676+ua741@users.noreply.github.com>
Neeraj Gupta пре 3 година
родитељ
комит
e7d6aa48d0
3 измењених фајлова са 43 додато и 4 уклоњено
  1. 13 2
      lib/db/files_db.dart
  2. 16 1
      lib/services/local_sync_service.dart
  3. 14 1
      lib/ui/settings/debug_section_widget.dart

+ 13 - 2
lib/db/files_db.dart

@@ -1,5 +1,6 @@
-import 'dart:io';
+import 'dart:io' as io;
 
+import 'package:flutter/foundation.dart';
 import 'package:logging/logging.dart';
 import 'package:path/path.dart';
 import 'package:path_provider/path_provider.dart';
@@ -97,7 +98,7 @@ class FilesDB {
 
   // this opens the database (and creates it if it doesn't exist)
   Future<Database> _initDatabase() async {
-    Directory documentsDirectory = await getApplicationDocumentsDirectory();
+    io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
     String path = join(documentsDirectory.path, _databaseName);
     _logger.info("DB path " + path);
     return await openDatabaseWithMigration(path, dbConfig);
@@ -324,6 +325,16 @@ class FilesDB {
     await db.delete(filesTable);
   }
 
+  Future<void> deleteDB() async {
+    if (kDebugMode) {
+      debugPrint("Deleting files db");
+      io.Directory documentsDirectory =
+          await getApplicationDocumentsDirectory();
+      String path = join(documentsDirectory.path, _databaseName);
+      io.File(path).deleteSync(recursive: true);
+    }
+  }
+
   Future<void> insertMultiple(List<File> files) async {
     final startTime = DateTime.now();
     final db = await instance.database;

+ 16 - 1
lib/services/local_sync_service.dart

@@ -2,11 +2,11 @@ import 'dart:async';
 import 'dart:io';
 
 import 'package:computer/computer.dart';
+import 'package:flutter/foundation.dart';
 import 'package:logging/logging.dart';
 import 'package:photo_manager/photo_manager.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/event_bus.dart';
-import 'package:photos/db/device_files_db.dart';
 import 'package:photos/db/files_db.dart';
 import 'package:photos/events/local_photos_updated_event.dart';
 import 'package:photos/events/sync_status_update_event.dart';
@@ -215,6 +215,21 @@ class LocalSyncService {
     return _prefs.getBool(kHasCompletedFirstImportKey) ?? false;
   }
 
+  // Warning: resetLocalSync should only be used for testing imported related
+  // changes
+  Future<void> resetLocalSync() async {
+    assert(kDebugMode, "only available in debug mode");
+    await FilesDB.instance.deleteDB();
+    for (var element in [
+      kHasCompletedFirstImportKey,
+      kDbUpdationTimeKey,
+      kDownloadedFileIDsKey,
+      kEditedFileIDsKey
+    ]) {
+      await _prefs.remove(element);
+    }
+  }
+
   Future<void> _loadAndStorePhotos(
     int fromTime,
     int toTime,

+ 14 - 1
lib/ui/settings/debug_section_widget.dart

@@ -3,9 +3,11 @@ import 'package:flutter/material.dart';
 import 'package:flutter_sodium/flutter_sodium.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/network.dart';
+import 'package:photos/services/local_sync_service.dart';
 import 'package:photos/ui/settings/common_settings.dart';
 import 'package:photos/ui/settings/settings_section_title.dart';
 import 'package:photos/ui/settings/settings_text_item.dart';
+import 'package:photos/utils/toast_util.dart';
 
 class DebugSectionWidget extends StatelessWidget {
   const DebugSectionWidget({Key key}) : super(key: key);
@@ -41,7 +43,18 @@ class DebugSectionWidget extends StatelessWidget {
             text: "Network requests",
             icon: Icons.navigate_next,
           ),
-        )
+        ),
+        GestureDetector(
+          behavior: HitTestBehavior.translucent,
+          onTap: () async {
+            await LocalSyncService.instance.resetLocalSync();
+            showToast(context, "Done");
+          },
+          child: const SettingsTextItem(
+            text: "Delete Local Import DB",
+            icon: Icons.navigate_next,
+          ),
+        ),
       ],
     );
   }