From e95045dab4619a0b7388737c01803cb5bc5e7db8 Mon Sep 17 00:00:00 2001 From: QuentinArguillere Date: Sat, 31 Aug 2024 09:01:39 +0200 Subject: [PATCH] Fix most warnings (remaining: @sendables and deprecated calls) --- Linphone.xcodeproj/project.pbxproj | 18 ++++---- Linphone/Contacts/ContactsManager.swift | 42 +++++++++-------- Linphone/Core/CoreContext.swift | 23 +++++----- .../TelecomManager/ProviderDelegate.swift | 28 ++++++------ Linphone/TelecomManager/TelecomManager.swift | 27 ++++++----- .../Fragments/ProfileModeFragment.swift | 2 +- .../RegisterCodeConfirmationFragment.swift | 2 + .../Fragments/RegisterFragment.swift | 4 ++ .../Viewmodel/RegisterViewModel.swift | 27 +++++------ Linphone/UI/Call/CallView.swift | 45 +++++++++---------- .../Fragments/AudioRouteBottomSheet.swift | 6 ++- .../UI/Call/Fragments/CallsListFragment.swift | 6 ++- .../Fragments/ParticipantsListFragment.swift | 4 +- Linphone/UI/Call/Fragments/ZRTPPopup.swift | 1 + .../UI/Call/MeetingWaitingRoomFragment.swift | 35 ++++++++------- .../Call/Model/CallMediaEncryptionModel.swift | 6 +-- Linphone/UI/Call/Model/CallStatsModel.swift | 8 ++-- .../UI/Call/ViewModel/CallViewModel.swift | 42 +++++++++-------- .../MeetingWaitingRoomViewModel.swift | 8 ++-- .../ContactInnerActionsFragment.swift | 7 +-- .../Fragments/ContactsInnerFragment.swift | 3 +- .../Fragments/ContactsListFragment.swift | 3 +- .../Fragments/EditContactFragment.swift | 5 ++- .../Contacts/ViewModel/ContactViewModel.swift | 8 ++-- Linphone/UI/Main/ContentView.swift | 5 +-- .../Fragments/ChatBubbleView.swift | 31 ++++++++----- .../Fragments/ConversationFragment.swift | 15 ++++--- .../Fragments/ConversationsFragment.swift | 6 ++- .../Fragments/StartConversationFragment.swift | 6 ++- .../Main/Conversations/Fragments/UIList.swift | 28 ++++++------ .../Model/ConversationModel.swift | 6 ++- .../UI/Main/Conversations/Model/Message.swift | 10 +++-- .../ViewModel/ConversationViewModel.swift | 42 +++++++++-------- .../ConversationsListViewModel.swift | 10 +++-- .../StartConversationViewModel.swift | 9 ++-- Linphone/UI/Main/Fragments/ToastView.swift | 4 +- .../History/Fragments/DialerBottomSheet.swift | 10 ++++- .../Fragments/HistoryContactFragment.swift | 2 - .../History/Fragments/StartCallFragment.swift | 6 ++- .../UI/Main/History/Model/HistoryModel.swift | 4 +- .../ViewModel/StartCallViewModel.swift | 13 ++---- .../Fragments/AddParticipantsFragment.swift | 4 +- .../Meetings/Fragments/MeetingFragment.swift | 6 +-- .../Fragments/MeetingsListFragment.swift | 4 -- .../Fragments/ScheduleMeetingFragment.swift | 11 ++--- .../Meetings/ViewModel/MeetingViewModel.swift | 17 +++---- .../ViewModel/MeetingsListViewModel.swift | 6 ++- .../Utils/Extensions/ConfigExtension.swift | 1 - Linphone/Utils/Extensions/IntExtension.swift | 2 + Linphone/Utils/Extensions/URLExtension.swift | 6 +-- Linphone/Utils/FileUtils.swift | 9 ++-- Linphone/Utils/LinphoneUtils.swift | 3 +- Linphone/Utils/MagicSearchSingleton.swift | 2 +- Linphone/Utils/PhotoPicker.swift | 11 ++++- .../NotificationService.swift | 6 +-- 55 files changed, 356 insertions(+), 299 deletions(-) diff --git a/Linphone.xcodeproj/project.pbxproj b/Linphone.xcodeproj/project.pbxproj index b0c478b0d..d2e8b6f10 100644 --- a/Linphone.xcodeproj/project.pbxproj +++ b/Linphone.xcodeproj/project.pbxproj @@ -7,7 +7,7 @@ objects = { /* Begin PBXBuildFile section */ - 4ED1F0A881A9ACB5977A8987 /* (null) in Frameworks */ = {isa = PBXBuildFile; }; + 4ED1F0A881A9ACB5977A8987 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; }; 660AAF7F2B839272004C0FA6 /* msgNotificationService.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 660AAF7B2B839271004C0FA6 /* msgNotificationService.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 660D8A712B517D260092694D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 660D8A702B517D260092694D /* GoogleService-Info.plist */; }; 6613A0AE2BAEB7DF008923A4 /* MeetingFragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6613A0AD2BAEB7DF008923A4 /* MeetingFragment.swift */; }; @@ -364,7 +364,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4ED1F0A881A9ACB5977A8987 /* (null) in Frameworks */, + 4ED1F0A881A9ACB5977A8987 /* BuildFile in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -986,6 +986,7 @@ /* Begin PBXShellScriptBuildPhase section */ 6677CE082C73D71A0020FD0E /* Crashlytics */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -1009,6 +1010,7 @@ }; 66BF2D4B2B558A3100A5F2E3 /* Crashlytics */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -1226,7 +1228,7 @@ CODE_SIGN_ENTITLEMENTS = msgNotificationService/msgNotificationService.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 38; DEVELOPMENT_TEAM = Z2V957B3D6; ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -1245,7 +1247,7 @@ "@executable_path/../../Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 6.0.0; OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.msgNotificationService; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1268,7 +1270,7 @@ CODE_SIGN_ENTITLEMENTS = msgNotificationService/msgNotificationService.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 38; DEVELOPMENT_TEAM = Z2V957B3D6; ENABLE_USER_SCRIPT_SANDBOXING = NO; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -1284,7 +1286,7 @@ "@executable_path/../../Frameworks", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 6.0.0; OTHER_SWIFT_FLAGS = "$(inherited)"; PRODUCT_BUNDLE_IDENTIFIER = org.linphone.phone.msgNotificationService; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1422,7 +1424,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_ENTITLEMENTS = Linphone/Linphone.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 36; + CURRENT_PROJECT_VERSION = 38; DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_ASSET_PATHS = "\"Linphone/Preview Content\""; @@ -1478,7 +1480,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_ENTITLEMENTS = Linphone/Linphone.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 36; + CURRENT_PROJECT_VERSION = 38; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_ASSET_PATHS = "\"Linphone/Preview Content\""; DEVELOPMENT_TEAM = Z2V957B3D6; diff --git a/Linphone/Contacts/ContactsManager.swift b/Linphone/Contacts/ContactsManager.swift index 62090bfd5..c635f5290 100644 --- a/Linphone/Contacts/ContactsManager.swift +++ b/Linphone/Contacts/ContactsManager.swift @@ -17,6 +17,10 @@ * along with this program. If not, see . */ +// swiftlint:disable line_length +// swiftlint:disable large_tuple +// swiftlint:disable function_parameter_count + import linphonesw import Contacts import SwiftUI @@ -135,26 +139,22 @@ final class ContactsManager: ObservableObject { var addedAvatarListModel: [ContactAvatarModel] = [] cbValue.linphoneFriend.phoneNumbers.forEach { phone in - do { - let address = core.interpretUrl(url: phone, applyInternationalPrefix: true) + let address = core.interpretUrl(url: phone, applyInternationalPrefix: true) + + let presence = cbValue.linphoneFriend.getPresenceModelForUriOrTel(uriOrTel: address?.asStringUriOnly() ?? "") + if address != nil && presence != nil { + cbValue.linphoneFriend.edit() + cbValue.linphoneFriend.addAddress(address: address!) + cbValue.linphoneFriend.done() - let presence = cbValue.linphoneFriend.getPresenceModelForUriOrTel(uriOrTel: address?.asStringUriOnly() ?? "") - if address != nil && presence != nil { - cbValue.linphoneFriend.edit() - cbValue.linphoneFriend.addAddress(address: address!) - cbValue.linphoneFriend.done() - - addedAvatarListModel.append( - ContactAvatarModel( - friend: cbValue.linphoneFriend, - name: cbValue.linphoneFriend.name ?? "", - address: cbValue.linphoneFriend.address?.clone()?.asStringUriOnly() ?? "", - withPresence: true - ) + addedAvatarListModel.append( + ContactAvatarModel( + friend: cbValue.linphoneFriend, + name: cbValue.linphoneFriend.name ?? "", + address: cbValue.linphoneFriend.address?.clone()?.asStringUriOnly() ?? "", + withPresence: true ) - } - } catch let error { - print("\(#function) - Failed to create friend phone number for \(phone):", error) + ) } } @@ -361,7 +361,7 @@ final class ContactsManager: ObservableObject { } func getFriendWithAddressInCoreQueue(address: Address?, completion: @escaping (Friend?) -> Void) { - self.coreContext.doOnCoreQueue { core in + self.coreContext.doOnCoreQueue { _ in completion(self.getFriendWithAddress(address: address)) } } @@ -384,3 +384,7 @@ struct Contact: Identifiable { var phoneNumbers: [PhoneNumber] = [] var imageData: String } + +// swiftlint:enable line_length +// swiftlint:enable large_tuple +// swiftlint:enable function_parameter_count diff --git a/Linphone/Core/CoreContext.swift b/Linphone/Core/CoreContext.swift index 231fae30e..9437069ef 100644 --- a/Linphone/Core/CoreContext.swift +++ b/Linphone/Core/CoreContext.swift @@ -19,6 +19,8 @@ // swiftlint:disable large_tuple // swiftlint:disable line_length +// swiftlint:disable cyclomatic_complexity +// swiftlint:disable identifier_name import linphonesw import linphone // needed for unwrapped function linphone_core_set_push_and_app_delegate_dispatch_queue @@ -46,14 +48,14 @@ final class CoreContext: ObservableObject { private var mIterateSuscription: AnyCancellable? private var mCoreSuscriptions = Set() - var bearerAuthInfoPendingPasswordUpdate: AuthInfo? = nil + var bearerAuthInfoPendingPasswordUpdate: AuthInfo? let monitor = NWPathMonitor() private var mCorePushIncomingDelegate: CoreDelegate! - private var actionsToPerformOnCoreQueueWhenCoreIsStarted : [((Core)->Void)] = [] - private var callStateCallBacks : [((Call.State)->Void)] = [] - private var configuringStateCallBacks : [((ConfiguringState)->Void)] = [] + private var actionsToPerformOnCoreQueueWhenCoreIsStarted: [((Core) -> Void)] = [] + private var callStateCallBacks: [((Call.State) -> Void)] = [] + private var configuringStateCallBacks: [((ConfiguringState) -> Void)] = [] private init() { do { @@ -128,7 +130,6 @@ final class CoreContext: ObservableObject { self.mCore.maxSizeForAutoDownloadIncomingFiles = 0 self.mCore.config!.setBool(section: "sip", key: "auto_answer_replacing_calls", value: false) self.mCore.config!.setBool(section: "sip", key: "deliver_imdn", value: false) - self.mCoreSuscriptions.insert(self.mCore.publisher?.onGlobalStateChanged?.postOnCoreQueue { (cbVal: (core: Core, state: GlobalState, message: String)) in if cbVal.state == GlobalState.On { #if DEBUG @@ -236,7 +237,7 @@ final class CoreContext: ObservableObject { TelecomManager.shared.onCallStateChanged(core: cbVal.core, call: cbVal.call, state: cbVal.state, message: cbVal.message) }) - self.mCorePushIncomingDelegate = CoreDelegateStub(onCallStateChanged: { (core: Core, call: Call, cstate: Call.State, message: String) in + self.mCorePushIncomingDelegate = CoreDelegateStub(onCallStateChanged: { (_, call: Call, cstate: Call.State, _) in if cstate == .PushIncomingReceived { let callLog = call.callLog let callId = callLog?.callId ?? "" @@ -260,9 +261,9 @@ final class CoreContext: ObservableObject { } }) - self.mCoreSuscriptions.insert(self.mCore.publisher?.onTransferStateChanged?.postOnCoreQueue { (cbValue: (_: Core, transfered: Call, callState: Call.State)) in + self.mCoreSuscriptions.insert(self.mCore.publisher?.onTransferStateChanged?.postOnCoreQueue { (cbValue: (_: Core, transferred: Call, callState: Call.State)) in Log.info( - "[CoreContext] Transferred call \(cbValue.transfered.remoteAddress!.asStringUriOnly()) state changed \(cbValue.callState)" + "[CoreContext] Transferred call \(cbValue.transferred.remoteAddress!.asStringUriOnly()) state changed \(cbValue.callState)" ) DispatchQueue.main.async { @@ -362,8 +363,8 @@ final class CoreContext: ObservableObject { fatalError("Crashing app to test crashlytics") } - func performActionOnCoreQueueWhenCoreIsStarted(action: @escaping (_ core: Core)->Void ) { - if (coreIsStarted) { + func performActionOnCoreQueueWhenCoreIsStarted(action: @escaping (_ core: Core) -> Void ) { + if coreIsStarted { CoreContext.shared.doOnCoreQueue { core in action(core) } @@ -387,3 +388,5 @@ final class CoreContext: ObservableObject { // swiftlint:enable large_tuple // swiftlint:enable line_length +// swiftlint:enable cyclomatic_complexity +// swiftlint:enable identifier_name diff --git a/Linphone/TelecomManager/ProviderDelegate.swift b/Linphone/TelecomManager/ProviderDelegate.swift index fbc097cdd..3c3e59499 100644 --- a/Linphone/TelecomManager/ProviderDelegate.swift +++ b/Linphone/TelecomManager/ProviderDelegate.swift @@ -70,21 +70,19 @@ class ProviderDelegate: NSObject { } static var providerConfiguration: CXProviderConfiguration { - get { - let providerConfiguration = CXProviderConfiguration() - // providerConfiguration.ringtoneSound = ConfigManager.instance().lpConfigBoolForKey(key: "use_device_ringtone") ? nil : "notes_of_the_optimistic.caf" - providerConfiguration.supportsVideo = true - providerConfiguration.iconTemplateImageData = UIImage(named: "linphone")?.pngData() - providerConfiguration.supportedHandleTypes = [.generic, .phoneNumber, .emailAddress] - - providerConfiguration.maximumCallsPerCallGroup = 10 - providerConfiguration.maximumCallGroups = 10 - - // not show app's calls in tel's history - // providerConfiguration.includesCallsInRecents = YES; - - return providerConfiguration - } + let providerConfiguration = CXProviderConfiguration() + // providerConfiguration.ringtoneSound = ConfigManager.instance().lpConfigBoolForKey(key: "use_device_ringtone") ? nil : "notes_of_the_optimistic.caf" + providerConfiguration.supportsVideo = true + providerConfiguration.iconTemplateImageData = UIImage(named: "linphone")?.pngData() + providerConfiguration.supportedHandleTypes = [.generic, .phoneNumber, .emailAddress] + + providerConfiguration.maximumCallsPerCallGroup = 10 + providerConfiguration.maximumCallGroups = 10 + + // not show app's calls in tel's history + // providerConfiguration.includesCallsInRecents = YES; + + return providerConfiguration } func reportIncomingCall(call: Call?, uuid: UUID, handle: String, hasVideo: Bool, displayName: String) { diff --git a/Linphone/TelecomManager/TelecomManager.swift b/Linphone/TelecomManager/TelecomManager.swift index 7ddcf79fe..c43dc3600 100644 --- a/Linphone/TelecomManager/TelecomManager.swift +++ b/Linphone/TelecomManager/TelecomManager.swift @@ -17,6 +17,8 @@ * along with this program. If not, see . */ // swiftlint:disable cyclomatic_complexity +// swiftlint:disable line_length +// swiftlint:disable type_body_length import Foundation import linphonesw @@ -33,7 +35,6 @@ class CallAppData: NSObject { } -// swiftlint:disable type_body_length class TelecomManager: ObservableObject { static let shared = TelecomManager() static var uuidReplacedCall: String? @@ -127,7 +128,7 @@ class TelecomManager: ObservableObject { func setHeldOtherCalls(core: Core, exceptCallid: String) { for call in core.calls { - if (call.callLog?.callId != exceptCallid && call.state != .Paused && call.state != .Pausing && call.state != .PausedByRemote) { + if call.callLog?.callId != exceptCallid && call.state != .Paused && call.state != .Pausing && call.state != .PausedByRemote { setHeld(call: call, hold: true) } else if call.callLog?.callId == exceptCallid && (call.state == .Paused || call.state == .Pausing || call.state == .PausedByRemote) { setHeld(call: call, hold: true) @@ -138,7 +139,7 @@ class TelecomManager: ObservableObject { func setHeld(call: Call, hold: Bool) { #if targetEnvironment(simulator) - if (hold) { + if hold { try?call.pause() } else { try?call.resume() @@ -146,7 +147,7 @@ class TelecomManager: ObservableObject { #else let callid = call.callLog?.callId ?? "" let uuid = providerDelegate.uuids["\(callid)"] - if (uuid == nil) { + if uuid == nil { Log.error("Can not find correspondant call to set held.") return } @@ -352,9 +353,8 @@ class TelecomManager: ObservableObject { providerDelegate.reportIncomingCall(call: call, uuid: uuid, handle: handle, hasVideo: hasVideo, displayName: displayName) } - func incomingDisplayName(call: Call, completion: @escaping (String) -> Void) { - CoreContext.shared.doOnCoreQueue { core in + CoreContext.shared.doOnCoreQueue { _ in ContactsManager.shared.getFriendWithAddressInCoreQueue(address: call.remoteAddress!) { friendResult in if call.remoteAddress != nil { if friendResult != nil && friendResult!.address != nil && friendResult!.address!.displayName != nil { @@ -377,8 +377,9 @@ class TelecomManager: ObservableObject { static func callKitEnabled(core: Core) -> Bool { #if !targetEnvironment(simulator) return core.callkitEnabled -#endif +#else return false +#endif } func requestTransaction(_ transaction: CXTransaction, action: String) { @@ -417,7 +418,7 @@ class TelecomManager: ObservableObject { if cstate == .PushIncomingReceived { Log.info("PushIncomingReceived on TelecomManager -- Ignore, should be processed by a the dedicated CoreDelegate for callkit display") } else { - let oldRemoteConfVideo = self.remoteConfVideo + // let oldRemoteConfVideo = self.remoteConfVideo if call.conference != nil { if call.conference!.activeSpeakerParticipantDevice != nil { @@ -595,9 +596,9 @@ class TelecomManager: ObservableObject { } */ let uuid = self.providerDelegate.uuids["\(callId)"] - //if call.replacedCall == nil { + // if call.replacedCall == nil { TelecomManager.uuidReplacedCall = callId - //} + // } if uuid != nil { // Tha app is now registered, updated the call already existed. @@ -692,7 +693,7 @@ class TelecomManager: ObservableObject { // bluetoothEnabled = false } - //if core.callsNb == 0 { + // if core.callsNb == 0 { self.incomingDisplayName(call: call) { displayNameResult in var displayName = "Unknown" if call.dir == .Incoming { @@ -744,7 +745,7 @@ class TelecomManager: ObservableObject { } } } - //} + // } if TelecomManager.callKitEnabled(core: core) { var uuid = providerDelegate.uuids["\(callId)"] @@ -795,5 +796,7 @@ class TelecomManager: ObservableObject { ]) } } + // swiftlint:enable type_body_length // swiftlint:enable cyclomatic_complexity +// swiftlint:enable line_length diff --git a/Linphone/UI/Assistant/Fragments/ProfileModeFragment.swift b/Linphone/UI/Assistant/Fragments/ProfileModeFragment.swift index 9c11671f5..ff100b8cd 100644 --- a/Linphone/UI/Assistant/Fragments/ProfileModeFragment.swift +++ b/Linphone/UI/Assistant/Fragments/ProfileModeFragment.swift @@ -141,7 +141,7 @@ struct ProfileModeFragment: View { } .onAppear { UserDefaults.standard.set(false, forKey: "display_profile_mode") - //Skip this view + // Skip this view sharedMainViewModel.changeHideProfileMode() } diff --git a/Linphone/UI/Assistant/Fragments/RegisterCodeConfirmationFragment.swift b/Linphone/UI/Assistant/Fragments/RegisterCodeConfirmationFragment.swift index ff128d410..374c362c6 100644 --- a/Linphone/UI/Assistant/Fragments/RegisterCodeConfirmationFragment.swift +++ b/Linphone/UI/Assistant/Fragments/RegisterCodeConfirmationFragment.swift @@ -19,6 +19,7 @@ import SwiftUI +// swiftlint:disable line_length struct RegisterCodeConfirmationFragment: View { @ObservedObject private var sharedMainViewModel = SharedMainViewModel.shared @ObservedObject var registerViewModel: RegisterViewModel @@ -196,3 +197,4 @@ struct RegisterCodeConfirmationFragment: View { #Preview { RegisterCodeConfirmationFragment(registerViewModel: RegisterViewModel()) } +// swiftlint:enable line_length diff --git a/Linphone/UI/Assistant/Fragments/RegisterFragment.swift b/Linphone/UI/Assistant/Fragments/RegisterFragment.swift index 97f4f3a8b..f5d1e5f74 100644 --- a/Linphone/UI/Assistant/Fragments/RegisterFragment.swift +++ b/Linphone/UI/Assistant/Fragments/RegisterFragment.swift @@ -17,6 +17,8 @@ * along with this program. If not, see . */ +// swiftlint:disable line_length + import SwiftUI struct RegisterFragment: View { @@ -343,3 +345,5 @@ struct RegisterFragment: View { #Preview { RegisterFragment(registerViewModel: RegisterViewModel()) } + +// swiftlint:enable line_length diff --git a/Linphone/UI/Assistant/Viewmodel/RegisterViewModel.swift b/Linphone/UI/Assistant/Viewmodel/RegisterViewModel.swift index 5ed6af21d..5e6eca950 100644 --- a/Linphone/UI/Assistant/Viewmodel/RegisterViewModel.swift +++ b/Linphone/UI/Assistant/Viewmodel/RegisterViewModel.swift @@ -21,6 +21,8 @@ import Foundation import linphonesw import Combine +// swiftlint:disable line_length +// swiftlint:disable type_body_length class RegisterViewModel: ObservableObject { static let TAG = "[RegisterViewModel]" @@ -119,8 +121,7 @@ class RegisterViewModel: ObservableObject { } func addDelegate(request: AccountManagerServicesRequest) { coreContext.doOnCoreQueue { core in - self.accountManagerServicesSuscriptions.insert(request.publisher?.onRequestSuccessful?.postOnCoreQueue { - (request: AccountManagerServicesRequest, data: String) in + self.accountManagerServicesSuscriptions.insert(request.publisher?.onRequestSuccessful?.postOnCoreQueue { (request: AccountManagerServicesRequest, data: String) in Log.info("\(RegisterViewModel.TAG) Request \(request) was successful, data is \(data)") switch request.type { case .CreateAccountUsingToken: @@ -142,9 +143,7 @@ class RegisterViewModel: ObservableObject { case .LinkPhoneNumberUsingCode: let account = self.accountCreated if account != nil { - Log.info( - "\(RegisterViewModel.TAG) Account \(account?.params?.identityAddress?.asStringUriOnly()) has been created & activated, setting it as default" - ) + Log.info( "\(RegisterViewModel.TAG) Account \(account?.params?.identityAddress?.asStringUriOnly() ?? "NIL") has been created & activated, setting it as default") if let assistantLinphone = Bundle.main.path(forResource: "assistant_linphone_default_values", ofType: nil) { core.loadConfigFromXml(xmlUri: assistantLinphone) @@ -166,8 +165,7 @@ class RegisterViewModel: ObservableObject { } }) - self.accountManagerServicesSuscriptions.insert(request.publisher?.onRequestError?.postOnCoreQueue { - (request: AccountManagerServicesRequest, statusCode: Int, errorMessage: String, parameterErrors: Dictionary?) in + self.accountManagerServicesSuscriptions.insert(request.publisher?.onRequestError?.postOnCoreQueue { (request: AccountManagerServicesRequest, statusCode: Int, errorMessage: String, parameterErrors: Dictionary?) in Log.error( "\(RegisterViewModel.TAG) Request \(request) returned an error with status code \(statusCode) and message \(errorMessage)" ) @@ -371,9 +369,7 @@ class RegisterViewModel: ObservableObject { let identity = account!.params!.identityAddress if identity != nil { - Log.info( - "\(RegisterViewModel.TAG) Account \(identity!.asStringUriOnly()) should now be created, asking account manager to send a confirmation code by SMS to \(phoneNumberValue ?? "")" - ) + Log.info("\(RegisterViewModel.TAG) Account \(identity!.asStringUriOnly()) should now be created, asking account manager to send a confirmation code by SMS to \(phoneNumberValue ?? "")") do { let request = try accountManagerServices?.createSendPhoneNumberLinkingCodeBySmsRequest( sipIdentity: identity!, @@ -404,9 +400,7 @@ class RegisterViewModel: ObservableObject { return } - Log.info( - "\(RegisterViewModel.TAG) Account creation token is \(token ?? "Error token"), creating account with username \(username) and algorithm \(HASHALGORITHM)" - ) + Log.info( "\(RegisterViewModel.TAG) Account creation token is \(token ?? "Error token"), creating account with username \(username) and algorithm \(HASHALGORITHM)") do { let request = try accountManagerServices!.createNewAccountUsingTokenRequest( @@ -441,9 +435,7 @@ class RegisterViewModel: ObservableObject { let number = self.phoneNumber let formattedPhoneNumber = dialPlan?.formatPhoneNumber(phoneNumber: number, escapePlus: false) - Log.info( - "\(RegisterViewModel.TAG) Formatted phone number \(number) using dial plan \(dialPlan?.country ?? "Error country") is \(formattedPhoneNumber ?? "Error phone number")" - ) + Log.info( "\(RegisterViewModel.TAG) Formatted phone number \(number) using dial plan \(dialPlan?.country ?? "Error country") is \(formattedPhoneNumber ?? "Error phone number")") self.normalizedPhoneNumber = formattedPhoneNumber } else { @@ -481,3 +473,6 @@ class RegisterViewModel: ObservableObject { } } } + +// swiftlint:enable line_length +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Call/CallView.swift b/Linphone/UI/Call/CallView.swift index b771b28ed..d44ffa041 100644 --- a/Linphone/UI/Call/CallView.swift +++ b/Linphone/UI/Call/CallView.swift @@ -23,6 +23,7 @@ import AVFAudio import linphonesw import UniformTypeIdentifiers +// swiftlint:disable function_body_length // swiftlint:disable type_body_length // swiftlint:disable line_length // swiftlint:disable file_length @@ -73,28 +74,28 @@ struct CallView: View { innerView(geometry: geo) .sheet(isPresented: $mediaEncryptedSheet, onDismiss: { mediaEncryptedSheet = false - }) { + }, content: { MediaEncryptedSheetBottomSheet(callViewModel: callViewModel, mediaEncryptedSheet: $mediaEncryptedSheet) .presentationDetents([.medium]) - } + }) .sheet(isPresented: $callStatisticsSheet, onDismiss: { callStatisticsSheet = false - }) { + }, content: { CallStatisticsSheetBottomSheet(callViewModel: callViewModel, callStatisticsSheet: $callStatisticsSheet) .presentationDetents(!callViewModel.callStatsModel.isVideoEnabled ? [.fraction(0.3)] : [.medium]) - } + }) .sheet(isPresented: $audioRouteSheet, onDismiss: { audioRouteSheet = false - }) { + }, content: { AudioRouteBottomSheet(callViewModel: callViewModel, optionsAudioRoute: $optionsAudioRoute) .presentationDetents([.fraction(0.3)]) - } + }) .sheet(isPresented: $changeLayoutSheet, onDismiss: { changeLayoutSheet = false - }) { + }, content: { ChangeLayoutBottomSheet(callViewModel: callViewModel, changeLayoutSheet: $changeLayoutSheet, optionsChangeLayout: $optionsChangeLayout) .presentationDetents([.fraction(0.3)]) - } + }) .sheet(isPresented: $showingDialer) { DialerBottomSheet( startCallViewModel: StartCallViewModel(), @@ -110,28 +111,28 @@ struct CallView: View { innerView(geometry: geo) .sheet(isPresented: $mediaEncryptedSheet, onDismiss: { mediaEncryptedSheet = false - }) { + }, content: { MediaEncryptedSheetBottomSheet(callViewModel: callViewModel, mediaEncryptedSheet: $mediaEncryptedSheet) .presentationDetents([.medium]) - } + }) .sheet(isPresented: $callStatisticsSheet, onDismiss: { callStatisticsSheet = false - }) { + }, content: { CallStatisticsSheetBottomSheet(callViewModel: callViewModel, callStatisticsSheet: $callStatisticsSheet) .presentationDetents(!callViewModel.callStatsModel.isVideoEnabled ? [.fraction(0.3)] : [.medium]) - } + }) .sheet(isPresented: $audioRouteSheet, onDismiss: { audioRouteSheet = false - }) { + }, content: { AudioRouteBottomSheet(callViewModel: callViewModel, optionsAudioRoute: $optionsAudioRoute) .presentationDetents([.fraction(0.3)]) - } + }) .sheet(isPresented: $changeLayoutSheet, onDismiss: { changeLayoutSheet = false - }) { + }, content: { ChangeLayoutBottomSheet(callViewModel: callViewModel, changeLayoutSheet: $changeLayoutSheet, optionsChangeLayout: $optionsChangeLayout) .presentationDetents([.fraction(0.3)]) - } + }) .sheet(isPresented: $showingDialer) { DialerBottomSheet( startCallViewModel: StartCallViewModel(), @@ -237,7 +238,6 @@ struct CallView: View { } @ViewBuilder - // swiftlint:disable:next cyclomatic_complexity func innerView(geometry: GeometryProxy) -> some View { ZStack { VStack { @@ -432,8 +432,7 @@ struct CallView: View { .frame(height: geometry.size.height) .frame(maxWidth: .infinity) .background(Color.gray900) - - + if !fullscreenVideo || (fullscreenVideo && telecomManager.isPausedByRemote) { if telecomManager.callStarted { let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene @@ -451,7 +450,7 @@ struct CallView: View { currentOffset = (minBottomSheetHeight * geometry.size.height > 80 ? minBottomSheetHeight * geometry.size.height : 78) pointingUp = -(((currentOffset - (minBottomSheetHeight * geometry.size.height > 80 ? minBottomSheetHeight * geometry.size.height : 78)) / ((maxBottomSheetHeight * geometry.size.height) - (minBottomSheetHeight * geometry.size.height > 80 ? minBottomSheetHeight * geometry.size.height : 78))) - 0.5) * 2 } - .onChange(of: optionsChangeLayout) { optionsChangeLayoutValue in + .onChange(of: optionsChangeLayout) { _ in currentOffset = (minBottomSheetHeight * geometry.size.height > 80 ? minBottomSheetHeight * geometry.size.height : 78) pointingUp = -(((currentOffset - (minBottomSheetHeight * geometry.size.height > 80 ? minBottomSheetHeight * geometry.size.height : 78)) / ((maxBottomSheetHeight * geometry.size.height) - (minBottomSheetHeight * geometry.size.height > 80 ? minBottomSheetHeight * geometry.size.height : 78))) - 0.5) * 2 } @@ -461,7 +460,6 @@ struct CallView: View { } } - // swiftlint:disable function_body_length // swiftlint:disable:next cyclomatic_complexity func simpleCallView(geometry: GeometryProxy) -> some View { ZStack { @@ -748,7 +746,6 @@ struct CallView: View { callViewModel.orientationUpdate(orientation: orientation) } } - // swiftlint:enable function_body_length // swiftlint:disable:next cyclomatic_complexity func activeSpeakerMode(geometry: GeometryProxy) -> some View { @@ -1821,7 +1818,7 @@ struct CallView: View { } } - // swiftlint:disable function_body_length + // swiftlint:disable:next cyclomatic_complexity func bottomSheetContent(geo: GeometryProxy) -> some View { GeometryReader { _ in VStack(spacing: 0) { @@ -2689,7 +2686,6 @@ struct CallView: View { .frame(maxHeight: .infinity, alignment: .top) } } - // swiftlint:enable function_body_length func getAudioRouteImage() { if !AVAudioSession.sharedInstance().currentRoute.outputs.filter({ $0.portType.rawValue == "Speaker" }).isEmpty { @@ -2810,4 +2806,5 @@ struct PressedButtonStyle: ButtonStyle { } // swiftlint:enable type_body_length // swiftlint:enable line_length +// swiftlint:enable function_body_length // swiftlint:enable file_length diff --git a/Linphone/UI/Call/Fragments/AudioRouteBottomSheet.swift b/Linphone/UI/Call/Fragments/AudioRouteBottomSheet.swift index 4b85ee333..73f292ecb 100644 --- a/Linphone/UI/Call/Fragments/AudioRouteBottomSheet.swift +++ b/Linphone/UI/Call/Fragments/AudioRouteBottomSheet.swift @@ -38,7 +38,8 @@ struct AudioRouteBottomSheet: View { do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none) if callViewModel.isHeadPhoneAvailable() { - try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.filter({ $0.portType.rawValue.contains("Receiver") }).first) + try AVAudioSession.sharedInstance().setPreferredInput( + AVAudioSession.sharedInstance().availableInputs?.filter({ $0.portType.rawValue.contains("Receiver") }).first) } else { try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.first) } @@ -106,7 +107,8 @@ struct AudioRouteBottomSheet: View { do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none) - try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.filter({ $0.portType.rawValue.contains("Bluetooth") }).first) + try AVAudioSession.sharedInstance().setPreferredInput( + AVAudioSession.sharedInstance().availableInputs?.filter({ $0.portType.rawValue.contains("Bluetooth") }).first) } catch _ { } diff --git a/Linphone/UI/Call/Fragments/CallsListFragment.swift b/Linphone/UI/Call/Fragments/CallsListFragment.swift index 4c14a816f..c99b6496a 100644 --- a/Linphone/UI/Call/Fragments/CallsListFragment.swift +++ b/Linphone/UI/Call/Fragments/CallsListFragment.swift @@ -20,6 +20,7 @@ import SwiftUI import linphonesw +// swiftlint:disable type_body_length struct CallsListFragment: View { @ObservedObject private var coreContext = CoreContext.shared @@ -88,10 +89,10 @@ struct CallsListFragment: View { if #available(iOS 16.0, *), idiom != .pad { callsList .sheet(isPresented: $isShowCallsListBottomSheet, onDismiss: { - }) { + }, content: { innerBottomSheet() .presentationDetents([.fraction(0.2)]) - } + }) } else { callsList .halfSheet(showSheet: $isShowCallsListBottomSheet) { @@ -382,3 +383,4 @@ struct CallsListFragment: View { #Preview { CallsListFragment(callViewModel: CallViewModel(), isShowCallsListFragment: .constant(true)) } +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Call/Fragments/ParticipantsListFragment.swift b/Linphone/UI/Call/Fragments/ParticipantsListFragment.swift index e80c723e6..22c3c1ff9 100644 --- a/Linphone/UI/Call/Fragments/ParticipantsListFragment.swift +++ b/Linphone/UI/Call/Fragments/ParticipantsListFragment.swift @@ -265,5 +265,7 @@ struct ParticipantsListFragment: View { } #Preview { - ParticipantsListFragment(callViewModel: CallViewModel(), addParticipantsViewModel: AddParticipantsViewModel(), isShowParticipantsListFragment: .constant(true)) + ParticipantsListFragment(callViewModel: CallViewModel(), + addParticipantsViewModel: AddParticipantsViewModel(), + isShowParticipantsListFragment: .constant(true)) } diff --git a/Linphone/UI/Call/Fragments/ZRTPPopup.swift b/Linphone/UI/Call/Fragments/ZRTPPopup.swift index 3c27f8df4..18f6e6ec6 100644 --- a/Linphone/UI/Call/Fragments/ZRTPPopup.swift +++ b/Linphone/UI/Call/Fragments/ZRTPPopup.swift @@ -20,6 +20,7 @@ import SwiftUI import Foundation +// swiftlint:disable:next type_body_length struct ZRTPPopup: View { @ObservedObject private var telecomManager = TelecomManager.shared diff --git a/Linphone/UI/Call/MeetingWaitingRoomFragment.swift b/Linphone/UI/Call/MeetingWaitingRoomFragment.swift index 33e93806c..1c1be011e 100644 --- a/Linphone/UI/Call/MeetingWaitingRoomFragment.swift +++ b/Linphone/UI/Call/MeetingWaitingRoomFragment.swift @@ -21,6 +21,9 @@ import SwiftUI import linphonesw import AVFAudio +// swiftlint:disable type_body_length +// swiftlint:disable cyclomatic_complexity + struct MeetingWaitingRoomFragment: View { @ObservedObject private var coreContext = CoreContext.shared @@ -44,10 +47,9 @@ struct MeetingWaitingRoomFragment: View { innerView(geometry: geometry) .sheet(isPresented: $audioRouteSheet, onDismiss: { audioRouteSheet = false - }) { - innerBottomSheet() - .presentationDetents([.fraction(0.3)]) - } + }, content: { + innerBottomSheet().presentationDetents([.fraction(0.3)]) + }) .onAppear { meetingWaitingRoomViewModel.enableAVAudioSession() if AVAudioSession.sharedInstance().currentRoute.outputs.filter({ $0.portType.rawValue.contains("Bluetooth") }).isEmpty { @@ -87,6 +89,7 @@ struct MeetingWaitingRoomFragment: View { } @ViewBuilder + // swiftlint:disable:next function_body_length func innerView(geometry: GeometryProxy) -> some View { VStack { if #available(iOS 16.0, *) { @@ -261,7 +264,8 @@ struct MeetingWaitingRoomFragment: View { Spacer() Button { - !meetingWaitingRoomViewModel.videoDisplayed ? meetingWaitingRoomViewModel.enableVideoPreview() : meetingWaitingRoomViewModel.disableVideoPreview() + !meetingWaitingRoomViewModel.videoDisplayed + ? meetingWaitingRoomViewModel.enableVideoPreview() : meetingWaitingRoomViewModel.disableVideoPreview() } label: { HStack { Image(meetingWaitingRoomViewModel.videoDisplayed ? "video-camera" : "video-camera-slash") @@ -302,13 +306,9 @@ struct MeetingWaitingRoomFragment: View { } else { do { try AVAudioSession.sharedInstance().overrideOutputAudioPort( - AVAudioSession.sharedInstance().currentRoute.outputs.filter( - { $0.portType.rawValue == "Speaker" } - ).isEmpty ? .speaker : .none - ) - } catch _ { - - } + AVAudioSession.sharedInstance().currentRoute + .outputs.filter({ $0.portType.rawValue == "Speaker" }).isEmpty ? .speaker : .none) + } catch _ {} } } label: { HStack { @@ -378,13 +378,11 @@ struct MeetingWaitingRoomFragment: View { .multilineTextAlignment(.center) .padding(.bottom, 10) - Text("Vous allez rejoindre la réunion dans quelques instants...") .default_text_style_white(styleSize: 16) .multilineTextAlignment(.center) .padding(.bottom, 20) - ActivityIndicator(color: Color.orangeMain500) .frame(width: 35, height: 35) @@ -411,7 +409,6 @@ struct MeetingWaitingRoomFragment: View { } .background(Color.gray900) .onRotate { newOrientation in - let oldOrientation = orientation orientation = newOrientation if orientation == .portrait || orientation == .portraitUpsideDown { angleDegree = 0 @@ -453,7 +450,8 @@ struct MeetingWaitingRoomFragment: View { do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none) if meetingWaitingRoomViewModel.isHeadPhoneAvailable() { - try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.filter({ $0.portType.rawValue.contains("Receiver") }).first) + try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance() + .availableInputs?.filter({ $0.portType.rawValue.contains("Receiver") }).first) } else { try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.first) } @@ -521,7 +519,8 @@ struct MeetingWaitingRoomFragment: View { do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none) - try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.filter({ $0.portType.rawValue.contains("Bluetooth") }).first) + try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs? + .filter({ $0.portType.rawValue.contains("Bluetooth") }).first) } catch _ { } @@ -571,3 +570,5 @@ struct MeetingWaitingRoomFragment: View { #Preview { MeetingWaitingRoomFragment(meetingWaitingRoomViewModel: MeetingWaitingRoomViewModel()) } +// swiftlint:enable type_body_length +// swiftlint:enable cyclomatic_complexity diff --git a/Linphone/UI/Call/Model/CallMediaEncryptionModel.swift b/Linphone/UI/Call/Model/CallMediaEncryptionModel.swift index 86174516b..6795591e1 100644 --- a/Linphone/UI/Call/Model/CallMediaEncryptionModel.swift +++ b/Linphone/UI/Call/Model/CallMediaEncryptionModel.swift @@ -33,8 +33,8 @@ class CallMediaEncryptionModel: ObservableObject { @Published var zrtpAuthSas = "" func update(call: Call) { - coreContext.doOnCoreQueue { core in - var stats = call.getStats(type: StreamType.Audio) + coreContext.doOnCoreQueue { _ in + let stats = call.getStats(type: StreamType.Audio) if stats != nil { // ZRTP stats are only available when authentication token isn't null ! if call.currentParams!.mediaEncryption == .ZRTP && call.authenticationToken != nil { @@ -82,7 +82,7 @@ class CallMediaEncryptionModel: ObservableObject { self.zrtpAuthSas = zrtpAuthSasTmp } } else { - let mediaEncryptionTmp = "Media encryption: " + call.currentParams!.mediaEncryption.rawValue.description //call.currentParams.mediaEncryption + let mediaEncryptionTmp = "Media encryption: " + call.currentParams!.mediaEncryption.rawValue.description // call.currentParams.mediaEncryption DispatchQueue.main.async { self.mediaEncryption = mediaEncryptionTmp diff --git a/Linphone/UI/Call/Model/CallStatsModel.swift b/Linphone/UI/Call/Model/CallStatsModel.swift index f5f11dc97..605cb95cb 100644 --- a/Linphone/UI/Call/Model/CallStatsModel.swift +++ b/Linphone/UI/Call/Model/CallStatsModel.swift @@ -33,7 +33,7 @@ class CallStatsModel: ObservableObject { @Published var videoFps = "" func update(call: Call, stats: CallStats) { - coreContext.doOnCoreQueue { core in + coreContext.doOnCoreQueue { _ in if call.params != nil { self.isVideoEnabled = call.params!.videoEnabled && call.currentParams != nil && call.currentParams!.videoDirection != .Inactive switch stats.type { @@ -43,7 +43,8 @@ class CallStatsModel: ObservableObject { let clockRate = (payloadType?.clockRate != nil ? payloadType!.clockRate : 0) / 1000 let codecLabel = "Codec: " + "\(payloadType != nil ? payloadType!.mimeType : "")/\(clockRate) kHz" - if stats.uploadBandwidth.rounded().isNaN || stats.uploadBandwidth.rounded().isInfinite || stats.downloadBandwidth.rounded().isNaN || stats.downloadBandwidth.rounded().isInfinite { + if stats.uploadBandwidth.rounded().isNaN || stats.uploadBandwidth.rounded().isInfinite + || stats.downloadBandwidth.rounded().isNaN || stats.downloadBandwidth.rounded().isInfinite { return } @@ -62,7 +63,8 @@ class CallStatsModel: ObservableObject { let clockRate = (payloadType?.clockRate != nil ? payloadType!.clockRate : 0) / 1000 let codecLabel = "Codec: " + "\(payloadType != nil ? payloadType!.mimeType : "null")/\(clockRate) kHz" - if stats.uploadBandwidth.rounded().isNaN || stats.uploadBandwidth.rounded().isInfinite || stats.downloadBandwidth.rounded().isNaN || stats.downloadBandwidth.rounded().isInfinite { + if stats.uploadBandwidth.rounded().isNaN || stats.uploadBandwidth.rounded().isInfinite + || stats.downloadBandwidth.rounded().isNaN || stats.downloadBandwidth.rounded().isInfinite { return } diff --git a/Linphone/UI/Call/ViewModel/CallViewModel.swift b/Linphone/UI/Call/ViewModel/CallViewModel.swift index 50e57d7a1..d40f26899 100644 --- a/Linphone/UI/Call/ViewModel/CallViewModel.swift +++ b/Linphone/UI/Call/ViewModel/CallViewModel.swift @@ -22,7 +22,10 @@ import linphonesw import AVFAudio import Combine +// swiftlint:disable line_length // swiftlint:disable type_body_length +// swiftlint:disable cyclomatic_complexity +// swiftlint:disable large_tuple class CallViewModel: ObservableObject { static let TAG = "[CallViewModel]" @@ -154,8 +157,6 @@ class CallViewModel: ObservableObject { } } - - DispatchQueue.main.async { self.displayName = displayNameTmp } @@ -230,7 +231,7 @@ class CallViewModel: ObservableObject { } } - self.callSuscriptions.insert(self.currentCall!.publisher?.onEncryptionChanged?.postOnCoreQueue {(cbVal: (call: Call, on: Bool, authenticationToken: String?)) in + self.callSuscriptions.insert(self.currentCall!.publisher?.onEncryptionChanged?.postOnCoreQueue { _ in self.updateEncryption(withToast: false) if self.currentCall != nil { self.callMediaEncryptionModel.update(call: self.currentCall!) @@ -246,7 +247,7 @@ class CallViewModel: ObservableObject { }) self.callSuscriptions.insert( - self.currentCall!.publisher?.onAuthenticationTokenVerified?.postOnCoreQueue {(call: Call, verified: Bool) in + self.currentCall!.publisher?.onAuthenticationTokenVerified?.postOnCoreQueue {(_, verified: Bool) in Log.warn("[CallViewModel][ZRTPPopup] Notified that authentication token is \(verified ? "verified" : "not verified!")") if verified { self.updateEncryption(withToast: true) @@ -293,20 +294,20 @@ class CallViewModel: ObservableObject { } func getConference() { - coreContext.doOnCoreQueue { core in + coreContext.doOnCoreQueue { _ in if self.currentCall?.conference != nil { let conf = self.currentCall!.conference! let displayNameTmp = conf.subject ?? "" - var myParticipantModelTmp: ParticipantModel? = nil + var myParticipantModelTmp: ParticipantModel? if conf.me?.address != nil { myParticipantModelTmp = ParticipantModel(address: conf.me!.address!, isJoining: false, onPause: false, isMuted: false, isAdmin: conf.me!.isAdmin) } else if self.currentCall?.callLog?.localAddress != nil { myParticipantModelTmp = ParticipantModel(address: self.currentCall!.callLog!.localAddress!, isJoining: false, onPause: false, isMuted: false, isAdmin: conf.me!.isAdmin) } - var activeSpeakerParticipantTmp: ParticipantModel? = nil + var activeSpeakerParticipantTmp: ParticipantModel? if conf.activeSpeakerParticipantDevice?.address != nil { activeSpeakerParticipantTmp = ParticipantModel( address: conf.activeSpeakerParticipantDevice!.address!, @@ -385,8 +386,8 @@ class CallViewModel: ObservableObject { func waitingForCreatedStateConference() { self.mConferenceSuscriptions.insert( - self.currentCall?.conference?.publisher?.onStateChanged?.postOnCoreQueue {(cbValue: (conference: Conference, state: Conference.State)) in - if cbValue.state == .Created { + self.currentCall?.conference?.publisher?.onStateChanged?.postOnCoreQueue {(cbValue: (conference: Conference, newState: Conference.State)) in + if cbValue.newState == .Created { DispatchQueue.main.async { self.getConference() } @@ -395,9 +396,8 @@ class CallViewModel: ObservableObject { ) } - // swiftlint:disable:next cyclomatic_complexity func addConferenceCallBacks() { - coreContext.doOnCoreQueue { core in + coreContext.doOnCoreQueue { _ in self.mConferenceSuscriptions.insert( self.currentCall?.conference?.publisher?.onActiveSpeakerParticipantDevice?.postOnCoreQueue {(cbValue: (conference: Conference, participantDevice: ParticipantDevice)) in if cbValue.participantDevice.address != nil { @@ -477,7 +477,7 @@ class CallViewModel: ObservableObject { } }) - var activeSpeakerParticipantTmp: ParticipantModel? = nil + var activeSpeakerParticipantTmp: ParticipantModel? var activeSpeakerNameTmp = "" if self.activeSpeakerParticipant == nil { @@ -755,7 +755,7 @@ class CallViewModel: ObservableObject { func switchCamera() { coreContext.doOnCoreQueue { core in let currentDevice = core.videoDevice - Log.info("[CallViewModel] Current camera device is \(currentDevice)") + Log.info("[CallViewModel] Current camera device is \(currentDevice ?? "nil")") core.videoDevicesList.forEach { camera in if camera != currentDevice && camera != "StaticImage: Static picture" { @@ -945,9 +945,6 @@ class CallViewModel: ObservableObject { } */ - // When Post Quantum is available, ZRTP is Post Quantum - let isZrtpPQTmp = Core.getPostQuantumAvailable - DispatchQueue.main.async { self.isRemoteDeviceTrusted = isRemoteDeviceTrustedTmp self.isMediaEncrypted = true @@ -1072,7 +1069,7 @@ class CallViewModel: ObservableObject { } func toggleAdminParticipant(index: Int) { - coreContext.doOnCoreQueue { core in + coreContext.doOnCoreQueue { _ in self.currentCall?.conference?.participantList.forEach({ participant in if participant.address != nil && self.participantList[index].address.clone() != nil && participant.address!.equal(address2: self.participantList[index].address.clone()!) { self.currentCall?.conference?.setParticipantAdminStatus(participant: participant, isAdmin: !participant.isAdmin) @@ -1082,7 +1079,7 @@ class CallViewModel: ObservableObject { } func removeParticipant(index: Int) { - coreContext.doOnCoreQueue { core in + coreContext.doOnCoreQueue { _ in self.currentCall?.conference?.participantList.forEach({ participant in if participant.address != nil && self.participantList[index].address.clone() != nil && participant.address!.equal(address2: self.participantList[index].address.clone()!) { do { @@ -1309,8 +1306,7 @@ class CallViewModel: ObservableObject { } func chatRoomAddDelegate(core: Core, chatRoom: ChatRoom) { - self.chatRoomSuscriptions.insert(chatRoom.publisher?.onConferenceJoined?.postOnCoreQueue { - (chatRoom: ChatRoom, eventLog: EventLog) in + self.chatRoomSuscriptions.insert(chatRoom.publisher?.onConferenceJoined?.postOnCoreQueue { (chatRoom: ChatRoom, _: EventLog) in let state = chatRoom.state let id = LinphoneUtils.getChatRoomId(room: chatRoom) Log.info("\(StartConversationViewModel.TAG) Conversation \(id) \(chatRoom.subject ?? "") state changed: \(state)") @@ -1345,8 +1341,7 @@ class CallViewModel: ObservableObject { } }) - self.chatRoomSuscriptions.insert(chatRoom.publisher?.onStateChanged?.postOnCoreQueue { - (chatRoom: ChatRoom, state: ChatRoom.State) in + self.chatRoomSuscriptions.insert(chatRoom.publisher?.onStateChanged?.postOnCoreQueue { (chatRoom: ChatRoom, state: ChatRoom.State) in let state = chatRoom.state let id = LinphoneUtils.getChatRoomId(room: chatRoom) if state == ChatRoom.State.CreationFailed { @@ -1362,3 +1357,6 @@ class CallViewModel: ObservableObject { } } // swiftlint:enable type_body_length +// swiftlint:enable line_length +// swiftlint:enable cyclomatic_complexity +// swiftlint:enable large_tuple diff --git a/Linphone/UI/Call/ViewModel/MeetingWaitingRoomViewModel.swift b/Linphone/UI/Call/ViewModel/MeetingWaitingRoomViewModel.swift index ee07b19a0..24d4b1480 100644 --- a/Linphone/UI/Call/ViewModel/MeetingWaitingRoomViewModel.swift +++ b/Linphone/UI/Call/ViewModel/MeetingWaitingRoomViewModel.swift @@ -155,7 +155,7 @@ class MeetingWaitingRoomViewModel: ObservableObject { func switchCamera() { coreContext.doOnCoreQueue { core in let currentDevice = core.videoDevice - Log.info("[CallViewModel] Current camera device is \(currentDevice)") + Log.info("[CallViewModel] Current camera device is \(currentDevice ?? "nil")") core.videoDevicesList.forEach { camera in if camera != currentDevice && camera != "StaticImage: Static picture" { @@ -246,7 +246,8 @@ class MeetingWaitingRoomViewModel: ObservableObject { case "bluetooth": do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none) - try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.filter({ $0.portType.rawValue.contains("Bluetooth") }).first) + try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs? + .filter({ $0.portType.rawValue.contains("Bluetooth") }).first) } catch _ { } @@ -260,7 +261,8 @@ class MeetingWaitingRoomViewModel: ObservableObject { do { try AVAudioSession.sharedInstance().overrideOutputAudioPort(.none) if self.isHeadPhoneAvailable() { - try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.filter({ $0.portType.rawValue.contains("Receiver") }).first) + try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance() + .availableInputs?.filter({ $0.portType.rawValue.contains("Receiver") }).first) } else { try AVAudioSession.sharedInstance().setPreferredInput(AVAudioSession.sharedInstance().availableInputs?.first) } diff --git a/Linphone/UI/Main/Contacts/Fragments/ContactInnerActionsFragment.swift b/Linphone/UI/Main/Contacts/Fragments/ContactInnerActionsFragment.swift index 01e0ea646..708d5eec9 100644 --- a/Linphone/UI/Main/Contacts/Fragments/ContactInnerActionsFragment.swift +++ b/Linphone/UI/Main/Contacts/Fragments/ContactInnerActionsFragment.swift @@ -20,6 +20,7 @@ import SwiftUI import linphonesw +// swiftlint:disable type_body_length struct ContactInnerActionsFragment: View { @ObservedObject var contactsManager = ContactsManager.shared @@ -333,9 +334,7 @@ struct ContactInnerActionsFragment: View { .padding(.horizontal) Button { - if contactAvatarModel != nil { - isShowDeletePopup.toggle() - } + isShowDeletePopup.toggle() } label: { HStack { Image("trash-simple") @@ -377,3 +376,5 @@ struct ContactInnerActionsFragment: View { actionEditButton: {} ) } + +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift b/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift index 8fe87a939..8e59f3d47 100644 --- a/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift +++ b/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift @@ -77,7 +77,8 @@ struct ContactsInnerFragment: View { VStack { List { - ContactsListFragment(contactViewModel: contactViewModel, contactsListViewModel: ContactsListViewModel(), showingSheet: $showingSheet, startCallFunc: {addr in })} + ContactsListFragment(contactViewModel: contactViewModel, contactsListViewModel: ContactsListViewModel(), + showingSheet: $showingSheet, startCallFunc: {_ in })} .listStyle(.plain) .overlay( VStack { diff --git a/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift b/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift index dec374cfc..1d6bcbf2b 100644 --- a/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift +++ b/Linphone/UI/Main/Contacts/Fragments/ContactsListFragment.swift @@ -88,7 +88,8 @@ struct ContactsListFragment: View { contactViewModel.indexDisplayedFriend = index } - if index < contactsManager.lastSearch.count && contactsManager.lastSearch[index].friend != nil && contactsManager.lastSearch[index].friend!.address != nil { + if index < contactsManager.lastSearch.count && contactsManager.lastSearch[index].friend != nil + && contactsManager.lastSearch[index].friend!.address != nil { startCallFunc(contactsManager.lastSearch[index].friend!.address!) } } diff --git a/Linphone/UI/Main/Contacts/Fragments/EditContactFragment.swift b/Linphone/UI/Main/Contacts/Fragments/EditContactFragment.swift index e912466fe..79e4e1732 100644 --- a/Linphone/UI/Main/Contacts/Fragments/EditContactFragment.swift +++ b/Linphone/UI/Main/Contacts/Fragments/EditContactFragment.swift @@ -20,6 +20,7 @@ import SwiftUI import linphonesw +// swiftlint:disable type_body_length struct EditContactFragment: View { @ObservedObject var editContactViewModel: EditContactViewModel @@ -531,7 +532,8 @@ struct EditContactFragment: View { contact: newContact, linphoneFriend: true, existingFriend: editContactViewModel.selectedEditFriend) { MagicSearchSingleton.shared.searchForContacts(sourceFlags: MagicSearch.Source.Friends.rawValue | MagicSearch.Source.LdapServers.rawValue) - if editContactViewModel.selectedEditFriend != nil && editContactViewModel.selectedEditFriend!.name != editContactViewModel.firstName + " " + editContactViewModel.lastName { + if editContactViewModel.selectedEditFriend != nil + && editContactViewModel.selectedEditFriend!.name != editContactViewModel.firstName + " " + editContactViewModel.lastName { DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { let result = ContactsManager.shared.lastSearch.firstIndex(where: { $0.friend!.name == newContact.firstName + " " + newContact.lastName @@ -562,3 +564,4 @@ struct EditContactFragment: View { isShowDismissPopup: .constant(false) ) } +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/Contacts/ViewModel/ContactViewModel.swift b/Linphone/UI/Main/Contacts/ViewModel/ContactViewModel.swift index be749b46e..283f3df41 100644 --- a/Linphone/UI/Main/Contacts/ViewModel/ContactViewModel.swift +++ b/Linphone/UI/Main/Contacts/ViewModel/ContactViewModel.swift @@ -20,6 +20,7 @@ import linphonesw import Combine +// swiftlint:disable line_length class ContactViewModel: ObservableObject { @Published var indexDisplayedFriend: Int? @@ -177,8 +178,7 @@ class ContactViewModel: ObservableObject { } func chatRoomAddDelegate(core: Core, chatRoom: ChatRoom) { - self.chatRoomSuscriptions.insert(chatRoom.publisher?.onConferenceJoined?.postOnCoreQueue { - (chatRoom: ChatRoom, eventLog: EventLog) in + self.chatRoomSuscriptions.insert(chatRoom.publisher?.onConferenceJoined?.postOnCoreQueue { (chatRoom: ChatRoom, _: EventLog) in let state = chatRoom.state let id = LinphoneUtils.getChatRoomId(room: chatRoom) Log.info("\(StartConversationViewModel.TAG) Conversation \(id) \(chatRoom.subject ?? "") state changed: \(state)") @@ -213,8 +213,7 @@ class ContactViewModel: ObservableObject { } }) - self.chatRoomSuscriptions.insert(chatRoom.publisher?.onStateChanged?.postOnCoreQueue { - (chatRoom: ChatRoom, state: ChatRoom.State) in + self.chatRoomSuscriptions.insert(chatRoom.publisher?.onStateChanged?.postOnCoreQueue { (chatRoom: ChatRoom, state: ChatRoom.State) in let state = chatRoom.state let id = LinphoneUtils.getChatRoomId(room: chatRoom) if state == ChatRoom.State.CreationFailed { @@ -229,3 +228,4 @@ class ContactViewModel: ObservableObject { }) } } +// swiftlint:enable line_length diff --git a/Linphone/UI/Main/ContentView.swift b/Linphone/UI/Main/ContentView.swift index 3e0245555..147db9421 100644 --- a/Linphone/UI/Main/ContentView.swift +++ b/Linphone/UI/Main/ContentView.swift @@ -64,7 +64,7 @@ struct ContentView: View { @State var isShowDismissPopup = false @State var isShowSendCancelMeetingNotificationPopup = false @State var isShowSipAddressesPopup = false - @State var isShowSipAddressesPopupType = 0 //0 to call, 1 to message, 2 to video call + @State var isShowSipAddressesPopupType = 0 // 0 to call, 1 to message, 2 to video call @State var isShowConversationFragment = false @State var fullscreenVideo = false @@ -760,8 +760,7 @@ struct ContentView: View { } if contactViewModel.indexDisplayedFriend != nil || historyViewModel.displayedCall != nil || conversationViewModel.displayedConversation != nil || - meetingViewModel.displayedMeeting != nil - { + meetingViewModel.displayedMeeting != nil { HStack(spacing: 0) { Spacer() .frame(maxWidth: diff --git a/Linphone/UI/Main/Conversations/Fragments/ChatBubbleView.swift b/Linphone/UI/Main/Conversations/Fragments/ChatBubbleView.swift index 697522b67..e12e8e29b 100644 --- a/Linphone/UI/Main/Conversations/Fragments/ChatBubbleView.swift +++ b/Linphone/UI/Main/Conversations/Fragments/ChatBubbleView.swift @@ -20,6 +20,8 @@ import SwiftUI import WebKit +// swiftlint:disable type_body_length +// swiftlint:disable cyclomatic_complexity struct ChatBubbleView: View { @ObservedObject var conversationViewModel: ConversationViewModel @@ -40,8 +42,8 @@ struct ChatBubbleView: View { if eventLogMessage.message.isOutgoing { Spacer() } - - if conversationViewModel.displayedConversation != nil && conversationViewModel.displayedConversation!.isGroup && !eventLogMessage.message.isOutgoing && eventLogMessage.message.isFirstMessage { + if conversationViewModel.displayedConversation != nil && conversationViewModel.displayedConversation!.isGroup + && !eventLogMessage.message.isOutgoing && eventLogMessage.message.isFirstMessage { VStack { Avatar( contactAvatarModel: conversationViewModel.participantConversationModel.first(where: {$0.address == eventLogMessage.message.address}) ?? @@ -50,14 +52,16 @@ struct ChatBubbleView: View { ) .padding(.top, 30) } - } else if conversationViewModel.displayedConversation != nil && conversationViewModel.displayedConversation!.isGroup && !eventLogMessage.message.isOutgoing { + } else if conversationViewModel.displayedConversation != nil + && conversationViewModel.displayedConversation!.isGroup && !eventLogMessage.message.isOutgoing { VStack { } .padding(.leading, 43) } VStack(alignment: .leading, spacing: 0) { - if conversationViewModel.displayedConversation != nil && conversationViewModel.displayedConversation!.isGroup && !eventLogMessage.message.isOutgoing && eventLogMessage.message.isFirstMessage { + if conversationViewModel.displayedConversation != nil && conversationViewModel.displayedConversation!.isGroup + && !eventLogMessage.message.isOutgoing && eventLogMessage.message.isFirstMessage { Text(conversationViewModel.participantConversationModel.first(where: {$0.address == eventLogMessage.message.address})?.name ?? "") .default_text_style(styleSize: 12) .padding(.top, 10) @@ -76,7 +80,8 @@ struct ChatBubbleView: View { .resizable() .frame(width: 15, height: 15, alignment: .leading) - Text(conversationViewModel.participantConversationModel.first(where: {$0.address == eventLogMessage.message.replyMessage!.address})?.name ?? "") + Text(conversationViewModel.participantConversationModel.first( + where: {$0.address == eventLogMessage.message.replyMessage!.address})?.name ?? "") .default_text_style(styleSize: 12) } .padding(.bottom, 2) @@ -139,7 +144,8 @@ struct ChatBubbleView: View { .default_text_style_300(styleSize: 14) .padding(.top, 1) - if (conversationViewModel.displayedConversation != nil && conversationViewModel.displayedConversation!.isGroup) || eventLogMessage.message.isOutgoing { + if (conversationViewModel.displayedConversation != nil && conversationViewModel.displayedConversation!.isGroup) + || eventLogMessage.message.isOutgoing { if eventLogMessage.message.status == .sending { ProgressView() .controlSize(.mini) @@ -253,7 +259,8 @@ struct ChatBubbleView: View { @ViewBuilder func messageAttachments() -> some View { if eventLogMessage.message.attachments.count == 1 { - if eventLogMessage.message.attachments.first!.type == .image || eventLogMessage.message.attachments.first!.type == .gif || eventLogMessage.message.attachments.first!.type == .video { + if eventLogMessage.message.attachments.first!.type == .image || eventLogMessage.message.attachments.first!.type == .gif + || eventLogMessage.message.attachments.first!.type == .video { let result = imageDimensions(url: eventLogMessage.message.attachments.first!.thumbnail.absoluteString) ZStack { Rectangle() @@ -265,7 +272,8 @@ struct ChatBubbleView: View { .if(result.1 < UIScreen.main.bounds.height/2) { view in view.frame(maxHeight: result.1) } - .if(result.0 >= result.1 && geometryProxy.size.width > 0 && result.0 >= geometryProxy.size.width - 110 && result.1 >= UIScreen.main.bounds.height/2.5) { view in + .if(result.0 >= result.1 && geometryProxy.size.width > 0 && result.0 >= geometryProxy.size.width - 110 + && result.1 >= UIScreen.main.bounds.height/2.5) { view in view.frame( maxWidth: geometryProxy.size.width - 110, maxHeight: result.1 * ((geometryProxy.size.width - 110) / result.0) @@ -411,8 +419,8 @@ struct ChatBubbleView: View { .contentShape(Rectangle()) } } - .frame( - width: geometryProxy.size.width > 0 && CGFloat(122 * eventLogMessage.message.attachments.count) > geometryProxy.size.width - 110 - (isGroup ? 40 : 0) + .frame( width: geometryProxy.size.width > 0 + && CGFloat(122 * eventLogMessage.message.attachments.count) > geometryProxy.size.width - 110 - (isGroup ? 40 : 0) ? 122 * floor(CGFloat(geometryProxy.size.width - 110 - (isGroup ? 40 : 0)) / 122) : CGFloat(122 * eventLogMessage.message.attachments.count) ) @@ -516,3 +524,6 @@ extension View { ChatBubbleView(conversationViewModel: ConversationViewModel(), index: 0) } */ + +// swiftlint:enable type_body_length +// swiftlint:enable cyclomatic_complexity diff --git a/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift b/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift index 0657e73e0..79b44df5c 100644 --- a/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift @@ -20,6 +20,7 @@ import SwiftUI import UniformTypeIdentifiers +// swiftlint:disable line_length // swiftlint:disable type_body_length struct ConversationFragment: View { @@ -780,7 +781,6 @@ struct ConversationFragment: View { .navigationViewStyle(.stack) } } -// swiftlint:enable type_body_length struct ScrollOffsetPreferenceKey: PreferenceKey { static var defaultValue: CGPoint = .zero @@ -809,9 +809,9 @@ struct ImagePicker: UIViewControllerRepresentable { let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage let date = Date() - let df = DateFormatter() - df.dateFormat = "yyyy-MM-dd-HHmmss" - let dateString = df.string(from: date) + let dformater = DateFormatter() + dformater.dateFormat = "yyyy-MM-dd-HHmmss" + let dateString = dformater.string(from: date) let path = FileManager.default.temporaryDirectory.appendingPathComponent((dateString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "") + ".jpeg") @@ -819,7 +819,7 @@ struct ImagePicker: UIViewControllerRepresentable { let data = image!.jpegData(compressionQuality: 1) if data != nil { do { - let decodedData: () = try data!.write(to: path) + _ = try data!.write(to: path) let attachment = Attachment(id: UUID().uuidString, name: (dateString.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "") + ".jpeg", url: path, type: .image) parent.selectedMedia.append(attachment) } catch { @@ -846,7 +846,7 @@ struct ImagePicker: UIViewControllerRepresentable { } } default: - Log.info("Mismatched type: \(mediaType)") + Log.info("Mismatched type: \(mediaType ?? "mediaType is nil")") } parent.presentationMode.wrappedValue.dismiss() @@ -876,3 +876,6 @@ struct ImagePicker: UIViewControllerRepresentable { ConversationFragment(conversationViewModel: ConversationViewModel(), conversationsListViewModel: ConversationsListViewModel(), sections: [MessagesSection], ids: [""]) } */ + +// swiftlint:enable type_body_length +// swiftlint:enable line_length diff --git a/Linphone/UI/Main/Conversations/Fragments/ConversationsFragment.swift b/Linphone/UI/Main/Conversations/Fragments/ConversationsFragment.swift index 2509fa12c..b91bf86e0 100644 --- a/Linphone/UI/Main/Conversations/Fragments/ConversationsFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/ConversationsFragment.swift @@ -32,7 +32,8 @@ struct ConversationsFragment: View { var body: some View { ZStack { if #available(iOS 16.0, *), idiom != .pad { - ConversationsListFragment(conversationViewModel: conversationViewModel, conversationsListViewModel: conversationsListViewModel, showingSheet: $showingSheet, text: $text) + ConversationsListFragment(conversationViewModel: conversationViewModel, + conversationsListViewModel: conversationsListViewModel, showingSheet: $showingSheet, text: $text) .sheet(isPresented: $showingSheet) { ConversationsListBottomSheet( conversationsListViewModel: conversationsListViewModel, @@ -41,7 +42,8 @@ struct ConversationsFragment: View { .presentationDetents([.fraction(0.4)]) } } else { - ConversationsListFragment(conversationViewModel: conversationViewModel, conversationsListViewModel: conversationsListViewModel, showingSheet: $showingSheet, text: $text) + ConversationsListFragment(conversationViewModel: conversationViewModel, + conversationsListViewModel: conversationsListViewModel, showingSheet: $showingSheet, text: $text) .halfSheet(showSheet: $showingSheet) { ConversationsListBottomSheet( conversationsListViewModel: conversationsListViewModel, diff --git a/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift b/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift index 30db791b5..2983054b6 100644 --- a/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift @@ -20,6 +20,7 @@ import SwiftUI import linphonesw +// swiftlint:disable type_body_length struct StartConversationFragment: View { @ObservedObject private var sharedMainViewModel = SharedMainViewModel.shared @@ -184,7 +185,8 @@ struct StartConversationFragment: View { .padding(.horizontal, 16) } - ContactsListFragment(contactViewModel: ContactViewModel(), contactsListViewModel: ContactsListViewModel(), showingSheet: .constant(false), startCallFunc: { addr in + ContactsListFragment(contactViewModel: ContactViewModel(), contactsListViewModel: ContactsListViewModel(), showingSheet: .constant(false) + , startCallFunc: { addr in withAnimation { startConversationViewModel.createOneToOneChatRoomWith(remote: addr) } @@ -389,3 +391,5 @@ struct StartConversationFragment: View { isShowStartConversationFragment: .constant(true) ) } + +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/Conversations/Fragments/UIList.swift b/Linphone/UI/Main/Conversations/Fragments/UIList.swift index d0e4e6eac..05dfa1be4 100644 --- a/Linphone/UI/Main/Conversations/Fragments/UIList.swift +++ b/Linphone/UI/Main/Conversations/Fragments/UIList.swift @@ -18,6 +18,9 @@ */ // swiftlint:disable large_tuple +// swiftlint:disable line_length +// swiftlint:disable cyclomatic_complexity +// swiftlint:disable type_body_length import SwiftUI import linphonesw @@ -156,7 +159,7 @@ struct UIList: UIViewRepresentable { return containerView } - //func updateUIView(_ tableView: UITableView, context: Context) { + // func updateUIView(_ tableView: UITableView, context: Context) { func updateUIView(_ uiView: UIView, context: Context) { if let button = uiView.viewWithTag(102) as? FloatingButton { button.unreadMessageCount = conversationViewModel.displayedConversationUnreadMessagesCount @@ -253,17 +256,17 @@ struct UIList: UIViewRepresentable { let newDates = newSections.map { $0.date } let commonDates = Array(Set(oldDates + newDates)).sorted(by: >) for date in commonDates { - let oldIndex = appliedDeletes.firstIndex(where: { $0.date == date } ) - let newIndex = appliedDeletesSwapsAndEdits.firstIndex(where: { $0.date == date } ) + let oldIndex = appliedDeletes.firstIndex(where: { $0.date == date }) + let newIndex = appliedDeletesSwapsAndEdits.firstIndex(where: { $0.date == date }) if oldIndex == nil, let newIndex { - if let operationIndex = newSections.firstIndex(where: { $0.date == date } ) { + if let operationIndex = newSections.firstIndex(where: { $0.date == date }) { appliedDeletesSwapsAndEdits.remove(at: newIndex) insertOperations.append(.insertSection(operationIndex)) } continue } if newIndex == nil, let oldIndex { - if let operationIndex = oldSections.firstIndex(where: { $0.date == date } ) { + if let operationIndex = oldSections.firstIndex(where: { $0.date == date }) { appliedDeletes.remove(at: oldIndex) deleteOperations.append(.deleteSection(operationIndex)) } @@ -476,8 +479,8 @@ struct UIList: UIViewRepresentable { } func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { - - let archiveAction = UIContextualAction(style: .normal, title: "") { action, view, completionHandler in + + let archiveAction = UIContextualAction(style: .normal, title: "") { _, _, completionHandler in self.parent.conversationViewModel.replyToMessage(index: indexPath.row) completionHandler(true) } @@ -530,11 +533,6 @@ struct EventLogMessage: Equatable { return formatter }() - init(eventLog: EventLog, message: Message) { - self.eventLog = eventLog - self.message = message - } - static func == (lhs: EventLogMessage, rhs: EventLogMessage) -> Bool { lhs.message == rhs.message } @@ -565,7 +563,7 @@ public typealias ChatPaginationClosure = (Message) -> Void final class ChatViewModel: ObservableObject { - @Published private(set) var fullscreenAttachmentItem: Optional = nil + @Published private(set) var fullscreenAttachmentItem: Attachment? @Published var fullscreenAttachmentPresented = false @Published var messageMenuRow: Message? @@ -586,5 +584,7 @@ final class ChatViewModel: ObservableObject { didSendMessage(message) } } - // swiftlint:enable large_tuple +// swiftlint:enable line_length +// swiftlint:enable cyclomatic_complexity +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/Conversations/Model/ConversationModel.swift b/Linphone/UI/Main/Conversations/Model/ConversationModel.swift index b222a532c..6171cecf8 100644 --- a/Linphone/UI/Main/Conversations/Model/ConversationModel.swift +++ b/Linphone/UI/Main/Conversations/Model/ConversationModel.swift @@ -21,6 +21,7 @@ import Foundation import linphonesw import Combine +// swiftlint:disable line_length class ConversationModel: ObservableObject { private var coreContext = CoreContext.shared @@ -236,7 +237,9 @@ class ConversationModel: ObservableObject { func downloadContent(chatMessage: ChatMessage, content: Content) { coreContext.doOnCoreQueue { _ in - let result = chatMessage.downloadContent(content: content) + if !chatMessage.downloadContent(content: content) { + Log.error("\(ConversationModel.TAG) An error occured when downloading content of chat message. MessageID=\(chatMessage.messageId)") + } } } @@ -246,3 +249,4 @@ class ConversationModel: ObservableObject { } } } +// swiftlint:enable line_length diff --git a/Linphone/UI/Main/Conversations/Model/Message.swift b/Linphone/UI/Main/Conversations/Model/Message.swift index 051074283..3fedf5713 100644 --- a/Linphone/UI/Main/Conversations/Model/Message.swift +++ b/Linphone/UI/Main/Conversations/Model/Message.swift @@ -19,6 +19,8 @@ import SwiftUI +// swiftlint:disable line_length +// swiftlint:disable vertical_parameter_alignment public struct Message: Identifiable, Hashable { public enum Status: Equatable, Hashable { @@ -236,7 +238,7 @@ public struct DraftMessage { public let createdAt: Date public let ownReaction: String public let reactions: [String] - + public init(id: String? = nil, isOutgoing: Bool, dateReceived: time_t, @@ -324,8 +326,8 @@ extension Sequence { var values = [T]() for element in self { - if let el = try await transform(element) { - values.append(el) + if let elmt = try await transform(element) { + values.append(elmt) } } @@ -354,3 +356,5 @@ extension DateFormatter { return String(format: "%02i:%02i", minute, second) } } +// swiftlint:enable line_length +// swiftlint:enable vertical_parameter_alignment diff --git a/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift index bd239df9e..471779b47 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift @@ -23,7 +23,10 @@ import Combine import SwiftUI import AVFoundation +// swiftlint:disable line_length // swiftlint:disable type_body_length +// swiftlint:disable cyclomatic_complexity + class ConversationViewModel: ObservableObject { private var coreContext = CoreContext.shared @@ -85,7 +88,7 @@ class ConversationViewModel: ObservableObject { statusTmp = .sending } - var indexMessage = self.conversationMessagesSection[0].rows.firstIndex(where: {$0.eventLog.chatMessage?.messageId == message.messageId}) + let indexMessage = self.conversationMessagesSection[0].rows.firstIndex(where: {$0.eventLog.chatMessage?.messageId == message.messageId}) DispatchQueue.main.async { if indexMessage != nil { @@ -199,7 +202,7 @@ class ConversationViewModel: ObservableObject { } func addParticipantConversationModel(address: Address) { - coreContext.doOnCoreQueue { core in + coreContext.doOnCoreQueue { _ in ContactAvatarModel.getAvatarModelFromAddress(address: address) { avatarResult in let avatarModelTmp = avatarResult DispatchQueue.main.async { @@ -234,7 +237,7 @@ class ConversationViewModel: ObservableObject { contentText = content.utf8Text ?? "" } else if content.name != nil && !content.name!.isEmpty { if content.filePath == nil || content.filePath!.isEmpty { - //self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) + // self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) let path = URL(string: self.getNewFilePath(name: content.name ?? "")) if path != nil { @@ -434,7 +437,7 @@ class ConversationViewModel: ObservableObject { contentText = content.utf8Text ?? "" } else if content.name != nil && !content.name!.isEmpty { if content.filePath == nil || content.filePath!.isEmpty { - //self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) + // self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) let path = URL(string: self.getNewFilePath(name: content.name ?? "")) if path != nil { @@ -619,7 +622,6 @@ class ConversationViewModel: ObservableObject { } } - // swiftlint:disable cyclomatic_complexity func getNewMessages(eventLogs: [EventLog]) { eventLogs.enumerated().forEach { index, eventLog in var attachmentNameList: String = "" @@ -632,7 +634,7 @@ class ConversationViewModel: ObservableObject { contentText = content.utf8Text ?? "" } else { if content.filePath == nil || content.filePath!.isEmpty { - //self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) + // self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) let path = URL(string: self.getNewFilePath(name: content.name ?? "")) if path != nil { @@ -843,7 +845,6 @@ class ConversationViewModel: ObservableObject { } } } - // swiftlint:enable cyclomatic_complexity func resetMessage() { conversationMessagesSection = [] @@ -860,7 +861,6 @@ class ConversationViewModel: ObservableObject { } } - // swiftlint:disable cyclomatic_complexity func scrollToMessage(message: Message) { coreContext.doOnCoreQueue { _ in if message.replyMessage != nil { @@ -904,7 +904,7 @@ class ConversationViewModel: ObservableObject { contentText = content.utf8Text ?? "" } else if content.name != nil && !content.name!.isEmpty { if content.filePath == nil || content.filePath!.isEmpty { - //self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) + // self.downloadContent(chatMessage: eventLog.chatMessage!, content: content) let path = URL(string: self.getNewFilePath(name: content.name ?? "")) if path != nil { @@ -1095,7 +1095,6 @@ class ConversationViewModel: ObservableObject { } } } - // swiftlint:enable cyclomatic_complexity func sendMessage() { coreContext.doOnCoreQueue { _ in @@ -1155,7 +1154,7 @@ class ConversationViewModel: ObservableObject { content.type = "file" } - //content.subtype = attachment.type == .plainText ? "plain" : FileUtils.getExtensionFromFileName(attachment.fileName) + // content.subtype = attachment.type == .plainText ? "plain" : FileUtils.getExtensionFromFileName(attachment.fileName) content.subtype = attachment.full.pathExtension content.name = attachment.full.lastPathComponent @@ -1186,7 +1185,7 @@ class ConversationViewModel: ObservableObject { } catch { } } - //} + // } if message != nil && !message!.contents.isEmpty { Log.info("[ConversationViewModel] Sending message") @@ -1250,17 +1249,15 @@ class ConversationViewModel: ObservableObject { } func downloadContent(chatMessage: ChatMessage, content: Content) { - //Log.debug("[ConversationViewModel] Starting downloading content for file \(model.fileName)") + // Log.debug("[ConversationViewModel] Starting downloading content for file \(model.fileName)") if !chatMessage.isFileTransferInProgress && (content.filePath == nil || content.filePath!.isEmpty) { - let contentName = content.name - if contentName != nil { - let isImage = FileUtil.isExtensionImage(path: contentName!) - let groupName = "group.\(Bundle.main.bundleIdentifier ?? "").linphoneExtension" - let file = FileUtil.sharedContainerUrl().appendingPathComponent("Library/Images").absoluteString + (contentName!.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "") - //let file = FileUtil.getFileStoragePath(fileName: contentName ?? "", isImage: isImage) + if let contentName = content.name { + // let isImage = FileUtil.isExtensionImage(path: contentName) + let file = FileUtil.sharedContainerUrl().appendingPathComponent("Library/Images").absoluteString + (contentName.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "") + // let file = FileUtil.getFileStoragePath(fileName: contentName ?? "", isImage: isImage) content.filePath = String(file.dropFirst(7)) Log.info( - "[ConversationViewModel] File \(contentName) will be downloaded at \(content.filePath)" + "[ConversationViewModel] File \(contentName) will be downloaded at \(content.filePath ?? "NIL")" ) self.displayedConversation?.downloadContent(chatMessage: chatMessage, content: content) } else { @@ -1270,7 +1267,6 @@ class ConversationViewModel: ObservableObject { } func getNewFilePath(name: String) -> String { - let groupName = "group.\(Bundle.main.bundleIdentifier ?? "").linphoneExtension" return FileUtil.sharedContainerUrl().appendingPathComponent("Library/Images").absoluteString + (name.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "") } @@ -1299,7 +1295,7 @@ class ConversationViewModel: ObservableObject { : pathThumbnail!.appendingPathComponent("preview_" + (name.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "") + ".png") if urlName != nil { - let decodedData: () = try data.write(to: urlName!) + _ = try data.write(to: urlName!) } return urlName!.absoluteString @@ -1379,4 +1375,6 @@ class ConversationViewModel: ObservableObject { } } } +// swiftlint:enable line_length // swiftlint:enable type_body_length +// swiftlint:enable cyclomatic_complexity diff --git a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift index f5caace40..2bb72aebd 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift @@ -21,6 +21,8 @@ import Foundation import linphonesw import Combine +// swiftlint:disable line_length +// swiftlint:disable large_tuple class ConversationsListViewModel: ObservableObject { private var coreContext = CoreContext.shared @@ -68,7 +70,7 @@ class ConversationsListViewModel: ObservableObject { let chatRoomsCounter = account?.chatRooms != nil ? account!.chatRooms.count : core.chatRooms.count var counter = 0 self.mCoreSuscriptions.insert(core.publisher?.onChatRoomStateChanged?.postOnCoreQueue { (cbValue: (core: Core, chatRoom: ChatRoom, state: ChatRoom.State)) in - //Log.info("[ConversationsListViewModel] Conversation [${LinphoneUtils.getChatRoomId(chatRoom)}] state changed [$state]") + // Log.info("[ConversationsListViewModel] Conversation [${LinphoneUtils.getChatRoomId(chatRoom)}] state changed [$state]") switch cbValue.state { case ChatRoom.State.Created: if !(cbValue.chatRoom.isEmpty && cbValue.chatRoom.hasCapability(mask: ChatRoom.Capabilities.OneToOne.rawValue)) { @@ -81,8 +83,8 @@ class ConversationsListViewModel: ObservableObject { } case ChatRoom.State.Deleted: self.computeChatRoomsList(filter: "") - //ToastViewModel.shared.toastMessage = "toast_conversation_deleted" - //ToastViewModel.shared.displayToast = true + // ToastViewModel.shared.toastMessage = "toast_conversation_deleted" + // ToastViewModel.shared.displayToast = true default: break } @@ -214,3 +216,5 @@ class ConversationsListViewModel: ObservableObject { conversationsList = conversationsListTmp } } +// swiftlint:enable line_length +// swiftlint:enable large_tuple diff --git a/Linphone/UI/Main/Conversations/ViewModel/StartConversationViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/StartConversationViewModel.swift index fec47193a..7ba93ca7d 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/StartConversationViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/StartConversationViewModel.swift @@ -20,6 +20,7 @@ import linphonesw import Combine +// swiftlint:disable line_length class StartConversationViewModel: ObservableObject { static let TAG = "[StartConversationViewModel]" @@ -301,8 +302,7 @@ class StartConversationViewModel: ObservableObject { } func chatRoomAddDelegate(core: Core, chatRoom: ChatRoom) { - self.chatRoomSuscriptions.insert(chatRoom.publisher?.onConferenceJoined?.postOnCoreQueue { - (chatRoom: ChatRoom, eventLog: EventLog) in + self.chatRoomSuscriptions.insert(chatRoom.publisher?.onConferenceJoined?.postOnCoreQueue { (chatRoom: ChatRoom, _: EventLog) in let state = chatRoom.state let id = LinphoneUtils.getChatRoomId(room: chatRoom) Log.info("\(StartConversationViewModel.TAG) Conversation \(id) \(chatRoom.subject ?? "") state changed: \(state)") @@ -337,8 +337,7 @@ class StartConversationViewModel: ObservableObject { } }) - self.chatRoomSuscriptions.insert(chatRoom.publisher?.onStateChanged?.postOnCoreQueue { - (chatRoom: ChatRoom, state: ChatRoom.State) in + self.chatRoomSuscriptions.insert(chatRoom.publisher?.onStateChanged?.postOnCoreQueue { (chatRoom: ChatRoom, state: ChatRoom.State) in let state = chatRoom.state let id = LinphoneUtils.getChatRoomId(room: chatRoom) if state == ChatRoom.State.CreationFailed { @@ -357,3 +356,5 @@ class StartConversationViewModel: ObservableObject { return false // TODO: Will be done later in SDK } } + +// swiftlint:enable line_length diff --git a/Linphone/UI/Main/Fragments/ToastView.swift b/Linphone/UI/Main/Fragments/ToastView.swift index de0bbf2b9..89f27f445 100644 --- a/Linphone/UI/Main/Fragments/ToastView.swift +++ b/Linphone/UI/Main/Fragments/ToastView.swift @@ -248,7 +248,9 @@ struct ToastView: View { .overlay( RoundedRectangle(cornerRadius: 50) .inset(by: 0.5) - .stroke(toastViewModel.toastMessage.contains("Success") ? Color.greenSuccess500 : (toastViewModel.toastMessage.contains("Info_") ? Color.blueInfo500 : Color.redDanger500), lineWidth: 1) + .stroke(toastViewModel.toastMessage.contains("Success") + ? Color.greenSuccess500 : (toastViewModel.toastMessage.contains("Info_") + ? Color.blueInfo500 : Color.redDanger500), lineWidth: 1) ) .onTapGesture { if !toastViewModel.toastMessage.contains("is recording") { diff --git a/Linphone/UI/Main/History/Fragments/DialerBottomSheet.swift b/Linphone/UI/Main/History/Fragments/DialerBottomSheet.swift index 8328dca8b..169a96f7d 100644 --- a/Linphone/UI/Main/History/Fragments/DialerBottomSheet.swift +++ b/Linphone/UI/Main/History/Fragments/DialerBottomSheet.swift @@ -21,6 +21,7 @@ import SwiftUI import UniformTypeIdentifiers import linphonesw +// swiftlint:disable type_body_length struct DialerBottomSheet: View { @Environment(\.dismiss) var dismiss @@ -544,6 +545,11 @@ struct DialerBottomSheet: View { #Preview { DialerBottomSheet( - startCallViewModel: StartCallViewModel(), callViewModel: CallViewModel(), isShowStartCallFragment: .constant(false), showingDialer: .constant(false), currentCall: nil - ) + startCallViewModel: StartCallViewModel() + , callViewModel: CallViewModel() + , isShowStartCallFragment: .constant(false) + , showingDialer: .constant(false) + , currentCall: nil) } + +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/History/Fragments/HistoryContactFragment.swift b/Linphone/UI/Main/History/Fragments/HistoryContactFragment.swift index 4aa868f20..505477d01 100644 --- a/Linphone/UI/Main/History/Fragments/HistoryContactFragment.swift +++ b/Linphone/UI/Main/History/Fragments/HistoryContactFragment.swift @@ -21,7 +21,6 @@ import SwiftUI import UniformTypeIdentifiers import linphonesw -// swiftlint:disable line_length // swiftlint:disable type_body_length struct HistoryContactFragment: View { @@ -462,5 +461,4 @@ struct HistoryContactFragment: View { indexPage: .constant(1) ) } -// swiftlint:enable line_length // swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/History/Fragments/StartCallFragment.swift b/Linphone/UI/Main/History/Fragments/StartCallFragment.swift index 1f11924e0..89d501e18 100644 --- a/Linphone/UI/Main/History/Fragments/StartCallFragment.swift +++ b/Linphone/UI/Main/History/Fragments/StartCallFragment.swift @@ -20,6 +20,7 @@ import SwiftUI import linphonesw +// swiftlint:disable type_body_length struct StartCallFragment: View { @ObservedObject private var sharedMainViewModel = SharedMainViewModel.shared @@ -217,7 +218,8 @@ struct StartCallFragment: View { .padding(.horizontal, 16) } - ContactsListFragment(contactViewModel: ContactViewModel(), contactsListViewModel: ContactsListViewModel(), showingSheet: .constant(false), startCallFunc: { addr in + ContactsListFragment(contactViewModel: ContactViewModel(), contactsListViewModel: ContactsListViewModel(), showingSheet: .constant(false) + , startCallFunc: { addr in if callViewModel.isTransferInsteadCall { showingDialer = false @@ -482,3 +484,5 @@ struct StartCallFragment: View { resetCallView: {} ) } + +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/History/Model/HistoryModel.swift b/Linphone/UI/Main/History/Model/HistoryModel.swift index 4a996b190..92cd1a3eb 100644 --- a/Linphone/UI/Main/History/Model/HistoryModel.swift +++ b/Linphone/UI/Main/History/Model/HistoryModel.swift @@ -112,7 +112,9 @@ class HistoryModel: ObservableObject { func refreshAvatarModel() { coreContext.doOnCoreQueue { _ in - let addressFriendTmp = ContactsManager.shared.getFriendWithAddress(address: self.callLog.dir == .Outgoing ? self.callLog.toAddress! : self.callLog.fromAddress!) + let addressFriendTmp = ContactsManager.shared.getFriendWithAddress( + address: self.callLog.dir == .Outgoing ? self.callLog.toAddress! : self.callLog.fromAddress! + ) if addressFriendTmp != nil { self.addressFriend = addressFriendTmp diff --git a/Linphone/UI/Main/History/ViewModel/StartCallViewModel.swift b/Linphone/UI/Main/History/ViewModel/StartCallViewModel.swift index b5540b777..b132748b9 100644 --- a/Linphone/UI/Main/History/ViewModel/StartCallViewModel.swift +++ b/Linphone/UI/Main/History/ViewModel/StartCallViewModel.swift @@ -20,6 +20,7 @@ import linphonesw import Combine +// swiftlint:disable line_length class StartCallViewModel: ObservableObject { static let TAG = "[StartCallViewModel]" @@ -115,8 +116,7 @@ class StartCallViewModel: ObservableObject { } func conferenceAddDelegate(core: Core, conferenceScheduler: ConferenceScheduler) { - self.conferenceSuscriptions.insert(conferenceScheduler.publisher?.onStateChanged?.postOnCoreQueue { - (conferenceScheduler: ConferenceScheduler, state: ConferenceScheduler.State) in + self.conferenceSuscriptions.insert(conferenceScheduler.publisher?.onStateChanged?.postOnCoreQueue { (conferenceScheduler: ConferenceScheduler, state: ConferenceScheduler.State) in Log.info("\(StartCallViewModel.TAG) Conference scheduler state is \(state)") if state == ConferenceScheduler.State.Ready { self.conferenceSuscriptions.removeAll() @@ -153,13 +153,7 @@ class StartCallViewModel: ObservableObject { } func startVideoCall(core: Core, conferenceAddress: Address) { - do { - TelecomManager.shared.doCallWithCore(addr: conferenceAddress, isVideo: true, isConference: true) - } catch let error { - Log.error( - "\(StartCallViewModel.TAG) StartVideoCall: \(error)" - ) - } + TelecomManager.shared.doCallWithCore(addr: conferenceAddress, isVideo: true, isConference: true) } func interpretAndStartCall() { @@ -171,3 +165,4 @@ class StartCallViewModel: ObservableObject { } } } +// swiftlint:enable line_length diff --git a/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift b/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift index c49227ce3..6d45dc1cc 100644 --- a/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift @@ -89,7 +89,7 @@ struct AddParticipantsFragment: View { Text(addParticipantsViewModel.participantsToAdd[index].avatarModel.name) .default_text_style(styleSize: 12) - .frame(minWidth: 60, maxWidth:80) + .frame(minWidth: 60, maxWidth: 80) } Image("x-circle") .renderingMode(.template) @@ -293,5 +293,5 @@ struct AddParticipantsFragment: View { } #Preview { - AddParticipantsFragment(addParticipantsViewModel: AddParticipantsViewModel(), confirmAddParticipantsFunc: {_ in } ) + AddParticipantsFragment(addParticipantsViewModel: AddParticipantsViewModel(), confirmAddParticipantsFunc: { _ in }) } diff --git a/Linphone/UI/Main/Meetings/Fragments/MeetingFragment.swift b/Linphone/UI/Main/Meetings/Fragments/MeetingFragment.swift index cf4b7d793..6f39dca49 100644 --- a/Linphone/UI/Main/Meetings/Fragments/MeetingFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/MeetingFragment.swift @@ -17,7 +17,6 @@ * along with this program. If not, see . */ -// swiftlint:disable line_length import SwiftUI import linphonesw import UniformTypeIdentifiers @@ -247,8 +246,7 @@ struct MeetingFragment: View { .frame(height: 1) .background(Color.gray200) } - - + HStack(alignment: .top, spacing: 10) { Image("users") .renderingMode(.template) @@ -310,5 +308,3 @@ struct MeetingFragment: View { , isShowScheduleMeetingFragment: .constant(true) , isShowSendCancelMeetingNotificationPopup: .constant(false)) } - -// swiftlint:enable line_length diff --git a/Linphone/UI/Main/Meetings/Fragments/MeetingsListFragment.swift b/Linphone/UI/Main/Meetings/Fragments/MeetingsListFragment.swift index c9e6a473e..b52060053 100644 --- a/Linphone/UI/Main/Meetings/Fragments/MeetingsListFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/MeetingsListFragment.swift @@ -17,8 +17,6 @@ * along with this program. If not, see . */ -// swiftlint:disable line_length - import SwiftUI import linphonesw @@ -38,5 +36,3 @@ struct MeetingsListFragment: View { #Preview { MeetingsListFragment(meetingsListViewModel: MeetingsListViewModel(), showingSheet: .constant(false)) } - -// swiftlint:enable line_length diff --git a/Linphone/UI/Main/Meetings/Fragments/ScheduleMeetingFragment.swift b/Linphone/UI/Main/Meetings/Fragments/ScheduleMeetingFragment.swift index 0f198a9dc..23c78ca96 100644 --- a/Linphone/UI/Main/Meetings/Fragments/ScheduleMeetingFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/ScheduleMeetingFragment.swift @@ -17,10 +17,9 @@ * along with this program. If not, see . */ -// swiftlint:disable line_length - import SwiftUI +// swiftlint:disable type_body_length struct ScheduleMeetingFragment: View { @Environment(\.dismiss) var dismiss @@ -214,7 +213,6 @@ struct ScheduleMeetingFragment: View { .frame(width: 24, height: 24) .padding(.leading, 15) //Picker(selection:, label:(")) - Text("TODO : repeat") .fontWeight(.bold) .padding(.leading, 5) .default_text_style_500(styleSize: 16) @@ -355,7 +353,6 @@ struct ScheduleMeetingFragment: View { } .padding() - if meetingViewModel.operationInProgress { HStack { Spacer() @@ -491,7 +488,7 @@ struct ScheduleMeetingFragment: View { .padding(.horizontal) .frame(maxHeight: .infinity) .shadow(color: Color.orangeMain500, radius: 0, x: 0, y: 2) - //.frame(maxWidth: sharedMainViewModel.maxWidth) + // .frame(maxWidth: sharedMainViewModel.maxWidth) .position(x: geometry.size.width / 2, y: geometry.size.height / 2) } .background(.black.opacity(0.65)) @@ -509,7 +506,7 @@ struct ScheduleMeetingFragment: View { meetingViewModel.toDate = selectedDate if selectedDate < meetingViewModel.fromDate { // If new end date is before the previous start date, bump down the start date to the earlier possible from current time - if (Date.now.distance(to: selectedDate) < duration) { + if Date.now.distance(to: selectedDate) < duration { meetingViewModel.fromDate = Date.now } else { meetingViewModel.fromDate = Calendar.current.date(byAdding: .second, value: (-1)*Int(duration), to: selectedDate)! @@ -539,4 +536,4 @@ struct ScheduleMeetingFragment: View { , isShowScheduleMeetingFragment: .constant(true)) } -// swiftlint:enable line_length +// swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/Meetings/ViewModel/MeetingViewModel.swift b/Linphone/UI/Main/Meetings/ViewModel/MeetingViewModel.swift index 3512dc846..2d3927caa 100644 --- a/Linphone/UI/Main/Meetings/ViewModel/MeetingViewModel.swift +++ b/Linphone/UI/Main/Meetings/ViewModel/MeetingViewModel.swift @@ -21,6 +21,7 @@ import Foundation import linphonesw import Combine +// swiftlint:disable line_length class MeetingViewModel: ObservableObject { static let TAG = "[MeetingViewModel]" @@ -41,7 +42,7 @@ class MeetingViewModel: ObservableObject { @Published var selectedTimezoneIdx = 0 var selectedTimezone = TimeZone.current - var knownTimezones : [String] = [] + var knownTimezones: [String] = [] var conferenceScheduler: ConferenceScheduler? private var mSchedulerSubscriptions = Set() @@ -272,8 +273,7 @@ class MeetingViewModel: ObservableObject { self.fromDate = meeting.meetingDate self.toDate = meeting.endDate self.participants = [] - - + CoreContext.shared.doOnCoreQueue { core in let organizer = meeting.confInfo.organizer var organizerFound = false @@ -294,7 +294,7 @@ class MeetingViewModel: ObservableObject { organizerFound = organizerFound || isOrganizer ContactAvatarModel.getAvatarModelFromAddress(address: addr) { avatarResult in DispatchQueue.main.async { - self.participants.append(SelectedAddressModel(addr: addr, avModel: avatarResult, isOrg:isOrganizer)) + self.participants.append(SelectedAddressModel(addr: addr, avModel: avatarResult, isOrg: isOrganizer)) } } } @@ -322,12 +322,12 @@ class MeetingViewModel: ObservableObject { if let conferenceInfo = core.findConferenceInformationFromUri(uri: conferenceAddress) { self.conferenceInfoToEdit = conferenceInfo - Log.info("\(MeetingViewModel.TAG) Found conference info matching URI \(conferenceInfo.uri?.asString()) with subject \(conferenceInfo.subject)") + Log.info("\(MeetingViewModel.TAG) Found conference info matching URI \(conferenceInfo.uri?.asString() ?? "NIL") with subject \(conferenceInfo.subject ?? "NIL")") self.fromDate = Date(timeIntervalSince1970: TimeInterval(conferenceInfo.dateTime)) self.toDate = Calendar.current.date(byAdding: .minute, value: Int(conferenceInfo.duration), to: self.fromDate)! - var list: [SelectedAddressModel] = [] + let list: [SelectedAddressModel] = [] for partInfo in conferenceInfo.participantInfos { if let addr = partInfo.address { ContactAvatarModel.getAvatarModelFromAddress(address: addr) { avatarResult in @@ -342,10 +342,9 @@ class MeetingViewModel: ObservableObject { DispatchQueue.main.async { self.subject = conferenceInfo.subject ?? "" self.description = conferenceInfo.description ?? "" - self.isBroadcastSelected = false // TODO FIXME + self.isBroadcastSelected = false self.computeDateLabels() self.computeTimeLabels() - //self.participants = list } } else { @@ -365,3 +364,5 @@ class MeetingViewModel: ObservableObject { } } } + +// swiftlint:enable line_length diff --git a/Linphone/UI/Main/Meetings/ViewModel/MeetingsListViewModel.swift b/Linphone/UI/Main/Meetings/ViewModel/MeetingsListViewModel.swift index dad4aff90..06eb9fa46 100644 --- a/Linphone/UI/Main/Meetings/ViewModel/MeetingsListViewModel.swift +++ b/Linphone/UI/Main/Meetings/ViewModel/MeetingsListViewModel.swift @@ -36,7 +36,7 @@ class MeetingsListViewModel: ObservableObject { init() { coreContext.doOnCoreQueue { core in self.mCoreSuscriptions.insert(core.publisher?.onConferenceInfoReceived?.postOnCoreQueue { (cbVal: (core: Core, conferenceInfo: ConferenceInfo)) in - Log.info("\(MeetingsListViewModel.TAG) Conference info received [\(cbVal.conferenceInfo.uri?.asStringUriOnly())") + Log.info("\(MeetingsListViewModel.TAG) Conference info received [\(cbVal.conferenceInfo.uri?.asStringUriOnly() ?? "NIL")") self.computeMeetingsList() }) } @@ -68,7 +68,9 @@ class MeetingsListViewModel: ObservableObject { let organizerCheck = confInfo.organizer?.asStringUriOnly().range(of: filter, options: .caseInsensitive) != nil let subjectCheck = confInfo.subject?.range(of: filter, options: .caseInsensitive) != nil let descriptionCheck = confInfo.description?.range(of: filter, options: .caseInsensitive) != nil - let participantsCheck = confInfo.participantInfos.first(where: {$0.address?.asStringUriOnly().range(of: filter, options: .caseInsensitive) != nil}) != nil + let participantsCheck = confInfo.participantInfos.first( + where: {$0.address?.asStringUriOnly().range(of: filter, options: .caseInsensitive) != nil} + ) != nil add = organizerCheck || subjectCheck || descriptionCheck || participantsCheck } diff --git a/Linphone/Utils/Extensions/ConfigExtension.swift b/Linphone/Utils/Extensions/ConfigExtension.swift index b7b308c0a..51bd40ed7 100644 --- a/Linphone/Utils/Extensions/ConfigExtension.swift +++ b/Linphone/Utils/Extensions/ConfigExtension.swift @@ -37,7 +37,6 @@ extension Config { public static func get() -> Config { if _instance == nil { let factoryPath = FileUtil.bundleFilePath("linphonerc-factory")! - let configDir = Factory.Instance.getConfigDir(context: nil) _instance = Config.newForSharedCore(appGroupId: Config.appGroupName, configFilename: "linphonerc", factoryConfigFilename: factoryPath)! } return _instance! diff --git a/Linphone/Utils/Extensions/IntExtension.swift b/Linphone/Utils/Extensions/IntExtension.swift index 0f457700a..b4dce52f2 100644 --- a/Linphone/Utils/Extensions/IntExtension.swift +++ b/Linphone/Utils/Extensions/IntExtension.swift @@ -19,6 +19,7 @@ import Foundation +// swiftlint:disable large_tuple extension Int { public func hmsFrom() -> (Int, Int, Int) { @@ -65,3 +66,4 @@ extension Int { return "\(second)" } } +// swiftlint:enable large_tuple diff --git a/Linphone/Utils/Extensions/URLExtension.swift b/Linphone/Utils/Extensions/URLExtension.swift index 10fb96e93..8a548a0b3 100644 --- a/Linphone/Utils/Extensions/URLExtension.swift +++ b/Linphone/Utils/Extensions/URLExtension.swift @@ -26,9 +26,7 @@ extension URL { return components?.url } var resourceSpecifier: String { - get { - let nrl : NSURL = self as NSURL - return nrl.resourceSpecifier ?? self.absoluteString - } + let nrl: NSURL = self as NSURL + return nrl.resourceSpecifier ?? self.absoluteString } } diff --git a/Linphone/Utils/FileUtils.swift b/Linphone/Utils/FileUtils.swift index a7f8323d8..d81046753 100644 --- a/Linphone/Utils/FileUtils.swift +++ b/Linphone/Utils/FileUtils.swift @@ -195,8 +195,7 @@ extension NSURL { if let pathExt = self.pathExtension, let mimeType = UTType(filenameExtension: pathExt)?.preferredMIMEType { return mimeType - } - else { + } else { return "application/octet-stream" } } @@ -206,8 +205,7 @@ extension URL { public func mimeType() -> String { if let mimeType = UTType(filenameExtension: self.pathExtension)?.preferredMIMEType { return mimeType - } - else { + } else { return "application/octet-stream" } } @@ -217,8 +215,7 @@ extension NSString { public func mimeType() -> String { if let mimeType = UTType(filenameExtension: self.pathExtension)?.preferredMIMEType { return mimeType - } - else { + } else { return "application/octet-stream" } } diff --git a/Linphone/Utils/LinphoneUtils.swift b/Linphone/Utils/LinphoneUtils.swift index d959bbf0e..98fc32bdc 100644 --- a/Linphone/Utils/LinphoneUtils.swift +++ b/Linphone/Utils/LinphoneUtils.swift @@ -61,7 +61,8 @@ class LinphoneUtils: NSObject { } public class func applyInternationalPrefix(core: Core, account: Account? = nil) -> Bool { - return account?.params?.useInternationalPrefixForCallsAndChats == true || core.defaultAccount?.params?.useInternationalPrefixForCallsAndChats == true + return account?.params?.useInternationalPrefixForCallsAndChats == true + || core.defaultAccount?.params?.useInternationalPrefixForCallsAndChats == true } public class func isEndToEndEncryptedChatAvailable(core: Core) -> Bool { diff --git a/Linphone/Utils/MagicSearchSingleton.swift b/Linphone/Utils/MagicSearchSingleton.swift index 0307c5bc9..223a9378f 100644 --- a/Linphone/Utils/MagicSearchSingleton.swift +++ b/Linphone/Utils/MagicSearchSingleton.swift @@ -76,7 +76,7 @@ final class MagicSearchSingleton: ObservableObject { $1.friend!.name!.lowercased().folding(options: .diacriticInsensitive, locale: .current) }) - var addedAvatarListModel : [ContactAvatarModel] = [] + var addedAvatarListModel: [ContactAvatarModel] = [] sortedLastSearch.forEach { searchResult in if searchResult.friend != nil { addedAvatarListModel.append( diff --git a/Linphone/Utils/PhotoPicker.swift b/Linphone/Utils/PhotoPicker.swift index 5bc4befb9..16a309adf 100644 --- a/Linphone/Utils/PhotoPicker.swift +++ b/Linphone/Utils/PhotoPicker.swift @@ -20,6 +20,7 @@ import SwiftUI import PhotosUI +// swiftlint:disable line_length struct PhotoPicker: UIViewControllerRepresentable { typealias UIViewControllerType = PHPickerViewController @@ -85,6 +86,8 @@ struct PhotoPicker: UIViewControllerRepresentable { } catch { } + } else { + Log.error("Could not load file representation: \(error?.localizedDescription ?? "unknown error")") } dispatchGroup.leave() @@ -104,6 +107,8 @@ struct PhotoPicker: UIViewControllerRepresentable { } catch { } + } else { + Log.error("Could not load file representation: \(error?.localizedDescription ?? "unknown error")") } dispatchGroup.leave() } @@ -119,7 +124,7 @@ struct PhotoPicker: UIViewControllerRepresentable { do { let path = FileManager.default.temporaryDirectory.appendingPathComponent((name.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "")) - let decodedData: () = try data.write(to: path) + _ = try data.write(to: path) if type == .video { let asset = AVURLAsset(url: path, options: nil) @@ -134,7 +139,7 @@ struct PhotoPicker: UIViewControllerRepresentable { let urlName = FileManager.default.temporaryDirectory.appendingPathComponent("preview_" + (name.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? "") + ".png") - let decodedData: () = try data.write(to: urlName) + _ = try data.write(to: urlName) } return path @@ -168,3 +173,5 @@ struct PhotoPicker: UIViewControllerRepresentable { } } } + +// swiftlint:enable line_length diff --git a/msgNotificationService/NotificationService.swift b/msgNotificationService/NotificationService.swift index 7a65dbadc..cce7555a8 100644 --- a/msgNotificationService/NotificationService.swift +++ b/msgNotificationService/NotificationService.swift @@ -98,7 +98,7 @@ class NotificationService: UNNotificationServiceExtension { if let bestAttemptContent = bestAttemptContent { createCore() - //if !lc!.config!.getBool(section: "app", key: "disable_chat_feature", defaultValue: false) { + // if !lc!.config!.getBool(section: "app", key: "disable_chat_feature", defaultValue: false) { Log.info("received push payload : \(bestAttemptContent.userInfo.debugDescription)") /* @@ -178,7 +178,7 @@ class NotificationService: UNNotificationServiceExtension { Log.info("Message not found for callid ["+callId+"]") } } - //} + // } serviceExtensionTimeWillExpire() } @@ -196,7 +196,7 @@ class NotificationService: UNNotificationServiceExtension { if let chatRoomInviteAddr = bestAttemptContent.userInfo["chat-room-addr"] as? String, !chatRoomInviteAddr.isEmpty { bestAttemptContent.title = NSLocalizedString("GC_MSG", comment: "") bestAttemptContent.body = "" - bestAttemptContent.sound = UNNotificationSound(named: UNNotificationSoundName("msg.caf")) // TODO : temporary fix, to be removed after flexisip release + bestAttemptContent.sound = UNNotificationSound(named: UNNotificationSoundName("msg.caf")) } else { bestAttemptContent.title = NSLocalizedString("Message received", comment: "") bestAttemptContent.body = NSLocalizedString("IM_MSG", comment: "")