@@ -97,6 +97,7 @@ let appReducer = Reducer<AppState, AppAction, AppEnvironment> { state, action, e
97
97
request. shouldReportPartialResults = true
98
98
request. requiresOnDeviceRecognition = false
99
99
return environment. speechClient. recognitionTask ( request)
100
+ . animation ( )
100
101
. catchToEffect ( AppAction . speech)
101
102
102
103
@unknown default :
@@ -159,9 +160,63 @@ struct SpeechRecognitionView_Previews: PreviewProvider {
159
160
reducer: appReducer,
160
161
environment: AppEnvironment (
161
162
mainQueue: QueueScheduler . main,
162
- speechClient: . live
163
+ speechClient: . lorem
163
164
)
164
165
)
165
166
)
166
167
}
167
168
}
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