@@ -11,11 +11,19 @@ extension NCMedia {
1111 guard let tblAccount = await self . database . getTableAccountAsync ( predicate : NSPredicate ( format : " account == %@ " , self . session . account ) ) else {
1212 return
1313 }
14+ let capabilities = await NKCapabilities . shared . getCapabilities ( for : self . session . account )
1415 let mediaPredicate = self . imageCache . getMediaPredicate ( session : self . session ,
1516 mediaPath : tblAccount . mediaPath ,
1617 showOnlyImages : self . showOnlyImages ,
1718 showOnlyVideos : self . showOnlyVideos )
18- if let metadatas = await self . database . getMetadatasAsync ( predicate : mediaPredicate , sortedByKeyPath : " datePhotosOriginal " , ascending : false ) {
19+ var sortedByKeyPath : String
20+ if capabilities . serverVersionMajor >= self . global . nextcloudVersionFuture {
21+ sortedByKeyPath = " datePhotosOriginal "
22+ } else {
23+ sortedByKeyPath = " date "
24+ }
25+
26+ if let metadatas = await self . database . getMetadatasAsync ( predicate : mediaPredicate , sortedByKeyPath : sortedByKeyPath , ascending : false ) {
1927 self . database . filterAndNormalizeLivePhotos ( from : metadatas ) { metadatas in
2028 Task { @MainActor in
2129 self . dataSource = NCMediaDataSource ( metadatas : metadatas )
@@ -97,54 +105,39 @@ extension NCMedia {
97105 }
98106
99107 visibleCells = visibleCells . sorted {
100- guard let date1 = $0 . datePhotosOriginal , let date2 = $1 . datePhotosOriginal else {
108+ guard let date1 = $0 . date , let date2 = $1 . date else {
101109 return false
102110 }
103111 return date1 > date2
104112 }
105113
106114 if ! visibleCells . isEmpty , ! distant {
107- let firstCellDate = visibleCells . first ? . datePhotosOriginal
108- let lastCellDate = visibleCells . last ? . datePhotosOriginal
115+ let firstCellDate = visibleCells . first ? . date
116+ let lastCellDate = visibleCells . last ? . date
109117
110118 if collectionView . contentOffset . y <= 0 {
111119 lessDate = . distantFuture
112120 } else {
113121 lessDate = Calendar . current . date ( byAdding : . second , value : 1 , to : firstCellDate ?? . distantFuture ) ?? . distantFuture
114122 }
115123
116- if lastCellDate == self . dataSource . metadatas . last ? . datePhotosOriginal {
124+ if lastCellDate == self . dataSource . metadatas . last ? . date {
117125 greaterDate = . distantPast
118126 } else {
119127 greaterDate = Calendar . current . date ( byAdding : . second , value : - 1 , to : lastCellDate ?? . distantPast ) ?? . distantPast
120128 }
121129 }
122130 }
123131
124- let elementDate : String
125- var lessDateAny : Any
126- var greaterDateAny : Any
127-
128- if capabilities . serverVersionMajor >= self . global . nextcloudVersion31 {
129- elementDate = " nc:metadata-photos-original_date_time "
130- lessDateAny = Int ( lessDate . timeIntervalSince1970 )
131- greaterDateAny = Int ( greaterDate . timeIntervalSince1970 )
132- } else {
133- elementDate = " d:getlastmodified "
134- lessDateAny = lessDate
135- greaterDateAny = greaterDate
136- }
137-
138132 let limit = await MainActor . run {
139133 max ( self . collectionView . visibleCells . count * 3 , 300 )
140134 }
141135
142136 let options = NKRequestOptions ( timeout : 180 , taskDescription : self . global . taskDescriptionRetrievesProperties , queue : NextcloudKit . shared . nkCommonInstance . backgroundQueue )
143137
144138 let result = await searchMediaAsync ( path : tblAccount . mediaPath ,
145- lessDate : lessDateAny ,
146- greaterDate : greaterDateAny ,
147- elementDate : elementDate ,
139+ lessDate : lessDate ,
140+ greaterDate : greaterDate ,
148141 limit : limit ,
149142 account : self . session . account ,
150143 options : options ) { task in
@@ -181,10 +174,19 @@ extension NCMedia {
181174 mediaPath : tblAccount . mediaPath ,
182175 showOnlyImages : self . showOnlyImages ,
183176 showOnlyVideos : self . showOnlyVideos )
184- let predicate = NSCompoundPredicate ( andPredicateWithSubpredicates : [
185- NSPredicate ( format : " datePhotosOriginal >= %@ AND datePhotosOriginal <= %@ AND mediaSearch == true " , greaterDate as NSDate , lessDate as NSDate ) ,
177+
178+ var predicate = NSCompoundPredicate ( andPredicateWithSubpredicates : [
179+ NSPredicate ( format : " date >= %@ AND date <= %@ AND mediaSearch == true " , greaterDate as NSDate , lessDate as NSDate ) ,
186180 mediaPredicate
187181 ] )
182+
183+ if capabilities . serverVersionMajor >= self . global . nextcloudVersionFuture {
184+ predicate = NSCompoundPredicate ( andPredicateWithSubpredicates : [
185+ NSPredicate ( format : " datePhotosOriginal >= %@ AND datePhotosOriginal <= %@ AND mediaSearch == true " , greaterDate as NSDate , lessDate as NSDate ) ,
186+ mediaPredicate
187+ ] )
188+ }
189+
188190 let localMetadatas = await self . database . getMetadatasAsync ( predicate : predicate )
189191
190192 await MainActor . run {
@@ -206,22 +208,22 @@ extension NCMedia {
206208@ MainActor
207209public class NCMediaDataSource : NSObject {
208210 public class Metadata : NSObject {
209- let datePhotosOriginal : Date
211+ let date : Date
210212 let etag : String
211213 let imageSize : CGSize
212214 let isImage : Bool
213215 let isLivePhoto : Bool
214216 let isVideo : Bool
215217 let ocId : String
216218
217- init ( datePhotosOriginal : Date ,
219+ init ( date : Date ,
218220 etag : String ,
219221 imageSize : CGSize ,
220222 isImage : Bool ,
221223 isLivePhoto : Bool ,
222224 isVideo : Bool ,
223225 ocId : String ) {
224- self . datePhotosOriginal = datePhotosOriginal
226+ self . date = date
225227 self . etag = etag
226228 self . imageSize = imageSize
227229 self . isImage = isImage
@@ -245,7 +247,7 @@ public class NCMediaDataSource: NSObject {
245247
246248 private func insertInMetadatas ( metadata : Metadata ) {
247249 for i in 0 ..< self . metadatas . count {
248- if ( metadata . datePhotosOriginal as Date ) > self . metadatas [ i ] . datePhotosOriginal {
250+ if ( metadata . date ) > self . metadatas [ i ] . date {
249251 self . metadatas . insert ( metadata , at : i )
250252 return
251253 }
@@ -255,7 +257,14 @@ public class NCMediaDataSource: NSObject {
255257 }
256258
257259 private func getMetadataFromTableMetadata ( _ metadata : tableMetadata ) -> Metadata {
258- return Metadata ( datePhotosOriginal : metadata . datePhotosOriginal as Date ,
260+ let capabilities = NCNetworking . shared . capabilities [ metadata . account ] ?? NKCapabilities . Capabilities ( )
261+ let date : Date
262+ if capabilities . serverVersionMajor >= self . global . nextcloudVersionFuture {
263+ date = metadata . datePhotosOriginal as Date
264+ } else {
265+ date = metadata . date as Date
266+ }
267+ return Metadata ( date : date ,
259268 etag : metadata . etag ,
260269 imageSize : CGSize ( width : metadata . width , height : metadata . height ) ,
261270 isImage : metadata . classFile == NKTypeClassFile . image . rawValue ,
0 commit comments