mirror of
https://github.com/HiMeditator/auto-caption.git
synced 2026-02-11 10:04:47 +08:00
160 lines
4.4 KiB
TypeScript
160 lines
4.4 KiB
TypeScript
import {
|
|
UILanguage, UITheme, Styles, Controls,
|
|
CaptionItem, FullConfig
|
|
} from '../types'
|
|
import { app, BrowserWindow } from 'electron'
|
|
import * as path from 'path'
|
|
import * as fs from 'fs'
|
|
|
|
const defaultStyles: Styles = {
|
|
lineBreak: 1,
|
|
fontFamily: 'sans-serif',
|
|
fontSize: 24,
|
|
fontColor: '#000000',
|
|
fontWeight: 4,
|
|
background: '#dbe2ef',
|
|
opacity: 80,
|
|
showPreview: true,
|
|
transDisplay: true,
|
|
transFontFamily: 'sans-serif',
|
|
transFontSize: 24,
|
|
transFontColor: '#000000',
|
|
transFontWeight: 4,
|
|
textShadow: false,
|
|
offsetX: 2,
|
|
offsetY: 2,
|
|
blur: 0,
|
|
textShadowColor: '#ffffff'
|
|
};
|
|
|
|
const defaultControls: Controls = {
|
|
sourceLang: 'en',
|
|
targetLang: 'zh',
|
|
engine: 'gummy',
|
|
audio: 0,
|
|
engineEnabled: false,
|
|
API_KEY: '',
|
|
modelPath: '',
|
|
translation: true,
|
|
customized: false,
|
|
customizedApp: '',
|
|
customizedCommand: ''
|
|
};
|
|
|
|
|
|
class AllConfig {
|
|
uiLanguage: UILanguage = 'zh';
|
|
leftBarWidth: number = 8;
|
|
uiTheme: UITheme = 'system';
|
|
styles: Styles = {...defaultStyles};
|
|
controls: Controls = {...defaultControls};
|
|
captionLog: CaptionItem[] = [];
|
|
|
|
constructor() {}
|
|
|
|
public readConfig() {
|
|
const configPath = path.join(app.getPath('userData'), 'config.json')
|
|
if(fs.existsSync(configPath)){
|
|
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'))
|
|
if(config.uiLanguage) this.uiLanguage = config.uiLanguage
|
|
if(config.uiTheme) this.uiTheme = config.uiTheme
|
|
if(config.leftBarWidth) this.leftBarWidth = config.leftBarWidth
|
|
if(config.styles) this.setStyles(config.styles)
|
|
if(process.platform !== 'win32' && process.platform !== 'darwin') config.controls.audio = 1
|
|
if(config.controls) this.setControls(config.controls)
|
|
console.log('[INFO] Read Config from:', configPath)
|
|
}
|
|
}
|
|
|
|
public writeConfig() {
|
|
const config = {
|
|
uiLanguage: this.uiLanguage,
|
|
uiTheme: this.uiTheme,
|
|
leftBarWidth: this.leftBarWidth,
|
|
controls: this.controls,
|
|
styles: this.styles
|
|
}
|
|
const configPath = path.join(app.getPath('userData'), 'config.json')
|
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2))
|
|
console.log('[INFO] Write Config to:', configPath)
|
|
}
|
|
|
|
public getFullConfig(): FullConfig {
|
|
return {
|
|
platform: process.platform,
|
|
uiLanguage: this.uiLanguage,
|
|
uiTheme: this.uiTheme,
|
|
leftBarWidth: this.leftBarWidth,
|
|
styles: this.styles,
|
|
controls: this.controls,
|
|
captionLog: this.captionLog
|
|
}
|
|
}
|
|
|
|
public setStyles(args: Object) {
|
|
for(let key in this.styles) {
|
|
if(key in args) {
|
|
this.styles[key] = args[key]
|
|
}
|
|
}
|
|
console.log('[INFO] Set Styles:', this.styles)
|
|
}
|
|
|
|
public resetStyles() {
|
|
this.setStyles(defaultStyles)
|
|
}
|
|
|
|
public sendStyles(window: BrowserWindow) {
|
|
window.webContents.send('both.styles.set', this.styles)
|
|
console.log(`[INFO] Send Styles to #${window.id}:`, this.styles)
|
|
}
|
|
|
|
public setControls(args: Object) {
|
|
const engineEnabled = this.controls.engineEnabled
|
|
for(let key in this.controls){
|
|
if(key in args) {
|
|
this.controls[key] = args[key]
|
|
}
|
|
}
|
|
this.controls.engineEnabled = engineEnabled
|
|
console.log('[INFO] Set Controls:', this.controls)
|
|
}
|
|
|
|
public sendControls(window: BrowserWindow) {
|
|
window.webContents.send('control.controls.set', this.controls)
|
|
console.log(`[INFO] Send Controls to #${window.id}:`, this.controls)
|
|
}
|
|
|
|
public updateCaptionLog(log: CaptionItem) {
|
|
let command: 'add' | 'upd' = 'add'
|
|
if(
|
|
this.captionLog.length &&
|
|
this.captionLog[this.captionLog.length - 1].index === log.index &&
|
|
this.captionLog[this.captionLog.length - 1].time_s === log.time_s
|
|
) {
|
|
this.captionLog.splice(this.captionLog.length - 1, 1, log)
|
|
command = 'upd'
|
|
}
|
|
else {
|
|
this.captionLog.push(log)
|
|
}
|
|
for(const window of BrowserWindow.getAllWindows()){
|
|
this.sendCaptionLog(window, command)
|
|
}
|
|
}
|
|
|
|
public sendCaptionLog(window: BrowserWindow, command: 'add' | 'upd' | 'set') {
|
|
if(command === 'add'){
|
|
window.webContents.send(`both.captionLog.add`, this.captionLog[this.captionLog.length - 1])
|
|
}
|
|
else if(command === 'upd'){
|
|
window.webContents.send(`both.captionLog.upd`, this.captionLog[this.captionLog.length - 1])
|
|
}
|
|
else if(command === 'set'){
|
|
window.webContents.send(`both.captionLog.set`, this.captionLog)
|
|
}
|
|
}
|
|
}
|
|
|
|
export const allConfig = new AllConfig()
|