瀏覽代碼

Merge pull request #735 from ente-io/file_search

Neeraj Gupta 2 年之前
父節點
當前提交
6d33b5904c

+ 2 - 1
lib/models/file.dart

@@ -1,5 +1,6 @@
 import 'dart:io';
 import 'dart:io';
 
 
+import 'package:flutter/foundation.dart';
 import 'package:logging/logging.dart';
 import 'package:logging/logging.dart';
 import 'package:path/path.dart';
 import 'package:path/path.dart';
 import 'package:photo_manager/photo_manager.dart';
 import 'package:photo_manager/photo_manager.dart';
@@ -269,7 +270,7 @@ class File extends EnteFile {
     if (pubMagicMetadata != null && pubMagicMetadata!.editedName != null) {
     if (pubMagicMetadata != null && pubMagicMetadata!.editedName != null) {
       return pubMagicMetadata!.editedName!;
       return pubMagicMetadata!.editedName!;
     }
     }
-    if (title == null) _logger.severe('File title is null');
+    if (title == null && kDebugMode) _logger.severe('File title is null');
     return title ?? '';
     return title ?? '';
   }
   }
 
 

+ 22 - 20
lib/services/search_service.dart

@@ -52,20 +52,6 @@ class SearchService {
     return _cachedFilesFuture;
     return _cachedFilesFuture;
   }
   }
 
 
-  Future<List<File>> getFileSearchResults(String query) async {
-    final List<File> fileSearchResults = [];
-    final List<File> files = await _getAllFiles();
-    for (var file in files) {
-      if (fileSearchResults.length >= _maximumResultsLimit) {
-        break;
-      }
-      if (file.title.toLowerCase().contains(query.toLowerCase())) {
-        fileSearchResults.add(file);
-      }
-    }
-    return fileSearchResults;
-  }
-
   void clearCache() {
   void clearCache() {
     _cachedFilesFuture = null;
     _cachedFilesFuture = null;
   }
   }
@@ -208,7 +194,7 @@ class SearchService {
     return searchResults;
     return searchResults;
   }
   }
 
 
-  Future<List<GenericSearchResult>> getCaptionResults(
+  Future<List<GenericSearchResult>> getCaptionAndNameResults(
     String query,
     String query,
   ) async {
   ) async {
     final List<GenericSearchResult> searchResults = [];
     final List<GenericSearchResult> searchResults = [];
@@ -217,15 +203,31 @@ class SearchService {
     }
     }
     final RegExp pattern = RegExp(query, caseSensitive: false);
     final RegExp pattern = RegExp(query, caseSensitive: false);
     final List<File> allFiles = await _getAllFiles();
     final List<File> allFiles = await _getAllFiles();
-    final matchedFiles = allFiles
-        .where((e) => e.caption != null && pattern.hasMatch(e.caption))
-        .toList();
-    if (matchedFiles.isNotEmpty) {
+    final List<File> captionMatch = <File>[];
+    final List<File> displayNameMatch = <File>[];
+    for (File eachFile in allFiles) {
+      if (eachFile.caption != null && pattern.hasMatch(eachFile.caption)) {
+        captionMatch.add(eachFile);
+      }
+      if (pattern.hasMatch(eachFile.displayName)) {
+        displayNameMatch.add(eachFile);
+      }
+    }
+    if (captionMatch.isNotEmpty) {
       searchResults.add(
       searchResults.add(
         GenericSearchResult(
         GenericSearchResult(
           ResultType.fileCaption,
           ResultType.fileCaption,
           query,
           query,
-          matchedFiles,
+          captionMatch,
+        ),
+      );
+    }
+    if (displayNameMatch.isNotEmpty) {
+      searchResults.add(
+        GenericSearchResult(
+          ResultType.file,
+          query,
+          displayNameMatch,
         ),
         ),
       );
       );
     }
     }

+ 2 - 2
lib/ui/viewer/search/result/search_result_widget.dart

@@ -116,7 +116,7 @@ class SearchResultWidget extends StatelessWidget {
       case ResultType.month:
       case ResultType.month:
         return "Month";
         return "Month";
       case ResultType.file:
       case ResultType.file:
-        return "Memory";
+        return "File name";
       case ResultType.event:
       case ResultType.event:
         return "Day";
         return "Day";
       case ResultType.location:
       case ResultType.location:
@@ -124,7 +124,7 @@ class SearchResultWidget extends StatelessWidget {
       case ResultType.fileType:
       case ResultType.fileType:
         return "Type";
         return "Type";
       case ResultType.fileExtension:
       case ResultType.fileExtension:
-        return "File Extension";
+        return "File extension";
       case ResultType.fileCaption:
       case ResultType.fileCaption:
         return "Description";
         return "Description";
       default:
       default:

+ 3 - 2
lib/ui/viewer/search/search_widget.dart

@@ -208,8 +208,9 @@ class _SearchWidgetState extends State<SearchWidget> {
           await _searchService.getFileTypeResults(query);
           await _searchService.getFileTypeResults(query);
       allResults.addAll(fileTypeSearchResults);
       allResults.addAll(fileTypeSearchResults);
 
 
-      final fileCaptionResults = await _searchService.getCaptionResults(query);
-      allResults.addAll(fileCaptionResults);
+      final captionAndDisplayNameResult =
+          await _searchService.getCaptionAndNameResults(query);
+      allResults.addAll(captionAndDisplayNameResult);
 
 
       final fileExtnResult =
       final fileExtnResult =
           await _searchService.getFileExtensionResults(query);
           await _searchService.getFileExtensionResults(query);