WallPaperHome722/WallpaperHD_Live/Tool/AccountManager.swift
2024-07-23 11:43:02 +08:00

144 lines
4.3 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// AccountManager.swift
// wallpaper_project
import Foundation
import UIKit
//
struct Account:Decodable,Encodable {
let username: String
let password: String
}
class AccountManager {
static let accountsKey = "Accounts"
static let currentAccountKey = "CurrentAccount"
static func getAccounts() -> [Account] {
guard let data = UserDefaults.standard.data(forKey: accountsKey) else {
return []
}
do {
let accounts = try JSONDecoder().decode([Account].self, from: data)
return accounts
} catch {
print("Error decoding accounts: \(error)")
return []
}
}
static func saveAccount(account: Account) {
var accounts = getAccounts()
accounts.append(account)
do {
let data = try JSONEncoder().encode(accounts)
UserDefaults.standard.set(data, forKey: accountsKey)
} catch {
print("Error encoding accounts: \(error)")
}
}
static func deleteAccount(at index: Int) {
var accounts = getAccounts()
accounts.remove(at: index)
do {
let data = try JSONEncoder().encode(accounts)
UserDefaults.standard.set(data, forKey: accountsKey)
} catch {
print("Error encoding accounts: \(error)")
}
}
static func updateAccount(at index: Int, with newAccount: Account) {
var accounts = getAccounts()
accounts[index] = newAccount
do {
let data = try JSONEncoder().encode(accounts)
UserDefaults.standard.set(data, forKey: accountsKey)
} catch {
print("Error encoding accounts: \(error)")
}
}
static func createDefaultAccountIfNeeded() {
if getAccounts().isEmpty {
let defaultAccount = Account(username: "13730645123", password: "123456")
saveAccount(account: defaultAccount)
}
}
static func validateAccount(username: String, password: String) -> Bool {
let accounts = getAccounts()
for account in accounts {
if account.username == username && account.password == password {
return true
}
}
return false
}
static var currentAccount: Account? {
get {
guard let data = UserDefaults.standard.data(forKey: currentAccountKey) else {
return nil
}
do {
let account = try JSONDecoder().decode(Account.self, from: data)
return account
} catch {
print("Error decoding current account: \(error)")
return nil
}
}
set {
guard let newValue = newValue else {
UserDefaults.standard.removeObject(forKey: currentAccountKey)
return
}
do {
let data = try JSONEncoder().encode(newValue)
UserDefaults.standard.set(data, forKey: currentAccountKey)
} catch {
print("Error encoding current account: \(error)")
}
}
}
static func login(username: String, password: String) -> Bool {
let accounts = getAccounts()
for account in accounts {
if account.username == username && account.password == password {
currentAccount = account
return true
}
}
return false
}
static func logout() {
UserDefaults.standard.removeObject(forKey: currentAccountKey)
}
static func logoutSpecificAccount(username: String) {
var accounts = getAccounts()
if let index = accounts.firstIndex(where: { $0.username == username }) {
accounts.remove(at: index)
do {
let data = try JSONEncoder().encode(accounts)
UserDefaults.standard.set(data, forKey: accountsKey)
} catch {
print("Error encoding accounts: \(error)")
}
} else {
print("Account not found")
}
}
}