1.存储池
在我的页面,若该用户为拥有者,则可呈现存储池入口,拥有者可操作存储池的权限。
文件门路:ThirdParty/StorageManage/StorageManageViewController.swift
列表数据依据服务器获取,顶部数据为SA的外接硬盘数据,下局部则为云端创立的存储池数据。
private func reloadData() { let semaphore = DispatchSemaphore(value: 1) if hardDisks.count == 0 && storagePools.count == 0 { showLoading(.custom(.white_ffffff)) } DispatchQueue.global().async { semaphore.wait() /// 获取限度硬盘列表 NetworkManager.shared.hardDiskList { [weak self] response in guard let self = self else { return } self.hardDisks = response.list semaphore.signal() } failureCallback: { code, err in semaphore.signal() } /// 挂起工作,期待硬盘列表后果 semaphore.wait() /// 获取存储池列表 /// 传0间接获取全副数据 不分页 NetworkManager.shared.storagePoolList(page: 0, pageSize: 0) { [weak self] response in guard let self = self else { return } self.storagePools = response.list semaphore.signal() } failureCallback: { code, err in semaphore.signal() } /// 挂起工作,期待存储池列表后果 semaphore.wait() DispatchQueue.main.async { self.collectionView.mj_header?.endRefreshing() self.collectionView.reloadData() self.hideLoading() semaphore.signal() } } }
1.1 增加存储池
文件门路:ThirdParty/StorageManage/AddToStoragePoolViewController.swift
/// 增加到新存储池 private func tapAddStorage() { print("点击增加到新的存储池") newStoragePoolAlert = SetNameAlertView(setNameType: .createStoragePool, currentName: "") newStoragePoolAlert?.setNameCallback = { [weak self] name in guard let self = self else { return } if name.isEmpty { SceneDelegate.shared.window?.makeToast("请输出名称".localizedString) return } if self.storagePools.map(\.name).contains(name) { SceneDelegate.shared.window?.makeToast("存储名称不能反复".localizedString) return } /// 申请增加存储池接口 LoadingView.show() NetworkManager.shared.addStoragePool(name: name, disk_name: self.disk_name) { [weak self] _ in guard let self = self else { return } LoadingView.hide() SceneDelegate.shared.window?.makeToast("增加胜利") self.newStoragePoolAlert?.removeFromSuperview() self.navigationController?.popViewController(animated: true) } failureCallback: { [weak self] code, err in guard let self = self else { return } LoadingView.hide() if code == 205 { // 磁盘挂载失败 self.newStoragePoolAlert?.removeFromSuperview() let singleTipsAlert = SingleTipsAlertView(detail: "硬盘(\(self.disk_name))增加到存储池(\(name))失败,请从新增加。", detailColor: .custom(.black_3f4663), sureBtnTitle: "确定") singleTipsAlert.sureCallback = { [weak self] in guard let self = self else { return } singleTipsAlert.removeFromSuperview() self.navigationController?.popViewController(animated: true) } SceneDelegate.shared.window?.addSubview(singleTipsAlert) } else { SceneDelegate.shared.window?.makeToast(err) } } } SceneDelegate.shared.window?.addSubview(newStoragePoolAlert!) }
1.2 删除存储池
private func deletePool(){ let tipsAlert = TipsAlertView(title: "删除确认", detail: "确认删除该存储池吗?删除须要一些工夫解决,且删除后,该存储池下的所有分区及其文件夹/文件都全副删除", warning: "操作不可撤销,请审慎操作!", sureBtnTitle: "确定删除") tipsAlert.sureCallback = { [weak self] in guard let self = self else { return } tipsAlert.sureBtn.buttonState = .waiting NetworkManager.shared.deleteStoragePool(name: self.currentStoragePoolName) {[weak self] response in guard let self = self else { return } tipsAlert.removeFromSuperview() //弹框提醒后盾解决 let singleTipsAlert = SingleTipsAlertView(detail: "正在删除存储池,已为您后盾运行,可返回列表刷新查看。", detailColor: .custom(.black_3f4663), sureBtnTitle: "确定") singleTipsAlert.sureCallback = { [weak self] in guard let self = self else { return } singleTipsAlert.removeFromSuperview() self.navigationController?.popViewController(animated: true) } SceneDelegate.shared.window?.addSubview(singleTipsAlert)// self.showToast("删除胜利")// self.navigationController?.popViewController(animated: true) } failureCallback: { [weak self] code, err in guard let self = self else { return } self.showToast(err) tipsAlert.sureBtn.buttonState = .normal } } SceneDelegate.shared.window?.addSubview(tipsAlert) }
2.存储池分区
2.1 增加存储池分区
NetworkManager.shared.addPartition(name: nameTextFiled.text ?? "", capacity: Float(capacity) ?? 0, unit: capacityButton.titleLabel?.text ?? "GB", pool_name: currentStoragePoolName) {[weak self] response in LoadingView.hide() let singleTipsAlert = SingleTipsAlertView(detail: "正在保留分区信息,预计须要一些工夫解决,已为您后盾运行,可返回列表刷新查看", detailColor: .custom(.black_3f4663), sureBtnTitle: "确定") singleTipsAlert.sureCallback = { [weak self] in guard let self = self else { return } singleTipsAlert.removeFromSuperview() self.navigationController?.popViewController(animated: true) } SceneDelegate.shared.window?.addSubview(singleTipsAlert) } failureCallback: {[weak self] code, err in LoadingView.hide() self?.showToast(err) }
2.2 删除存储池分区
NetworkManager.shared.deletePartition(name: self.currentModel.name, pool_name: self.currentStoragePoolName) {[weak self] response in guard let self = self else {return} tipsAlert.sureBtn.buttonState = .normal tipsAlert.removeFromSuperview() //弹框提醒后盾解决 let singleTipsAlert = SingleTipsAlertView(detail: "正在删除分区,已为您后盾运行,可返回 列表刷新查看。", detailColor: .custom(.black_3f4663), sureBtnTitle: "确定") singleTipsAlert.sureCallback = { [weak self] in guard let self = self else { return } singleTipsAlert.removeFromSuperview() self.navigationController?.popViewController(animated: true) } SceneDelegate.shared.window?.addSubview(singleTipsAlert) } failureCallback: {[weak self] code, err in guard let self = self else {return} tipsAlert.sureBtn.buttonState = .normal self.showToast(err) }
2.3 编辑存储池分区
judgeInfoChange(editName: nameTextFiled.text ?? "", editCapacity: capacity, unit: capacityButton.titleLabel?.text ?? "GB") {[weak self] capacityChanged, nameChanged, allowCapacity in guard let self = self else {return} if allowCapacity == 2 { LoadingView.hide() self.showToast("分区内存不能缩小") return } if capacityChanged == 0 && nameChanged == 0{ LoadingView.hide() self.showToast("未修改任何内容") return } //保留编辑内容 NetworkManager.shared.editPartition(name: self.currentModel.name, new_name: self.nameTextFiled.text ?? "", pool_name: self.currentStoragePoolName, capacity: Float(capacity) ?? 0, unit: self.capacityButton.titleLabel?.text ?? "GB") {[weak self] response in LoadingView.hide() var showText = "" if nameChanged == 1 && capacityChanged == 0 {//仅编辑名称 showText = "保留胜利" }else{ showText = "正在保留分区信息,须要一些工夫解决,已为您后盾运行,可返回列表刷新查看。" } let singleTipsAlert = SingleTipsAlertView(detail: showText, detailColor: .custom(.black_3f4663), sureBtnTitle: "确定") singleTipsAlert.sureCallback = { [weak self] in guard let self = self else { return } singleTipsAlert.removeFromSuperview() self.navigationController?.popViewController(animated: true) } SceneDelegate.shared.window?.addSubview(singleTipsAlert) } failureCallback: {[weak self] code, err in LoadingView.hide() self?.showToast(err) } }2.8 文件夹治理#