Commit f935e637 authored by CZ1004's avatar CZ1004

【优化】垃圾桶逻辑优化

parent d9f0c377
...@@ -132,12 +132,12 @@ class CompressController : BaseViewController { ...@@ -132,12 +132,12 @@ class CompressController : BaseViewController {
self.resourceData = datas.sorted {$0.createDate < $1.createDate } self.resourceData = datas.sorted {$0.createDate < $1.createDate }
} }
}else{ }else{
SVProgressHUD.show() PMLoadingHUD.share.show()
CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: self.currentResourceType) { [weak self] models in CompressViewModel().getAllPhotosToAssets(sortType: self.currentSort, assetType: self.currentResourceType) { [weak self] models in
guard let self else {return} guard let self else {return}
self.resourceData = models self.resourceData = models
Singleton.shared.resourceModel = self.resourceData Singleton.shared.resourceModel = self.resourceData
SVProgressHUD.dismiss() PMLoadingHUD.share.disMiss()
} }
} }
} }
......
...@@ -20,34 +20,10 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -20,34 +20,10 @@ class HomePhotosDetailViewController : BaseViewController {
var imageCache = NSCache<NSString, UIImage>() var imageCache = NSCache<NSString, UIImage>()
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
required init(model: HomePhotosModel) {
self.model = model
super.init(nibName: nil, bundle: nil)
}
private var videoDetailNavView:VideoDetaiNavView? private var videoDetailNavView:VideoDetaiNavView?
var resourceData : [AssetModel] = [] var resourceData : [AssetModel] = []
func dealData(){
var dataArray : [AssetModel] = []
for item in self.model.assets {
dataArray = dataArray + item
}
self.resourceData = self.filterTrashData(array: dataArray)
self.selectedModel = self.filterTrashData(array: self.selectedModel)
self.sortByType(sortType: self.currentSort)
}
var model : HomePhotosModel
var datas : [AssetModel] = []
// 排序 // 排序
var currentSort : Int = 0 var currentSort : Int = 0
...@@ -64,6 +40,8 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -64,6 +40,8 @@ class HomePhotosDetailViewController : BaseViewController {
} }
} }
lazy var defaultImageView : UIImageView = { lazy var defaultImageView : UIImageView = {
let defaultImageView = UIImageView() let defaultImageView = UIImageView()
defaultImageView.image = UIImage(named: "img_photo__home_defpage") defaultImageView.image = UIImage(named: "img_photo__home_defpage")
...@@ -114,15 +92,6 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -114,15 +92,6 @@ class HomePhotosDetailViewController : BaseViewController {
}() }()
/// 过滤垃圾桶数据
/// - Parameter array: 当前数据
/// - Returns: 过滤后的数据
func filterTrashData(array : [AssetModel]) -> [AssetModel]{
let data = TrashDataManager.getCurrentMediaTypeTrashData(mediaType: self.mediaType == PhotsFileType.Other ? TrashTypeEnum.other : TrashTypeEnum.shot)
return array.filter({!data.map({$0.localIdentifier}).contains($0.localIdentifier)})
}
func setUI(){ func setUI(){
...@@ -269,16 +238,78 @@ class HomePhotosDetailViewController : BaseViewController { ...@@ -269,16 +238,78 @@ class HomePhotosDetailViewController : BaseViewController {
} }
// MARK:系统方法
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
required init(mediaType: PhotsFileType) {
self.mediaType = mediaType
super.init(nibName: nil, bundle: nil)
}
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
// 目的是为了消除cell 的选择按钮状态 // 重新设置下数据源
if self.selectedModel.count == 0 { self.getCurrentPageData {
self.collectionView.reloadData() DispatchQueue.main.async {
self.collectionView.reloadData()
}
} }
}
// MARK: 数据操作 - 主要方法
/// 获取当前页面数据
/// - Parameter completed: 完成回调
func getCurrentPageData(completed:@escaping ()->Void){
// FIXME: 从新获取数据
var data = self.mediaType == .Other ? PhotoManager.shared.filterOtherModels : PhotoManager.shared.filterScreenShotModels
// 过滤掉垃圾桶数据
data = self.filterSigtonTrashData(array: data)
self.selectedModel = self.filterSigtonTrashData(array: self.selectedModel)
// 过滤掉保留列表数据
data = self.filterKeepListData(array: data)
self.selectedModel = self.filterKeepListData(array: self.selectedModel)
self.resourceData = data
self.sortByType(sortType: self.currentSort)
completed()
} }
// MARK: 数据操作 - 辅助方法
/// 过滤垃圾桶数据 - 当前页面数据本身就是已经过滤了垃圾桶数据库的数据了,所以只需要过滤掉单利中的数据
/// - Parameter array: 当前数据
/// - Returns: 过滤后的数据
func filterSigtonTrashData(array : [AssetModel]) -> [AssetModel]{
let type = self.mediaType == PhotsFileType.Other ? TrashTypeEnum.other : TrashTypeEnum.shot
// 从单利拿数据
let data : [AssetModel] = Singleton.shared.trashData[type] ?? []
return array.filter({!data.map({$0.localIdentifier}).contains($0.localIdentifier)})
}
/// 过滤保留列表数据
/// - Parameter array: 原数据
/// - Returns: 过滤后的数据
func filterKeepListData(array : [AssetModel]) -> [AssetModel]{
let data = KeepListManager.getAllKeepListData()
if data.count > 0 {
return array.filter({!data.map({$0.localIdentifier}).contains($0.localIdentifier)})
}
return array
}
func getImageFromCache(model: AssetModel,completed:@escaping (UIImage)->Void){ func getImageFromCache(model: AssetModel,completed:@escaping (UIImage)->Void){
let cachedImage = self.imageCache.object(forKey: model.localIdentifier as NSString) let cachedImage = self.imageCache.object(forKey: model.localIdentifier as NSString)
if cachedImage != nil { if cachedImage != nil {
...@@ -342,22 +373,10 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -342,22 +373,10 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
// 点击之后跳转详情页面 // 点击之后跳转详情页面
if self.mediaType == .screenshots { if self.mediaType == .screenshots {
let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .shot) let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .shot)
vc.dismissCallback = {
self.dealData()
UIView.transition(with: self.collectionView, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.collectionView.reloadData()
}, completion: nil)
}
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
} }
if self.mediaType == .Other { if self.mediaType == .Other {
let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .other) let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .other)
vc.dismissCallback = {
self.dealData()
UIView.transition(with: self.collectionView, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.collectionView.reloadData()
}, completion: nil)
}
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
} }
} }
...@@ -418,7 +437,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti ...@@ -418,7 +437,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HomePhotosDetailCustomHeaderView", for: indexPath) as! HomePhotosDetailCustomHeaderView let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HomePhotosDetailCustomHeaderView", for: indexPath) as! HomePhotosDetailCustomHeaderView
// 记录当前的 headerView // 记录当前的 headerView
header.countLabel.text = "\(self.resourceData.count) Photos" header.countLabel.text = "\(self.resourceData.count) Photos"
header.modelTitlelabel.text = self.model.folderName header.modelTitlelabel.text = self.mediaType?.rawValue
currentHeaderView = header currentHeaderView = header
header.sortCallback = {[weak self] in header.sortCallback = {[weak self] in
......
...@@ -18,8 +18,7 @@ class HomeVideoDetailController :BaseViewController { ...@@ -18,8 +18,7 @@ class HomeVideoDetailController :BaseViewController {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
required init(model: HomePhotosModel) { required init() {
self.model = model
super.init(nibName: nil, bundle: nil) super.init(nibName: nil, bundle: nil)
} }
...@@ -27,18 +26,6 @@ class HomeVideoDetailController :BaseViewController { ...@@ -27,18 +26,6 @@ class HomeVideoDetailController :BaseViewController {
var resourceData : [AssetModel] = [] var resourceData : [AssetModel] = []
func dealData(){
var dataArray : [AssetModel] = []
for item in self.model.assets {
dataArray = dataArray + item
}
self.resourceData = self.filterTrashData(array: dataArray)
self.selectedModel = self.filterTrashData(array: self.selectedModel)
self.sortByType(sortType: self.currentSort)
}
var model : HomePhotosModel
// 排序 // 排序
var currentSort : Int = 0 var currentSort : Int = 0
...@@ -65,7 +52,7 @@ class HomeVideoDetailController :BaseViewController { ...@@ -65,7 +52,7 @@ class HomeVideoDetailController :BaseViewController {
let layout = WaterfallMutiSectionFlowLayout() let layout = WaterfallMutiSectionFlowLayout()
layout.delegate = self layout.delegate = self
let sview:UICollectionView = UICollectionView.init(frame: CGRect(x: marginLR, y: self.videoDetailNavView!.height, width: self.view.width - 2 * marginLR, height: self.view.height - self.videoDetailNavView!.height - 102), collectionViewLayout: layout) let sview:UICollectionView = UICollectionView.init(frame: CGRect(x: marginLR, y: statusBarHeight + 44, width: self.view.width - 2 * marginLR, height: self.view.height - (statusBarHeight + 44) - 102), collectionViewLayout: layout)
sview.register(HomeVideoDetailCell.self, forCellWithReuseIdentifier: "HomeVideoDetailCell") sview.register(HomeVideoDetailCell.self, forCellWithReuseIdentifier: "HomeVideoDetailCell")
sview.register(HomeVideoDetailCustomHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "HomeVideoDetailCustomHeaderView") sview.register(HomeVideoDetailCustomHeaderView.self, forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: "HomeVideoDetailCustomHeaderView")
...@@ -109,15 +96,50 @@ class HomeVideoDetailController :BaseViewController { ...@@ -109,15 +96,50 @@ class HomeVideoDetailController :BaseViewController {
return label return label
}() }()
/// 过滤垃圾桶数据 // MARK: 数据操作 - 主要方法
/// 获取当前页面数据
/// - Parameter completed: 完成回调
func getCurrentPageData(completed:@escaping ()->Void){
var data = PhotoManager.shared.filterVideoModels
// 过滤掉垃圾桶数据
data = self.filterSigtonTrashData(array: data)
self.selectedModel = self.filterSigtonTrashData(array: self.selectedModel)
// 过滤掉保留列表数据
data = self.filterKeepListData(array: data)
self.selectedModel = self.filterKeepListData(array: self.selectedModel)
self.resourceData = data
self.sortByType(sortType: self.currentSort)
completed()
}
// MARK: 数据操作 - 辅助方法
/// 过滤垃圾桶数据 - 当前页面数据本身就是已经过滤了垃圾桶数据库的数据了,所以只需要过滤掉单利中的数据
/// - Parameter array: 当前数据 /// - Parameter array: 当前数据
/// - Returns: 过滤后的数据 /// - Returns: 过滤后的数据
func filterTrashData(array : [AssetModel]) -> [AssetModel]{ func filterSigtonTrashData(array : [AssetModel]) -> [AssetModel]{
let data = TrashDataManager.getCurrentMediaTypeTrashData(mediaType: .video) // 从单利拿数据
let data = Singleton.shared.trashData[TrashTypeEnum.video] ?? []
return array.filter({!data.map({$0.localIdentifier}).contains($0.localIdentifier)}) return array.filter({!data.map({$0.localIdentifier}).contains($0.localIdentifier)})
} }
/// 过滤保留列表数据
/// - Parameter array: 原数据
/// - Returns: 过滤后的数据
func filterKeepListData(array : [AssetModel]) -> [AssetModel]{
let data = KeepListManager.getAllKeepListData()
if data.count > 0 {
return array.filter({!data.map({$0.localIdentifier}).contains($0.localIdentifier)})
}
return array
}
func setUI(){ func setUI(){
videoDetailNavView = VideoDetaiNavView(frame: CGRect(x: 0, y: 0, width: self.view.width, height: statusBarHeight + 44)) videoDetailNavView = VideoDetaiNavView(frame: CGRect(x: 0, y: 0, width: self.view.width, height: statusBarHeight + 44))
self.view.addSubview(videoDetailNavView!) self.view.addSubview(videoDetailNavView!)
...@@ -210,9 +232,11 @@ class HomeVideoDetailController :BaseViewController { ...@@ -210,9 +232,11 @@ class HomeVideoDetailController :BaseViewController {
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
// 目的是为了消除cell 的选择按钮状态 // 重新设置下数据源
if self.selectedModel.count == 0 { self.getCurrentPageData {
self.collectionView.reloadData() DispatchQueue.main.async {
self.collectionView.reloadData()
}
} }
} }
...@@ -285,12 +309,6 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie ...@@ -285,12 +309,6 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
PhotoAndVideoMananger.mananger.getVideoImageByIdent(ident: ident) { image in PhotoAndVideoMananger.mananger.getVideoImageByIdent(ident: ident) { image in
// 点击之后跳转详情页面 // 点击之后跳转详情页面
let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .video) let vc = PhotoRemoveViewController(data: self.resourceData,currentIndex: indexPath.row,mediaType: .video)
vc.dismissCallback = {
self.dealData()
UIView.transition(with: self.collectionView, duration: 0.3, options: .transitionCrossDissolve, animations: {
self.collectionView.reloadData()
}, completion: nil)
}
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
} errorHandler: { } errorHandler: {
DispatchQueue.main.async { DispatchQueue.main.async {
......
...@@ -130,8 +130,7 @@ class HomeViewController:BaseViewController { ...@@ -130,8 +130,7 @@ class HomeViewController:BaseViewController {
guard let self else {return} guard let self else {return}
if otherItemRow == 0 { if otherItemRow == 0 {
DispatchQueue.main.async { DispatchQueue.main.async {
let vc:HomeVideoDetailController = HomeVideoDetailController(model: model) let vc:HomeVideoDetailController = HomeVideoDetailController()
vc.dealData()
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
} }
} }
...@@ -149,16 +148,9 @@ class HomeViewController:BaseViewController { ...@@ -149,16 +148,9 @@ class HomeViewController:BaseViewController {
} }
} }
if otherItemRow == 2 || otherItemRow == 4{ if otherItemRow == 2 || otherItemRow == 4{
DispatchQueue.main.async { DispatchQueue.main.async {
let vc:HomePhotosDetailViewController = HomePhotosDetailViewController(model: model) let vc = HomePhotosDetailViewController(mediaType: otherItemRow == 2 ? .screenshots : .Other)
if otherItemRow == 2 {
vc.mediaType = .screenshots
}else{
vc.mediaType = .Other
}
vc.dealData()
self.navigationController?.pushViewController(vc, animated: true) self.navigationController?.pushViewController(vc, animated: true)
} }
} }
......
...@@ -11,9 +11,6 @@ import Photos ...@@ -11,9 +11,6 @@ import Photos
class PhotoRemoveViewController: BaseViewController { class PhotoRemoveViewController: BaseViewController {
var dismissCallback : ()->Void = {}
var mediaType : TrashTypeEnum? { var mediaType : TrashTypeEnum? {
didSet{ didSet{
if mediaType == .video { if mediaType == .video {
...@@ -121,24 +118,28 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -121,24 +118,28 @@ class PhotoRemoveViewController: BaseViewController {
} }
} }
self.navView.reSetCallBack = { self.navView.reSetCallBack = {
// 拿到单利中最后一个
if self.currentIndex > 0 { if let model = self.getSigtonCurrentMediaTrashLastData(){
self.currentIndex = self.currentIndex - 1 // 判断当前数组中有没有这个数据(有的话表示是在当前页面撤销)
if self.dataModel.map({$0.localIdentifier}).contains(model.localIdentifier){
if self.currentIndex > 0 {
self.currentIndex = self.currentIndex - 1
}
}else{
// 没有这个数据表示从外部跳转进这个页面,当前位置插入一个数据
self.dataModel.insert(model, at: self.currentIndex)
}
// 重新设置下图片 // 重新设置下图片
self.updateViewContents() self.updateViewContents()
// 视图层级处理 // 视图层级处理
self.bringCurrentViewToFront() self.bringCurrentViewToFront()
// 移除当前数据
self.removeCurrentMediaTypeTrashLastData()
// 移除完成后 重新设置下按钮状态
self.showCurrentPageUIWhenTashDataChanged()
} }
// 移除单利中当前类型数组的最后一个数据
self.removeCurrentMediaTypeTrashLastData()
// 移除完成后 重新设置下按钮状态
self.showCurrentPageUIWhenTashDataChanged()
} }
showCurrentPageUIWhenTashDataChanged() showCurrentPageUIWhenTashDataChanged()
...@@ -146,6 +147,20 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -146,6 +147,20 @@ class PhotoRemoveViewController: BaseViewController {
self.addListener() self.addListener()
} }
// 拿到当前类型垃圾桶数据的最后一个
func getSigtonCurrentMediaTrashLastData() -> AssetModel? {
var model : AssetModel?
if let type = self.mediaType{
if let dataSg = Singleton.shared.trashData[type]{
let tempArray = dataSg
if tempArray.count > 0 {
model = tempArray[tempArray.count - 1]
}
}
}
return model
}
// 跳转垃圾桶第几个page // 跳转垃圾桶第几个page
func getJumpPageIndex()->Int{ func getJumpPageIndex()->Int{
if self.mediaType == .video { if self.mediaType == .video {
...@@ -166,25 +181,16 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -166,25 +181,16 @@ class PhotoRemoveViewController: BaseViewController {
let type = notification.userInfo?["type"] as? String else { return } let type = notification.userInfo?["type"] as? String else { return }
if let targetVC = self.navigationController?.viewControllers.first(where: { $0 is HomeViewController }) as? HomeViewController { if let targetVC = self.navigationController?.viewControllers.first(where: { $0 is HomeViewController }) as? HomeViewController {
self.navigationController?.popToViewController(targetVC, animated: false) self.navigationController?.popToViewController(targetVC, animated: false)
PhotoDataManager.manager.loadFromFileSystem { model in let vc:HomePhotosDetailViewController = HomePhotosDetailViewController(mediaType: type == "Other" ? PhotsFileType.Other : PhotsFileType.screenshots)
let data = type == "Other" ? model.otherModelArray[4] : model.otherModelArray[2] targetVC.navigationController?.pushViewController(vc, animated: true)
let vc:HomePhotosDetailViewController = HomePhotosDetailViewController(model: data)
vc.mediaType = type == "Other" ? .Other : PhotsFileType.screenshots
vc.dealData()
targetVC.navigationController?.pushViewController(vc, animated: true)
}
} }
} }
NotificationCenter.default.addObserver(forName: TrashDefaultView.jumpToVideosDetailPageName, object: nil, queue: .main) { [weak self] notification in NotificationCenter.default.addObserver(forName: TrashDefaultView.jumpToVideosDetailPageName, object: nil, queue: .main) { [weak self] notification in
guard let self else {return} guard let self else {return}
if let targetVC = self.navigationController?.viewControllers.first(where: { $0 is HomeViewController }) as? HomeViewController { if let targetVC = self.navigationController?.viewControllers.first(where: { $0 is HomeViewController }) as? HomeViewController {
self.navigationController?.popToViewController(targetVC, animated: false) self.navigationController?.popToViewController(targetVC, animated: false)
PhotoDataManager.manager.loadFromFileSystem { model in let vc:HomeVideoDetailController = HomeVideoDetailController()
let data = model.otherModelArray[0] targetVC.navigationController?.pushViewController(vc, animated: true)
let vc:HomeVideoDetailController = HomeVideoDetailController(model: data)
vc.dealData()
targetVC.navigationController?.pushViewController(vc, animated: true)
}
} }
} }
} }
...@@ -194,6 +200,12 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -194,6 +200,12 @@ class PhotoRemoveViewController: BaseViewController {
if let dataSg = Singleton.shared.trashData[type]{ if let dataSg = Singleton.shared.trashData[type]{
var tempArray = dataSg var tempArray = dataSg
if tempArray.count > 0 { if tempArray.count > 0 {
// 获取最后一个
let identifier = tempArray[tempArray.count - 1].localIdentifier
let success = TrashDatabase.shared.delete(localIdentifier: identifier)
if !success {
Print("删除失败")
}
tempArray.removeLast() tempArray.removeLast()
} }
Singleton.shared.trashData[type] = tempArray Singleton.shared.trashData[type] = tempArray
...@@ -206,7 +218,6 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -206,7 +218,6 @@ class PhotoRemoveViewController: BaseViewController {
super.viewDidDisappear(animated) super.viewDidDisappear(animated)
// 视图消失的时候存到数据库 // 视图消失的时候存到数据库
saveDataToKeepListDB() saveDataToKeepListDB()
self.dismissCallback()
} }
...@@ -252,9 +263,7 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -252,9 +263,7 @@ class PhotoRemoveViewController: BaseViewController {
DispatchQueue.main.async { DispatchQueue.main.async {
if let type = self.mediaType{ if let type = self.mediaType{
if let dataSg = Singleton.shared.trashData[type]{ if let dataSg = Singleton.shared.trashData[type]{
assetModel = assetModel + dataSg
// 如果单利中有当前数据,显示撤回按钮 // 如果单利中有当前数据,显示撤回按钮
if dataSg.count > 0{ if dataSg.count > 0{
self.navView.resetButton.isHidden = false self.navView.resetButton.isHidden = false
}else{ }else{
...@@ -265,6 +274,8 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -265,6 +274,8 @@ class PhotoRemoveViewController: BaseViewController {
self.navView.resetButton.isHidden = true self.navView.resetButton.isHidden = true
} }
} }
if assetModel.count > 0 { if assetModel.count > 0 {
// 显示垃圾桶 // 显示垃圾桶
self.trashSubView.resourceCountlabel.text = String(assetModel.count) self.trashSubView.resourceCountlabel.text = String(assetModel.count)
...@@ -294,16 +305,22 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -294,16 +305,22 @@ class PhotoRemoveViewController: BaseViewController {
} }
// 存垃圾桶数据到单利 // 存垃圾桶数据到单利
func saveDataToSigtonTrash(){ func saveDataToDBAndSigtonTrash(){
// 拿到单利数据 // 拿到单利数据
let model = self.dataModel[currentIndex]
if let type = self.mediaType{ if let type = self.mediaType{
if let dataSg = Singleton.shared.trashData[type]{ if let dataSg = Singleton.shared.trashData[type]{
var tempArray = dataSg var tempArray = dataSg
tempArray.append(self.dataModel[currentIndex]) tempArray.append(model)
Singleton.shared.trashData[type] = tempArray Singleton.shared.trashData[type] = tempArray
}else{ }else{
Singleton.shared.trashData[type] = [self.dataModel[currentIndex]] Singleton.shared.trashData[type] = [self.dataModel[currentIndex]]
} }
// 保存当前数据到数据库
let success = TrashDatabase.shared.insert(localIdentifier: model.localIdentifier, assetSize: model.assetSize, createDate: model.createDate, mediaType: type.dbType)
if !success {
Print("保存数据失败")
}
} }
self.showCurrentPageUIWhenTashDataChanged() self.showCurrentPageUIWhenTashDataChanged()
} }
...@@ -322,17 +339,9 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -322,17 +339,9 @@ class PhotoRemoveViewController: BaseViewController {
} }
} }
func saveDataToTrashDB(){ func clearSigtonTrashData(){
if let type = self.mediaType{ if let type = self.mediaType{
if let dataSg = Singleton.shared.trashData[type]{ Singleton.shared.trashData[type] = []
for item in dataSg{
let success = TrashDatabase.shared.insert(localIdentifier: item.localIdentifier, assetSize: item.assetSize, createDate: item.createDate, mediaType: type.dbType)
if success {
Print("保留单利数据到数据库垃圾桶成功")
}
}
Singleton.shared.trashData[type] = []
}
} }
showCurrentPageUIWhenTashDataChanged() showCurrentPageUIWhenTashDataChanged()
} }
...@@ -387,14 +396,14 @@ class PhotoRemoveViewController: BaseViewController { ...@@ -387,14 +396,14 @@ class PhotoRemoveViewController: BaseViewController {
if abs(actualTranslation.x) > actionMargin || abs(velocity.x) > 500 { if abs(actualTranslation.x) > actionMargin || abs(velocity.x) > 500 {
removeCurrentView(translation: actualTranslation, velocity: velocity) removeCurrentView(translation: actualTranslation, velocity: velocity)
if actualTranslation.x > 0 { if actualTranslation.x > 0 {
// 保存垃圾桶数据到数据库 // 清除单利数据
saveDataToTrashDB() clearSigtonTrashData()
// 保留操作 // 保留操作
saveDataToSigtonKeepList() saveDataToSigtonKeepList()
} }
if actualTranslation.x < 0 { if actualTranslation.x < 0 {
// 删除操作,先存到单利 // 删除操作,先存到单利
saveDataToSigtonTrash() saveDataToDBAndSigtonTrash()
} }
} else { } else {
resetViewPosition(activeView) resetViewPosition(activeView)
......
...@@ -43,7 +43,6 @@ class HomeInfoView :UIView { ...@@ -43,7 +43,6 @@ class HomeInfoView :UIView {
let sview:HomeInfoTitleView = HomeInfoTitleView(frame: CGRect(x: 0, y: 0, width: width, height: 84)) let sview:HomeInfoTitleView = HomeInfoTitleView(frame: CGRect(x: 0, y: 0, width: width, height: 84))
sview.titleLabel.text = self.titleText sview.titleLabel.text = self.titleText
sview.filterButton.isHidden = self.type != .similar && self.type != .SimilarVideos sview.filterButton.isHidden = self.type != .similar && self.type != .SimilarVideos
tableView.addSubview(sview)
return sview return sview
}() }()
...@@ -114,39 +113,35 @@ class HomeInfoView :UIView { ...@@ -114,39 +113,35 @@ class HomeInfoView :UIView {
self.headerView.sortViewSubmitCallBack = {[weak self]filterModel in self.headerView.sortViewSubmitCallBack = {[weak self]filterModel in
guard let self else {return} guard let self else {return}
// 从源头获取相似数据 var dataS : [[AssetModel]] = []
PhotoDataManager.manager.loadFromFileSystem(resultModel: {[weak self] model in if self.type == .SimilarVideos{
guard let self else {return} dataS = PhotoManager.shared.filterSimilarVideoModels
var dataS : [[AssetModel]] = [] }else {
if self.type == .SimilarVideos{ dataS = PhotoManager.shared.filterSimilarModels
dataS = model.otherModelArray[3].assets }
}else { let tempData = self.filterDataByDate(orgModels: dataS , startDate: filterModel.startDate, endDate: filterModel.endDate)
dataS = model.titleModelArray[1].assets // 重新更新下数据源
} self.ids = self.sortData(source: tempData, type: filterModel.sortType)
let tempData = self.filterDataByDate(orgModels: dataS , startDate: filterModel.startDate, endDate: filterModel.endDate) var tempModels : [HomeInfoTableItem] = []
// 重新更新下数据源 for array in self.ids ?? [] {
self.ids = self.sortData(source: tempData, type: filterModel.sortType) var smodels:[ImageSeletedCollectionItem] = []
var tempModels : [HomeInfoTableItem] = [] for id in array {
for array in self.ids ?? [] { let smodel = ImageSeletedCollectionItem()
var smodels:[ImageSeletedCollectionItem] = [] smodel.id = id
for id in array { smodel.isSeleted = false
let smodel = ImageSeletedCollectionItem() smodels.append(smodel)
smodel.id = id
smodel.isSeleted = false
smodels.append(smodel)
}
let smodel = HomeInfoTableItem()
smodel.type = type
smodel.smodels = smodels
smodel.titleText = titleText
tempModels.append(smodel)
}
models = tempModels
DispatchQueue.main.async {
// FIXME: 闪屏
self.tableView.reloadSections(IndexSet(integer: 0), with: .automatic)
} }
}) let smodel = HomeInfoTableItem()
smodel.type = type
smodel.smodels = smodels
smodel.titleText = titleText
tempModels.append(smodel)
}
models = tempModels
DispatchQueue.main.async {
self.setTitleView()
self.tableView.reloadSections(IndexSet(integer: 0), with: .automatic)
}
} }
} }
...@@ -372,7 +367,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate { ...@@ -372,7 +367,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return ids?.count ?? 0 return models.count
} }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...@@ -410,6 +405,12 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate { ...@@ -410,6 +405,12 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return UIView() return UIView()
}
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
tableView.addSubview(self.headerView)
tableView.bringSubviewToFront(self.headerView)
} }
func filterDataByDate(orgModels : [[AssetModel]], startDate:Date? ,endDate : Date?)->[[AssetModel]]{ func filterDataByDate(orgModels : [[AssetModel]], startDate:Date? ,endDate : Date?)->[[AssetModel]]{
...@@ -423,7 +424,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate { ...@@ -423,7 +424,7 @@ extension HomeInfoView:UITableViewDataSource,UITableViewDelegate {
array = array.filter({$0.createDate < endDate!}) array = array.filter({$0.createDate < endDate!})
} }
if array.count > 2 { if array.count >= 2 {
tempArray.append(item) tempArray.append(item)
} }
} }
...@@ -573,6 +574,9 @@ class HomeInfoTitleView:UIView { ...@@ -573,6 +574,9 @@ class HomeInfoTitleView:UIView {
@objc func filterButtonAction(){ @objc func filterButtonAction(){
if let cWindow = cWindow { if let cWindow = cWindow {
let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds) let filterView : ResourceFilterBoxView = ResourceFilterBoxView.init(frame: cWindow.bounds)
// 添加毛玻璃效果
cWindow.showBlur()
cWindow.addSubview(filterView) cWindow.addSubview(filterView)
filterView.submitCallBack = {model in filterView.submitCallBack = {model in
DispatchQueue.main.async { DispatchQueue.main.async {
......
...@@ -50,6 +50,7 @@ class ResourceFilterBoxView : UIView { ...@@ -50,6 +50,7 @@ class ResourceFilterBoxView : UIView {
lazy var backView: UIView = { lazy var backView: UIView = {
let view = UIView() let view = UIView()
view.backgroundColor = UIColor(red: 0.07, green: 0.07, blue: 0.07, alpha: 0.8000) view.backgroundColor = UIColor(red: 0.07, green: 0.07, blue: 0.07, alpha: 0.8000)
view.backgroundColor = .clear
view.isUserInteractionEnabled = true view.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer() let tap = UITapGestureRecognizer()
tap.addTarget(self, action: #selector(backViewClick)) tap.addTarget(self, action: #selector(backViewClick))
...@@ -211,6 +212,7 @@ class ResourceFilterBoxView : UIView { ...@@ -211,6 +212,7 @@ class ResourceFilterBoxView : UIView {
// 移除自身 // 移除自身
self.dismissDatePicker() self.dismissDatePicker()
self.removeFromSuperview() self.removeFromSuperview()
cWindow?.hideBlur()
self.submitCallBack(ResourceFilterBoxModel.init(startDate: self.startDate, endDate: self.endDate, sortType: getSortTypeByTag(tag:self.currentIndex))) self.submitCallBack(ResourceFilterBoxModel.init(startDate: self.startDate, endDate: self.endDate, sortType: getSortTypeByTag(tag:self.currentIndex)))
// 开始排序 // 开始排序
...@@ -274,6 +276,7 @@ class ResourceFilterBoxView : UIView { ...@@ -274,6 +276,7 @@ class ResourceFilterBoxView : UIView {
// 移除自身 // 移除自身
self.dismissDatePicker() self.dismissDatePicker()
self.removeFromSuperview() self.removeFromSuperview()
cWindow?.hideBlur()
} }
......
...@@ -25,11 +25,11 @@ class ImageSeletedCollectionCell:UICollectionViewCell { ...@@ -25,11 +25,11 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
lazy var allKeepButton : UIButton = { lazy var allKeepButton : UIButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.backgroundColor = UIColor(red: 0.33, green: 0.77, blue: 0.49, alpha: 1) button.backgroundColor = UIColor(red: 0.33, green: 0.77, blue: 0.49, alpha: 1)
button.layer.cornerRadius = 7 button.layer.cornerRadius = 12
button.clipsToBounds = true button.clipsToBounds = true
button.setTitle( "All retained", for: .normal) button.setTitle( "All retained", for: .normal)
button.setTitleColor(.white, for: .normal) button.setTitleColor(.white, for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 9, weight: .semibold) button.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: .semibold)
button.addTarget(self, action: #selector(allKeepButtonAction), for: .touchUpInside) button.addTarget(self, action: #selector(allKeepButtonAction), for: .touchUpInside)
button.isHidden = true button.isHidden = true
return button return button
...@@ -37,14 +37,14 @@ class ImageSeletedCollectionCell:UICollectionViewCell { ...@@ -37,14 +37,14 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
lazy var bestResultButton : UIButton = { lazy var bestResultButton : UIButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.layer.cornerRadius = 8 button.layer.cornerRadius = 10
button.clipsToBounds = true button.clipsToBounds = true
button.backgroundColor = UIColor(red: 1, green: 0.65, blue: 0, alpha: 1) button.backgroundColor = UIColor(red: 1, green: 0.65, blue: 0, alpha: 1)
button.setTitle( "Best", for: .normal) button.setTitle( "Best", for: .normal)
button.setImage(UIImage(named: "Frame"), for: .normal) button.setImage(UIImage(named: "Frame"), for: .normal)
button.setTitleColor(.white, for: .normal) button.setTitleColor(.white, for: .normal)
button.isHidden = true button.isHidden = true
button.titleLabel?.font = UIFont.systemFont(ofSize: 10, weight: .semibold) button.titleLabel?.font = UIFont.systemFont(ofSize: 12, weight: .semibold)
return button return button
}() }()
...@@ -174,15 +174,16 @@ class ImageSeletedCollectionCell:UICollectionViewCell { ...@@ -174,15 +174,16 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
self.addSubview(self.bestResultButton) self.addSubview(self.bestResultButton)
self.allKeepButton.snp.makeConstraints { make in self.allKeepButton.snp.makeConstraints { make in
make.top.left.equalToSuperview() make.top.left.equalToSuperview().offset(4)
make.width.equalTo(58) make.width.equalTo(80)
make.height.equalTo(14) make.height.equalTo(24)
} }
self.bestResultButton.snp.makeConstraints { make in self.bestResultButton.snp.makeConstraints { make in
make.left.bottom.equalToSuperview() make.left.equalToSuperview().offset(4)
make.width.equalTo(52) make.bottom.equalToSuperview().offset(-4)
make.height.equalTo(16) make.width.equalTo(60)
make.height.equalTo(20)
} }
} }
...@@ -207,9 +208,9 @@ class ImageSeletedCollectionCell:UICollectionViewCell { ...@@ -207,9 +208,9 @@ class ImageSeletedCollectionCell:UICollectionViewCell {
seletedBtn?.snp.makeConstraints({ make in seletedBtn?.snp.makeConstraints({ make in
make.width.height.equalTo(24) make.width.height.equalTo(12)
make.bottom.equalToSuperview().offset(-12) make.bottom.equalToSuperview().offset(-6)
make.right.equalToSuperview().offset(-20) make.right.equalToSuperview().offset(-6)
}) })
self.extensionView.snp.makeConstraints { make in self.extensionView.snp.makeConstraints { make in
......
//
// KeepListManager.swift
// PhoneManager
//
// Created by edy on 2025/5/16.
//
import UIKit
class KeepListManager {
/// 获取保留列表所有数据
/// - Returns: 所有列表数据
static func getAllKeepListData()->[AssetModel]{
var array : [AssetModel] = []
// 单利中的数据
for (key,value) in Singleton.shared.keepList {
for item in value {
array.append(item)
}
}
// 数据库中的数据
let data = GroupDatabase.shared.queryAll()
for item in data {
array.append(AssetModel(localIdentifier: item.localIdentifier, assetSize: item.assetSize, createDate: item.createDate, mediaType: item.mediaType))
}
return array
}
}
...@@ -74,12 +74,6 @@ class TrashDataManager { ...@@ -74,12 +74,6 @@ class TrashDataManager {
for item in dataDB { for item in dataDB {
assetModel.append(AssetModel.init(localIdentifier: item.localIdentifier, assetSize: item.assetSize, createDate: item.createDate, mediaType: item.mediaType)) assetModel.append(AssetModel.init(localIdentifier: item.localIdentifier, assetSize: item.assetSize, createDate: item.createDate, mediaType: item.mediaType))
} }
// 从单利拿数据
if let type = mediaType{
if let dataSg = Singleton.shared.trashData[type]{
assetModel = assetModel + dataSg
}
}
} }
return assetModel return assetModel
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment