make additional information ordered

This commit is contained in:
Bob Sun 2017-02-06 22:14:42 +08:00
parent 59eb4af8bb
commit 105573b8a1
No known key found for this signature in database
GPG key ID: 1F86BA2052FED3B4
2 changed files with 23 additions and 11 deletions

View file

@ -9,19 +9,27 @@
import Foundation import Foundation
import SwiftyUserDefaults import SwiftyUserDefaults
struct AdditionField {
var title: String
var content: String
}
class Password { class Password {
var name: String var name: String
var username: String
var password: String var password: String
var additions: [String: String] var additions: [AdditionField]
init() { init() {
name = "" name = ""
password = "" password = ""
additions = [:] username = ""
additions = []
} }
init(name: String, password: String, additions: [String: String]) { init(name: String, username: String, password: String, additions: [AdditionField]) {
self.name = name self.name = name
self.username = username
self.password = password self.password = password
self.additions = additions self.additions = additions
} }
@ -35,7 +43,8 @@ extension PasswordEntity {
let decryptedData = try PasswordStore.shared.pgp.decryptData(encryptedData, passphrase: Defaults[.pgpKeyPassphrase]) let decryptedData = try PasswordStore.shared.pgp.decryptData(encryptedData, passphrase: Defaults[.pgpKeyPassphrase])
let plain = String(data: decryptedData, encoding: .ascii) ?? "" let plain = String(data: decryptedData, encoding: .ascii) ?? ""
var decrypted_password = "" var decrypted_password = ""
var decrypted_addtions = [String: String]() var username = ""
var decrypted_addtions = [AdditionField]()
plain.enumerateLines(invoking: { line, _ in plain.enumerateLines(invoking: { line, _ in
let items = line.characters.split(separator: ":").map(String.init) let items = line.characters.split(separator: ":").map(String.init)
if items.count == 1 { if items.count == 1 {
@ -43,10 +52,14 @@ extension PasswordEntity {
} else { } else {
let key = items[0] let key = items[0]
let value = items[1].trimmingCharacters(in: .whitespaces) let value = items[1].trimmingCharacters(in: .whitespaces)
decrypted_addtions[key] = value if key.lowercased() == "username" {
username = value
} else {
decrypted_addtions.append(AdditionField(title: key, content: value))
}
} }
}) })
password = Password(name: name!, password: decrypted_password, additions: decrypted_addtions) password = Password(name: name!, username: username, password: decrypted_password, additions: decrypted_addtions)
return password return password
} }
} }

View file

@ -69,17 +69,16 @@ class PasswordDetailTableViewController: UITableViewController, UIGestureRecogni
var tableDataIndex = 0 var tableDataIndex = 0
self.tableData.append(TableSection(title: "", item: [])) self.tableData.append(TableSection(title: "", item: []))
if let username = self.password.additions["Username"] { if self.password.username != "" {
self.tableData[tableDataIndex].item.append(TableCell(title: "username", content: username)) self.tableData[tableDataIndex].item.append(TableCell(title: "username", content: self.password.username))
self.password.additions.removeValue(forKey: "Username")
} }
self.tableData[tableDataIndex].item.append(TableCell(title: "password", content: self.password.password)) self.tableData[tableDataIndex].item.append(TableCell(title: "password", content: self.password.password))
if self.password.additions.count > 0 { if self.password.additions.count > 0 {
self.tableData.append(TableSection(title: "additions", item: [])) self.tableData.append(TableSection(title: "additions", item: []))
tableDataIndex += 1 tableDataIndex += 1
for (key, value) in self.password.additions { for addition in self.password.additions {
self.tableData[tableDataIndex].item.append(TableCell(title: key, content: value)) self.tableData[tableDataIndex].item.append(TableCell(title: addition.title, content: addition.content))
} }
} }
DispatchQueue.main.async { DispatchQueue.main.async {