Skip to content

Commit 311c2ac

Browse files
committed
Use a 'lorem' speech client in previews. (#1211)
* Use a 'lorem' speech client in previews. * fix * wip
1 parent 6bc2c6a commit 311c2ac

File tree

1 file changed

+56
-1
lines changed

1 file changed

+56
-1
lines changed

Examples/SpeechRecognition/SpeechRecognition/SpeechRecognition.swift

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ let appReducer = Reducer<AppState, AppAction, AppEnvironment> { state, action, e
9797
request.shouldReportPartialResults = true
9898
request.requiresOnDeviceRecognition = false
9999
return environment.speechClient.recognitionTask(request)
100+
.animation()
100101
.catchToEffect(AppAction.speech)
101102

102103
@unknown default:
@@ -159,9 +160,63 @@ struct SpeechRecognitionView_Previews: PreviewProvider {
159160
reducer: appReducer,
160161
environment: AppEnvironment(
161162
mainQueue: QueueScheduler.main,
162-
speechClient: .live
163+
speechClient: .lorem
163164
)
164165
)
165166
)
166167
}
167168
}
169+
170+
extension SpeechClient {
171+
static var lorem: Self {
172+
var isRunning = false
173+
return Self(
174+
finishTask: {
175+
.fireAndForget {
176+
isRunning = false
177+
}
178+
},
179+
recognitionTask: { _ in
180+
isRunning = true
181+
var finalText = """
182+
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor \
183+
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud \
184+
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure \
185+
dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. \
186+
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt \
187+
mollit anim id est laborum.
188+
"""
189+
var text = ""
190+
191+
return .run { subscriber in
192+
return Timer.publish(every: 0.33, on: .main, in: .default)
193+
.autoconnect()
194+
.prefix { _ in !finalText.isEmpty && isRunning }
195+
.sink { _ in
196+
let word = finalText.prefix { $0 != " " }
197+
finalText.removeFirst(word.count)
198+
if finalText.first == " " {
199+
finalText.removeFirst()
200+
}
201+
text += word + " "
202+
subscriber.send(
203+
.taskResult(
204+
.init(
205+
bestTranscription: .init(
206+
formattedString: text,
207+
segments: []
208+
),
209+
isFinal: false,
210+
transcriptions: []
211+
)
212+
)
213+
)
214+
}
215+
}
216+
},
217+
requestAuthorization: {
218+
.init(value: .authorized)
219+
}
220+
)
221+
}
222+
}

0 commit comments

Comments
 (0)