Browse Source

Add API to fetch duplicate files from remote

vishnukvmd 3 years ago
parent
commit
dcab8b8028
2 changed files with 56 additions and 0 deletions
  1. 38 0
      lib/models/duplicate_files.dart
  2. 18 0
      lib/services/sync_service.dart

+ 38 - 0
lib/models/duplicate_files.dart

@@ -0,0 +1,38 @@
+import 'dart:convert';
+
+class DuplicateFiles {
+  final List<Duplicates> duplicates;
+  DuplicateFiles(this.duplicates);
+
+  factory DuplicateFiles.fromMap(Map<String, dynamic> map) {
+    return DuplicateFiles(
+      List<Duplicates>.from(
+          map['duplicates']?.map((x) => Duplicates.fromMap(x))),
+    );
+  }
+
+  factory DuplicateFiles.fromJson(String source) =>
+      DuplicateFiles.fromMap(json.decode(source));
+
+  @override
+  String toString() => 'DuplicateFiles(duplicates: $duplicates)';
+}
+
+class Duplicates {
+  final List<int> fileIDs;
+  final int size;
+  Duplicates(this.fileIDs, this.size);
+
+  factory Duplicates.fromMap(Map<String, dynamic> map) {
+    return Duplicates(
+      List<int>.from(map['fileIDs']),
+      map['size'],
+    );
+  }
+
+  factory Duplicates.fromJson(String source) =>
+      Duplicates.fromMap(json.decode(source));
+
+  @override
+  String toString() => 'Duplicates(fileIDs: $fileIDs, size: $size)';
+}

+ 18 - 0
lib/services/sync_service.dart

@@ -16,6 +16,7 @@ import 'package:photos/events/subscription_purchased_event.dart';
 import 'package:photos/events/sync_status_update_event.dart';
 import 'package:photos/events/trigger_logout_event.dart';
 import 'package:photos/models/backup_status.dart';
+import 'package:photos/models/duplicate_files.dart';
 import 'package:photos/models/file_type.dart';
 import 'package:photos/services/local_sync_service.dart';
 import 'package:photos/services/notification_service.dart';
@@ -183,6 +184,23 @@ class SyncService {
     );
   }
 
+  Future<DuplicateFiles> getDuplicateFiles() async {
+    try {
+      final response = await _dio.get(
+        Configuration.instance.getHttpEndpoint() + "/files/duplicates",
+        options: Options(
+          headers: {
+            "X-Auth-Token": Configuration.instance.getToken(),
+          },
+        ),
+      );
+      return DuplicateFiles.fromMap(response.data);
+    } catch (e) {
+      _logger.severe(e);
+      rethrow;
+    }
+  }
+
   Future<BackupStatus> getBackupStatus() async {
     final ids = await FilesDB.instance.getBackedUpIDs();
     final size = await _getFileSize(ids.uploadedIDs);