Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
P
PhoneManager
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Yang
PhoneManager
Commits
63c05ef8
Commit
63c05ef8
authored
May 15, 2025
by
shenyong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
首页数据构造修改
parent
a7703dda
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
807 additions
and
285 deletions
+807
-285
AppDelegate.swift
PhoneManager/AppDelegate.swift
+1
-0
TrashDatabase.swift
PhoneManager/Class/Database/TrashDatabase.swift
+11
-0
AssetSizeCache.swift
...Manager/Class/Manager/PMPhotoManager/AssetSizeCache.swift
+73
-0
PHImageLoad.swift
PhoneManager/Class/Manager/PMPhotoManager/PHImageLoad.swift
+0
-0
PhotoCleanTool.swift
...Manager/Class/Manager/PMPhotoManager/PhotoCleanTool.swift
+35
-0
PhotoDuplicateManager.swift
.../Class/Manager/PMPhotoManager/PhotoDuplicateManager.swift
+249
-40
PhotoManager.swift
PhoneManager/Class/Manager/PMPhotoManager/PhotoManager.swift
+46
-6
PhotoSimilarManager.swift
...er/Class/Manager/PMPhotoManager/PhotoSimilarManager.swift
+1
-2
ScreenShotSimilarManager.swift
...ass/Manager/PMPhotoManager/ScreenShotSimilarManager.swift
+1
-1
VideoSimilarManager.swift
...er/Class/Manager/PMPhotoManager/VideoSimilarManager.swift
+1
-1
HomeCollectionViewHeader.swift
...nager/Class/Page/Home/View/HomeCollectionViewHeader.swift
+4
-1
HomeView.swift
PhoneManager/Class/Page/Home/View/HomeView.swift
+61
-50
HomeOtherCollectionCell.swift
...r/Class/Page/Home/View/cell/HomeOtherCollectionCell.swift
+8
-0
HomeTitleCollectionCell.swift
...r/Class/Page/Home/View/cell/HomeTitleCollectionCell.swift
+17
-9
ImageCollectionCell.swift
...nager/Class/Page/Home/View/cell/ImageCollectionCell.swift
+0
-2
HomeViewModel.swift
PhoneManager/Class/Page/Home/ViewModel/HomeViewModel.swift
+299
-173
No files found.
PhoneManager/AppDelegate.swift
View file @
63c05ef8
...
...
@@ -45,6 +45,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
AdvManager
.
shared
.
initAdertisementSDK
()
PMEmailManager
.
shareManager
.
restore
()
// 相册基本资源加载
PhotoManager
.
shared
.
config
()
return
true
...
...
PhoneManager/Class/Database/TrashDatabase.swift
View file @
63c05ef8
...
...
@@ -260,3 +260,14 @@ class TrashDatabase {
sqlite3_close
(
db
)
}
}
extension
TrashDatabase
{
func
dealHomeData
(
type
:
Int
){
}
}
PhoneManager/Class/Manager/PMPhotoManager/AssetSizeCache.swift
0 → 100644
View file @
63c05ef8
import
Foundation
import
Photos
actor
AssetSizeCache
{
static
let
shared
=
AssetSizeCache
()
private
let
cache
:
NSCache
<
NSString
,
NSNumber
>
=
NSCache
<
NSString
,
NSNumber
>
()
private
let
fileQueue
=
DispatchQueue
(
label
:
"com.assetsize.fileoperations"
,
qos
:
.
utility
)
// 临时存储,用于跟踪修改
private
var
tempStorage
:
[
String
:
Int64
]
=
[:]
private
var
hasChanges
:
Bool
=
false
private
let
cachePath
:
String
=
{
let
paths
=
FileManager
.
default
.
urls
(
for
:
.
documentDirectory
,
in
:
.
userDomainMask
)
return
paths
[
0
]
.
appendingPathComponent
(
"AssetSizeCache.plist"
)
.
path
}()
private
init
()
{
Task
{
await
loadCache
()
}
}
private
func
loadCache
()
{
fileQueue
.
sync
{
if
let
dict
=
NSDictionary
(
contentsOfFile
:
cachePath
)
as?
[
String
:
Int64
]
{
for
(
key
,
value
)
in
dict
{
cache
.
setObject
(
NSNumber
(
value
:
value
),
forKey
:
key
as
NSString
)
tempStorage
[
key
]
=
value
}
}
}
}
func
getSize
(
for
asset
:
PHAsset
)
->
Int64
?
{
// 优先从内存缓存中读取
if
let
size
=
tempStorage
[
asset
.
localIdentifier
]
{
return
size
}
return
cache
.
object
(
forKey
:
asset
.
localIdentifier
as
NSString
)?
.
int64Value
}
func
setSize
(
_
size
:
Int64
,
for
asset
:
PHAsset
)
{
cache
.
setObject
(
NSNumber
(
value
:
size
),
forKey
:
asset
.
localIdentifier
as
NSString
)
tempStorage
[
asset
.
localIdentifier
]
=
size
hasChanges
=
true
}
// 手动触发保存到文件
func
saveToFile
()
{
guard
hasChanges
else
{
return
}
let
path
=
self
.
cachePath
let
storageToSave
=
self
.
tempStorage
fileQueue
.
async
{
(
storageToSave
as
NSDictionary
)
.
write
(
toFile
:
path
,
atomically
:
true
)
}
hasChanges
=
false
}
func
clearCache
()
{
cache
.
removeAllObjects
()
tempStorage
.
removeAll
()
hasChanges
=
true
let
path
=
self
.
cachePath
fileQueue
.
async
{
try
?
FileManager
.
default
.
removeItem
(
atPath
:
path
)
}
}
}
PhoneManager/Class/Manager/PMPhotoManager/
SY
PHImageLoad.swift
→
PhoneManager/Class/Manager/PMPhotoManager/PHImageLoad.swift
View file @
63c05ef8
File moved
PhoneManager/Class/Manager/PMPhotoManager/PhotoCleanTool.swift
0 → 100644
View file @
63c05ef8
//
// PhotoCleanTool.swift
// PhoneManager
//
// Created by edy on 2025/5/15.
//
import
Foundation
struct
PhotoCleanTool
{
// app内手动删除资源
func
deleteLocalResouces
(
for
ids
:[
String
]){
let
other
=
PhotoManager
.
shared
.
otherModels
.
filter
{
ids
.
contains
(
$0
.
localIdentifier
)}
let
screen
=
PhotoManager
.
shared
.
screenShotModels
.
filter
{
ids
.
contains
(
$0
.
localIdentifier
)}
let
video
=
PhotoManager
.
shared
.
videoModels
.
filter
{
ids
.
contains
(
$0
.
localIdentifier
)}
PhotoManager
.
shared
.
otherModels
=
other
PhotoManager
.
shared
.
screenShotModels
=
screen
PhotoManager
.
shared
.
videoModels
=
video
}
// 删除无效资源
func
cleanIneffectiveResources
(){
}
}
PhoneManager/Class/Manager/PMPhotoManager/PhotoDuplicateManager.swift
View file @
63c05ef8
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Manager/PMPhotoManager/PhotoManager.swift
View file @
63c05ef8
...
...
@@ -88,6 +88,15 @@ class PhotoManager{
// 重复图片分组
var
duplicateModels
:[[
AssetModel
]]
=
[]
// 过滤垃圾桶/保留相似图片分组
var
filterSimilarModels
:[[
AssetModel
]]
=
[]
// 过滤垃圾桶/保留相似截图分组
var
filterSimilarScreenShotModels
:[[
AssetModel
]]
=
[]
// 过滤垃圾桶/保留相似视频分组
var
filterSimilarVideoModels
:[[
AssetModel
]]
=
[]
// // 过滤垃圾桶/保留重复图片分组
// var filterDuplicateModels:[[AssetModel]] = []
// 截图
var
screenShotModels
:[
AssetModel
]
=
[]
// 视频
...
...
@@ -95,6 +104,14 @@ class PhotoManager{
// 其他
var
otherModels
:[
AssetModel
]
=
[]
// 过滤垃圾桶/保留截图
var
filterScreenShotModels
:[
AssetModel
]
=
[]
// 过滤垃圾桶/保留视频
var
filterVideoModels
:[
AssetModel
]
=
[]
// 过滤垃圾桶/保留其他
var
filterOtherModels
:[
AssetModel
]
=
[]
private(set)
var
screenShotTotalSize
:
Int64
=
0
private(set)
var
videoTotalSize
:
Int64
=
0
private(set)
var
otherTotalSize
:
Int64
=
0
...
...
@@ -331,13 +348,30 @@ extension PhotoManager{
// 获取文件大小
func
getAssetSize
(
for
asset
:
PHAsset
)
->
Int64
{
// func getAssetSize(for asset:PHAsset) ->Int64{
// if let resource = PHAssetResource.assetResources(for: asset).first,
// let size = resource.value(forKey: "fileSize") as? Int64 {
// return size
// } else {
// return 0
// }
// }
func
getAssetSize
(
for
asset
:
PHAsset
)
async
->
Int64
{
// 先尝试从缓存获取
if
let
cachedSize
=
await
AssetSizeCache
.
shared
.
getSize
(
for
:
asset
)
{
return
cachedSize
}
// 如果缓存中没有,则计算大小
if
let
resource
=
PHAssetResource
.
assetResources
(
for
:
asset
)
.
first
,
let
size
=
resource
.
value
(
forKey
:
"fileSize"
)
as?
Int64
{
// 将计算结果存入缓存
await
AssetSizeCache
.
shared
.
setSize
(
size
,
for
:
asset
)
return
size
}
else
{
return
0
}
return
0
}
...
...
@@ -585,6 +619,10 @@ extension PhotoManager{
}
}
func
getTotalSize
(
source
:[[
AssetModel
]])
->
Double
{
return
source
.
flatMap
{
$0
}
.
reduce
(
0
){
$0
+
$1
.
assetSize
}
}
// 获取所有资产的总数
// func fetchTotalAssets(completion: @escaping ([PHAsset]) -> Void) {
// DispatchQueue.global(qos: .background).async {
...
...
@@ -606,10 +644,9 @@ extension PhotoManager{
// }
}
extension
PhotoManager
{
// 批量转模型
func
convertAssetsToModel
(
for
assets
:
[
PHAsset
],
mediaType
:
Int
)
async
->
[
AssetModel
]
{
let
batchSize
=
4
// 控制并发数量
var
results
:
[
AssetModel
]
=
[]
...
...
@@ -624,7 +661,7 @@ extension PhotoManager{
group
.
addTask
{
return
AssetModel
(
localIdentifier
:
asset
.
localIdentifier
,
assetSize
:
Double
(
self
.
getAssetSize
(
for
:
asset
)),
assetSize
:
Double
(
await
self
.
getAssetSize
(
for
:
asset
)),
createDate
:
asset
.
creationDate
??
Date
(),
mediaType
:
mediaType
)
...
...
@@ -640,6 +677,7 @@ extension PhotoManager{
return
results
}
// 获取总数据
func
getModelsData
(){
Task
{
let
start
=
CFAbsoluteTimeGetCurrent
()
...
...
@@ -660,3 +698,5 @@ extension PhotoManager{
}
}
}
PhoneManager/Class/Manager/PMPhotoManager/PhotoSimilarManager.swift
View file @
63c05ef8
...
...
@@ -10,7 +10,7 @@ import Photos
import
UIKit
@MainActor
class
PhotoSimilarManager
:
@unchecked
Sendable
{
static
let
shared
=
PhotoSimilarManager
()
...
...
@@ -198,7 +198,6 @@ class PhotoSimilarManager: @unchecked Sendable {
}
else
{
assetSize
=
0
}
let
model
=
AssetModel
(
localIdentifier
:
asset
.
localIdentifier
,
assetSize
:
assetSize
,
...
...
PhoneManager/Class/Manager/PMPhotoManager/ScreenShotSimilarManager.swift
View file @
63c05ef8
...
...
@@ -9,7 +9,7 @@ import Foundation
import
Photos
import
UIKit
@MainActor
class
ScreenshotSimilarJSONManager
:
@unchecked
Sendable
{
static
let
shared
=
ScreenshotSimilarJSONManager
()
...
...
PhoneManager/Class/Manager/PMPhotoManager/VideoSimilarManager.swift
View file @
63c05ef8
...
...
@@ -44,7 +44,7 @@ private actor VideoAssetCacheManager {
}
@MainActor
class
VideoSimilarJSONManager
:
@unchecked
Sendable
{
static
let
shared
=
VideoSimilarJSONManager
()
private
let
stateManager
=
VideoSimilarStateManager
()
...
...
PhoneManager/Class/Page/Home/View/HomeCollectionViewHeader.swift
View file @
63c05ef8
...
...
@@ -162,6 +162,9 @@ class CustomProgressBar: UIView {
var
chaoticProgress
:
CGFloat
=
0
{
didSet
{
guard
chaoticProgress
!=
oldValue
else
{
return
}
scheduleProgressUpdate
()
}
}
...
...
@@ -240,7 +243,7 @@ class CustomProgressBar: UIView {
guard
let
self
=
self
else
{
return
}
// 计算总容量和各部分比例
let
total
=
max
(
self
.
totalProgress
,
0.001
)
// 避免除以0
let
total
=
max
(
self
.
totalProgress
+
self
.
chaoticProgress
,
0.001
)
// 避免除以0
let
usedRatio
=
min
(
max
(
self
.
usedProgress
/
total
,
0
),
1
)
let
chaoticRatio
=
min
(
max
(
self
.
chaoticProgress
/
total
,
0
),
1
)
...
...
PhoneManager/Class/Page/Home/View/HomeView.swift
View file @
63c05ef8
...
...
@@ -31,8 +31,9 @@ class HomeView:UIView {
// var model:PhotosManagerModel?
var
viewModel
:
HomeViewModel
?
// var viewModel:HomeviewModel
private
var
viewModel
=
HomeViewModel
.
shared
var
attribet
:
NSAttributedString
?
...
...
@@ -73,41 +74,51 @@ class HomeView:UIView {
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
viewModel
=
HomeViewModel
()
//
viewModel = HomeViewModel()
setupUI
()
viewModel
?
.
setupBindings
()
viewModel
.
setupBindings
()
viewModel
?
.
homeDataChanged
=
{[
weak
self
]
section
,
row
in
viewModel
.
homeDataChanged
=
{[
weak
self
]
section
,
row
in
guard
let
weakSelf
=
self
else
{
return
}
DispatchQueue
.
main
.
async
{
if
let
cell
=
weakSelf
.
collectionView
.
cellForItem
(
at
:
IndexPath
(
row
:
row
,
section
:
section
))
as?
HomeTitleCollectionCell
{
// 只更新需要改变的内容
let
model
=
weakSelf
.
viewModel
?
.
headerGroup
[
row
]
let
model
=
weakSelf
.
viewModel
.
headerGroup
[
row
]
cell
.
reloadUIWithModel
(
model
:
model
)
}
if
let
cell
=
weakSelf
.
collectionView
.
cellForItem
(
at
:
IndexPath
(
row
:
row
,
section
:
section
))
as?
HomeOtherCollectionCell
{
// 只更新需要改变的内容
let
model
=
weakSelf
.
viewModel
?
.
cardGroup
[
row
]
let
model
=
weakSelf
.
viewModel
.
cardGroup
[
row
]
cell
.
reloadUIWithModel
(
model
:
model
)
}
weakSelf
.
homeHeader
?
.
progressBar
.
chaoticProgress
=
CGFloat
(
weakSelf
.
viewModel
?
.
totalSize
??
0
)
weakSelf
.
homeHeader
?
.
progressBar
.
chaoticProgress
=
CGFloat
(
weakSelf
.
viewModel
.
totalSize
)
weakSelf
.
reloadHeadSize
()
}
viewModel
?
.
coverHadChange
=
{
[
weak
self
]
in
}
viewModel
.
reloadCellHeight
=
{[
weak
self
]
in
guard
let
weakSelf
=
self
else
{
return
}
print
(
"刷新一次封面"
)
DispatchQueue
.
main
.
async
{
weakSelf
.
collectionView
.
reloadData
()
}
}
// viewModel.coverHadChange = { [weak self] in
// guard let weakSelf = self else { return }
// print("刷新一次封面")
// weakSelf.collectionView.reloadData()
// }
collectionView
.
reloadData
()
}
func
reloadHeadSize
(){
self
.
attribet
=
setFileAndCount
(
count
:
viewModel
?
.
totalFilesCount
??
0
,
fileSize
:
Double
(
viewModel
?
.
totalSize
??
0
))
self
.
attribet
=
setFileAndCount
(
count
:
viewModel
.
totalFilesCount
,
fileSize
:
Double
(
viewModel
.
totalSize
))
tipLabel
.
attributedText
=
attribet
}
...
...
@@ -230,10 +241,10 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
switch
section
{
case
0
:
return
viewModel
?
.
headerGroup
.
count
??
0
// model?.titleModelArray.count ?? 0
return
viewModel
.
headerGroup
.
count
// model?.titleModelArray.count ?? 0
case
1
:
return
viewModel
?
.
cardGroup
.
count
??
0
//model?.otherModelArray.count ?? 0
return
viewModel
.
cardGroup
.
count
//model?.otherModelArray.count ?? 0
default
:
return
0
...
...
@@ -248,7 +259,7 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
switch
section
{
case
0
:
let
cell
=
collectionView
.
dequeueReusableCell
(
withReuseIdentifier
:
HomeTitleCollectionCell
.
identifiers
,
for
:
indexPath
)
as!
HomeTitleCollectionCell
let
model
=
viewModel
?
.
headerGroup
[
indexPath
.
row
]
let
model
=
viewModel
.
headerGroup
[
indexPath
.
row
]
cell
.
reloadUIWithModel
(
model
:
model
)
// cell.reloadCoverData()
cell
.
homeTititlAction
=
{[
weak
self
]
idx
in
...
...
@@ -259,14 +270,14 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
self
.
titleCallBack
(
model
,
.
similar
)
}
}
cell
.
reloadCoverData
(
viewModel
?
.
headCoverImages
[
indexPath
.
row
]
??
[])
if
indexPath
.
row
==
0
{
self
.
dupHeadCell
=
cell
// cell.reloadCoverData(viewModel?
.dupCoverImage ?? [])
}
else
{
// cell.reloadCoverData(viewModel?
.similarCoverImage ?? [])
self
.
similarHeadCell
=
cell
}
// cell.reloadCoverData(viewModel
.headCoverImages[indexPath.row] ?? [])
//
if indexPath.row == 0 {
//
self.dupHeadCell = cell
// // cell.reloadCoverData(viewModel
.dupCoverImage ?? [])
//
}else{
// // cell.reloadCoverData(viewModel
.similarCoverImage ?? [])
//
self.similarHeadCell = cell
//
}
if
cell
.
model
?
.
assets
.
count
??
0
>
0
{
cell
.
fileLabel
?
.
isHidden
=
false
...
...
@@ -278,15 +289,15 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
case
1
:
let
cell
=
collectionView
.
dequeueReusableCell
(
withReuseIdentifier
:
HomeOtherCollectionCell
.
identifier
,
for
:
indexPath
)
as!
HomeOtherCollectionCell
cell
.
dealMediaType
(
indexPath
.
row
)
let
model
=
viewModel
?
.
cardGroup
[
indexPath
.
row
]
let
model
=
viewModel
.
cardGroup
[
indexPath
.
row
]
cell
.
reloadUIWithModel
(
model
:
model
)
Task
{
if
let
image
=
await
viewModel
?
.
coverCache
.
getImage
(
index
:
indexPath
.
row
)
{
await
MainActor
.
run
{
cell
.
setCoverImageOrVideo
(
image
:
image
)
}
}
}
//
Task {
// if let image = await viewModel
.coverCache.getImage(index: indexPath.row) {
//
await MainActor.run {
//
cell.setCoverImageOrVideo(image: image)
//
}
//
}
//
}
return
cell
default
:
return
UICollectionViewCell
()
...
...
@@ -298,10 +309,10 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
if
indexPath
.
section
==
0
{
let
model
=
viewModel
?
.
headerGroup
[
indexPath
.
row
]
//model?.titleModelArray[indexPath.row]
let
model
=
viewModel
.
headerGroup
[
indexPath
.
row
]
//model?.titleModelArray[indexPath.row]
if
model
?
.
assets
.
count
??
0
>
0
{
return
(
model
?
.
assets
.
first
?
.
count
??
0
)
>
2
?
((
collection
.
width
-
marginLR
-
20
)
/
2.5
)
+
64
:
((
collection
.
width
-
2
*
marginLR
-
10
)
/
2
)
+
64
if
model
.
assets
.
count
>
0
{
return
(
model
.
assets
.
first
?
.
count
??
0
)
>
2
?
((
collection
.
width
-
marginLR
-
20
)
/
2.5
)
+
64
:
((
collection
.
width
-
2
*
marginLR
-
10
)
/
2
)
+
64
}
else
{
return
52
...
...
@@ -310,9 +321,9 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
}
else
{
let
model
=
viewModel
?
.
cardGroup
[
indexPath
.
row
]
//model?.otherModelArray[indexPath.row]
let
model
=
viewModel
.
cardGroup
[
indexPath
.
row
]
//model?.otherModelArray[indexPath.row]
return
itemWidth
+
12
+
UILabel
.
getSizeWith
(
font
:
UIFont
.
systemFont
(
ofSize
:
16
,
weight
:
.
bold
),
lineSpacing
:
5
,
width
:
itemWidth
-
32
,
numberOfLines
:
0
,
content
:
model
?
.
folderName
??
""
)
.
height
return
itemWidth
+
12
+
UILabel
.
getSizeWith
(
font
:
UIFont
.
systemFont
(
ofSize
:
16
,
weight
:
.
bold
),
lineSpacing
:
5
,
width
:
itemWidth
-
32
,
numberOfLines
:
0
,
content
:
model
.
folderName
)
.
height
}
}
...
...
@@ -360,7 +371,7 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
func
collectionView
(
_
collectionView
:
UICollectionView
,
didSelectItemAt
indexPath
:
IndexPath
)
{
if
(
indexPath
.
section
==
0
)
{
let
smodel
=
viewModel
?
.
headerGroup
[
indexPath
.
row
]
//model?.titleModelArray[indexPath.row]
let
smodel
=
viewModel
.
headerGroup
[
indexPath
.
row
]
//model?.titleModelArray[indexPath.row]
if
indexPath
.
row
==
0
{
titleCallBack
(
smodel
,
.
duplicates
)
}
else
{
...
...
@@ -368,8 +379,8 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
}
}
else
{
guard
let
smodel
=
viewModel
?
.
cardGroup
[
indexPath
.
row
]
else
{
return
}
//model?.otherModelArray[indexPath.row]
//guard let smodel = viewModel
.cardGroup[indexPath.row] else { return } //model?.otherModelArray[indexPath.row]
let
smodel
=
viewModel
.
cardGroup
[
indexPath
.
row
]
otherItemCallBack
(
smodel
,
indexPath
.
row
)
}
}
...
...
@@ -385,8 +396,8 @@ extension HomeView:WaterfallMutiSectionDelegate,UICollectionViewDataSource,UICol
}
header
.
cleanNowButtonCallback
=
{[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
let
smodel
=
self
.
viewModel
?
.
headerGroup
[
0
]
//self.model?.titleModelArray
[0]
let
vc
=
HomeInfoViewController
(
ids
:
smodel
!.
assets
,
type
:
.
duplicates
,
titleText
:
smodel
!
.
folderName
)
let
smodel
=
self
.
viewModel
.
headerGroup
[
0
]
let
vc
=
HomeInfoViewController
(
ids
:
smodel
.
assets
,
type
:
.
duplicates
,
titleText
:
smodel
.
folderName
)
self
.
responderViewController
()?
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
}
if
indexPath
.
section
!=
0
{
...
...
PhoneManager/Class/Page/Home/View/cell/HomeOtherCollectionCell.swift
View file @
63c05ef8
...
...
@@ -281,6 +281,14 @@ class HomeOtherCollectionCell: UICollectionViewCell {
}
else
{
self
.
sizeLabel
.
text
=
String
(
format
:
"(%.2lf) GB"
,
sizeKB
/
(
1000
*
1000
))
}
let
placeImage
=
self
.
mediaType
==
0
?
"othermoren"
:
self
.
mediaType
==
2
?
"photosmoren"
:
"videosmoren"
if
let
id
=
model
.
assets
.
first
?
.
first
?
.
localIdentifier
{
imageView
.
asset
.
load
(
withLocalIdentifier
:
id
,
placeholder
:
UIImage
(
named
:
placeImage
))
}
else
{
self
.
imageView
.
image
=
UIImage
.
init
(
named
:
placeImage
)
}
}
...
...
PhoneManager/Class/Page/Home/View/cell/HomeTitleCollectionCell.swift
View file @
63c05ef8
...
...
@@ -131,18 +131,26 @@ class HomeTitleCollectionCell:UICollectionViewCell {
fileLabel
?
.
text
=
"
\(
count
)
"
+
" Photos "
+
(
model
.
allFileSize
>
0
?
"(
\(
formatFileSize
(
model
.
allFileSize
)
)
)"
:
"(Calculating...)"
)
fileLabel
?
.
sizeToFit
()
collectionView
?
.
reloadData
()
}
func
reloadCoverData
(
_
assets
:[
AssetModel
]){
assetsModels
.
removeAll
()
if
let
assets
=
model
.
assets
.
first
{
assetsModels
=
assets
.
compactMap
({
model
in
return
ImageCollectionModel
.
init
(
asset
:
model
)
})
Print
(
"刷新头部封面
\(
self
)
"
,
assets
.
count
)
collectionView
?
.
reloadData
()
}
}
// func reloadCoverData(_ assets:[AssetModel]){
// assetsModels.removeAll()
// assetsModels = assets.compactMap({ model in
// return ImageCollectionModel.init(asset: model)
// })
// Print("刷新头部封面\(self)",assets.count)
// collectionView?.reloadData()
// }
override
func
layoutSubviews
()
{
super
.
layoutSubviews
()
...
...
PhoneManager/Class/Page/Home/View/cell/ImageCollectionCell.swift
View file @
63c05ef8
...
...
@@ -48,8 +48,6 @@ class ImageCollectionCell:UICollectionViewCell {
backImageView
?
.
asset
.
load
(
withLocalIdentifier
:
model
.
asset
.
localIdentifier
,
placeholder
:
UIImage
.
init
(
named
:
"othermoren"
))
}
}
...
...
PhoneManager/Class/Page/Home/ViewModel/HomeViewModel.swift
View file @
63c05ef8
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment