From f4b78a67a3a9d4b8d251911b98a396bf67743df7 Mon Sep 17 00:00:00 2001
From: Oliver Wiese <oliver.wiese@fu-berlin.de>
Date: Wed, 4 Oct 2017 16:49:55 +0200
Subject: [PATCH] make inbox fast again!

---
 enzevalos_iphone/DataHandler.swift          | 10 +++-------
 enzevalos_iphone/Folder+CoreDataClass.swift | 16 ++++++++++++++--
 enzevalos_iphone/InboxViewController.swift  | 18 +++++++++---------
 3 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/enzevalos_iphone/DataHandler.swift b/enzevalos_iphone/DataHandler.swift
index 6c0a9afa..60399ff6 100644
--- a/enzevalos_iphone/DataHandler.swift
+++ b/enzevalos_iphone/DataHandler.swift
@@ -124,9 +124,8 @@ class DataHandler {
                 checkMail(mail: mail)
             }
         }
-        if let records = folder.records{
-            checkRecords(records: records)
-        }
+        let records = folder.records
+        checkRecords(records: records)
         checkRecords(records: folder.liveRecords)
     print("Finish checking!")
     }
@@ -778,10 +777,7 @@ class DataHandler {
     
     func folderRecords(folderPath: String) -> [KeyRecord]{
         let folder = findFolder(with: folderPath) as Folder
-        if folder.records != nil {
-            return folder.records!
-        }
-        return []
+        return folder.records
     }
 
 
diff --git a/enzevalos_iphone/Folder+CoreDataClass.swift b/enzevalos_iphone/Folder+CoreDataClass.swift
index 63903135..60516713 100644
--- a/enzevalos_iphone/Folder+CoreDataClass.swift
+++ b/enzevalos_iphone/Folder+CoreDataClass.swift
@@ -40,6 +40,7 @@ public class Folder: NSManagedObject {
     
     var liveRecords: [KeyRecord]{
         get{
+            print("Calculate KeyRecords!")
             var records = [KeyRecord]()
             // Get all Keys, get all adrs
             let keys = DataHandler.handler.allKeysInFolder(folder: self)
@@ -59,7 +60,18 @@ public class Folder: NSManagedObject {
         }
     }
     
-    var records: [KeyRecord]? = nil
+    private var storedRecords: [KeyRecord]? = nil
+    
+    var records: [KeyRecord]{
+        get{
+            if storedRecords == nil{
+                updateRecords()
+            }
+            return storedRecords!
+        }
+    
+    }
+    
     
     var mailsOfFolder: [PersistentMail]{
         get{
@@ -88,6 +100,6 @@ public class Folder: NSManagedObject {
     
     //write value of liveRecords to records
     func updateRecords() {
-        records = liveRecords
+        storedRecords = liveRecords
     }
 }
diff --git a/enzevalos_iphone/InboxViewController.swift b/enzevalos_iphone/InboxViewController.swift
index 4a6b4aff..9fd90c1d 100644
--- a/enzevalos_iphone/InboxViewController.swift
+++ b/enzevalos_iphone/InboxViewController.swift
@@ -14,6 +14,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator {
     let dateFormatter = DateFormatter()
     let searchController = UISearchController(searchResultsController: nil)
     var filteredRecords = [KeyRecord]()
+    let folder = DataHandler.handler.findFolder(with: UserManager.backendInboxFolderPath)
 
     @IBOutlet weak var lastUpdateButton: UIBarButtonItem!
     var lastUpdateLabel = UILabel(frame: CGRect.zero)
@@ -69,6 +70,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator {
     }
 
     func addNewMail() {
+        folder.updateRecords()
         tableView.reloadData()
     }
 
@@ -101,8 +103,8 @@ class InboxViewController: UITableViewController, InboxCellDelegator {
         if isFiltering() {
             cell.enzContact = filteredRecords[indexPath.section]
         } else {
-            DataHandler.handler.findFolder(with: UserManager.backendInboxFolderPath).updateRecords()
-            cell.enzContact = DataHandler.handler.folderRecords(folderPath: UserManager.backendInboxFolderPath)[indexPath.section]
+            
+            cell.enzContact = folder.records[indexPath.section]
         }
 
         return cell
@@ -112,9 +114,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator {
         if isFiltering() {
             return filteredRecords.count
         }
-
-        DataHandler.handler.findFolder(with: UserManager.backendInboxFolderPath).updateRecords()
-        return DataHandler.handler.folderRecords(folderPath: UserManager.backendInboxFolderPath).count
+        return folder.records.count
     }
 
     // set top and bottom seperator height
@@ -172,22 +172,22 @@ class InboxViewController: UITableViewController, InboxCellDelegator {
     }
 
     func filterContentForSearchText(_ searchText: String, scope: Int = 0) {
-        DataHandler.handler.findFolder(with: UserManager.backendInboxFolderPath).updateRecords()
+        folder.updateRecords()
         var records = [KeyRecord]()
         if scope == 0 || scope == 3 {
-            records += DataHandler.handler.folderRecords(folderPath: UserManager.backendInboxFolderPath).filter({ ( record: KeyRecord) -> Bool in
+            records += folder.records.filter({ ( record: KeyRecord) -> Bool in
                 return record.name.lowercased().contains(searchText.lowercased())
             })
         }
         if scope == 1 || scope == 3 {
-            records += DataHandler.handler.folderRecords(folderPath: UserManager.backendInboxFolderPath).filter({ ( record: KeyRecord) -> Bool in
+            records += folder.records.filter({ ( record: KeyRecord) -> Bool in
                 return record.mails.filter({ (mail: PersistentMail) -> Bool in
                     mail.subject?.lowercased().contains(searchText.lowercased()) ?? false
                 }).count > 0
             })
         }
         if scope == 2 || scope == 3 {
-            records += DataHandler.handler.folderRecords(folderPath: UserManager.backendInboxFolderPath).filter({ ( record: KeyRecord) -> Bool in
+            records += folder.records.filter({ ( record: KeyRecord) -> Bool in
                 return record.mails.filter({ (mail: PersistentMail) -> Bool in
                     if let decryptedBody = mail.decryptedBody {
                         return decryptedBody.lowercased().contains(searchText.lowercased())
-- 
GitLab