Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
41 changes: 36 additions & 5 deletions SwissTransferCore/DownloadManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import Foundation
import InfomaniakCoreCommonUI
import InfomaniakDI
import STCore
@preconcurrency import STCore

public struct DownloadTask: Equatable, Sendable, Identifiable {
public let id: String
Expand Down Expand Up @@ -194,6 +194,7 @@ public class DownloadManager: ObservableObject {
transfer: TransferUi,
files: [FileUi],
sharedApiUrlCreator: SharedApiUrlCreator,
fileManager: STCore.FileManager,
matomoCategory: MatomoCategory
) {
@InjectService var matomo: MatomoUtils
Expand All @@ -207,16 +208,46 @@ public class DownloadManager: ObservableObject {
}

if files.isEmpty {
try? await startTransferDownload(transfer: transfer, sharedApiUrlCreator: sharedApiUrlCreator)
try? await startTransferDownload(
transfer: transfer,
sharedApiUrlCreator: sharedApiUrlCreator,
fileManager: fileManager
)
} else {
try? await startFilesDownload(files: files, in: transfer, sharedApiUrlCreator: sharedApiUrlCreator)
let flattenedFiles = try await getFlattenedFiles(for: transfer, files: files, fileManager: fileManager)
try? await startFilesDownload(files: flattenedFiles, in: transfer, sharedApiUrlCreator: sharedApiUrlCreator)
}
}
}

private func startTransferDownload(transfer: TransferUi, sharedApiUrlCreator: SharedApiUrlCreator) async throws {
private func getFlattenedFiles(for transfer: TransferUi,
files: [FileUi],
fileManager: STCore.FileManager) async throws -> [FileUi] {
guard transfer.apiSource == .v2 else { return files }

var flattenedFiles = [FileUi]()
for file in files {
if file.isFolder {
if let folderPath = file.path {
let folderFiles = try await fileManager.getFilesUnderPath(transferId: transfer.uuid, folderPath: folderPath)
flattenedFiles.append(contentsOf: folderFiles)
}
} else {
flattenedFiles.append(file)
}
}

return flattenedFiles
}

private func startTransferDownload(
transfer: TransferUi,
sharedApiUrlCreator: SharedApiUrlCreator,
fileManager: STCore.FileManager
) async throws {
guard transfer.apiSource == .v1 else {
try await startFilesDownload(files: transfer.files, in: transfer, sharedApiUrlCreator: sharedApiUrlCreator)
let transferFiles = try await fileManager.getTransferFilesOnly(transferId: transfer.uuid)
try await startFilesDownload(files: transferFiles, in: transfer, sharedApiUrlCreator: sharedApiUrlCreator)
return
}

Expand Down
21 changes: 21 additions & 0 deletions SwissTransferCore/TargetAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,26 @@
private let appGroupIdentifier = "group.\(Constants.bundleId)"

public extension UserDefaults {
static let shared = UserDefaults(suiteName: appGroupIdentifier)!

Check warning on line 34 in SwissTransferCore/TargetAssembly.swift

View workflow job for this annotation

GitHub Actions / Build and Test project

static prope
}

extension InfomaniakCore.ApiEnvironment {
var kmpEnvironment: STCore.ApiEnvironment {
switch self {
case .prod:
return .Prod()
case .preprod:
return .Preprod()
case .customHost(let string):
Logger.general
.warning(
"Using same custom host for both iOS and KMP, but KMP does not support custom ports, so port will be ignored if specified in the string"
)
return .Custom(url: string, urlV2: string)
}
}
}

extension [Factory] {
func registerFactoriesInDI() {
forEach { SimpleResolver.sharedResolver.store(factory: $0) }
Expand All @@ -45,7 +62,11 @@
open class TargetAssembly {
static let logger = Logger(category: "TargetAssembly")

#if DEBUG
private static let apiEnvironment = ApiEnvironment.preprod
#else
private static let apiEnvironment = ApiEnvironment.prod
#endif
public static let loginConfig = InfomaniakLogin.Config(
clientId: "17EE3471-9843-4FB9-AD95-CB8C41BAD624",
loginURL: URL(string: "https://login.\(apiEnvironment.host)/")!,
Expand Down
12 changes: 1 addition & 11 deletions SwissTransferCore/Utils/SwissTransferInjection+Init.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,12 @@
let roomPath = groupPathProvider.realmRootURL.appending(path: "transfers").path()
Logger.general.info("Realm group directory \(realmRootDirectory)")

#if DEBUG
self.init(
environment: STCore.ApiEnvironment.Preprod(),
environment: ApiEnvironment.current.kmpEnvironment,

Check warning on line 35 in SwissTransferCore/Utils/SwissTransferInjection+Init.swift

View workflow job for this annotation

GitHub Actions / Build and Test project

reference to static property 'current' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
userAgent: UserAgentBuilder().userAgent,
legacyDatabaseRootDirectory: realmRootDirectory,
databaseNameOrPath: roomPath,
crashReport: sentryWrapper
)
#else
self.init(
environment: STCore.ApiEnvironment.Prod(),
userAgent: UserAgentBuilder().userAgent,
legacyDatabaseRootDirectory: realmRootDirectory,
databaseNameOrPath: roomPath,
crashReport: sentryWrapper
)
#endif
}
}
1 change: 1 addition & 0 deletions SwissTransferCoreUI/Components/DownloadButton.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public struct DownloadButton: View {
transfer: transfer,
files: Array(multipleSelectionManager.selectedItems),
sharedApiUrlCreator: mainViewState.swissTransferManager.sharedApiUrlCreator,
fileManager: mainViewState.swissTransferManager.fileManager,
matomoCategory: matomoCategory
)
} label: {
Expand Down
2 changes: 2 additions & 0 deletions SwissTransferCoreUI/Components/DownloadableFileCellView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ struct DownloadableFileCellView: View {
transfer: transfer,
files: [file],
sharedApiUrlCreator: mainViewState.swissTransferManager.sharedApiUrlCreator,
fileManager: mainViewState.swissTransferManager.fileManager,
matomoCategory: matomoCategory
)
}
Expand Down Expand Up @@ -75,6 +76,7 @@ struct DownloadableFileCellView: View {
transfer: transfer,
files: [file],
sharedApiUrlCreator: mainViewState.swissTransferManager.sharedApiUrlCreator,
fileManager: mainViewState.swissTransferManager.fileManager,
matomoCategory: matomoCategory
)
return
Expand Down
16 changes: 8 additions & 8 deletions Tuist/Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading