Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
1d73eb7
https://github.com/nextcloud/ios/issues/2390
marinofaggiana Nov 22, 2023
cbd0274
add async/await searchMedia
marinofaggiana Nov 25, 2023
31ec113
Livephoto detect (#51)
marinofaggiana Nov 28, 2023
544d8ad
cleaning
marinofaggiana Nov 30, 2023
b4df6c9
Fix build on macOS broken by freeDisk change (#53)
claucambra Dec 4, 2023
47b230f
livePhotoFile -> fileId
marinofaggiana Dec 7, 2023
e3b2ae8
rollback
marinofaggiana Dec 7, 2023
b5f351d
rollback
marinofaggiana Dec 9, 2023
992ad16
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Dec 12, 2023
e77c2dc
Fix error description chunk
marinofaggiana Dec 13, 2023
396f18b
chunk error fix
marinofaggiana Dec 13, 2023
4604eb4
errorDescription
marinofaggiana Dec 14, 2023
20f6e08
added description
marinofaggiana Dec 15, 2023
94bbdab
Change to markdown
mpivchev Dec 15, 2023
f7f618d
Added e2ee options versionApi
marinofaggiana Jan 18, 2024
77dffd8
change variable name
marinofaggiana Jan 22, 2024
28eede9
endpoint update
marinofaggiana Jan 23, 2024
14c622f
Fix chunk S3 (#56)
marinofaggiana Jan 29, 2024
41475e7
public func
marinofaggiana Feb 5, 2024
ec87ccc
lint
marinofaggiana Feb 5, 2024
d231a48
remove description
marinofaggiana Feb 7, 2024
c2e2d83
fix
marinofaggiana Feb 7, 2024
23b3555
fix
marinofaggiana Feb 7, 2024
7d61d28
fix log
marinofaggiana Feb 10, 2024
3c34cc5
Resolution - GPS (#59)
marinofaggiana Feb 28, 2024
ff4d3d1
set h, w to Double
marinofaggiana Feb 28, 2024
fa460bb
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Feb 28, 2024
4a33e6c
coding (#61)
marinofaggiana Mar 6, 2024
25e8788
normalized taskHandler
marinofaggiana Mar 8, 2024
81e1318
add filename in trash (#63)
marinofaggiana Mar 21, 2024
1e224f0
Nextcloud Assistant (#66)
marinofaggiana Apr 18, 2024
73d245f
Add support for visionOS, fix tvOS and watchOS support (#67)
claucambra Apr 22, 2024
fdbe0dc
Task description (#70)
marinofaggiana May 7, 2024
31c85f4
change TypeIconFile (#71)
marinofaggiana May 15, 2024
cc3c063
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana May 24, 2024
99c5a27
Core Preview Improvements and use only fileId
marinofaggiana Jun 21, 2024
6814775
fix
marinofaggiana Jun 21, 2024
28f1554
improvements
marinofaggiana Jun 21, 2024
35d4460
Improvements
marinofaggiana Jun 21, 2024
3b3b178
added compressionQuality
marinofaggiana Jun 23, 2024
064cf05
Improvements (#76)
marinofaggiana Jul 2, 2024
e4e557e
improved code
marinofaggiana Jul 2, 2024
3e5ffc7
fix paramenters default
marinofaggiana Jul 3, 2024
b61e465
fix paramenters default
marinofaggiana Jul 3, 2024
eb260e3
improvements
marinofaggiana Jul 5, 2024
44731fd
cod
marinofaggiana Jul 5, 2024
5b667cb
improvements
marinofaggiana Jul 6, 2024
b6917d8
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Jul 8, 2024
6b90394
downloadPreview
marinofaggiana Jul 10, 2024
85892df
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Jul 10, 2024
f75a16b
added downloadPreview url
marinofaggiana Jul 10, 2024
5fa0dd8
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Jul 10, 2024
4cf36e5
httpCookieStorage (#80)
marinofaggiana Jul 19, 2024
499fa9b
new getUserProfile()
marinofaggiana Jul 20, 2024
93b4913
change paramenter name
marinofaggiana Jul 20, 2024
f4f645f
Account (#82)
marinofaggiana Jul 31, 2024
83b75a1
cod
marinofaggiana Jul 31, 2024
f6c4c86
Revert "cod"
marinofaggiana Jul 31, 2024
f8324b8
Filename validator (#83)
mpivchev Aug 6, 2024
30c4043
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Aug 6, 2024
5023211
fix session delegate
marinofaggiana Aug 13, 2024
5ad366b
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Aug 13, 2024
0673ceb
fix
marinofaggiana Aug 13, 2024
e9c40dd
Filename validator (#92)
marinofaggiana Aug 23, 2024
6173516
WIP
mpivchev Aug 26, 2024
d421994
NextcloudKit Version 5 - Multisession (#94)
marinofaggiana Sep 24, 2024
7fc17fe
NextcloudKit V 5
marinofaggiana Sep 24, 2024
caee63d
fix
marinofaggiana Sep 24, 2024
263420e
requestCachePolicy
marinofaggiana Oct 8, 2024
49432ad
cache
marinofaggiana Oct 8, 2024
ddf9823
cache
marinofaggiana Oct 8, 2024
bbe7ae1
cache
marinofaggiana Oct 8, 2024
0c4c6b6
Add optional spaces and periods - WCF
mpivchev Sep 27, 2024
44123c3
Response (#97)
marinofaggiana Oct 14, 2024
bb750f2
ThreadSafeArray
marinofaggiana Oct 16, 2024
cdcfedb
logger delegate
marinofaggiana Oct 20, 2024
93c2b50
fix message 503
marinofaggiana Oct 21, 2024
87d6f37
public
marinofaggiana Oct 21, 2024
354bc42
fix error
marinofaggiana Oct 21, 2024
b7d757f
Add reuse compliance (#96)
AndyScherzinger Oct 22, 2024
1ad32b4
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Oct 22, 2024
14c9da5
Auto rename (#99)
mpivchev Nov 4, 2024
94fbe70
Keep original extension
mpivchev Nov 4, 2024
6d794ec
Refactor
mpivchev Nov 4, 2024
1a54b9a
License (#102)
marinofaggiana Nov 5, 2024
6f80c4d
( multipathServiceType )
marinofaggiana Nov 5, 2024
1c4389d
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Nov 6, 2024
a5b6f5c
Add more extensive test for AutoRenamer (#101)
mpivchev Nov 6, 2024
69d7822
Split NKModel.swift into designated source code files for every conta…
i2h3 Nov 14, 2024
5ddf89c
Merge pull request #105 from nextcloud/split-nkmodel
i2h3 Nov 14, 2024
0853d79
Update README.md (#106)
mpivchev Nov 25, 2024
e6e0a54
Prettier Landing Page (#108)
i2h3 Nov 25, 2024
fcfc5c7
Reenabled build on macOS. (#109)
i2h3 Nov 25, 2024
4e0a7fa
Track ocId in NKTrash items (#110)
claucambra Dec 4, 2024
c754b59
Dav pagination (#111)
marinofaggiana Dec 5, 2024
7b09fa2
Terms of Service (#112)
marinofaggiana Dec 11, 2024
0fd68b6
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Dec 14, 2024
dd022b9
Added capabilities to manage share download limits. (#107)
i2h3 Dec 20, 2024
f798517
Recommended files (#115)
marinofaggiana Dec 30, 2024
92ca88f
improvements
marinofaggiana Jan 2, 2025
bdfb63e
Allow setting custom destinations in chunked upload (#116)
claucambra Jan 10, 2025
9f85082
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Jan 16, 2025
19f484c
added httpMaximumConnectionsPerHost
marinofaggiana Jan 21, 2025
3c394ed
httpMaximumConnectionsPerHost
marinofaggiana Jan 21, 2025
f798615
appendSession
marinofaggiana Jan 21, 2025
670e3cd
cod
marinofaggiana Jan 21, 2025
935d4bc
Added feature to get download limits explicitly via OCS API.
i2h3 Jan 21, 2025
26182ad
Merge pull request #118 from nextcloud/files_downloadlimit2
i2h3 Jan 23, 2025
34d7b9e
Update FileNameValidator.swift
mpivchev Jan 23, 2025
740e605
Merge remote-tracking branch 'origin/main' into develop
marinofaggiana Jan 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Sources/NextcloudKit/Models/NKFile.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class NKFile: NSObject {
/// Download limits for shares of this file.
///
public var downloadLimits = [NKDownloadLimit]()

public var e2eEncrypted: Bool = false
public var etag = ""
public var favorite: Bool = false
Expand Down
20 changes: 15 additions & 5 deletions Sources/NextcloudKit/NKSession.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ public class NKSession {
public var userAgent: String
public var nextcloudVersion: Int
public let groupIdentifier: String
public let httpMaximumConnectionsPerHost: Int
public let httpMaximumConnectionsPerHostInDownload: Int
public let httpMaximumConnectionsPerHostInUpload: Int
public let requestCachePolicy: URLRequest.CachePolicy
public let dav: String = "remote.php/dav"
public var internalTypeIdentifiers: [NKCommon.UTTypeConformsToServer] = []
Expand All @@ -31,6 +34,9 @@ public class NKSession {
userAgent: String,
nextcloudVersion: Int,
groupIdentifier: String,
httpMaximumConnectionsPerHost: Int,
httpMaximumConnectionsPerHostInDownload: Int,
httpMaximumConnectionsPerHostInUpload: Int,
requestCachePolicy: URLRequest.CachePolicy = .useProtocolCachePolicy) {
self.urlBase = urlBase
self.user = user
Expand All @@ -40,6 +46,9 @@ public class NKSession {
self.userAgent = userAgent
self.nextcloudVersion = nextcloudVersion
self.groupIdentifier = groupIdentifier
self.httpMaximumConnectionsPerHost = httpMaximumConnectionsPerHost
self.httpMaximumConnectionsPerHostInDownload = httpMaximumConnectionsPerHostInDownload
self.httpMaximumConnectionsPerHostInUpload = httpMaximumConnectionsPerHostInUpload
self.requestCachePolicy = requestCachePolicy

let backgroundSessionDelegate = NKBackground(nkCommonInstance: NextcloudKit.shared.nkCommonInstance)
Expand All @@ -49,6 +58,7 @@ public class NKSession {
/// Session Alamofire
let configuration = URLSessionConfiguration.af.default
configuration.requestCachePolicy = requestCachePolicy
configuration.httpMaximumConnectionsPerHost = httpMaximumConnectionsPerHost

#if os(iOS) || targetEnvironment(macCatalyst)
configuration.multipathServiceType = .handover
Expand All @@ -71,7 +81,7 @@ public class NKSession {
}

configurationDownloadBackground.isDiscretionary = false
configurationDownloadBackground.httpMaximumConnectionsPerHost = 5
configurationDownloadBackground.httpMaximumConnectionsPerHost = self.httpMaximumConnectionsPerHostInDownload
configurationDownloadBackground.requestCachePolicy = requestCachePolicy

#if os(iOS) || targetEnvironment(macCatalyst)
Expand All @@ -90,7 +100,7 @@ public class NKSession {
}

configurationUploadBackground.isDiscretionary = false
configurationUploadBackground.httpMaximumConnectionsPerHost = 5
configurationUploadBackground.httpMaximumConnectionsPerHost = self.httpMaximumConnectionsPerHostInUpload
configurationUploadBackground.requestCachePolicy = requestCachePolicy

#if os(iOS) || targetEnvironment(macCatalyst)
Expand All @@ -109,7 +119,7 @@ public class NKSession {
}

configurationUploadBackgroundWWan.isDiscretionary = false
configurationUploadBackgroundWWan.httpMaximumConnectionsPerHost = 5
configurationUploadBackgroundWWan.httpMaximumConnectionsPerHost = self.httpMaximumConnectionsPerHostInUpload
configurationUploadBackgroundWWan.requestCachePolicy = requestCachePolicy
configurationUploadBackgroundWWan.httpCookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: sharedCookieStorage)
sessionUploadBackgroundWWan = URLSession(configuration: configurationUploadBackgroundWWan, delegate: backgroundSessionDelegate, delegateQueue: OperationQueue.main)
Expand All @@ -123,14 +133,14 @@ public class NKSession {
}

configurationUploadBackgroundExt.isDiscretionary = false
configurationUploadBackgroundExt.httpMaximumConnectionsPerHost = 5
configurationUploadBackgroundExt.httpMaximumConnectionsPerHost = self.httpMaximumConnectionsPerHostInUpload
configurationUploadBackgroundExt.requestCachePolicy = requestCachePolicy
configurationUploadBackgroundExt.sharedContainerIdentifier = groupIdentifier

#if os(iOS) || targetEnvironment(macCatalyst)
configurationUploadBackgroundExt.multipathServiceType = .handover
#endif

configurationUploadBackgroundExt.httpCookieStorage = HTTPCookieStorage.sharedCookieStorage(forGroupContainerIdentifier: sharedCookieStorage)
sessionUploadBackgroundExt = URLSession(configuration: configurationUploadBackgroundExt, delegate: backgroundSessionDelegate, delegateQueue: OperationQueue.main)
}
Expand Down
70 changes: 70 additions & 0 deletions Sources/NextcloudKit/NextcloudKit+ShareDownloadLimit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,82 @@

import Alamofire
import Foundation
import SwiftyJSON

public extension NextcloudKit {
private func makeEndpoint(with token: String) -> String {
"ocs/v2.php/apps/files_downloadlimit/api/v1/\(token)/limit"
}

func getDownloadLimit(account: String, token: String, completion: @escaping (NKDownloadLimit?, NKError) -> Void) {
let endpoint = makeEndpoint(with: token)
let options = NKRequestOptions()

guard let nkSession = nkCommonInstance.getSession(account: account),
let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint, options: options),
let headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else {
return options.queue.async {
completion(nil, .urlError)
}
}

nkSession
.sessionData
.request(url, method: .get, parameters: nil, encoding: URLEncoding.default, headers: headers, interceptor: nil)
.validate(statusCode: 200..<300)
.responseData(queue: self.nkCommonInstance.backgroundQueue) { response in
if self.nkCommonInstance.levelLog > 0 {
debugPrint(response)
}

switch response.result {
case .failure(let error):
let error = NKError(error: error, afResponse: response, responseData: response.data)

options.queue.async {
completion(nil, error)
}
case .success(let jsonData):
let json = JSON(jsonData)

guard json["ocs"]["meta"]["statuscode"].int == 200 else {
let error = NKError(rootJson: json, fallbackStatusCode: response.response?.statusCode)

options.queue.async {
completion(nil, error)
}

return
}

let count = json["ocs"]["data"]["count"]
let limit = json["ocs"]["data"]["limit"]

guard count.type != .null else {
options.queue.async {
completion(nil, .success)
}

return
}

guard limit.type != .null else {
options.queue.async {
completion(nil, .success)
}

return
}

let downloadLimit = NKDownloadLimit(count: count.intValue, limit: limit.intValue, token: token)

options.queue.async {
completion(downloadLimit, .success)
}
}
}
}

func removeShareDownloadLimit(account: String, token: String, completion: @escaping (_ error: NKError) -> Void) {
let endpoint = makeEndpoint(with: token)
let options = NKRequestOptions()
Expand Down
18 changes: 17 additions & 1 deletion Sources/NextcloudKit/NextcloudKit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,27 @@
password: String,
userAgent: String,
nextcloudVersion: Int,
httpMaximumConnectionsPerHost: Int = 6,
httpMaximumConnectionsPerHostInDownload: Int = 6,
httpMaximumConnectionsPerHostInUpload: Int = 6,
groupIdentifier: String) {
if nkCommonInstance.nksessions.filter({ $0.account == account }).first != nil {
return updateSession(account: account, urlBase: urlBase, userId: userId, password: password, userAgent: userAgent, nextcloudVersion: nextcloudVersion)
}
let nkSession = NKSession(urlBase: urlBase, user: user, userId: userId, password: password, account: account, userAgent: userAgent, nextcloudVersion: nextcloudVersion, groupIdentifier: groupIdentifier)

Check warning on line 71 in Sources/NextcloudKit/NextcloudKit.swift

View workflow job for this annotation

GitHub Actions / Lint

Trailing Whitespace Violation: Lines should not have trailing whitespace (trailing_whitespace)
let nkSession = NKSession(
urlBase: urlBase,
user: user,
userId: userId,
password: password,
account: account,
userAgent: userAgent,
nextcloudVersion: nextcloudVersion,
groupIdentifier: groupIdentifier,
httpMaximumConnectionsPerHost: httpMaximumConnectionsPerHost,
httpMaximumConnectionsPerHostInDownload: httpMaximumConnectionsPerHostInDownload,
httpMaximumConnectionsPerHostInUpload: httpMaximumConnectionsPerHostInUpload
)

nkCommonInstance.nksessions.append(nkSession)
}
Expand Down
2 changes: 1 addition & 1 deletion Sources/NextcloudKit/Utils/FileNameValidator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class FileNameValidator {
}

public var fileForbiddenFileExtensionError: NKError {
let errorMessageTemplate = NSLocalizedString("_file_name_validator_error_forbidden_file_extension_", value: ".\"%@\" is a forbidden file extension.", comment: "")
let errorMessageTemplate = NSLocalizedString("_file_name_validator_error_forbidden_file_extension_", value: "\".%@\" is a forbidden file extension.", comment: "")
let errorMessage = String(format: errorMessageTemplate, templateString)
return NKError(errorCode: NSURLErrorCannotCreateFile, errorDescription: errorMessage)
}
Expand Down
Loading