Configured and applied SwiftFormat

This commit is contained in:
Stefan Ceriu
2022-09-27 10:17:22 +03:00
committed by Stefan Ceriu
parent ff2e6ddfa7
commit 43c28d23b7
663 changed files with 2329 additions and 2840 deletions
@@ -17,11 +17,10 @@
*/
import Foundation
import UIKit
import SwiftUI
import UIKit
final class SpaceCreationPostProcessCoordinator: Coordinator, Presentable {
// MARK: - Properties
// MARK: Private
@@ -50,6 +49,7 @@ final class SpaceCreationPostProcessCoordinator: Coordinator, Presentable {
}
// MARK: - Public
func start() {
MXLog.debug("[SpaceCreationPostProcessCoordinator] did start.")
spaceCreationPostProcessViewModel.completion = { [weak self] result in
@@ -65,6 +65,6 @@ final class SpaceCreationPostProcessCoordinator: Coordinator, Presentable {
}
func toPresentable() -> UIViewController {
return self.spaceCreationPostProcessHostingController
spaceCreationPostProcessHostingController
}
}
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,4 +1,4 @@
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,4 +1,4 @@
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -38,11 +38,12 @@ struct SpaceCreationPostProcessTask: Equatable {
let title: String
var state: SpaceCreationPostProcessTaskState
var isFinished: Bool {
return state == .failure || state == .success
state == .failure || state == .success
}
var subTasks: [SpaceCreationPostProcessTask] = []
static func == (lhs: SpaceCreationPostProcessTask, rhs: SpaceCreationPostProcessTask) -> Bool {
return lhs.type == rhs.type && lhs.title == rhs.title && lhs.state == rhs.state && lhs.subTasks == lhs.subTasks
lhs.type == rhs.type && lhs.title == rhs.title && lhs.state == rhs.state && lhs.subTasks == lhs.subTasks
}
}
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,12 +16,11 @@
// limitations under the License.
//
import Foundation
import Combine
import Foundation
import MatrixSDK
class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
// MARK: - Properties
// MARK: Private
@@ -39,19 +38,16 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
createdSpaceId = createdSpace?.spaceId
}
}
private var createdRoomsByName: [String: MXRoom] = [:]
private var currentSubTaskIndex = 0
private var processingQueue = DispatchQueue(label: "io.element.MXSpace.processingQueue", attributes: .concurrent)
private lazy var stateEventBuilder: MXRoomInitialStateEventBuilder = {
return MXRoomInitialStateEventBuilder()
}()
private lazy var stateEventBuilder = MXRoomInitialStateEventBuilder()
private lazy var mediaUploader: MXMediaLoader = {
return MXMediaManager.prepareUploader(withMatrixSession: session, initialRange: 0, andRange: 1.0)
}()
private lazy var mediaUploader: MXMediaLoader = MXMediaManager.prepareUploader(withMatrixSession: session, initialRange: 0, andRange: 1.0)
// MARK: Public
@@ -61,8 +57,9 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
let alias = creationParams.userDefinedAddress.isEmptyOrNil ? creationParams.address : creationParams.userDefinedAddress
return AvatarInput(mxContentUri: alias, matrixItemId: "", displayName: creationParams.name)
}
var avatarImage: UIImage? {
return creationParams.userSelectedAvatar
creationParams.userSelectedAvatar
}
// MARK: - Setup
@@ -71,18 +68,17 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
self.session = session
self.parentSpaceId = parentSpaceId
self.creationParams = creationParams
self.tasks = Self.tasks(with: creationParams)
self.tasksSubject = CurrentValueSubject(tasks)
tasks = Self.tasks(with: creationParams)
tasksSubject = CurrentValueSubject(tasks)
}
deinit {
}
deinit { }
// MARK: - Public
func run() {
self.isRetry = self.currentTaskIndex > 0
self.currentTaskIndex = -1
isRetry = currentTaskIndex > 0
currentTaskIndex = -1
runNextTask()
}
@@ -106,13 +102,13 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
tasks.append(SpaceCreationPostProcessTask(type: .addRooms, title: VectorL10n.spacesCreationPostProcessAddingRooms("\(addedRoomIds.count)"), state: .none, subTasks: subTasks))
}
} else {
tasks.append(contentsOf: creationParams.newRooms.compactMap({ room in
tasks.append(contentsOf: creationParams.newRooms.compactMap { room in
guard !room.name.isEmpty else {
return nil
}
return SpaceCreationPostProcessTask(type: .createRoom(room.name), title: VectorL10n.spacesCreationPostProcessCreatingRoom(room.name), state: .none)
}))
})
}
if creationParams.inviteType == .email {
@@ -183,7 +179,7 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
return
}
parentSpace.addChild(roomId: createdSpaceId) { [weak self] response in
parentSpace.addChild(roomId: createdSpaceId) { [weak self] _ in
guard let self = self else { return }
self.updateCurrentTask(with: .success)
@@ -194,45 +190,45 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
}
private func uploadAvatar(andUpdate task: SpaceCreationPostProcessTask) {
self.updateCurrentTask(with: .started)
updateCurrentTask(with: .started)
guard let avatar = creationParams.userSelectedAvatar, let spaceRoom = self.createdSpace?.room else {
self.updateCurrentTask(with: .success)
self.runNextTask()
guard let avatar = creationParams.userSelectedAvatar, let spaceRoom = createdSpace?.room else {
updateCurrentTask(with: .success)
runNextTask()
return
}
let avatarUp = MXKTools.forceImageOrientationUp(avatar)
mediaUploader.uploadData(avatarUp?.jpegData(compressionQuality: 0.5), filename: nil, mimeType: "image/jpeg",
success: { [weak self] (urlString) in
guard let self = self else { return }
guard let urlString = urlString else { return }
guard let url = URL(string: urlString) else { return }
success: { [weak self] urlString in
guard let self = self else { return }
guard let urlString = urlString else { return }
guard let url = URL(string: urlString) else { return }
self.setAvatar(ofRoom: spaceRoom, withURL: url, andUpdate: task)
self.setAvatar(ofRoom: spaceRoom, withURL: url, andUpdate: task)
},
failure: { [weak self] (error) in
guard let self = self else { return }
failure: { [weak self] _ in
guard let self = self else { return }
self.updateCurrentTask(with: .failure)
self.runNextTask()
self.updateCurrentTask(with: .failure)
self.runNextTask()
})
}
private func setAvatar(ofRoom room: MXRoom, withURL url: URL, andUpdate task: SpaceCreationPostProcessTask) {
updateCurrentTask(with: .started)
room.setAvatar(url: url) { [weak self] (response) in
room.setAvatar(url: url) { [weak self] response in
guard let self = self else { return }
self.updateCurrentTask(with: response.isSuccess ? .success: .failure)
self.updateCurrentTask(with: response.isSuccess ? .success : .failure)
self.runNextTask()
}
}
private func createRoom(withName roomName: String, andUpdate task: SpaceCreationPostProcessTask) {
guard let createdSpace = self.createdSpace else {
guard let createdSpace = createdSpace else {
updateCurrentTask(with: .failure)
runNextTask()
return
@@ -257,7 +253,7 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
}
private func addToSpace(room: MXRoom) {
guard let createdSpace = self.createdSpace else {
guard let createdSpace = createdSpace else {
updateCurrentTask(with: .failure)
runNextTask()
return
@@ -282,7 +278,7 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
}
private func inviteNextUserByEmail() {
guard let createdSpace = self.createdSpace, let room = createdSpace.room else {
guard let createdSpace = createdSpace, let room = createdSpace.room else {
updateCurrentTask(with: .failure)
runNextTask()
return
@@ -291,7 +287,7 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
currentSubTaskIndex += 1
guard currentSubTaskIndex < tasks[currentTaskIndex].subTasks.count else {
let isSuccess = tasks[currentTaskIndex].subTasks.reduce(true, { $0 && $1.state == .success })
let isSuccess = tasks[currentTaskIndex].subTasks.reduce(true) { $0 && $1.state == .success }
updateCurrentTask(with: isSuccess ? .success : .failure)
runNextTask()
return
@@ -306,7 +302,7 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
}
private func addNextExistingRoom() {
guard let createdSpace = self.createdSpace else {
guard let createdSpace = createdSpace else {
updateCurrentTask(with: .failure)
runNextTask()
return
@@ -315,7 +311,7 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
currentSubTaskIndex += 1
guard currentSubTaskIndex < tasks[currentTaskIndex].subTasks.count else {
let isSuccess = tasks[currentTaskIndex].subTasks.reduce(true, { $0 && $1.state == .success })
let isSuccess = tasks[currentTaskIndex].subTasks.reduce(true) { $0 && $1.state == .success }
updateCurrentTask(with: isSuccess ? .success : .failure)
runNextTask()
return
@@ -351,6 +347,6 @@ class SpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
}
tasks[currentTaskIndex].state = state
self.tasksSubject.send(tasks)
tasksSubject.send(tasks)
}
}
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,7 +24,6 @@ import SwiftUI
enum MockSpaceCreationPostProcessScreenState: MockScreenState {
static var screenStates: [MockScreenState] = [MockSpaceCreationPostProcessScreenState.running, MockSpaceCreationPostProcessScreenState.done, MockSpaceCreationPostProcessScreenState.doneWithError]
// A case for each state you want to represent
// with specific, minimal associated data that will allow you
// mock that screen.
@@ -38,7 +37,7 @@ enum MockSpaceCreationPostProcessScreenState: MockScreenState {
}
/// Generate the view struct for the screen state.
var screenView: ([Any], AnyView) {
var screenView: ([Any], AnyView) {
let service: MockSpaceCreationPostProcessService
switch self {
case .running:
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,12 +16,11 @@
// limitations under the License.
//
import Foundation
import Combine
import Foundation
import UIKit
class MockSpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol {
static let defaultTasks: [SpaceCreationPostProcessTask] = [
SpaceCreationPostProcessTask(type: .createSpace, title: "Space creation", state: .success),
SpaceCreationPostProcessTask(type: .createRoom("Room#1"), title: "Room#1 creation", state: .failure),
@@ -53,22 +52,22 @@ class MockSpaceCreationPostProcessService: SpaceCreationPostProcessServiceProtoc
var tasksSubject: CurrentValueSubject<[SpaceCreationPostProcessTask], Never>
private(set) var createdSpaceId: String?
var avatar: AvatarInput {
return AvatarInput(mxContentUri: nil, matrixItemId: "", displayName: "Some space")
AvatarInput(mxContentUri: nil, matrixItemId: "", displayName: "Some space")
}
var avatarImage: UIImage? {
return nil
nil
}
init(
tasks: [SpaceCreationPostProcessTask] = defaultTasks
) {
self.tasksSubject = CurrentValueSubject<[SpaceCreationPostProcessTask], Never>(tasks)
tasksSubject = CurrentValueSubject<[SpaceCreationPostProcessTask], Never>(tasks)
}
func simulateUpdate(tasks: [SpaceCreationPostProcessTask]) {
self.tasksSubject.send(tasks)
tasksSubject.send(tasks)
}
func run() {
}
func run() { }
}
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,8 +16,8 @@
// limitations under the License.
//
import Foundation
import Combine
import Foundation
import UIKit
protocol SpaceCreationPostProcessServiceProtocol: AnyObject {
@@ -16,8 +16,8 @@
// limitations under the License.
//
import XCTest
import RiotSwiftUI
import XCTest
class SpaceCreationPostProcessUITests: MockScreenTestCase {
// No tests have been implemented
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,13 +16,12 @@
// limitations under the License.
//
import XCTest
import Combine
import XCTest
@testable import RiotSwiftUI
class SpaceCreationPostProcessViewModelTests: XCTestCase {
var service: MockSpaceCreationPostProcessService!
var viewModel: SpaceCreationPostProcessViewModelProtocol!
var context: SpaceCreationPostProcessViewModelType.Context!
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,7 +19,6 @@
import SwiftUI
struct SpaceCreationPostProcess: View {
// MARK: - Properties
// MARK: Private
@@ -44,7 +43,7 @@ struct SpaceCreationPostProcess: View {
.navigationBarHidden(true)
.background(theme.colors.background.ignoresSafeArea())
.frame(maxHeight: .infinity)
.onAppear() {
.onAppear {
viewModel.send(viewAction: .runTasks)
}
}
@@ -62,7 +61,7 @@ struct SpaceCreationPostProcess: View {
@ViewBuilder
private var tasksList: some View {
VStack(alignment: .leading, spacing: 11) {
ForEach(viewModel.viewState.tasks.indices) { index in
ForEach(viewModel.viewState.tasks.indices, id: \.self) { index in
SpaceCreationPostProcessItem(title: viewModel.viewState.tasks[index].title, state: viewModel.viewState.tasks[index].state)
}
}
@@ -85,7 +84,7 @@ struct SpaceCreationPostProcess: View {
private var avatarView: some View {
ZStack {
SpaceAvatarImage(mxContentUri: viewModel.viewState.avatar.mxContentUri, matrixItemId: viewModel.viewState.avatar.matrixItemId, displayName: viewModel.viewState.avatar.displayName, size: .xLarge)
.padding(6)
.padding(6)
if let image = viewModel.viewState.avatarImage {
Image(uiImage: image)
.resizable()
@@ -95,7 +94,6 @@ struct SpaceCreationPostProcess: View {
}
}
}
}
// MARK: - Previews
@@ -1,4 +1,4 @@
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,16 +16,13 @@
// limitations under the License.
//
import SwiftUI
import Combine
import SwiftUI
typealias SpaceCreationPostProcessViewModelType = StateStoreViewModel<SpaceCreationPostProcessViewState,
SpaceCreationPostProcessStateAction,
SpaceCreationPostProcessViewAction>
SpaceCreationPostProcessStateAction,
SpaceCreationPostProcessViewAction>
class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType, SpaceCreationPostProcessViewModelProtocol {
// MARK: - Properties
// MARK: Private
@@ -40,7 +37,7 @@ class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType,
// MARK: - Setup
static func makeSpaceCreationPostProcessViewModel(spaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol) -> SpaceCreationPostProcessViewModelProtocol {
return SpaceCreationPostProcessViewModel(spaceCreationPostProcessService: spaceCreationPostProcessService)
SpaceCreationPostProcessViewModel(spaceCreationPostProcessService: spaceCreationPostProcessService)
}
private init(spaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol) {
@@ -55,8 +52,8 @@ class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType,
avatar: spaceCreationPostProcessService.avatar,
avatarImage: spaceCreationPostProcessService.avatarImage,
tasks: tasks,
isFinished: tasks.first?.state == .failure || tasks.reduce(true, { result, task in result && task.isFinished }),
errorCount: tasks.reduce(0, { result, task in result + (task.state == .failure ? 1 : 0) })
isFinished: tasks.first?.state == .failure || tasks.reduce(true) { result, task in result && task.isFinished },
errorCount: tasks.reduce(0) { result, task in result + (task.state == .failure ? 1 : 0) }
)
}
@@ -74,7 +71,7 @@ class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType,
return
}
if state.isFinished && state.errorCount == 0 {
if state.isFinished, state.errorCount == 0 {
guard let spaceId = self.spaceCreationPostProcessService.createdSpaceId else {
self.cancel()
return
@@ -108,11 +105,11 @@ class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType,
switch action {
case .updateTasks(let tasks):
state.tasks = tasks
state.isFinished = tasks.first?.state == .failure || tasks.reduce(true, { result, task in result && task.isFinished })
state.errorCount = tasks.reduce(0, { result, task in result + (task.state == .failure ? 1 : 0) })
state.isFinished = tasks.first?.state == .failure || tasks.reduce(true) { result, task in result && task.isFinished }
state.errorCount = tasks.reduce(0) { result, task in result + (task.state == .failure ? 1 : 0) }
}
NotificationCenter.default.post(name: SpaceCreationPostProcessViewModel.didUpdate, object: nil, userInfo: [SpaceCreationPostProcessViewModel.newStateKey : state])
NotificationCenter.default.post(name: SpaceCreationPostProcessViewModel.didUpdate, object: nil, userInfo: [SpaceCreationPostProcessViewModel.newStateKey: state])
UILog.debug("[SpaceCreationPostProcessViewModel] reducer with action \(action) produced state: \(state)")
}
@@ -131,6 +128,7 @@ class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType,
}
// MARK: - MXSpaceService notification constants
extension SpaceCreationPostProcessViewModel {
/// Posted once the process is finished
public static let didUpdate = Notification.Name("SpaceCreationPostProcessViewModelDidUpdate")
@@ -1,6 +1,6 @@
// File created from SimpleUserProfileExample
// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationPostProcess SpaceCreationPostProcess
//
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
@@ -19,7 +19,6 @@
import Foundation
protocol SpaceCreationPostProcessViewModelProtocol {
var completion: ((SpaceCreationPostProcessViewModelResult) -> Void)? { get set }
static func makeSpaceCreationPostProcessViewModel(spaceCreationPostProcessService: SpaceCreationPostProcessServiceProtocol) -> SpaceCreationPostProcessViewModelProtocol
var context: SpaceCreationPostProcessViewModelType.Context { get }