Refactor logics of handling the PasswordStore model's properties

This commit is contained in:
Bob Sun 2018-11-16 22:28:19 -08:00
parent 1d07559393
commit dfc13a37d3
No known key found for this signature in database
GPG key ID: 1F86BA2052FED3B4
3 changed files with 76 additions and 52 deletions

View file

@ -47,40 +47,71 @@ class AboutRepositoryTableViewController: BasicStaticTableViewController {
// reload the table // reload the table
DispatchQueue.global(qos: .userInitiated).async { DispatchQueue.global(qos: .userInitiated).async {
let numberFormatter = NumberFormatter() let passwords = self.numberOfPasswordsString()
numberFormatter.numberStyle = NumberFormatter.Style.decimal let size = self.sizeOfRepositoryString()
let localCommits = self.numberOfLocalCommitsString()
let numberOfPasswordsString = numberFormatter.string(from: NSNumber(value: self.passwordStore.numberOfPasswords))! let lastSynced = self.lastSyncedTimeString()
let sizeOfRepositoryString = ByteCountFormatter.string(fromByteCount: Int64(self.passwordStore.sizeOfRepositoryByteCount), countStyle: ByteCountFormatter.CountStyle.file) let commits = self.numberOfPasswordsString()
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))!
DispatchQueue.main.async { [weak self] in DispatchQueue.main.async { [weak self] in
guard let strongSelf = self else {
return
}
let type = UITableViewCellAccessoryType.none let type = UITableViewCellAccessoryType.none
self?.tableData = [ strongSelf.tableData = [
// section 0 // section 0
[[.style: CellDataStyle.value1, .accessoryType: type, .title: "Passwords", .detailText: numberOfPasswordsString], [[.style: CellDataStyle.value1, .accessoryType: type, .title: "Passwords", .detailText: passwords],
[.style: CellDataStyle.value1, .accessoryType: type, .title: "Size", .detailText: sizeOfRepositoryString], [.style: CellDataStyle.value1, .accessoryType: type, .title: "Size", .detailText: size],
[.style: CellDataStyle.value1, .accessoryType: type, .title: "Local Commits", .detailText: String(self?.passwordStore.numberOfLocalCommits() ?? 0)], [.style: CellDataStyle.value1, .accessoryType: type, .title: "Local Commits", .detailText: localCommits],
[.style: CellDataStyle.value1, .accessoryType: type, .title: "Last Synced", .detailText: self?.passwordStore.getLastSyncedTimeString() ?? "Unknown"], [.style: CellDataStyle.value1, .accessoryType: type, .title: "Last Synced", .detailText: lastSynced],
[.style: CellDataStyle.value1, .accessoryType: type, .title: "Commits", .detailText: numberOfCommitsString], [.style: CellDataStyle.value1, .accessoryType: type, .title: "Commits", .detailText: commits],
[.title: "Commit Logs", .action: "segue", .link: "showCommitLogsSegue"], [.title: "Commit Logs", .action: "segue", .link: "showCommitLogsSegue"],
], ],
] ]
self?.indicator.stopAnimating() strongSelf.indicator.stopAnimating()
self?.tableView.reloadData() 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() { @objc func setNeedRefresh() {
needRefresh = true needRefresh = true
} }

View file

@ -138,7 +138,7 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV
SVProgressHUD.setDefaultMaskType(.black) SVProgressHUD.setDefaultMaskType(.black)
SVProgressHUD.setDefaultStyle(.light) SVProgressHUD.setDefaultStyle(.light)
SVProgressHUD.show(withStatus: "Sync Password Store") SVProgressHUD.show(withStatus: "Sync Password Store")
let numberOfLocalCommits = self.passwordStore.numberOfLocalCommits() let numberOfLocalCommits = self.passwordStore.numberOfLocalCommits
var gitCredential: GitCredential var gitCredential: GitCredential
if SharedDefaults[.gitAuthenticationMethod] == "Password" { if SharedDefaults[.gitAuthenticationMethod] == "Password" {
gitCredential = GitCredential(credential: GitCredential.Credential.http(userName: SharedDefaults[.gitUsername]!)) 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) { private func reloadTableView(data: [PasswordsTableEntry], anim: CAAnimation? = nil) {
// set navigation item // set navigation item
let numberOfLocalCommits = self.passwordStore.numberOfLocalCommits() let numberOfLocalCommits = self.passwordStore.numberOfLocalCommits
if numberOfLocalCommits == 0 { if numberOfLocalCommits == 0 {
navigationController?.tabBarItem.badgeValue = nil navigationController?.tabBarItem.badgeValue = nil
} else { } else {
@ -540,10 +540,20 @@ class PasswordsViewController: UIViewController, UITableViewDataSource, UITableV
self.tableView.layer.removeAnimation(forKey: "UITableViewReloadDataAnimationKey") self.tableView.layer.removeAnimation(forKey: "UITableViewReloadDataAnimationKey")
// set the sync control title // set the sync control title
let atribbutedTitle = "Last Synced: \(passwordStore.getLastSyncedTimeString())" let atribbutedTitle = "Last Synced: \(lastSyncedTimeString())"
syncControl.attributedTitle = NSAttributedString(string: atribbutedTitle) 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) { private func reloadTableView(parent: PasswordEntity?, anim: CAAnimation? = nil) {
initPasswordsTableEntries(parent: parent) initPasswordsTableEntries(parent: parent)
reloadTableView(data: passwordsTableEntries, anim: anim) reloadTableView(data: passwordsTableEntries, anim: anim)

View file

@ -102,15 +102,15 @@ public class PasswordStore {
} }
public var sizeOfRepositoryByteCount : UInt64 { public var sizeOfRepositoryByteCount : UInt64 {
var size = UInt64(0) return (try? fm.allocatedSizeOfDirectoryAtURL(directoryURL: self.storeURL)) ?? 0
do { }
if fm.fileExists(atPath: self.storeURL.path) {
size = try fm.allocatedSizeOfDirectoryAtURL(directoryURL: self.storeURL) public var numberOfLocalCommits: Int {
} return (try? getLocalCommits()?.count ?? 0) ?? 0
} catch { }
print(error)
} public var lastSyncedTime: Date? {
return size return SharedDefaults[.lastSyncedTime]
} }
private init() { 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]? { private func getLocalCommits() throws -> [GTCommit]? {
guard let storeRepository = storeRepository else { guard let storeRepository = storeRepository else {
@ -909,14 +902,4 @@ public class PasswordStore {
print(error) 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)
}
} }