Feat: Settings for learning lang (#641)

* refactor settings

* refactor constants

* add settings for native/learning language

* setup langugage for transcribe

* use 2 letter code for echogarden

* AI commands support multiple language

* update languages constant

* fix sentry error

* fix context menu

* show camdict when only learning English

* add en-GB

* recording assess support multiple languages

* fix ai command

* refactor
This commit is contained in:
an-lee
2024-05-29 15:13:52 +08:00
committed by GitHub
parent ef0bfa6544
commit d8231ca97c
33 changed files with 679 additions and 420 deletions

View File

@@ -178,7 +178,7 @@ class RecordingsHandler {
return await recording.upload();
}
private async assess(event: IpcMainEvent, id: string) {
private async assess(event: IpcMainEvent, id: string, language?: string) {
const recording = await Recording.findOne({
where: {
id,
@@ -193,7 +193,7 @@ class RecordingsHandler {
}
return recording
.assess()
.assess(language)
.then((res) => {
return res;
})

View File

@@ -146,7 +146,7 @@ export class Recording extends Model<Recording> {
});
}
async assess() {
async assess(language?: string) {
const assessment = await PronunciationAssessment.findOne({
where: { targetId: this.id, targetType: "Recording" },
});
@@ -171,6 +171,7 @@ export class Recording extends Model<Recording> {
const result = await sdk.pronunciationAssessment({
filePath: this.filePath,
reference: this.referenceText,
language,
});
const resultJson = camelcaseKeys(

View File

@@ -34,7 +34,7 @@ const libraryPath = () => {
settings.setSync(
"library",
process.env.LIBRARY_PATH ||
path.join(app.getPath("documents"), LIBRARY_PATH_SUFFIX)
path.join(app.getPath("documents"), LIBRARY_PATH_SUFFIX)
);
} else if (path.parse(_library).base !== LIBRARY_PATH_SUFFIX) {
settings.setSync("library", path.join(_library, LIBRARY_PATH_SUFFIX));
@@ -92,9 +92,16 @@ const userDataPath = () => {
return userData;
};
export default {
registerIpcHandlers: () => {
ipcMain.handle("settings-get", (_event, key) => {
return settings.getSync(key);
});
ipcMain.handle("settings-set", (_event, key, value) => {
settings.setSync(key, value);
});
ipcMain.handle("settings-get-library", (_event) => {
libraryPath();
return settings.getSync("library");

View File

@@ -16,7 +16,7 @@ import whisper from "@main/whisper";
import fs from "fs-extra";
import "@main/i18n";
import log from "@main/logger";
import { WEB_API_URL, REPO_URL, WEB_API_URLS } from "@/constants";
import { WEB_API_URL, REPO_URL } from "@/constants";
import { AudibleProvider, TedProvider, YoutubeProvider } from "@main/providers";
import Ffmpeg from "@main/ffmpeg";
import { Waveform } from "./waveform";
@@ -140,10 +140,6 @@ main.init = () => {
} = bounds;
const { navigatable = false } = options || {};
const OAUTH_URL_REGEX = new RegExp(
`^("${WEB_API_URLS.map((url) => `${url}/oauth`).join("|")})`
);
logger.debug("view-load", url);
const view = new WebContentsView();
mainWindow.contentView.addChildView(view);
@@ -191,10 +187,6 @@ main.init = () => {
});
logger.debug("will-redirect", detail.url);
if (detail.url.match(OAUTH_URL_REGEX)) {
logger.debug("prevent redirect", detail.url);
detail.preventDefault();
}
});
view.webContents.on("will-navigate", (detail) => {
@@ -204,7 +196,7 @@ main.init = () => {
});
logger.debug("will-navigate", detail.url);
if (!navigatable || detail.url.match(OAUTH_URL_REGEX)) {
if (!navigatable) {
logger.debug("prevent navigation", detail.url);
detail.preventDefault();
}