diff --git a/pass/Controllers/AboutRepositoryTableViewController.swift b/pass/Controllers/AboutRepositoryTableViewController.swift index f76ed48..331d723 100644 --- a/pass/Controllers/AboutRepositoryTableViewController.swift +++ b/pass/Controllers/AboutRepositoryTableViewController.swift @@ -47,39 +47,70 @@ class AboutRepositoryTableViewController: BasicStaticTableViewController { // reload the table DispatchQueue.global(qos: .userInitiated).async { - let numberFormatter = NumberFormatter() - numberFormatter.numberStyle = NumberFormatter.Style.decimal - - let numberOfPasswordsString = numberFormatter.string(from: NSNumber(value: self.passwordStore.numberOfPasswords))! - let sizeOfRepositoryString = ByteCountFormatter.string(fromByteCount: Int64(self.passwordStore.sizeOfRepositoryByteCount), countStyle: ByteCountFormatter.CountStyle.file) - var numberOfCommits: UInt = 0 - - do { - if let _ = try self.passwordStore.storeRepository?.currentBranch().oid { - numberOfCommits = self.passwordStore.storeRepository?.numberOfCommits(inCurrentBranch: NSErrorPointer(nilLiteral: ())) ?? 0 - } - } catch { - print(error) - } - let numberOfCommitsString = numberFormatter.string(from: NSNumber(value: numberOfCommits))! + let passwords = self.numberOfPasswordsString() + let size = self.sizeOfRepositoryString() + let localCommits = self.numberOfLocalCommitsString() + let lastSynced = self.lastSyncedTimeString() + let commits = self.numberOfPasswordsString() DispatchQueue.main.async { [weak self] in + guard let strongSelf = self else { + return + } let type = UITableViewCellAccessoryType.none - self?.tableData = [ + strongSelf.tableData = [ // section 0 - [[.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: self?.passwordStore.getLastSyncedTimeString() ?? "Unknown"], - [.style: CellDataStyle.value1, .accessoryType: type, .title: "Commits", .detailText: numberOfCommitsString], + [[.style: CellDataStyle.value1, .accessoryType: type, .title: "Passwords", .detailText: passwords], + [.style: CellDataStyle.value1, .accessoryType: type, .title: "Size", .detailText: size], + [.style: CellDataStyle.value1, .accessoryType: type, .title: "Local Commits", .detailText: localCommits], + [.style: CellDataStyle.value1, .accessoryType: type, .title: "Last Synced", .detailText: lastSynced], + [.style: CellDataStyle.value1, .accessoryType: type, .title: "Commits", .detailText: commits], [.title: "Commit Logs", .action: "segue", .link: "showCommitLogsSegue"], ], ] - self?.indicator.stopAnimating() - self?.tableView.reloadData() + strongSelf.indicator.stopAnimating() + strongSelf.tableView.reloadData() } } } + + private func numberOfPasswordString() -> String { + let formatter = NumberFormatter() + formatter.numberStyle = NumberFormatter.Style.decimal + var numberOfCommits: UInt = 0 + do { + if let _ = try self.passwordStore.storeRepository?.currentBranch().oid { + numberOfCommits = self.passwordStore.storeRepository?.numberOfCommits(inCurrentBranch: NSErrorPointer(nilLiteral: ())) ?? 0 + } + } catch { + print(error) + } + return formatter.string(from: NSNumber(value: numberOfCommits)) ?? "" + } + + private func numberOfPasswordsString() -> String { + let formatter = NumberFormatter() + formatter.numberStyle = NumberFormatter.Style.decimal + return formatter.string(from: NSNumber(value: self.passwordStore.numberOfPasswords)) ?? "" + } + + private func sizeOfRepositoryString() -> String { + return ByteCountFormatter.string(fromByteCount: Int64(self.passwordStore.sizeOfRepositoryByteCount), countStyle: ByteCountFormatter.CountStyle.file) + } + + private func numberOfLocalCommitsString() -> String { + return String(passwordStore.numberOfLocalCommits) + } + + private func lastSyncedTimeString() -> String { + guard let date = self.passwordStore.lastSyncedTime else { + return "Oops! Sync again?" + } + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .short + return formatter.string(from: date) + } @objc func setNeedRefresh() { needRefresh = true diff --git a/pass/Controllers/PasswordsViewController.swift b/pass/Controllers/PasswordsViewController.swift index e67f5c4..6d00104 100644 --- a/pass/Controllers/PasswordsViewController.swift +++ b/pass/Controllers/PasswordsViewController.swift @@ -138,7 +138,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV SVProgressHUD.setDefaultMaskType(.black) SVProgressHUD.setDefaultStyle(.light) SVProgressHUD.show(withStatus: "Sync Password Store") - let numberOfLocalCommits = self.passwordStore.numberOfLocalCommits() + let numberOfLocalCommits = self.passwordStore.numberOfLocalCommits var gitCredential: GitCredential if SharedDefaults[.gitAuthenticationMethod] == "Password" { gitCredential = GitCredential(credential: GitCredential.Credential.http(userName: SharedDefaults[.gitUsername]!)) @@ -519,7 +519,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV private func reloadTableView(data: [PasswordsTableEntry], anim: CAAnimation? = nil) { // set navigation item - let numberOfLocalCommits = self.passwordStore.numberOfLocalCommits() + let numberOfLocalCommits = self.passwordStore.numberOfLocalCommits if numberOfLocalCommits == 0 { navigationController?.tabBarItem.badgeValue = nil } else { @@ -540,9 +540,19 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV self.tableView.layer.removeAnimation(forKey: "UITableViewReloadDataAnimationKey") // set the sync control title - let atribbutedTitle = "Last Synced: \(passwordStore.getLastSyncedTimeString())" + let atribbutedTitle = "Last Synced: \(lastSyncedTimeString())" syncControl.attributedTitle = NSAttributedString(string: atribbutedTitle) } + + private func lastSyncedTimeString() -> String { + guard let date = self.passwordStore.lastSyncedTime else { + return "Oops! Sync again?" + } + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .short + return formatter.string(from: date) + } private func reloadTableView(parent: PasswordEntity?, anim: CAAnimation? = nil) { initPasswordsTableEntries(parent: parent) diff --git a/passKit/Models/PasswordStore.swift b/passKit/Models/PasswordStore.swift index d747376..c1c9bf9 100644 --- a/passKit/Models/PasswordStore.swift +++ b/passKit/Models/PasswordStore.swift @@ -102,15 +102,15 @@ public class PasswordStore { } public var sizeOfRepositoryByteCount : UInt64 { - var size = UInt64(0) - do { - if fm.fileExists(atPath: self.storeURL.path) { - size = try fm.allocatedSizeOfDirectoryAtURL(directoryURL: self.storeURL) - } - } catch { - print(error) - } - return size + return (try? fm.allocatedSizeOfDirectoryAtURL(directoryURL: self.storeURL)) ?? 0 + } + + public var numberOfLocalCommits: Int { + return (try? getLocalCommits()?.count ?? 0) ?? 0 + } + + public var lastSyncedTime: Date? { + return SharedDefaults[.lastSyncedTime] } private init() { @@ -799,13 +799,6 @@ public class PasswordStore { } } - public func numberOfLocalCommits() -> Int { - do { - return try getLocalCommits()?.count ?? 0 - } catch { - return 0 - } - } private func getLocalCommits() throws -> [GTCommit]? { guard let storeRepository = storeRepository else { @@ -909,14 +902,4 @@ public class PasswordStore { print(error) } } - - public func getLastSyncedTimeString() -> String { - guard let lastSyncedTime = SharedDefaults[.lastSyncedTime] else { - return "Oops! Sync again?" - } - let formatter = DateFormatter() - formatter.dateStyle = .medium - formatter.timeStyle = .short - return formatter.string(from: lastSyncedTime) - } }