* Update copyright holding and dates * compound IDE Macros updated * update copyright * update copyrights done * update templates and README
48 lines
1.5 KiB
Swift
48 lines
1.5 KiB
Swift
//
|
|
// Copyright 2025 Element Creations Ltd.
|
|
// Copyright 2023-2025 New Vector Ltd.
|
|
//
|
|
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
|
// Please see LICENSE files in the repository root for full details.
|
|
//
|
|
|
|
import Combine
|
|
import Foundation
|
|
|
|
enum VoiceMessageRecorderError: Error {
|
|
case missingRecordingFile
|
|
case previewNotAvailable
|
|
case audioRecorderError(AudioRecorderError)
|
|
case waveformAnalysisError
|
|
case failedSendingVoiceMessage
|
|
}
|
|
|
|
enum VoiceMessageRecorderAction {
|
|
case didStartRecording(audioRecorder: AudioRecorderProtocol)
|
|
case didStopRecording(previewState: AudioPlayerState, url: URL)
|
|
case didFailWithError(error: VoiceMessageRecorderError)
|
|
}
|
|
|
|
protocol VoiceMessageRecorderProtocol {
|
|
var previewAudioPlayerState: AudioPlayerState? { get }
|
|
var isRecording: Bool { get }
|
|
var recordingURL: URL? { get }
|
|
|
|
var actions: AnyPublisher<VoiceMessageRecorderAction, Never> { get }
|
|
|
|
func startRecording() async
|
|
func stopRecording() async
|
|
func cancelRecording() async
|
|
func startPlayback() async -> Result<Void, VoiceMessageRecorderError>
|
|
func pausePlayback()
|
|
func stopPlayback() async
|
|
func seekPlayback(to progress: Double) async
|
|
func deleteRecording() async
|
|
|
|
func sendVoiceMessage(timelineController: TimelineControllerProtocol,
|
|
audioConverter: AudioConverterProtocol) async -> Result<Void, VoiceMessageRecorderError>
|
|
}
|
|
|
|
// sourcery: AutoMockable
|
|
extension VoiceMessageRecorderProtocol { }
|