Skip to content

Commit 1297757

Browse files
committed
代码优化和fix serverList
1 parent 3a82ccf commit 1297757

File tree

11 files changed

+249
-205
lines changed

11 files changed

+249
-205
lines changed

src/renderer/App.vue

+8-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { isDev, isMacOS, isWindows } from '@/main/utils/utils'
2424
import TitleBar from './components/TitleBar.vue'
2525
import SideBar from './components/SideBar.vue'
2626
import App from '@/main/App'
27-
import { onMounted, provide, reactive, ref, watch } from 'vue'
27+
import { onMounted, ref, watch } from 'vue'
2828
import MessageBox from '@/renderer/utils/MessageBox'
2929
import UserPwdModal from '@/renderer/components/UserPwdModal.vue'
3030
import Software from '@/main/core/software/Software'
@@ -41,13 +41,15 @@ import { changeLanguageWrapper } from '@/renderer/utils/language'
4141
import SystemExtend from '@/main/utils/SystemExtend'
4242
4343
const store = useMainStore()
44-
store.init()
44+
//操作softwareList和serverList等JS代码,都要等待init完成。
45+
store.init().then(async () => {
46+
const AppService = await import('@/renderer/services/AppService')
47+
AppService.default.storeInitThen()
48+
})
4549
const userPwdModalShow = ref(false)
4650
const setLanguageShow = ref(false)
4751
48-
const serverReactive = reactive({ restartFn: undefined, isRunningFn: undefined })
4952
const call = window.api.call
50-
provide('GlobalProvide', { serverReactive })
5153
5254
const settings = Settings.getAll()
5355
store.changeTheme(settings.ThemeMode, settings.ThemeColor)
@@ -59,8 +61,8 @@ onMounted(async () => {
5961
await App.checkInstall()
6062
await initOrUpdate()
6163
}
62-
await window.api.callStatic('TrayManage', 'init')
63-
await changeLanguageWrapper(store.settings.Language)
64+
window.api.callStatic('TrayManage', 'init')
65+
changeLanguageWrapper(store.settings.Language)
6466
} catch (error) {
6567
await MessageBox.error(error.message ?? error, t('errorOccurredDuring', [t('initializing')]))
6668
await call('appExit')

src/renderer/components/Settings/Timer.vue

+7-37
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@
2727
</template>
2828

2929
<script setup>
30-
import { setInterval } from 'timers'
31-
import { computed, watch, inject, onMounted } from 'vue'
30+
import { computed, watch } from 'vue'
3231
import { useMainStore } from '@/renderer/store'
3332
import { storeToRefs } from 'pinia'
3433
import { mt, t } from '@/renderer/utils/i18n'
3534
import { createAsyncComponent } from '@/renderer/utils/utils'
36-
import Settings from '@/main/Settings'
35+
import TimerService from '@/renderer/services/TimerService'
36+
import { isDev } from '@/main/utils/utils'
3737
3838
function formatUnitLabel(seconds) {
3939
const timeUnits = [
@@ -52,6 +52,7 @@ function formatUnitLabel(seconds) {
5252
5353
const intervalOptions = computed(() => {
5454
const intervals = [600, 1800, 3600, 7200, 10800, 43200, 86400, 172800, 259200, 604800]
55+
if (isDev) intervals.unshift(10)
5556
return intervals.map((value) => ({
5657
value,
5758
label: formatUnitLabel(value)
@@ -61,7 +62,6 @@ const intervalOptions = computed(() => {
6162
const ACard = createAsyncComponent(import('ant-design-vue'), 'Card')
6263
const store = useMainStore()
6364
const { serverList } = storeToRefs(store)
64-
const { serverReactive } = inject('GlobalProvide')
6565
const timerServerOptions = computed(() => {
6666
const options = serverList.value.map((item) => {
6767
const name = item.Name
@@ -71,40 +71,10 @@ const timerServerOptions = computed(() => {
7171
return options
7272
})
7373
74-
onMounted(async () => {
75-
if (serverList?.value?.length > 0 && Settings.get('AutoTimerRestartServer') && Settings.get('AutoTimerServerList')) {
76-
setRestartTimer()
77-
}
78-
})
79-
80-
const restartServer = async () => {
81-
const initServerStatus = async (item) => {
82-
const processList = Settings.get('AutoTimerServerList')
83-
if (processList.length > 0 && processList.includes(item.Name)) serverReactive.restartFn(item.Name)
84-
}
85-
86-
const promiseArray = serverList.value.map((item) => initServerStatus(item))
87-
await Promise.all(promiseArray)
88-
}
89-
90-
// 定时器管理
91-
let restartTimer = null
92-
93-
const setRestartTimer = () => {
94-
if (restartTimer) {
95-
clearInterval(restartTimer)
96-
}
97-
if (store.settings.AutoTimerRestartServer && store.settings.AutoTimerInterval) {
98-
restartTimer = setInterval(() => {
99-
restartServer()
100-
}, store.settings.AutoTimerInterval * 1000)
101-
}
102-
}
103-
10474
// 重设定重启间隔时自动更新定时器
105-
watch(() => store.settings.AutoTimerInterval, setRestartTimer)
75+
watch(() => store.settings.AutoTimerInterval, TimerService.setRestartTimer)
10676
107-
watch(() => store.settings.AutoTimerRestartServer, setRestartTimer)
77+
watch(() => store.settings.AutoTimerRestartServer, TimerService.setRestartTimer)
10878
10979
const AutoTimerServerChange = () => {
11080
store.setSettings('AutoTimerServerList')
@@ -116,7 +86,7 @@ const changeAutoTimerInterval = () => {
11686
11787
const changeAutoTimerRestartServer = () => {
11888
store.setSettings('AutoTimerRestartServer')
119-
setRestartTimer()
89+
TimerService.setRestartTimer()
12090
}
12191
12292
const disabledTextClass = () => !store.settings.AutoTimerRestartServer ? 'disabled-text' : ''

src/renderer/components/Software/PhpExtManager.vue

+3-3
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ import { throttle } from 'throttle-debounce'
6969
import SystemExtend from '@/main/utils/SystemExtend'
7070
import Settings from '@/main/Settings'
7171
import SoftwareExtend from '@/main/core/software/SoftwareExtend'
72+
import ServerService from '@/renderer/services/ServerService'
7273
7374
const AButton = createAsyncComponent(import('ant-design-vue'), 'Button')
7475
const props = defineProps({ show: Boolean, phpVersion: String })
75-
const { serverReactive } = inject('GlobalProvide')
7676
const emit = defineEmits(['update:show'])
7777
7878
const visible = computed({
@@ -159,8 +159,8 @@ const install = async (item) => {
159159
const extension = Path.GetFileNameWithoutExt(item.fileName)
160160
await Php.addExtension(props.phpVersion, extension, item.isZend)
161161
const phpName = SoftwareExtend.getPhpName(props.phpVersion)
162-
if (Settings.get('AutoStartAndRestartServer') && serverReactive.isRunningFn(phpName)) {
163-
serverReactive.restartFn(phpName)
162+
if (Settings.get('AutoStartAndRestartServer') && ServerService.isRunning(phpName)) {
163+
ServerService.restart(phpName)
164164
}
165165
} else {
166166
result.value = '安装失败😣'

src/renderer/components/WebSite/AddWebSiteModal.vue

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ import Hosts from '@/main/utils/Hosts'
3838
import Settings from '@/main/Settings'
3939
import { mt, t } from '@/renderer/utils/i18n'
4040
import { useMainStore } from '@/renderer/store'
41+
import ServerService from '@/renderer/services/ServerService'
4142
const { search, addModalVisible: visible } = inject('WebsiteProvide')
4243
4344
const wwwPath = GetPath.getWebsiteDir().replaceSlash()
4445
const formRef = ref()
45-
const { serverReactive } = inject('GlobalProvide')
4646
const store = useMainStore()
4747
const phpVersionList = ref([])
4848
const formData = reactive({
@@ -97,9 +97,9 @@ const addWeb = async (websiteInfo) => {
9797
}
9898
}
9999
100-
if (Settings.get('AutoStartAndRestartServer') && serverReactive.isRunningFn('Nginx')) {
101-
serverReactive.restartFn('Nginx')
102-
if (phpVersion) serverReactive.restartFn(SoftwareExtend.getPhpName(phpVersion))
100+
if (Settings.get('AutoStartAndRestartServer') && ServerService.isRunning('Nginx')) {
101+
ServerService.restart('Nginx')
102+
if (phpVersion) ServerService.restart(SoftwareExtend.getPhpName(phpVersion))
103103
}
104104
}
105105

src/renderer/components/WebSite/EditWebSiteModal.vue

+4-4
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ import SslSetting from '@/renderer/components/WebSite/EditWebSite/SslSetting.vue
3131
import Settings from '@/main/Settings'
3232
import { mt, t } from '@/renderer/utils/i18n'
3333
import SoftwareExtend from '@/main/core/software/SoftwareExtend'
34+
import ServerService from '@/renderer/services/ServerService'
3435
3536
const { serverName, port, editModalVisible: visible } = inject('WebsiteProvide')
3637
const defaultKey = 'basicSetting'
3738
const activeKey = ref(defaultKey)
38-
const { serverReactive } = inject('GlobalProvide')
3939
4040
const editAfter = (phpVersion = '') => {
41-
if (Settings.get('AutoStartAndRestartServer') && serverReactive.isRunningFn('Nginx')) {
42-
serverReactive.restartFn('Nginx')
43-
if (phpVersion) serverReactive.restartFn(SoftwareExtend.getPhpName(phpVersion))
41+
if (Settings.get('AutoStartAndRestartServer') && ServerService.isRunning('Nginx')) {
42+
ServerService.restart('Nginx')
43+
if (phpVersion) ServerService.restart(SoftwareExtend.getPhpName(phpVersion))
4444
}
4545
}
4646
</script>

src/renderer/services/AppService.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import HomeService from '@/renderer/services/HomeService'
2+
import Settings from '@/main/Settings'
3+
import TimerService from '@/renderer/services/TimerService'
4+
import { StoreInitializedEventName } from '@/renderer/utils/constant'
5+
6+
export default class AppService {
7+
static storeInitThen() {
8+
console.log('Call storeInitThen')
9+
const storeInitializedEvent = new Event(StoreInitializedEventName)
10+
window.dispatchEvent(storeInitializedEvent)
11+
12+
if (Settings.get('AfterOpenAppStartServer')) {
13+
HomeService.oneClickStart()
14+
}
15+
if (Settings.get('AutoTimerRestartServer') && Settings.get('AutoTimerServerList')) {
16+
TimerService.setRestartTimer()
17+
}
18+
}
19+
}

src/renderer/services/HomeService.js

+134
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import ServerControl from '@/main/core/ServerControl'
2+
import { sleep } from '@/shared/utils/utils'
3+
import TcpProcess from '@/main/utils/TcpProcess'
4+
import ProcessExtend from '@/main/utils/ProcessExtend'
5+
import { t } from '@/renderer/utils/i18n'
6+
import MessageBox from '@/renderer/utils/MessageBox'
7+
import Settings from '@/main/Settings'
8+
import { watch } from 'vue'
9+
import { useMainStore } from '@/renderer/store'
10+
import { storeToRefs } from 'pinia'
11+
import SoftwareExtend from '@/main/core/software/SoftwareExtend'
12+
13+
const store = useMainStore()
14+
const { serverList } = storeToRefs(store)
15+
16+
export default class HomeService {
17+
static async startServerClick(item) {
18+
if (item.isRunning || item.btnLoading) {
19+
return
20+
}
21+
item.btnLoading = true
22+
try {
23+
if (item.ServerPort) {
24+
if (item.ServerPort == 80) {
25+
await ProcessExtend.killWebServer()
26+
} else {
27+
const pid = await TcpProcess.getPidByPort(item.ServerPort)
28+
if (pid) await ProcessExtend.kill(pid)
29+
}
30+
}
31+
32+
await ServerControl.start(item)
33+
if (!item.unwatch) {
34+
item.unwatch = watch(
35+
() => item.errMsg,
36+
(errMsg) => {
37+
if (errMsg) {
38+
MessageBox.error(errMsg, t('Error starting service!'))
39+
}
40+
}
41+
)
42+
}
43+
} catch (error) {
44+
MessageBox.error(error.message ?? error, t('Error starting service!'))
45+
}
46+
item.btnLoading = false
47+
}
48+
49+
static async stopServerClick(item) {
50+
if (!item.isRunning) {
51+
return
52+
}
53+
item.btnLoading = true
54+
try {
55+
await ServerControl.stop(item)
56+
57+
for (let i = 0; i < 10; i++) {
58+
if (item.isRunning === false) {
59+
break
60+
}
61+
await sleep(500)
62+
item.isRunning = ProcessExtend.pidIsRunning(item.pid)
63+
}
64+
} catch (error) {
65+
MessageBox.error(error.message ?? error, t('Error stopping service!'))
66+
}
67+
item.btnLoading = false
68+
}
69+
70+
static async restartServerClick(item) {
71+
item.btnLoading = true
72+
try {
73+
await ServerControl.stop(item)
74+
75+
for (let i = 0; i < 10; i++) {
76+
if (item.isRunning === false) {
77+
break
78+
}
79+
await sleep(500)
80+
item.isRunning = ProcessExtend.pidIsRunning(item.pid)
81+
}
82+
83+
if (item.isRunning) {
84+
throw new Error(t('The service was not stopped successfully!'))
85+
}
86+
87+
await ServerControl.start(item)
88+
} catch (error) {
89+
MessageBox.error(error.message ?? error, t('Error starting service!'))
90+
}
91+
item.btnLoading = false
92+
}
93+
94+
static async oneClickStart() {
95+
const oneClickServerList = Settings.get('OneClickServerList')
96+
const websitePhpFpmSwitch = oneClickServerList.includes('PHP-FPM')
97+
const requirePhpList = await HomeService.getNginxRequirePhpList()
98+
const doStartServerClick = async (item) => {
99+
if (oneClickServerList.includes(item.Name)) {
100+
HomeService.startServerClick(item)
101+
} else if (item.Name.match(/^PHP-[.\d]+$/) && requirePhpList.includes(item.Name) && websitePhpFpmSwitch) {
102+
//自动判断网站列表的PHP-FPM
103+
HomeService.startServerClick(item)
104+
}
105+
}
106+
107+
for (const item of serverList.value) {
108+
doStartServerClick(item)
109+
}
110+
}
111+
112+
static async oneClickStop() {
113+
const oneClickServerList = Settings.get('OneClickServerList')
114+
const websitePhpFpmSwitch = oneClickServerList.includes('PHP-FPM')
115+
const requirePhpList = await HomeService.getNginxRequirePhpList()
116+
const doStopServerClick = async (item) => {
117+
if (oneClickServerList.includes(item.Name)) {
118+
HomeService.stopServerClick(item)
119+
} else if (item.Name.match(/^PHP-[.\d]+$/) && requirePhpList.includes(item.Name) && websitePhpFpmSwitch) {
120+
//自动判断网站列表的PHP-FPM
121+
HomeService.stopServerClick(item)
122+
}
123+
}
124+
125+
for (const item of serverList.value) {
126+
doStopServerClick(item)
127+
}
128+
}
129+
130+
static async getNginxRequirePhpList() {
131+
const list = await SoftwareExtend.getNginxRequirePhpList()
132+
return list.map((item) => `PHP-${item}`)
133+
}
134+
}
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { useMainStore } from '@/renderer/store'
2+
import { storeToRefs } from 'pinia'
3+
import HomeService from '@/renderer/services/HomeService'
4+
5+
const store = useMainStore()
6+
const { serverList } = storeToRefs(store)
7+
8+
export default class ServerService {
9+
static async restart(name) {
10+
const item = serverList.value.find((item) => item.Name === name)
11+
if (item) await HomeService.restartServerClick(item)
12+
}
13+
14+
static isRunning(name) {
15+
const item = serverList.value.find((item) => item.Name === name)
16+
return item && item.isRunning
17+
}
18+
}

0 commit comments

Comments
 (0)