Explorar el Código

Search: Support for searching by fileExtension

Neeraj Gupta hace 2 años
padre
commit
c730e36201

+ 10 - 1
lib/models/search/search_result.dart

@@ -14,4 +14,13 @@ abstract class SearchResult {
   List<File> resultFiles();
 }
 
-enum ResultType { collection, file, location, month, year, fileType, event }
+enum ResultType {
+  collection,
+  file,
+  location,
+  month,
+  year,
+  fileType,
+  fileExtension,
+  event
+}

+ 34 - 0
lib/services/search_service.dart

@@ -220,6 +220,40 @@ class SearchService {
     return searchResults;
   }
 
+  Future<List<GenericSearchResult>> getFileExtensionResults(
+    String query,
+  ) async {
+    final List<GenericSearchResult> searchResults = [];
+    if (!query.startsWith(".")) {
+      return searchResults;
+    }
+    final nonCaseSensitiveRegexForQuery = RegExp(query, caseSensitive: false);
+
+    final List<File> allFiles = await _getAllFiles();
+    final Map<String, List<File>> resultMap = <String, List<File>>{};
+
+    for (File eachFile in allFiles) {
+      final String fileName = eachFile.getDisplayName();
+      if (fileName.contains(nonCaseSensitiveRegexForQuery)) {
+        final String exnType = fileName.split(".").last.toUpperCase();
+        if (!resultMap.containsKey(exnType)) {
+          resultMap[exnType] = <File>[];
+        }
+        resultMap[exnType].add(eachFile);
+      }
+    }
+    for (MapEntry<String, List<File>> entry in resultMap.entries) {
+      searchResults.add(
+        GenericSearchResult(
+          ResultType.fileExtension,
+          entry.key.toUpperCase(),
+          entry.value,
+        ),
+      );
+    }
+    return searchResults;
+  }
+
   Future<List<GenericSearchResult>> getMonthSearchResults(String query) async {
     final List<GenericSearchResult> searchResults = [];
     final nonCaseSensitiveRegexForQuery = RegExp(query, caseSensitive: false);

+ 3 - 1
lib/ui/viewer/search/result/search_result_widget.dart

@@ -120,9 +120,11 @@ class SearchResultWidget extends StatelessWidget {
       case ResultType.event:
         return "Day";
       case ResultType.location:
-        return "Day";
+        return "Location";
       case ResultType.fileType:
         return "Type";
+      case ResultType.fileExtension:
+        return "File Extension";
       default:
         return type.name.toUpperCase();
     }

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

@@ -189,6 +189,9 @@ class _SearchWidgetState extends State<SearchWidget> {
         await _searchService.getFileTypeResults(query);
     allResults.addAll(fileTypeSearchResults);
 
+    final fileExtnResult = await _searchService.getFileExtensionResults(query);
+    allResults.addAll(fileExtnResult);
+
     final collectionResults =
         await _searchService.getCollectionSearchResults(query);
     allResults.addAll(collectionResults);