115 lines
3.9 KiB
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)
|
|
}
|
|
}
|