226 lines
8.1 KiB
Swift
226 lines
8.1 KiB
Swift
//
|
|
// AccountVC.swift
|
|
// QuickLocation
|
|
//
|
|
// Created by 八条 on 2026/6/10.
|
|
//
|
|
|
|
import UIKit
|
|
import RxSwift
|
|
import RxCocoa
|
|
import RxDataSources
|
|
import Kingfisher
|
|
import SwiftyUserDefaults
|
|
#if !targetEnvironment(simulator)
|
|
import GeYanSdk
|
|
import RxGesture
|
|
#endif
|
|
|
|
class AccountVC: BaseViewController {
|
|
|
|
fileprivate var rootView: AccountView!
|
|
|
|
override func loadView() {
|
|
rootView = AccountView(frame: UIScreen.main.bounds)
|
|
view = rootView
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
// Do any additional setup after loading the view.
|
|
|
|
reactiveAction()
|
|
rootView.refreshProfile()
|
|
|
|
DispatchQueue.global(qos: .background).async {
|
|
let totalByte = AppCacheManager.totalCacheSize()
|
|
let cacheText = AppCacheManager.formatByte(totalByte)
|
|
DispatchQueue.main.async {
|
|
// 赋值给 Label 展示
|
|
self.rootView.cacheLab.text = "\(cacheText)"
|
|
}
|
|
}
|
|
}
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
rootView.refreshProfile()
|
|
}
|
|
|
|
private func reactiveAction() {
|
|
rootView.logoutBtn.rx.tap.subscribe(onNext: { _ in
|
|
self.showConfirmPop(title: "温馨提醒",
|
|
message: "确定要退出账号吗?",
|
|
confirmText: "否",
|
|
confirmBlock: { },
|
|
cancelText: "是") {
|
|
self.requestLogout()
|
|
}
|
|
}).disposed(by: disposeBag)
|
|
|
|
rootView.cancelledBtn.rx.tap.subscribe(onNext: { _ in
|
|
AppRouter.push(Route.cancelAccount)
|
|
}).disposed(by: disposeBag)
|
|
|
|
let tap = UITapGestureRecognizer(target: self, action: #selector(handleClearCacheTap))
|
|
rootView.clearView.addGestureRecognizer(tap)
|
|
|
|
let versionTap = UITapGestureRecognizer(target: self, action: #selector(handleVersionViewTap))
|
|
rootView.versionView.addGestureRecognizer(versionTap)
|
|
|
|
let avatarTap = UITapGestureRecognizer(target: self, action: #selector(handleAvatarTap))
|
|
rootView.avatarView.addGestureRecognizer(avatarTap)
|
|
let nickTap = UITapGestureRecognizer(target: self, action: #selector(handleNickNameTap))
|
|
rootView.nickNameView.addGestureRecognizer(nickTap)
|
|
let genderTap = UITapGestureRecognizer(target: self, action: #selector(handleGenderTap))
|
|
rootView.genderView.addGestureRecognizer(genderTap)
|
|
|
|
NotificationCenter.default.rx.notification(.RefreshUserConfigNotification)
|
|
.observe(on: MainScheduler.instance)
|
|
.subscribe(onNext: { [weak self] _ in
|
|
self?.rootView.refreshProfile()
|
|
})
|
|
.disposed(by: disposeBag)
|
|
}
|
|
|
|
@objc private func handleAvatarTap() {
|
|
let vc = AvatarIconListVC(iconIndex: AppContextManager.shared.head_pic)
|
|
vc.onSelectIcon = { [weak self] headPic in
|
|
self?.requestSetHeadPic(headPic)
|
|
}
|
|
navigationController?.pushViewController(vc, animated: true)
|
|
}
|
|
|
|
@objc private func handleNickNameTap() {
|
|
let vc = TextInputViewController(
|
|
title: "昵称",
|
|
maxLength: 10,
|
|
initialText: AppContextManager.shared.name
|
|
) { [weak self] text in
|
|
self?.requestSetNickName(text)
|
|
}
|
|
present(vc, animated: true)
|
|
}
|
|
|
|
@objc private func handleGenderTap() {
|
|
let pop = GenderSelectPopVC(currentSex: AppContextManager.shared.sex) { [weak self] sex in
|
|
self?.requestSetGender(sex)
|
|
}
|
|
present(pop, animated: true)
|
|
}
|
|
|
|
private func requestSetHeadPic(_ headPic: String) {
|
|
DLToast.showLoading()
|
|
UserService.setHeadPic(headPic: headPic).subscribe(onNext: { [weak self] _ in
|
|
DLToast.show(text: "更换成功")
|
|
if var account = AppContextManager.shared.account {
|
|
account.head_pic = headPic
|
|
account.avater = HeadPic.isRemote(headPic) ? headPic : ""
|
|
AppContextManager.shared.saveAccount(account)
|
|
}
|
|
self?.rootView.refreshProfile()
|
|
NotificationCenter.default.post(name: .RefreshUserConfigNotification, object: nil)
|
|
}, onError: { error in
|
|
DLToast.dismiss()
|
|
DLToast.show(error)
|
|
}).disposed(by: disposeBag)
|
|
}
|
|
|
|
private func requestSetNickName(_ name: String) {
|
|
let trimmed = name.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
guard !trimmed.isEmpty else { return }
|
|
DLToast.showLoading()
|
|
UserService.setNickName(nick: trimmed).subscribe(onNext: { [weak self] _ in
|
|
DLToast.show(text: "修改成功")
|
|
if var account = AppContextManager.shared.account {
|
|
account.name = trimmed
|
|
AppContextManager.shared.saveAccount(account)
|
|
}
|
|
self?.rootView.refreshProfile()
|
|
NotificationCenter.default.post(name: .RefreshUserConfigNotification, object: nil)
|
|
}, onError: { error in
|
|
DLToast.dismiss()
|
|
DLToast.show(error)
|
|
}).disposed(by: disposeBag)
|
|
}
|
|
|
|
private func requestSetGender(_ sex: Int) {
|
|
DLToast.showLoading()
|
|
UserService.setGender(sex: sex).subscribe(onNext: { [weak self] _ in
|
|
DLToast.show(text: "修改成功")
|
|
if var account = AppContextManager.shared.account {
|
|
account.sex = sex
|
|
AppContextManager.shared.saveAccount(account)
|
|
}
|
|
self?.rootView.refreshProfile()
|
|
NotificationCenter.default.post(name: .RefreshUserConfigNotification, object: nil)
|
|
}, onError: { error in
|
|
DLToast.dismiss()
|
|
DLToast.show(error)
|
|
}).disposed(by: disposeBag)
|
|
}
|
|
|
|
// MARK: - API
|
|
private func requestLogout() {
|
|
UserService.logout().subscribe(onNext: { response in
|
|
NotificationCenter.default.post(name: .invalidatePopupQueue, object: nil)
|
|
GeYanSdk.deletePreResultCache()
|
|
AppContextManager.shared.deleteAccount()
|
|
GroupIMService.shared.logout()
|
|
self.requestUserConfig()
|
|
}, onError: { _ in }).disposed(by: disposeBag)
|
|
}
|
|
|
|
private func requestUserConfig() {
|
|
DLToast.showLoading()
|
|
SystemService.userConfig().subscribe(onNext: { response in
|
|
guard let model = response.model else { return }
|
|
Defaults[\.loginToken] = model.token
|
|
AppContextManager.shared.systemConfig = model.config
|
|
DLToast.dismiss {
|
|
AppDelegate.shared.showMainViewController()
|
|
}
|
|
}, onError: { _ in }).disposed(by: disposeBag)
|
|
}
|
|
|
|
private func deleteAccount() {
|
|
DLToast.showLoading()
|
|
UserService.deleteAccount().subscribe(onNext: { response in
|
|
DLToast.show(text: "申请成功") {
|
|
NotificationCenter.default.post(name: .invalidatePopupQueue, object: nil)
|
|
GeYanSdk.deletePreResultCache()
|
|
AppContextManager.shared.deleteAccount()
|
|
GroupIMService.shared.logout()
|
|
AppDelegate.shared.showMainViewController()
|
|
}
|
|
}, onError: { _ in }).disposed(by: disposeBag)
|
|
}
|
|
|
|
@objc private func handleClearCacheTap() {
|
|
clearCache()
|
|
}
|
|
|
|
@objc private func handleVersionViewTap() {
|
|
guard let upgrade = AppContextManager.shared.systemConfig?.versionUpgradeModel else {
|
|
DLToast.show(text: "已是最新版本")
|
|
return
|
|
}
|
|
showVersionUpgradePop(upgrade: upgrade)
|
|
}
|
|
|
|
private func clearCache() {
|
|
DLToast.showLoading()
|
|
KingfisherManager.shared.cache.clearMemoryCache()
|
|
KingfisherManager.shared.cache.clearDiskCache {
|
|
AppCacheManager.clearCache {
|
|
DispatchQueue.main.async {
|
|
DLToast.dismiss()
|
|
DLToast.show(text: "缓存已清除")
|
|
self.rootView.cacheLab.text = "0 B"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|