Skip to content

Commit 98a5ee5

Browse files
authored
Add a toggle in the developer options to optimise the media uploads. (#3408)
1 parent b1b2297 commit 98a5ee5

18 files changed

+109
-34
lines changed

ElementX/Sources/Application/AppSettings.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ final class AppSettings {
4242

4343
// Feature flags
4444
case slidingSyncDiscovery
45+
case optimizeMediaUploads
4546
case publicSearchEnabled
4647
case fuzzyRoomListSearchEnabled
47-
case pinningEnabled
4848
case enableOnlySignedDeviceIsolationMode
4949
case identityPinningViolationNotificationsEnabled
5050
case knockingEnabled
@@ -281,6 +281,9 @@ final class AppSettings {
281281
@UserPreference(key: UserDefaultsKeys.slidingSyncDiscovery, defaultValue: .native, storageType: .userDefaults(store))
282282
var slidingSyncDiscovery: SlidingSyncDiscovery
283283

284+
@UserPreference(key: UserDefaultsKeys.optimizeMediaUploads, defaultValue: false, storageType: .userDefaults(store))
285+
var optimizeMediaUploads
286+
284287
@UserPreference(key: UserDefaultsKeys.identityPinningViolationNotificationsEnabled, defaultValue: isDevelopmentBuild, storageType: .userDefaults(store))
285288
var identityPinningViolationNotificationsEnabled
286289

ElementX/Sources/FlowCoordinators/RoomFlowCoordinator.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
810810

811811
let roomDetailsEditParameters = RoomDetailsEditScreenCoordinatorParameters(roomProxy: roomProxy,
812812
mediaProvider: userSession.mediaProvider,
813+
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: appSettings),
813814
navigationStackCoordinator: stackCoordinator,
814815
userIndicatorController: userIndicatorController,
815816
orientationManager: appMediator.windowManager)
@@ -895,7 +896,7 @@ class RoomFlowCoordinator: FlowCoordinatorProtocol {
895896

896897
let parameters = MediaUploadPreviewScreenCoordinatorParameters(userIndicatorController: userIndicatorController,
897898
roomProxy: roomProxy,
898-
mediaUploadingPreprocessor: MediaUploadingPreprocessor(),
899+
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: appSettings),
899900
title: url.lastPathComponent,
900901
url: url)
901902

ElementX/Sources/FlowCoordinators/SettingsFlowCoordinator.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class SettingsFlowCoordinator: FlowCoordinatorProtocol {
165165
let coordinator = UserDetailsEditScreenCoordinator(parameters: .init(orientationManager: parameters.windowManager,
166166
clientProxy: parameters.userSession.clientProxy,
167167
mediaProvider: parameters.userSession.mediaProvider,
168+
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: parameters.appSettings),
168169
navigationStackCoordinator: navigationStackCoordinator,
169170
userIndicatorController: parameters.userIndicatorController))
170171

ElementX/Sources/FlowCoordinators/UserSessionFlowCoordinator.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,8 @@ class UserSessionFlowCoordinator: FlowCoordinatorProtocol {
542542
userSession: userSession,
543543
userIndicatorController: ServiceLocator.shared.userIndicatorController,
544544
navigationStackCoordinator: startChatNavigationStackCoordinator,
545-
userDiscoveryService: userDiscoveryService)
545+
userDiscoveryService: userDiscoveryService,
546+
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: appSettings))
546547

