Skip to content

Commit 752a923

Browse files
committed
feat: show transcription preview when triggered from entry
1 parent 9c9b6cc commit 752a923

File tree

6 files changed

+30
-17
lines changed

6 files changed

+30
-17
lines changed

ios/Runner/WhisperKitRunner.swift

+8-6
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ public class WhisperKitRunner: NSObject, FlutterStreamHandler {
2828
case "transcribe":
2929
guard let args = call.arguments as? [String: Any] else { return }
3030
let audioFilePath = args["audioFilePath"] as! String
31-
31+
32+
if (self.whisperKit == nil) {
33+
if (self.eventSink != nil) {
34+
self.eventSink!(["Initializing model...", ""])
35+
}
36+
}
37+
3238
Task {
3339
if (self.whisperKit == nil) {
34-
if (self.eventSink != nil) {
35-
self.eventSink!(["initializing model...", ""])
36-
}
37-
3840
self.whisperKit = try? await WhisperKit(model: self.model,
3941
verbose: true,
4042
prewarm: true)
@@ -63,7 +65,7 @@ public class WhisperKitRunner: NSObject, FlutterStreamHandler {
6365
transcriptionProgressChannel.setStreamHandler(self)
6466
}
6567

66-
private func sendTranscriptionProgressEvent(progress: TranscriptionProgress)->Bool? {
68+
private func sendTranscriptionProgressEvent(progress: TranscriptionProgress) -> Bool? {
6769
guard let eventSink = eventSink else {
6870
return nil
6971
}

lib/blocs/audio/player_cubit.dart

+3-3
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,12 @@ class AudioPlayerCubit extends Cubit<AudioPlayerState> {
8484
}
8585
}
8686

87-
Future<void> transcribe() async {
87+
Future<bool> transcribe() async {
8888
if (state.audioNote == null) {
89-
return;
89+
return false;
9090
}
9191

92-
await _asrService.enqueue(entry: state.audioNote!);
92+
return _asrService.enqueue(entry: state.audioNote!);
9393
}
9494

9595
Future<void> seek(Duration newPosition) async {

lib/services/asr_service.dart

+3-1
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,13 @@ class AsrService {
163163
running = false;
164164
}
165165

166-
Future<void> enqueue({required JournalAudio entry}) async {
166+
Future<bool> enqueue({required JournalAudio entry}) async {
167+
final isQueueEmpty = queue.isEmpty;
167168
queue.add(entry);
168169
if (!running) {
169170
unawaited(_start());
170171
}
172+
return isQueueEmpty;
171173
}
172174

173175
void captureException(

lib/widgets/audio/audio_player.dart

+8-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import 'package:lotti/classes/journal_entities.dart';
1010
import 'package:lotti/get_it.dart';
1111
import 'package:lotti/logic/persistence_logic.dart';
1212
import 'package:lotti/themes/theme.dart';
13+
import 'package:lotti/widgets/audio/transcription_progress_modal.dart';
1314
import 'package:lotti/widgets/journal/entry_tools.dart';
1415
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
1516

@@ -107,7 +108,13 @@ class AudioPlayerWidget extends StatelessWidget {
107108
color: Theme.of(context).colorScheme.outline,
108109
onPressed: () async {
109110
await cubit.setAudioNote(journalAudio);
110-
await cubit.transcribe();
111+
final isQueueEmpty = await cubit.transcribe();
112+
113+
if (isQueueEmpty) {
114+
if (!context.mounted) return;
115+
await TranscriptionProgressModal.show(context);
116+
}
117+
111118
await Future<void>.delayed(
112119
const Duration(milliseconds: 100),
113120
);

macos/Runner/WhisperKitRunner.swift

+7-5
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ public class WhisperKitRunner: NSObject, FlutterStreamHandler {
2929
guard let args = call.arguments as? [String: Any] else { return }
3030
let audioFilePath = args["audioFilePath"] as! String
3131

32+
if (self.whisperKit == nil) {
33+
if (self.eventSink != nil) {
34+
self.eventSink!(["Initializing model...", ""])
35+
}
36+
}
37+
3238
Task {
3339
if (self.whisperKit == nil) {
34-
if (self.eventSink != nil) {
35-
self.eventSink!(["initializing model...", ""])
36-
}
37-
3840
self.whisperKit = try? await WhisperKit(model: self.model,
3941
verbose: true,
4042
prewarm: true)
@@ -63,7 +65,7 @@ public class WhisperKitRunner: NSObject, FlutterStreamHandler {
6365
transcriptionProgressChannel.setStreamHandler(self)
6466
}
6567

66-
private func sendTranscriptionProgressEvent(progress: TranscriptionProgress)->Bool? {
68+
private func sendTranscriptionProgressEvent(progress: TranscriptionProgress) -> Bool? {
6769
guard let eventSink = eventSink else {
6870
return nil
6971
}

pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: lotti
22
description: Achieve your goals and keep your data private with Lotti.
33
publish_to: 'none'
4-
version: 0.9.443+2428
4+
version: 0.9.443+2429
55

66
msix_config:
77
display_name: LottiApp

0 commit comments

Comments
 (0)