Skip to content

Commit

Permalink
Merge pull request #141 from solaoi/fix_duplicated-loading-on-dual-re…
Browse files Browse the repository at this point in the history
…cord

マイクとデスクトップ音声の同時利用時におけるバックグラウンドでの多重読み込みを抑制
  • Loading branch information
solaoi authored May 6, 2024
2 parents 7aa4230 + f17931b commit deb848f
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 14 deletions.
15 changes: 15 additions & 0 deletions src-tauri/src/module/chat_online.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use reqwest::{
multipart, Client,
};
use serde_json::{json, Value};
use std::sync::Mutex;
use tauri::{AppHandle, Manager};

#[derive(Debug, Clone, serde::Serialize)]
Expand Down Expand Up @@ -403,3 +404,17 @@ impl ChatOnline {
});
}
}

pub static SINGLETON_INSTANCE: Mutex<Option<ChatOnline>> = Mutex::new(None);

pub fn initialize_chat_online(app_handle: AppHandle, speaker_language: String, note_id: u64) {
let mut singleton = SINGLETON_INSTANCE.lock().unwrap();
if singleton.is_none() {
*singleton = Some(ChatOnline::new(app_handle, speaker_language, note_id));
}
}

pub fn drop_chat_online() {
let mut singleton = SINGLETON_INSTANCE.lock().unwrap();
*singleton = None;
}
21 changes: 15 additions & 6 deletions src-tauri/src/module/record.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ use crossbeam_channel::{unbounded, Receiver};
use tauri::{api::path::data_dir, AppHandle, Manager};

use super::{
chat_online::ChatOnline, recognizer::MyRecognizer, sqlite::Sqlite, transcription,
transcription_online::TranscriptionOnline, writer::Writer,
chat_online, recognizer::MyRecognizer, sqlite::Sqlite, transcription, transcription_online,
writer::Writer,
};

pub struct Record {
Expand Down Expand Up @@ -187,20 +187,27 @@ impl Record {
*lock = true;
drop(lock);
if transcription_accuracy_clone.starts_with("online-transcript") {
let mut transcription_online = TranscriptionOnline::new(
transcription_online::initialize_transcription_online(
app_handle_clone,
transcription_accuracy_clone,
speaker_language_clone,
note_id,
);
transcription_online.start(stop_convert_rx_clone, false);
let mut lock =
transcription_online::SINGLETON_INSTANCE.lock().unwrap();
if let Some(singleton) = lock.as_mut() {
singleton.start(stop_convert_rx_clone, false);
}
} else if transcription_accuracy_clone.starts_with("online-chat") {
let mut chat_online = ChatOnline::new(
chat_online::initialize_chat_online(
app_handle_clone,
speaker_language_clone,
note_id,
);
chat_online.start(stop_convert_rx_clone, false);
let mut lock = chat_online::SINGLETON_INSTANCE.lock().unwrap();
if let Some(singleton) = lock.as_mut() {
singleton.start(stop_convert_rx_clone, false);
}
} else {
transcription::initialize_transcription(
app_handle_clone,
Expand Down Expand Up @@ -237,6 +244,8 @@ impl Record {
if !is_no_transcription {
stop_convert_tx.send(()).unwrap();
transcription::drop_transcription();
transcription_online::drop_transcription_online();
chat_online::drop_chat_online();
} else {
drop(stop_convert_tx)
}
Expand Down
21 changes: 15 additions & 6 deletions src-tauri/src/module/record_desktop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ use screencapturekit::{
use vosk::Recognizer;

use super::{
chat_online::ChatOnline, recognizer::MyRecognizer, sqlite::Sqlite, transcription,
transcription_online::TranscriptionOnline, writer::Writer,
chat_online, recognizer::MyRecognizer, sqlite::Sqlite, transcription, transcription_online,
writer::Writer,
};

pub struct RecordDesktop {
Expand Down Expand Up @@ -219,20 +219,27 @@ impl RecordDesktop {
*lock = true;
drop(lock);
if transcription_accuracy_clone.starts_with("online-transcript") {
let mut transcription_online = TranscriptionOnline::new(
transcription_online::initialize_transcription_online(
app_handle_clone,
transcription_accuracy_clone,
speaker_language_clone,
note_id,
);
transcription_online.start(stop_convert_rx_clone, false);
let mut lock =
transcription_online::SINGLETON_INSTANCE.lock().unwrap();
if let Some(singleton) = lock.as_mut() {
singleton.start(stop_convert_rx_clone, false);
}
} else if transcription_accuracy_clone.starts_with("online-chat") {
let mut chat_online = ChatOnline::new(
chat_online::initialize_chat_online(
app_handle_clone,
speaker_language_clone,
note_id,
);
chat_online.start(stop_convert_rx_clone, false);
let mut lock = chat_online::SINGLETON_INSTANCE.lock().unwrap();
if let Some(singleton) = lock.as_mut() {
singleton.start(stop_convert_rx_clone, false);
}
} else {
transcription::initialize_transcription(
app_handle_clone,
Expand Down Expand Up @@ -273,6 +280,8 @@ impl RecordDesktop {
if !is_no_transcription {
stop_convert_tx.send(()).unwrap();
transcription::drop_transcription();
transcription_online::drop_transcription_online();
chat_online::drop_chat_online();
} else {
drop(stop_convert_tx)
}
Expand Down
25 changes: 25 additions & 0 deletions src-tauri/src/module/transcription_online.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use reqwest::{
multipart, Client,
};
use serde_json::Value;
use std::sync::Mutex;
use tauri::{AppHandle, Manager};

#[derive(Debug, Clone, serde::Serialize)]
Expand Down Expand Up @@ -201,3 +202,27 @@ impl TranscriptionOnline {
});
}
}

pub static SINGLETON_INSTANCE: Mutex<Option<TranscriptionOnline>> = Mutex::new(None);

pub fn initialize_transcription_online(
app_handle: AppHandle,
transcription_accuracy: String,
speaker_language: String,
note_id: u64,
) {
let mut singleton = SINGLETON_INSTANCE.lock().unwrap();
if singleton.is_none() {
*singleton = Some(TranscriptionOnline::new(
app_handle,
transcription_accuracy,
speaker_language,
note_id,
));
}
}

pub fn drop_transcription_online() {
let mut singleton = SINGLETON_INSTANCE.lock().unwrap();
*singleton = None;
}
2 changes: 1 addition & 1 deletion src/components/molecules/TraceStartButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const TraceStartButton = (): JSX.Element => {
}

useEffect(() => {
const unlistenTraceUnCompletion = listen('traceUnCompletion', event => {
const unlistenTraceUnCompletion = listen('traceUnCompletion', () => {
setTracable(true)
})
const unlistenTraceCompletion = listen('traceCompletion', () => {
Expand Down
2 changes: 1 addition & 1 deletion src/lib/sqlite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ export default class DB {
}

public async saveNote(note_title: string): Promise<NoteType> {
const created_at_unixtime = Math.floor(new Date().getTime()/1000);
const created_at_unixtime = new Date().getTime();
const { lastInsertId } = await this.db.execute(
'INSERT INTO notes(note_title, created_at_unixtime) VALUES($1, $2)',
[note_title, created_at_unixtime]
Expand Down

0 comments on commit deb848f

Please sign in to comment.