547548
let coordinator = StartChatScreenCoordinator(parameters: parameters)
548549
coordinator.actions.sink { [weak self] action in

ElementX/Sources/Screens/MediaUploadPreviewScreen/View/MediaUploadPreviewScreen.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ private class PreviewItem: NSObject, QLPreviewItem {
116116
struct MediaUploadPreviewScreen_Previews: PreviewProvider, TestablePreview {
117117
static let viewModel = MediaUploadPreviewScreenViewModel(userIndicatorController: UserIndicatorControllerMock.default,
118118
roomProxy: JoinedRoomProxyMock(),
119-
mediaUploadingPreprocessor: MediaUploadingPreprocessor(),
119+
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: ServiceLocator.shared.settings),
120120
title: "some random file name",
121121
url: URL.picturesDirectory)
122122
static var previews: some View {

ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenCoordinator.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import SwiftUI
1111
struct RoomDetailsEditScreenCoordinatorParameters {
1212
let roomProxy: JoinedRoomProxyProtocol
1313
let mediaProvider: MediaProviderProtocol
14+
let mediaUploadingPreprocessor: MediaUploadingPreprocessor
1415
weak var navigationStackCoordinator: NavigationStackCoordinator?
1516
let userIndicatorController: UserIndicatorControllerProtocol
1617
let orientationManager: OrientationManagerProtocol
@@ -35,6 +36,7 @@ final class RoomDetailsEditScreenCoordinator: CoordinatorProtocol {
3536

3637
viewModel = RoomDetailsEditScreenViewModel(roomProxy: parameters.roomProxy,
3738
mediaProvider: parameters.mediaProvider,
39+
mediaUploadingPreprocessor: parameters.mediaUploadingPreprocessor,
3840
userIndicatorController: parameters.userIndicatorController)
3941
}
4042

ElementX/Sources/Screens/RoomDetailsEditScreen/RoomDetailsEditScreenViewModel.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,18 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe
1414
private let actionsSubject: PassthroughSubject<RoomDetailsEditScreenViewModelAction, Never> = .init()
1515
private let roomProxy: JoinedRoomProxyProtocol
1616
private let userIndicatorController: UserIndicatorControllerProtocol
17-
private let mediaPreprocessor: MediaUploadingPreprocessor = .init()
17+
private let mediaUploadingPreprocessor: MediaUploadingPreprocessor
1818

1919
var actions: AnyPublisher<RoomDetailsEditScreenViewModelAction, Never> {
2020
actionsSubject.eraseToAnyPublisher()
2121
}
2222

2323
init(roomProxy: JoinedRoomProxyProtocol,
2424
mediaProvider: MediaProviderProtocol,
25+
mediaUploadingPreprocessor: MediaUploadingPreprocessor,
2526
userIndicatorController: UserIndicatorControllerProtocol) {
2627
self.roomProxy = roomProxy
28+
self.mediaUploadingPreprocessor = mediaUploadingPreprocessor
2729
self.userIndicatorController = userIndicatorController
2830

2931
let roomAvatar = roomProxy.avatarURL
@@ -76,7 +78,7 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe
7678
title: L10n.commonLoading,
7779
persistent: true))
7880

79-
let mediaResult = await mediaPreprocessor.processMedia(at: url)
81+
let mediaResult = await mediaUploadingPreprocessor.processMedia(at: url)
8082

8183
switch mediaResult {
8284
case .success(.image):

ElementX/Sources/Screens/RoomDetailsEditScreen/View/RoomDetailsEditScreen.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
154154

155155
return RoomDetailsEditScreenViewModel(roomProxy: roomProxy,
156156
mediaProvider: MediaProviderMock(configuration: .init()),
157+
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: ServiceLocator.shared.settings),
157158
userIndicatorController: UserIndicatorControllerMock.default)
158159
}()
159160

@@ -164,6 +165,7 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
164165

165166
return RoomDetailsEditScreenViewModel(roomProxy: roomProxy,
166167
mediaProvider: MediaProviderMock(configuration: .init()),
168+
mediaUploadingPreprocessor: MediaUploadingPreprocessor(appSettings: ServiceLocator.shared.settings),
167169
userIndicatorController: UserIndicatorControllerMock.default)
168170
}()
169171

ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenModels.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ protocol DeveloperOptionsProtocol: AnyObject {
4646
var hideUnreadMessagesBadge: Bool { get set }
4747
var fuzzyRoomListSearchEnabled: Bool { get set }
4848
var hideTimelineMedia: Bool { get set }
49+
var optimizeMediaUploads: Bool { get set }
4950
var enableOnlySignedDeviceIsolationMode: Bool { get set }
5051
var elementCallBaseURLOverride: URL? { get set }
5152
var identityPinningViolationNotificationsEnabled: Bool { get set }

ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/View/DeveloperOptionsScreen.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,12 @@ struct DeveloperOptionsScreen: View {
6262
}
6363
}
6464

65+
Section("Media") {
66+
Toggle(isOn: $context.optimizeMediaUploads) {
67+
Text("Optimise for upload")
68+
}
69+
}
70+
6571
Section {
6672
Toggle(isOn: $context.enableOnlySignedDeviceIsolationMode) {
6773
Text("Exclude insecure devices when sending/receiving messages")

0 commit comments

Comments
 (0)