fix: 🔧 修复自定义路径功能没有生效的问题

This commit is contained in:
viarotel 2023-10-26 18:11:52 +08:00
parent 517eecd2e1
commit 894b581988
11 changed files with 6 additions and 510 deletions

View File

@ -18,8 +18,8 @@ window.addEventListener('beforeunload', () => {
} }
}) })
appStore.onDidChange('scrcpy.common.adbPath', async (value, oldValue) => { appStore.onDidChange('common.adbPath', async (value, oldValue) => {
console.log('onDidChange.scrcpy.common.adbPath', value) console.log('onDidChange.common.adbPath', value)
if (value === oldValue) { if (value === oldValue) {
return false return false
@ -146,7 +146,7 @@ const watch = async (callback) => {
} }
export default () => { export default () => {
const binPath = appStore.get('scrcpy.common.adbPath') || adbPath const binPath = appStore.get('common.adbPath') || adbPath
client = Adb.createClient({ client = Adb.createClient({
bin: binPath, bin: binPath,

View File

@ -3,8 +3,8 @@ import appStore from '@electron/helpers/store.js'
import { adbPath, scrcpyPath } from '@electron/configs/index.js' import { adbPath, scrcpyPath } from '@electron/configs/index.js'
const shell = async (command, { stdout, stderr } = {}) => { const shell = async (command, { stdout, stderr } = {}) => {
const spawnPath = appStore.get('scrcpy.common.scrcpyPath') || scrcpyPath const spawnPath = appStore.get('common.scrcpyPath') || scrcpyPath
const ADB = appStore.get('scrcpy.common.adbPath') || adbPath const ADB = appStore.get('common.adbPath') || adbPath
const args = command.split(' ') const args = command.split(' ')
const scrcpyProcess = spawn(`"${spawnPath}"`, args, { const scrcpyProcess = spawn(`"${spawnPath}"`, args, {

View File

@ -1,9 +1,8 @@
import { createPinia } from 'pinia' import { createPinia } from 'pinia'
import { useScrcpyStore } from './scrcpy/index.js'
import { useDeviceStore } from './device/index.js' import { useDeviceStore } from './device/index.js'
import { usePreferenceStore } from './preference/index.js' import { usePreferenceStore } from './preference/index.js'
export { useScrcpyStore, useDeviceStore, usePreferenceStore } export { useDeviceStore, usePreferenceStore }
export default { export default {
install(app) { install(app) {
@ -12,7 +11,6 @@ export default {
app.use(store) app.use(store)
app.config.globalProperties.$store = { app.config.globalProperties.$store = {
scrcpy: useScrcpyStore(),
device: useDeviceStore(), device: useDeviceStore(),
preference: usePreferenceStore(), preference: usePreferenceStore(),
} }

View File

@ -1,185 +0,0 @@
import { defineStore } from 'pinia'
import { cloneDeep, mergeWith } from 'lodash-es'
import * as scrcpyModel from './model/index.js'
import { replaceIP } from '@/utils/index.js'
const $appStore = window.appStore
const { adbPath, scrcpyPath } = window.electron?.configs || {}
function mergeConfig(object, sources, { debug = false } = {}) {
const customizer = (objValue, srcValue) => {
if (debug) {
console.log('objValue', typeof objValue)
console.log('srcValue', typeof srcValue)
}
if (typeof srcValue === 'boolean') {
return srcValue
}
return srcValue || objValue
}
const value = mergeWith(cloneDeep(object), cloneDeep(sources), customizer)
return value
}
/**
* 获取 Scrcpy 默认配置
*/
function getDefaultConfig(type) {
const model = []
if (type) {
const handler = scrcpyModel[type]
model.push(...handler())
}
else {
// console.raw('scrcpyModel', scrcpyModel)
const values = Object.values(scrcpyModel)
model.push(...values.flatMap(handler => handler()))
}
const value = model.reduce((obj, item) => {
const { field, value } = item
obj[field] = value
return obj
}, {})
return value
}
export const useScrcpyStore = defineStore({
id: 'app-scrcpy',
state() {
return {
scope: $appStore.get('scrcpy.scope') || 'global',
model: { ...scrcpyModel },
defaultConfig: getDefaultConfig(),
config: {},
excludeKeys: ['--record-format', 'savePath', 'adbPath', 'scrcpyPath'],
}
},
actions: {
replaceIP,
getDefaultConfig,
init(scope = this.scope) {
let tempConfig = mergeConfig(
this.defaultConfig,
$appStore.get('scrcpy.global') || {},
)
if (scope !== 'global') {
const scopeConfig = $appStore.get(`scrcpy.${replaceIP(scope)}`) || {}
tempConfig = mergeConfig(tempConfig, scopeConfig)
}
this.config = tempConfig
return this.config
},
reset(scope) {
if (scope) {
this.scope = scope
$appStore.set(`scrcpy.${replaceIP(scope)}`, {})
}
else {
this.scope = 'global'
$appStore.set('scrcpy', {})
}
this.init()
},
resetDeps(type) {
switch (type) {
case 'adb':
$appStore.set('scrcpy.common.adbPath', '')
break
case 'scrcpy':
$appStore.set('scrcpy.common.scrcpyPath', '')
break
default:
$appStore.set('scrcpy.common.adbPath', '')
$appStore.set('scrcpy.common.scrcpyPath', '')
break
}
this.init()
},
setScope(value) {
this.scope = replaceIP(value)
$appStore.set('scrcpy.scope', this.scope)
this.init()
},
getStringConfig(scope = this.scope) {
const config = this.getConfig(scope)
if (!config) {
return ''
}
const value = Object.entries(config)
.reduce((arr, [key, value]) => {
if (!value) {
return arr
}
if (this.excludeKeys.includes(key)) {
return arr
}
if (typeof value === 'boolean') {
arr.push(key)
}
else {
arr.push(`${key}=${value}`)
}
return arr
}, [])
.join(' ')
// console.log('stringifyConfig.value', value)
return value
},
setConfig(data, scope = this.scope) {
const cloneData = cloneDeep(data)
// console.log('adbPath', adbPath)
// console.log('scrcpyPath', scrcpyPath)
if (data.adbPath === adbPath) {
delete cloneData.adbPath
}
if (data.scrcpyPath === scrcpyPath) {
delete cloneData.scrcpyPath
}
$appStore.set(`scrcpy.${replaceIP(scope)}`, cloneData)
this.init(scope)
},
getConfig(scope = this.scope) {
const value = this.init(scope)
return value
},
getModel(key, params) {
const handler = this.model[key]
const value = handler(params)
// console.log('setModel.value', value)
return value
},
setModel(key, params) {
const handler = this.model[key]
const value = handler(params)
// console.log('setModel.value', value)
this.model[key] = () => value
return this.model
},
},
})

View File

@ -1,17 +0,0 @@
import { t } from '@/locales/index.js'
export default () => {
// "[server] INFO: List of audio encoders:"
// "--audio-codec=opus --audio-encoder='c2.android.opus.encoder'"
// "--audio-codec=aac --audio-encoder='c2.android.aac.encoder'"
// "--audio-codec=aac --audio-encoder='OMX.google.aac.encoder'"
return [
{
label: t('preferences.audio.disable.name'),
field: '--no-audio',
type: 'switch',
value: false,
placeholder: t('preferences.audio.disable.placeholder'),
},
]
}

View File

@ -1,39 +0,0 @@
import { t } from '@/locales/index.js'
export default () => {
const { adbPath, scrcpyPath, desktopPath } = window?.electron?.configs || {}
return [
{
label: t('preferences.common.file.name'),
type: 'input.path',
field: 'savePath',
value: desktopPath,
placeholder: t('preferences.common.file.placeholder'),
tips: t('preferences.common.file.tips'),
properties: ['openDirectory'],
},
{
label: t('preferences.common.adb.name'),
field: 'adbPath',
type: 'input.path',
value: adbPath,
placeholder: t('preferences.common.adb.placeholder'),
tips: t('preferences.common.adb.tips'),
properties: ['openFile'],
filters: [{ name: t('preferences.common.adb.name'), extensions: ['*'] }],
},
{
label: t('preferences.common.scrcpy.name'),
field: 'scrcpyPath',
type: 'input.path',
value: scrcpyPath,
placeholder: t('preferences.common.scrcpy.placeholder'),
tips: t('preferences.common.scrcpy.tips'),
properties: ['openFile'],
filters: [
{ name: t('preferences.common.scrcpy.name'), extensions: ['*'] },
],
},
]
}

View File

@ -1,44 +0,0 @@
import { t } from '@/locales/index.js'
export default () => {
return [
{
label: t('preferences.device.show-touch.name'),
type: 'switch',
field: '--show-touches',
value: false,
placeholder: t('preferences.device.show-touch.placeholder'),
tips: t('preferences.device.show-touch.tips'),
},
{
label: t('preferences.device.stay-awake.name'),
type: 'switch',
field: '--stay-awake',
value: false,
placeholder: t('preferences.device.stay-awake.placeholder'),
tips: t('preferences.device.stay-awake.tips'),
},
{
label: t('preferences.device.control-in-close-screen.name'),
type: 'switch',
field: '--turn-screen-off',
value: false,
placeholder: t('preferences.device.control-in-close-screen.placeholder'),
},
{
label: t('preferences.device.control-end-video.name'),
type: 'switch',
field: '--power-off-on-close',
value: false,
placeholder: t('preferences.device.control-end-video.placeholder'),
},
{
label: t('preferences.device.control-in-stop-charging.name'),
type: 'switch',
field: '--no-power-on',
value: false,
placeholder: t('preferences.device.control-in-stop-charging.placeholder'),
tips: t('preferences.device.control-in-stop-charging.tips'),
},
]
}

View File

@ -1,6 +0,0 @@
export { default as custom } from './custom/index.js'
export { default as video } from './video/index.js'
export { default as device } from './device/index.js'
export { default as window } from './window/index.js'
export { default as audio } from './audio/index.js'
export { default as record } from './record/index.js'

View File

@ -1,23 +0,0 @@
import { t } from '@/locales/index.js'
export default () => {
return [
{
label: t('preferences.record.format.name'),
type: 'select',
field: '--record-format',
value: 'mp4',
placeholder: t('preferences.record.format.placeholder'),
options: [
{
label: 'mp4',
value: 'mp4',
},
{
label: 'mkv',
value: 'mkv',
},
],
},
]
}

View File

@ -1,154 +0,0 @@
import { t } from '@/locales/index.js'
const getDisplayOptions = (display = []) =>
display?.map(value => ({ label: value, value })) || []
export default ({ display } = {}) => {
const displayOptions = display?.length
? getDisplayOptions(display)
: [
{ label: '0', value: '0' },
{ label: '1', value: '1' },
{ label: '2', value: '2' },
]
return [
{
label: t('preferences.video.resolution.name'),
type: 'input.number',
field: '--max-size',
value: '',
placeholder: t('preferences.video.resolution.placeholder'),
},
{
label: t('preferences.video.bit.name'),
type: 'input',
field: '--video-bit-rate',
value: '',
placeholder: t('preferences.video.bit.placeholder'),
},
{
label: t('preferences.video.refresh-rate.name'),
type: 'input.number',
field: '--max-fps',
value: '',
placeholder: t('preferences.video.refresh-rate.placeholder'),
},
{
label: t('preferences.video.decoder.name'),
type: 'select',
field: '--video-codec',
value: '',
placeholder: t('preferences.video.decoder.placeholder'),
options: [
{
label: 'h264',
value: 'h264',
},
{
label: 'h265',
value: 'h265',
},
{
label: 'av1',
value: 'av1',
},
],
},
{
label: t('preferences.video.encoder.name'),
type: 'select',
field: '--video-encoder',
value: '',
placeholder: t('preferences.video.encoder.placeholder'),
// "[server] INFO: List of video encoders:"
// "--video-codec=h264 --video-encoder='OMX.qcom.video.encoder.avc'"
// "--video-codec=h264 --video-encoder='c2.android.avc.encoder'"
// "--video-codec=h264 --video-encoder='OMX.google.h264.encoder'"
// "--video-codec=h265 --video-encoder='OMX.qcom.video.encoder.hevc'"
// "--video-codec=h265 --video-encoder='c2.android.hevc.encoder'"
options: [
{
label: 'Android HEVC(H.265) ',
value: 'OMX.qcom.video.encoder.avc',
},
{
label: 'Qualcomm HEVC(H.265) ',
value: 'c2.android.avc.encoder',
},
{
label: 'Google H.264(AVC)',
value: 'OMX.google.h264.encoder',
},
{
label: 'Android AVC(H.264) ',
value: 'OMX.qcom.video.encoder.hevc',
},
{
label: 'Qualcomm AVC(H.264)',
value: 'c2.android.hevc.encoder',
},
],
},
{
label: t('preferences.video.screen-rotation.name'),
type: 'select',
field: '--rotation',
value: '',
placeholder: t('preferences.video.screen-rotation.placeholder'),
options: [
{ label: '0°', value: '0' },
{ label: '-90°', value: '1' },
{ label: '180°', value: '2' },
{ label: '90°', value: '3' },
],
},
{
label: t('preferences.video.screen-cropping.name'),
type: 'input',
field: '--crop',
value: '',
placeholder: t('preferences.video.screen-cropping.placeholder'),
},
{
label: t('preferences.video.multi-display.name'),
type: 'select',
field: '--display',
value: '',
placeholder: t('preferences.video.multi-display.placeholder'),
options: displayOptions,
props: {
filterable: true,
allowCreate: true,
},
},
{
label: t('preferences.video.video-buffering.name'),
type: 'input.number',
field: '--display-buffer',
value: '',
placeholder: t('preferences.video.video-buffering.placeholder'),
},
{
label: t('preferences.video.audio-buffering.name'),
type: 'input.number',
field: '--audio-buffer',
value: '',
placeholder: t('preferences.video.video-buffering.placeholder'),
},
{
label: t('preferences.video.receiver-buffering.name'),
type: 'input.number',
field: '--v4l2-buffer',
value: '',
placeholder: t('preferences.video.video-buffering.placeholder'),
},
{
label: t('preferences.video.disable.name'),
type: 'switch',
field: '--no-video',
value: false,
placeholder: t('preferences.video.disable.placeholder'),
},
]
}

View File

@ -1,34 +0,0 @@
import { t } from '@/locales/index.js'
export default () => {
return [
{
label: t('preferences.window.borderless.name'),
field: '--window-borderless',
type: 'switch',
value: false,
placeholder: t('preferences.window.borderless.placeholder'),
},
{
label: t('preferences.window.full-screen.name'),
field: '--fullscreen',
type: 'switch',
value: false,
placeholder: t('preferences.window.full-screen.placeholder'),
},
{
label: t('preferences.window.always-top.name'),
field: '--always-on-top',
type: 'switch',
value: false,
placeholder: t('preferences.window.always-top.placeholder'),
},
{
label: t('preferences.window.disable-screen-saver.name'),
field: '--disable-screensaver',
type: 'switch',
value: false,
placeholder: t('preferences.window.disable-screen-saver.placeholder'),
},
]
}