jsdw_ios/QuickLocation/Section/Home/Bubble/CreateBubbleVC.swift

115 lines
3.9 KiB
Swift

//
// CreateBubbleVC.swift
// QuickLocation
//
import UIKit
import RxSwift
import RxCocoa
import SwiftyUserDefaults
class CreateBubbleVC: BaseViewController {
fileprivate var rootView: CreateBubbleView!
override func loadView() {
rootView = CreateBubbleView(frame: UIScreen.main.bounds)
view = rootView
}
override func viewDidLoad() {
super.viewDidLoad()
bind()
restoreActiveBubbleIfNeeded()
}
private func bind() {
rootView.navView.onBackTapped = { [weak self] in
self?.navigationController?.popViewController(animated: true)
}
rootView.moreBtn.rx.tap
.subscribe(onNext: { [weak self] in
self?.navigationController?.pushViewController(BubbleKnowledgeVC(), animated: true)
})
.disposed(by: disposeBag)
rootView.setupView.confirmBtn.rx.tap
.subscribe(onNext: { [weak self] in
guard let self else { return }
let hours = self.rootView.setupView.selectedHour.value
let message = self.rootView.setupView.buildMessage(for: hours)
self.rootView.setupView.showNotifySheet(message: message)
})
.disposed(by: disposeBag)
rootView.setupView.onSheetVisibilityChanged = { [weak self] visible in
self?.rootView.updateNavTitleForSheet(visible)
}
rootView.setupView.sheetConfirmBtn.rx.tap
.subscribe(onNext: { [weak self] in
self?.submitCreate()
})
.disposed(by: disposeBag)
rootView.doneView.popupBtn.rx.tap
.subscribe(onNext: { [weak self] in
self?.showConfirmPop(
title: "温馨提醒",
message: "您确定要弹出这个气泡吗?",
confirmText: "爆裂",
confirmBlock: { [weak self] in
self?.requestSetBubble(enable: false, keep_time: -1)
},
cancelText: "取消"
)
})
.disposed(by: disposeBag)
}
private func submitCreate() {
guard let systemConfig = AppContextManager.shared.systemConfig, systemConfig.isIntercept == false else {
let hours = rootView.setupView.selectedHour.value
requestSetBubble(enable: true, keep_time: hours)
return
}
if AppContextManager.shared.vip > 1 {
let hours = rootView.setupView.selectedHour.value
requestSetBubble(enable: true, keep_time: hours)
} else {
CreateBubblePopView.show()
}
}
private func restoreActiveBubbleIfNeeded() {
guard AppContextManager.shared.status == 2,
let endDate = Defaults[\.bubbleKeepTimes] else { return }
rootView.showDone(animated: false)
rootView.doneView.startCountdown(endDate: endDate)
}
private func requestSetBubble(enable: Bool, keep_time: Int) {
DLToast.showLoading()
UserService.setBubble(enable: enable, keep_time: keep_time).subscribe(onNext: { [weak self] _ in
DLToast.dismiss()
guard let self else { return }
guard enable else {
DLToast.show(text: "气泡已弹出") {
Defaults[\.bubbleKeepTimes] = nil
AppContextManager.shared.updateAccountStatus(0)
AppRouter.shared.popOrDismiss()
}
return
}
AppContextManager.shared.updateAccountStatus(2)
self.rootView.setupView.dismissNotifySheet()
let endDate = Calendar.current.date(byAdding: .hour, value: keep_time, to: Date()) ?? Date()
Defaults[\.bubbleKeepTimes] = endDate
self.rootView.doneView.startCountdown(endDate: endDate)
self.rootView.showDone(animated: true)
}, onError: { _ in }).disposed(by: disposeBag)
}
}