From 0736f05e96c76870f2e881077e1cc4038aeb41ae Mon Sep 17 00:00:00 2001
From: lazarog98 <lazarog98@87-77-95-50.mna.fu-berlin.de>
Date: Wed, 26 Feb 2020 12:23:44 +0100
Subject: [PATCH] Initial body search query w/ separated terms

---
 enzevalos_iphone/InboxViewController.swift | 40 +++++++++++++++++++---
 1 file changed, 36 insertions(+), 4 deletions(-)

diff --git a/enzevalos_iphone/InboxViewController.swift b/enzevalos_iphone/InboxViewController.swift
index 302cd8ce..50cbd5ab 100644
--- a/enzevalos_iphone/InboxViewController.swift
+++ b/enzevalos_iphone/InboxViewController.swift
@@ -267,18 +267,50 @@ class InboxViewController: UITableViewController, InboxCellDelegator {
         }
     }
     
+    /**
+     Function to be used to find mails that contain the search terms. All terms (separated by spaces) need to be contained in the search text.
+     - parameters:
+        - content: The String that will be searched
+        - searchText: Search terms (space-separated) that will be searched for
+    */
+    private func containsSearchTerms ( content : String?, searchText: String) -> Bool
+    {
+        if  searchText == ""
+        {
+            return true ///Case empty search
+        }
+        if content == nil
+        {
+            return false ///Case Mail has no body/subject
+        }
+        //var terms = searchText.characters.split(separator: " ")
+        let terms = searchText.lowercased().components(separatedBy : " ")
+        var found = true
+        for t in terms
+        {
+            found = found && content!.lowercased().contains(t)
+        }
+        return found
+    }
+    
+    /**
+    Filters emails by a user input string and scope
+     
+     - parameters:
+        -scope: 0 =
+     */
     private func _filterContentForSearchText(_ searchText: String, scope: Int = 0) {
         var records = [KeyRecord]()
         if scope == 0 || scope == 3 {
             records += folder.records.filter({ (record: KeyRecord) -> Bool in
-                return record.name.lowercased().contains(searchText.lowercased())
+                return containsSearchTerms(content: record.name, searchText: searchText)
             })
         }
         if scope == 1 || scope == 3 {
             records += folder.records.filter({ (record: KeyRecord) -> Bool in
                 let mails = record.inboxMails
                 return mails.filter({ (mail: PersistentMail) -> Bool in
-                    mail.subject?.lowercased().contains(searchText.lowercased()) ?? false
+                    containsSearchTerms(content: mail.subject, searchText: searchText)
                 }).count > 0
             })
         }
@@ -287,9 +319,9 @@ class InboxViewController: UITableViewController, InboxCellDelegator {
                 let mails = record.inboxMails
                 return mails.filter({ (mail: PersistentMail) -> Bool in
                     if let decryptedBody = mail.decryptedBody {
-                        return decryptedBody.lowercased().contains(searchText.lowercased())
+                        return  containsSearchTerms(content: decryptedBody, searchText: searchText)
                     } else if !mail.isEncrypted {
-                        return mail.body?.lowercased().contains(searchText.lowercased()) ?? false
+                        return containsSearchTerms(content: mail.body, searchText: searchText)
                     }
                     return false
                 }).count > 0
-- 
GitLab