From 0197444e30faa05d847bd856403aade4aa2a439a Mon Sep 17 00:00:00 2001 From: Yishi Lin Date: Wed, 29 Mar 2017 00:56:07 +0800 Subject: [PATCH] Polish the logic about updating last synced time. - Update the date right after corresponding operations, and before reloading any "table view". --- .../AboutRepositoryTableViewController.swift | 2 +- pass/Controllers/PasswordsViewController.swift | 3 +-- .../Controllers/SettingsTableViewController.swift | 1 - pass/Helpers/DefaultsKeys.swift | 2 +- pass/Helpers/Utils.swift | 15 +++++++-------- pass/Models/PasswordStore.swift | 5 +++++ 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/pass/Controllers/AboutRepositoryTableViewController.swift b/pass/Controllers/AboutRepositoryTableViewController.swift index c58cd6a..7789a6f 100644 --- a/pass/Controllers/AboutRepositoryTableViewController.swift +++ b/pass/Controllers/AboutRepositoryTableViewController.swift @@ -63,7 +63,7 @@ class AboutRepositoryTableViewController: BasicStaticTableViewController { [[.style: CellDataStyle.value1, .accessoryType: type, .title: "Passwords", .detailText: numberOfPasswordsString], [.style: CellDataStyle.value1, .accessoryType: type, .title: "Size", .detailText: sizeOfRepositoryString], [.style: CellDataStyle.value1, .accessoryType: type, .title: "Local Commits", .detailText: String(self?.passwordStore.numberOfLocalCommits() ?? 0)], - [.style: CellDataStyle.value1, .accessoryType: type, .title: "Last Synced", .detailText: Utils.getLastUpdatedTimeString()], + [.style: CellDataStyle.value1, .accessoryType: type, .title: "Last Synced", .detailText: Utils.getLastSyncedTimeString()], [.style: CellDataStyle.value1, .accessoryType: type, .title: "Commits", .detailText: numberOfCommitsString], [.title: "Commit Logs", .action: "segue", .link: "showCommitLogsSegue"], ], diff --git a/pass/Controllers/PasswordsViewController.swift b/pass/Controllers/PasswordsViewController.swift index a95e7af..cef43d0 100644 --- a/pass/Controllers/PasswordsViewController.swift +++ b/pass/Controllers/PasswordsViewController.swift @@ -143,7 +143,6 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV } DispatchQueue.main.async { self.reloadTableView(parent: nil) - Defaults[.lastUpdatedTime] = Date() Defaults[.gitRepositoryPasswordAttempts] = 0 SVProgressHUD.showSuccess(withStatus: "Done") SVProgressHUD.dismiss(withDelay: 1) @@ -428,7 +427,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV self.tableView.layer.removeAnimation(forKey: "UITableViewReloadDataAnimationKey") // set the sync control title - let atribbutedTitle = "Last Synced: \(Utils.getLastUpdatedTimeString())" + let atribbutedTitle = "Last Synced: \(Utils.getLastSyncedTimeString())" syncControl.attributedTitle = NSAttributedString(string: atribbutedTitle) } diff --git a/pass/Controllers/SettingsTableViewController.swift b/pass/Controllers/SettingsTableViewController.swift index 0e1c3c3..87f7321 100644 --- a/pass/Controllers/SettingsTableViewController.swift +++ b/pass/Controllers/SettingsTableViewController.swift @@ -140,7 +140,6 @@ class SettingsTableViewController: UITableViewController { } }) DispatchQueue.main.async { - Defaults[.lastUpdatedTime] = Date() Defaults[.gitRepositoryURL] = URL(string: gitRepostiroyURL) Defaults[.gitRepositoryUsername] = username Defaults[.gitRepositoryAuthenticationMethod] = auth diff --git a/pass/Helpers/DefaultsKeys.swift b/pass/Helpers/DefaultsKeys.swift index bdfe3f0..f047031 100644 --- a/pass/Helpers/DefaultsKeys.swift +++ b/pass/Helpers/DefaultsKeys.swift @@ -24,7 +24,7 @@ extension DefaultsKeys { static let gitRepositorySSHPublicKeyURL = DefaultsKey("gitRepositorySSHPublicKeyURL") static let gitRepositorySSHPrivateKeyURL = DefaultsKey("gitRepositorySSHPrivateKeyURL") - static let lastUpdatedTime = DefaultsKey("lasteUpdatedTime") + static let lastSyncedTime = DefaultsKey("lastSyncedTime") static let isTouchIDOn = DefaultsKey("isTouchIDOn") static let passcodeKey = DefaultsKey("passcodeKey") diff --git a/pass/Helpers/Utils.swift b/pass/Helpers/Utils.swift index 462c83c..e1c539d 100644 --- a/pass/Helpers/Utils.swift +++ b/pass/Helpers/Utils.swift @@ -27,15 +27,14 @@ class Utils { removeFileIfExists(atPath: url.path) } - static func getLastUpdatedTimeString() -> String { - var lastUpdatedTimeString = "" - if let lastUpdatedTime = Defaults[.lastUpdatedTime] { - let formatter = DateFormatter() - formatter.dateStyle = .medium - formatter.timeStyle = .short - lastUpdatedTimeString = formatter.string(from: lastUpdatedTime) + static func getLastSyncedTimeString() -> String { + guard let lastSyncedTime = Defaults[.lastSyncedTime] else { + return "Oops! Sync again?" } - return lastUpdatedTimeString + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .short + return formatter.string(from: lastSyncedTime) } static func generatePassword(length: Int) -> String{ diff --git a/pass/Models/PasswordStore.swift b/pass/Models/PasswordStore.swift index 8c63aa7..f506708 100644 --- a/pass/Models/PasswordStore.swift +++ b/pass/Models/PasswordStore.swift @@ -303,6 +303,7 @@ class PasswordStore { storeRepository = try GTRepository(url: storeURL) gitCredential = credential self.updatePasswordEntityCoreData() + Defaults[.lastSyncedTime] = Date() NotificationCenter.default.post(name: .passwordStoreUpdated, object: nil) } @@ -319,6 +320,8 @@ class PasswordStore { try storeRepository?.pull((storeRepository?.currentBranch())!, from: remote, withOptions: options, progress: transferProgressBlock) self.setAllSynced() self.updatePasswordEntityCoreData() + Defaults[.lastSyncedTime] = Date() + NotificationCenter.default.post(name: .passwordStoreUpdated, object: nil) } @@ -678,6 +681,8 @@ class PasswordStore { try self.storeRepository?.reset(to: newHead, resetType: GTRepositoryResetType.hard) self.setAllSynced() self.updatePasswordEntityCoreData() + Defaults[.lastSyncedTime] = nil + NotificationCenter.default.post(name: .passwordStoreUpdated, object: nil) NotificationCenter.default.post(name: .passwordStoreChangeDiscarded, object: nil) return localCommits.count