Revert vite build
This commit is contained in:
@@ -1,22 +1,25 @@
|
||||
import upperFirst from 'lodash/upperFirst'
|
||||
import camelCase from 'lodash/camelCase'
|
||||
|
||||
const requireComponent = import.meta.glob(['./**/*.vue', '!./**/components/**/*.vue'], { eager: true })
|
||||
const vueFileRxp = /\.vue$/
|
||||
const vueIndexFileRxp = /\/index\.vue$/
|
||||
const requireComponent = require.context('./', true, /\.vue$/)
|
||||
|
||||
const vueFileRxp = /\.vue$/
|
||||
|
||||
export default app => {
|
||||
Object.entries(requireComponent).forEach(([path, module]) => {
|
||||
path = path.replace(/^\.\//, '')
|
||||
let fileName = vueIndexFileRxp.test(path)
|
||||
? path.replace(vueIndexFileRxp, '')
|
||||
: path.replace(vueFileRxp, '')
|
||||
requireComponent.keys().forEach(fileName => {
|
||||
const filePath = fileName.replace(/^\.\//, '')
|
||||
|
||||
let componentName = upperFirst(camelCase(fileName))
|
||||
if (!filePath.split('/').every((path, index, arr) => {
|
||||
const char = path.charAt(0)
|
||||
return vueFileRxp.test(path) || char.toUpperCase() !== char || arr[index + 1] == 'index.vue'
|
||||
})) return
|
||||
|
||||
// console.log(componentName)
|
||||
const componentConfig = requireComponent(fileName)
|
||||
|
||||
app.component(componentName, module.default)
|
||||
let componentName = upperFirst(camelCase(filePath.replace(/\.\w+$/, '')))
|
||||
|
||||
if (componentName.endsWith('Index')) componentName = componentName.replace(/Index$/, '')
|
||||
|
||||
app.component(componentName, componentConfig.default || componentConfig)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -3,13 +3,12 @@ import { getDuration, getPlaybackRate, getCurrentTime } from '@renderer/plugins/
|
||||
import { isPlay, musicInfo, playMusicInfo } from '@renderer/store/player/state'
|
||||
import { playProgress } from '@renderer/store/player/playProgress'
|
||||
import { pause, play, playNext, playPrev, stop } from '@renderer/core/player'
|
||||
import silenceAudio from '@renderer/assets/medias/Silence02s.mp3'
|
||||
|
||||
export default () => {
|
||||
// 创建一个空白音频以保持对 Media Session 的注册
|
||||
const emptyAudio = new Audio()
|
||||
emptyAudio.autoplay = false
|
||||
emptyAudio.src = silenceAudio
|
||||
emptyAudio.src = require('@renderer/assets/medias/Silence02s.mp3')
|
||||
emptyAudio.controls = false
|
||||
emptyAudio.preload = 'auto'
|
||||
emptyAudio.onplaying = () => {
|
||||
|
||||
@@ -16,41 +16,40 @@ import {
|
||||
import { appSetting } from '@renderer/store/setting'
|
||||
|
||||
const cache = new Map<string, AudioBuffer>()
|
||||
const loadBuffer = async(name: string) => {
|
||||
const path = (await import(`../../../assets/medias/filters/${name.replace('.wav', '')}.wav`)).default as string
|
||||
return new Promise<AudioBuffer>((resolve, reject) => {
|
||||
if (cache.has(path)) {
|
||||
resolve(cache.get(path) as AudioBuffer)
|
||||
return
|
||||
}
|
||||
// Load buffer asynchronously
|
||||
let request = new XMLHttpRequest()
|
||||
request.open('GET', path, true)
|
||||
request.responseType = 'arraybuffer'
|
||||
const loadBuffer = async(name: string) => new Promise<AudioBuffer>((resolve, reject) => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||
const path = require('@renderer/assets/medias/filters/' + name) as string
|
||||
if (cache.has(path)) {
|
||||
resolve(cache.get(path) as AudioBuffer)
|
||||
return
|
||||
}
|
||||
// Load buffer asynchronously
|
||||
let request = new XMLHttpRequest()
|
||||
request.open('GET', path, true)
|
||||
request.responseType = 'arraybuffer'
|
||||
|
||||
request.onload = function() {
|
||||
// Asynchronously decode the audio file data in request.response
|
||||
void getAudioContext().decodeAudioData(request.response, (buffer) => {
|
||||
if (!buffer) {
|
||||
reject(new Error('error decoding file data: ' + path))
|
||||
return
|
||||
}
|
||||
cache.set(path, buffer)
|
||||
resolve(buffer)
|
||||
},
|
||||
function(error) {
|
||||
reject(error)
|
||||
console.error('decodeAudioData error', error)
|
||||
})
|
||||
}
|
||||
request.onload = function() {
|
||||
// Asynchronously decode the audio file data in request.response
|
||||
void getAudioContext().decodeAudioData(request.response, (buffer) => {
|
||||
if (!buffer) {
|
||||
reject(new Error('error decoding file data: ' + path))
|
||||
return
|
||||
}
|
||||
cache.set(path, buffer)
|
||||
resolve(buffer)
|
||||
},
|
||||
function(error) {
|
||||
reject(error)
|
||||
console.error('decodeAudioData error', error)
|
||||
})
|
||||
}
|
||||
|
||||
request.onerror = function() {
|
||||
reject(new Error('XHR error'))
|
||||
}
|
||||
request.onerror = function() {
|
||||
reject(new Error('XHR error'))
|
||||
}
|
||||
|
||||
request.send()
|
||||
})
|
||||
}
|
||||
request.send()
|
||||
})
|
||||
|
||||
export default () => {
|
||||
// console.log(appSetting['player.soundEffect.panner.enable'])
|
||||
|
||||
@@ -31,6 +31,5 @@
|
||||
}
|
||||
if (/theme=(.+)(#|$)/.test(window.location.search)) applyThemeColor(RegExp.$1)
|
||||
</script>
|
||||
<script type="module" src="/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import '@common/error'
|
||||
import 'virtual:svg-icons-register'
|
||||
import { createApp } from 'vue'
|
||||
|
||||
import './core/globalData'
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import SvgIcon from './SvgIcon.vue'
|
||||
|
||||
// const req = require.context('@renderer/assets/svgs', false, /\.svg$/)
|
||||
// const requireAll = requireContext => requireContext.keys().map(requireContext)
|
||||
// requireAll(req)
|
||||
const req = require.context('@renderer/assets/svgs', false, /\.svg$/)
|
||||
const requireAll = requireContext => requireContext.keys().map(requireContext)
|
||||
requireAll(req)
|
||||
|
||||
export default app => {
|
||||
app.component('svg-icon', SvgIcon)
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import PhaseVocoder from './pitch-shifter/phase-vocoder.js?worker&url'
|
||||
|
||||
let audio: HTMLAudioElement | null = null
|
||||
let audioContext: AudioContext
|
||||
let mediaSource: MediaElementAudioSourceNode
|
||||
@@ -278,7 +276,11 @@ const loadPitchShifterNode = () => {
|
||||
pitchShifterNodeLoadStatus = 'loading'
|
||||
initAdvancedAudioFeatures()
|
||||
// source -> analyser -> biquadFilter -> audioWorklet(pitch shifter) -> [(convolver & convolverSource)->convolverDynamicsCompressor] -> panner -> gain
|
||||
void audioContext.audioWorklet.addModule(PhaseVocoder).then(() => {
|
||||
void audioContext.audioWorklet.addModule(new URL(
|
||||
/* webpackChunkName: 'pitch_shifter.audioWorklet' */
|
||||
'./pitch-shifter/phase-vocoder.js',
|
||||
import.meta.url,
|
||||
)).then(() => {
|
||||
console.log('pitch shifter audio worklet loaded')
|
||||
// https://github.com/olvb/phaze/issues/26#issuecomment-1574629971
|
||||
pitchShifterNode = new AudioWorkletNode(audioContext, 'phase-vocoder-processor', { outputChannelCount: [2] })
|
||||
|
||||
+7
-15
@@ -2,14 +2,6 @@
|
||||
// import Vue from 'vue'
|
||||
import { createRouter, createWebHashHistory } from 'vue-router'
|
||||
|
||||
import SearchView from './views/Search/index.vue'
|
||||
import SongListView from './views/songList/List/index.vue'
|
||||
import SongListDetailView from './views/songList/Detail/index.vue'
|
||||
import LeaderboardView from './views/Leaderboard/index.vue'
|
||||
import ListView from './views/List/index.vue'
|
||||
import DownloadView from './views/Download/index.vue'
|
||||
import SettingView from './views/Setting/index.vue'
|
||||
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHashHistory(),
|
||||
@@ -17,7 +9,7 @@ const router = createRouter({
|
||||
{
|
||||
path: '/search',
|
||||
name: 'Search',
|
||||
component: SearchView,
|
||||
component: require('./views/Search/index.vue').default,
|
||||
meta: {
|
||||
name: 'Search',
|
||||
},
|
||||
@@ -25,7 +17,7 @@ const router = createRouter({
|
||||
{
|
||||
path: '/songList/list',
|
||||
name: 'SongList',
|
||||
component: SongListView,
|
||||
component: require('./views/songList/List/index.vue').default,
|
||||
meta: {
|
||||
name: 'SongList',
|
||||
},
|
||||
@@ -33,7 +25,7 @@ const router = createRouter({
|
||||
{
|
||||
path: '/songList/detail',
|
||||
name: 'SongListDetail',
|
||||
component: SongListDetailView,
|
||||
component: require('./views/songList/Detail/index.vue').default,
|
||||
meta: {
|
||||
name: 'SongList',
|
||||
},
|
||||
@@ -41,7 +33,7 @@ const router = createRouter({
|
||||
{
|
||||
path: '/leaderboard',
|
||||
name: 'Leaderboard',
|
||||
component: LeaderboardView,
|
||||
component: require('./views/Leaderboard/index.vue').default,
|
||||
meta: {
|
||||
name: 'Leaderboard',
|
||||
},
|
||||
@@ -49,7 +41,7 @@ const router = createRouter({
|
||||
{
|
||||
path: '/list',
|
||||
name: 'List',
|
||||
component: ListView,
|
||||
component: require('./views/List/index.vue').default,
|
||||
meta: {
|
||||
name: 'List',
|
||||
},
|
||||
@@ -57,7 +49,7 @@ const router = createRouter({
|
||||
{
|
||||
path: '/download',
|
||||
name: 'Download',
|
||||
component: DownloadView,
|
||||
component: require('./views/Download/index.vue').default,
|
||||
meta: {
|
||||
name: 'Download',
|
||||
},
|
||||
@@ -65,7 +57,7 @@ const router = createRouter({
|
||||
{
|
||||
path: '/setting',
|
||||
name: 'Setting',
|
||||
component: SettingView,
|
||||
component: require('./views/Setting/index.vue').default,
|
||||
meta: {
|
||||
name: 'Setting',
|
||||
},
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { ref, reactive, shallowRef, markRaw, computed, watch } from '@common/utils/vueTools'
|
||||
import { windowSizeList as configWindowSizeList } from '@common/config'
|
||||
import { appSetting } from './setting'
|
||||
import { version } from '../../../package.json'
|
||||
import pkg from '../../../package.json'
|
||||
import { type ProgressInfo } from 'electron-updater'
|
||||
import music from '@renderer/utils/musicSdk'
|
||||
process.versions.app = version
|
||||
process.versions.app = pkg.version
|
||||
|
||||
export const apiSource = ref<string | null>(null)
|
||||
export const proxy: {
|
||||
@@ -115,7 +115,7 @@ export const versionInfo = window.lxData.versionInfo = reactive<{
|
||||
status: LX.UpdateStatus
|
||||
downloadProgress: ProgressInfo | null
|
||||
}>({
|
||||
version,
|
||||
version: pkg.version,
|
||||
newVersion: null,
|
||||
showModal: false,
|
||||
reCheck: false,
|
||||
|
||||
Vendored
-2
@@ -1,2 +0,0 @@
|
||||
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
|
||||
/// <reference types="vite/client" />
|
||||
@@ -33,7 +33,7 @@ dd
|
||||
.gap-top
|
||||
base-checkbox(id="setting_to_tray" :model-value="appSetting['tray.enable']" :label="$t('setting__basic_to_tray')" @update:model-value="updateSetting({'tray.enable': $event})")
|
||||
.p.gap-top
|
||||
base-btn.btn(min @click="isShowPlayTimeoutModal = true") {{ $t('setting__play_timeout')}} {{ timeLabel ? ` (${timeLabel})` : '' }}
|
||||
base-btn.btn(min @click="isShowPlayTimeoutModal = true") {{ $t('setting__play_timeout')}} {{ timeLabel ? ` (${timeLabel})` : '' }}
|
||||
|
||||
dd
|
||||
h3#basic_source {{ $t('setting__basic_source') }}
|
||||
|
||||
@@ -3,9 +3,11 @@ import * as Comlink from 'comlink'
|
||||
export type MainTypes = Comlink.Remote<LX.WorkerMainTypes>
|
||||
|
||||
export const createMainWorker = () => {
|
||||
const worker: Worker = new Worker(new URL('../main', import.meta.url), {
|
||||
type: 'module',
|
||||
})
|
||||
const worker: Worker = new Worker(new URL(
|
||||
/* webpackChunkName: 'renderer.main.worker' */
|
||||
'../main',
|
||||
import.meta.url,
|
||||
))
|
||||
return Comlink.wrap<LX.WorkerMainTypes>(worker)
|
||||
}
|
||||
|
||||
@@ -20,14 +22,11 @@ export const createMainWorker = () => {
|
||||
|
||||
export type DownloadTypes = Comlink.Remote<LX.WorkerDownloadTypes>
|
||||
export const createDownloadWorker = () => {
|
||||
const worker: Worker = new Worker(new URL('../download', import.meta.url), {
|
||||
type: 'module',
|
||||
})
|
||||
// const worker: Worker = new Worker(new URL(
|
||||
// /* webpackChunkName: 'renderer.download.worker' */
|
||||
// '../download',
|
||||
// import.meta.url,
|
||||
// ))
|
||||
const worker: Worker = new Worker(new URL(
|
||||
/* webpackChunkName: 'renderer.download.worker' */
|
||||
'../download',
|
||||
import.meta.url,
|
||||
))
|
||||
return Comlink.wrap<LX.WorkerDownloadTypes>(worker)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user