Visual_Novel_iOS/crush/Crush/Src/Components/Photo/PhotoBrowser/PhotoBrowserControllerExtCh...

152 lines
5.3 KiB
Swift

//
// PhotoBrowserControllerExtChatBackground.swift
// Crush
//
// Created by Leon on 2025/8/26.
//
extension PhotoBrowserController{
// MARK: Chatbackground Set
func createChatBackgroundSetViews(){
bottomGradientContainer.isHidden = false
setDefaultEntry = {
let v = RolePhotoSetDefaultEntryView()
v.setupChatBackgroundSetMode()
bottomGradientOperateStackV.addArrangedSubview(v)
return v
}()
setBackgroundDisableButton = {
let v = StyleButton()
v.contrastTertiaryLight(size: .large)
v.isEnabled = false
v.setTitle("Set background", for: .normal)
bottomGradientOperateStackV.addArrangedSubview(v)
return v
}()
moreButton = {
let v = EPIconGhostButton(radius: .none, iconSize: .medium, iconCode: .more)
v.addTarget(self, action: #selector(tapNaviMoreInChatBackgroud(sender:)), for: .touchUpInside)
titleView.rightStackH.addArrangedSubview(v)
titleView.paddingRightForRightStack = 16
v.snp.makeConstraints { make in
make.size.equalTo(v.bgImageSize())
}
v.isHidden = true
return v
}()
setupChatBackgroundEvents()
}
// MARK: Events
func setupChatBackgroundEvents(){
setDefaultEntry.setButton.addTarget(self, action: #selector(tapSetChatBackgrondDefaultButton), for: .touchUpInside)
}
// MARK: Action
@objc func tapNaviMoreInChatBackgroud(sender: UIButton) {
let pop = CLPopoverListView()
let rect = view.convert(sender.frame, from: sender.superview)
pop.setupDeletePopover(rect.insetBy(dx: 0.0, dy: -6.0), inView: view) { [weak self] in
self?.doDeleteChatBackground()
}
}
private func doDeleteChatBackground(){
// #warning("test")
// self.imageModels.remove(at: self.currentIndex)
// if self.imageModels.isEmpty {
// PhotoBrowserManager.shared.hidePhotoBrowser()
// } else {
// if self.currentIndex >= self.imageModels.count {
// self.currentIndex -= 1
// }
// self.setupViews()
// self.reloadCountLabel(hidden: false)
// }
// return
let imageModel = imageModels[currentIndex]
guard let background = imageModel.chatBackground, let backgroundId = background.backgroundId, backgroundId > 0 else{
return
}
Hud.showIndicator()
AIRoleProvider.request(.deleteChatBackground(backgroundId: backgroundId), modelType: EmptyModel.self) {[weak self] result in
Hud.hideIndicator()
switch result {
case .success:
guard let `self` = self else {
return
}
self.imageModels.remove(at: self.currentIndex)
if self.imageModels.isEmpty {
PhotoBrowserManager.shared.hidePhotoBrowser()
} else {
if self.currentIndex >= self.imageModels.count {
self.currentIndex -= 1
}
self.setupViews()
self.reloadCountLabel(hidden: false)
self.reloadStates(index: currentIndex)
}
NotificationCenter.post(name: .chatSettingBackgroundListUpdated)
if background.isSelected.boolValue{
NotificationCenter.post(name: .chatSettingUpdated)
}
case .failure:
break
}
}
}
@objc private func tapSetChatBackgrondDefaultButton(){
let imageModel = imageModels[currentIndex]
guard let aiUid = imageModel.aiId else{
return
}
Hud.showIndicator()
var params = [String: Any]()
params.updateValue(aiUid, forKey: "aiId")
if let background = imageModel.chatBackground, let backgroundId = background.backgroundId, backgroundId > 0{
params.updateValue(backgroundId, forKey: "backgroundId")
}
AIRoleProvider.request(.setDefaultChatBackground(params: params), modelType: EmptyModel.self) {[weak self] result in
Hud.hideIndicator()
switch result {
case .success:
//NotificationCenter.post(name: .chatSettingBackgroundListUpdated)
self?.resetAndMarkSelectedBackground(imgUrl: imageModel.imageUrl)
PhotoBrowserManager.shared.hidePhotoBrowser()
NotificationCenter.post(name: .chatSettingBackgroundChanged)
NotificationCenter.post(name: .chatSettingUpdated)
case .failure:
break
}
}
}
// MARK: Helper
private func resetAndMarkSelectedBackground(imgUrl: String?){
guard let selectedUrl = imgUrl else{return}
for per in imageModels {
if let perImgurl = per.chatBackground?.imgUrl, perImgurl == selectedUrl{
per.chatBackground?.isSelected = true
}else{
per.chatBackground?.isSelected = false
}
}
reloadStates(index: currentIndex)
}
}