Skip to content

Commit 6b57cf7

Browse files
committed
✨ Feature: add server config settings
1 parent 9a8b95e commit 6b57cf7

File tree

5 files changed

+133
-191
lines changed

5 files changed

+133
-191
lines changed

src/background.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -561,9 +561,9 @@ ipcMain.on('toggleShortKeyModifiedMode', (evt: IpcMainEvent, val: boolean) => {
561561
bus.emit('toggleShortKeyModifiedMode', val)
562562
})
563563

564-
// const shortKeyHash = {
565-
// upload: uploadClipboardFiles
566-
// }
564+
ipcMain.on('updateServer', () => {
565+
server.restart()
566+
})
567567

568568
const gotTheLock = app.requestSingleInstanceLock()
569569

src/main/server/index.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@ import routers from './routerManager'
33
import {
44
handleResponse
55
} from './utils'
6+
import picgo from '~/main/utils/picgo'
7+
import logger from '~/main/utils/logger'
68

79
class Server {
810
private httpServer: http.Server
9-
private port: number = 36677
11+
private config: IServerConfig
1012
constructor () {
13+
this.config = picgo.getConfig('settings.server') || {
14+
port: 36677,
15+
host: '127.0.0.1',
16+
enable: true
17+
}
1118
this.httpServer = http.createServer(this.handleRequest)
1219
}
1320
private handleRequest = (request: http.IncomingMessage, response: http.ServerResponse) => {
@@ -52,20 +59,31 @@ class Server {
5259
}
5360
}
5461
private listen = (port: number) => {
55-
console.log(`server listen at ${port}`)
56-
this.httpServer.listen(port, '0.0.0.0').on('error', (err: ErrnoException) => {
62+
logger.info(`[PicGo Server] is listening at ${port}`)
63+
this.httpServer.listen(port, this.config.host).on('error', (err: ErrnoException) => {
5764
if (err.errno === 'EADDRINUSE') {
58-
console.log(`----- Port ${port} is busy, trying with port ${port + 1} -----`)
59-
this.port += 1
60-
this.listen(this.port)
65+
logger.warn(`[PicGo Server] ${port} is busy, trying with port ${port + 1}`)
66+
this.config.port += 1
67+
picgo.saveConfig({
68+
'settings.server.port': this.config.port
69+
})
70+
this.listen(this.config.port)
6171
}
6272
})
6373
}
6474
startup () {
65-
this.listen(this.port)
75+
if (this.config.enable) {
76+
this.listen(this.config.port)
77+
}
6678
}
6779
shutdown () {
6880
this.httpServer.close()
81+
logger.info('[PicGo Server] shutdown')
82+
}
83+
restart () {
84+
this.config = picgo.getConfig('settings.server')
85+
this.shutdown()
86+
this.startup()
6987
}
7088
}
7189

src/renderer/pages/PicGoSetting.vue

Lines changed: 88 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@
3636
>
3737
<el-button type="primary" round size="mini" @click="proxyVisible = true">点击设置</el-button>
3838
</el-form-item>
39+
<el-form-item
40+
label="设置Server"
41+
>
42+
<el-button type="primary" round size="mini" @click="serverVisible = true">点击设置</el-button>
43+
</el-form-item>
3944
<el-form-item
4045
label="检查更新"
4146
>
@@ -239,6 +244,55 @@
239244
<el-button type="primary" @click="confirmLogLevelSetting" round>确定</el-button>
240245
</span>
241246
</el-dialog>
247+
<el-dialog
248+
class="server-dialog"
249+
width="60%"
250+
title="设置PicGo-Server"
251+
:visible.sync="serverVisible"
252+
:modal-append-to-body="false"
253+
>
254+
<div class="notice-text">
255+
如果你不知道Server的作用,请阅读文档,或者不用修改配置。
256+
</div>
257+
<el-form
258+
label-position="right"
259+
label-width="120px"
260+
>
261+
<el-form-item
262+
label="是否开启Server"
263+
>
264+
<el-switch
265+
v-model="server.enable"
266+
active-text=""
267+
inactive-text=""
268+
></el-switch>
269+
</el-form-item>
270+
<template v-if="server.enable">
271+
<el-form-item
272+
label="设置监听地址"
273+
>
274+
<el-input
275+
type="input"
276+
v-model="server.host"
277+
placeholder="推荐默认地址:127.0.0.1"
278+
></el-input>
279+
</el-form-item>
280+
<el-form-item
281+
label="设置监听端口"
282+
>
283+
<el-input
284+
type="number"
285+
v-model="server.port"
286+
placeholder="推荐默认端口:36677"
287+
></el-input>
288+
</el-form-item>
289+
</template>
290+
</el-form>
291+
<span slot="footer">
292+
<el-button @click="cancelServerSetting" round>取消</el-button>
293+
<el-button type="primary" @click="confirmServerSetting" round>确定</el-button>
294+
</span>
295+
</el-dialog>
242296
</div>
243297
</template>
244298
<script lang="ts">
@@ -288,6 +342,7 @@ export default class extends Vue {
288342
keyBindingVisible = false
289343
customLinkVisible = false
290344
checkUpdateVisible = false
345+
serverVisible = false
291346
proxyVisible = false
292347
customLink = {
293348
value: db.get('settings.customLink') || '$url'
@@ -309,6 +364,11 @@ export default class extends Vue {
309364
warn: '提醒-Warn',
310365
none: '不记录日志-None'
311366
}
367+
server = db.get('settings.server') || {
368+
port: 36677,
369+
host: '127.0.0.1',
370+
enable: true
371+
}
312372
version = pkg.version
313373
latestVersion = ''
314374
os = ''
@@ -345,10 +405,6 @@ export default class extends Vue {
345405
keyDetect (type: string, event: KeyboardEvent) {
346406
this.shortKey[type] = keyDetect(event).join('+')
347407
}
348-
cancelKeyBinding () {
349-
this.keyBindingVisible = false
350-
this.shortKey = db.get('settings.shortKey')
351-
}
352408
cancelCustomLink () {
353409
this.customLinkVisible = false
354410
this.customLink.value = db.get('settings.customLink') || '$url'
@@ -478,6 +534,27 @@ export default class extends Vue {
478534
}
479535
this.form.logLevel = logLevel
480536
}
537+
confirmServerSetting () {
538+
this.letPicGoSaveData({
539+
'settings.server': this.server
540+
})
541+
const successNotification = new Notification('设置PicGo-Server', {
542+
body: '设置成功'
543+
})
544+
successNotification.onclick = () => {
545+
return true
546+
}
547+
this.serverVisible = false
548+
ipcRenderer.send('updateServer')
549+
}
550+
cancelServerSetting () {
551+
this.serverVisible = false
552+
this.server = db.get('settings.server') || {
553+
port: 36677,
554+
host: '127.0.0.1',
555+
enable: true
556+
}
557+
}
481558
handleLevelDisabled (val: string) {
482559
let currentLevel = val
483560
let flagLevel
@@ -562,4 +639,11 @@ export default class extends Vue {
562639
margin-left 0
563640
.confirm-button
564641
width 100%
642+
.server-dialog
643+
.notice-text
644+
color: #49B1F5
645+
.el-dialog__body
646+
padding-top: 0
647+
.el-form-item
648+
margin-bottom: 10px
565649
</style>

src/universal/types/types.d.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ interface ErrnoException extends Error {
1515
stack?: string;
1616
}
1717

18+
// Server
1819
type routeHandler = (ctx: IServerCTX) => Promise<void>
1920

2021
type IHttpResponse = import('http').ServerResponse
@@ -24,6 +25,12 @@ interface IServerCTX {
2425
[propName: string]: any
2526
}
2627

28+
interface IServerConfig {
29+
port: number
30+
host: string,
31+
enable: boolean
32+
}
33+
2734
// Image && PicBed
2835
interface ImgInfo {
2936
buffer?: Buffer

0 commit comments

Comments
 (0)