Skip to content
This repository was archived by the owner on Oct 22, 2023. It is now read-only.

Commit a2c105a

Browse files
author
alanzhangzm
committed
Support for managing multiple servers
1 parent 8a51ec7 commit a2c105a

File tree

6 files changed

+64
-45
lines changed

6 files changed

+64
-45
lines changed

src/App.vue

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,27 @@
11
<template>
22
<div id="app">
33
<router-view
4-
:server="manager.servers[manager.serverIndex]"
5-
:serverNameList="serverNameList"
6-
:isDefault="false"
7-
@updateServer="saveData()">
4+
:manager="manager"
5+
:isDesktop="false">
86
</router-view>
97
</div>
108
</template>
119

1210
<script>
1311
export default {
1412
name: 'photon',
15-
props: ['manager'],
16-
computed: {
17-
serverNameList: function () {
18-
return this.manager.servers.map(server => {
19-
return server.name
20-
})
21-
}
22-
},
23-
methods: {
24-
saveData: function () {
25-
this.manager.writeStorage()
26-
}
27-
}
13+
props: ['manager']
2814
}
2915
</script>
3016

3117
<style lang="css">
3218
body {
3319
margin: 0px;
3420
background-color: #fff;
35-
font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
21+
font-family: "Helvetica Neue", Helvetica, Arial, "Dejavu Sans", "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", "Noto Sans", sans-serif;
3622
}
3723
3824
input, output, textarea, select, button {
39-
font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
25+
font-family: "Helvetica Neue", Helvetica, Arial, "Dejavu Sans", "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", "Noto Sans", sans-serif;
4026
}
4127
</style>

src/components/Main.vue

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
<template>
22
<div class="wrapper">
33
<div class="sidebar">
4-
<div id="sidebar-servers" class="row" style="padding-bottom: 0;">
5-
<div class="icon" style="padding: 0;" @click="getEasterEgg">
6-
<img src="@/assets/logo.png" class="logo">
4+
<div id="sidebar-servers" v-for="(sv, index) in manager.servers"
5+
:key="index + sv.name">
6+
<div class="row"
7+
:class="{profile_active: manager.servers.length > 1 && index === manager.serverIndex}"
8+
@click="setServerIndex(index)">
9+
<div class="icon" style="padding: 0;">
10+
<img src="@/assets/logo.png" class="logo">
11+
</div>
12+
<div class="title" style="font-size: 20px; font-weight: bold; cursor: default;">{{ (isDesktop && index === 0) ? "Photon" : sv.name }}</div>
713
</div>
8-
<div class="title" style="font-size: 20px; font-weight: bold; cursor: default;">{{ easterEgg || serverName }}</div>
914
</div>
1015
<div class="seperator-v"></div>
1116
<router-link to="/downloading" id="sidebar-downloading" class="row">
@@ -43,25 +48,23 @@
4348
@addTask="addTask($event)"
4449
@changeTaskStatus="changeTaskStatus($event)"
4550
@purgeTasks="purgeTasks($event)"
51+
@addServer="addServer()"
52+
@removeServer="removeServer()"
4653
@updateSettings="updateSettings()">
4754
</router-view>
4855
</div>
4956
</div>
5057
</template>
5158

5259
<script>
53-
const oConfusable = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '٥', '۵', '', '', '𝐨', '𝑜', '𝒐', '𝓸', '𝔬', '𝕠', '𝖔', '𝗈', '𝗼', '𝘰', '𝙤', '𝚘', '', '', '', 'ο', '𝛐', '𝜊', '𝝄', '𝝾', '𝞸', 'σ', '𝛔', '𝜎', '𝝈', '𝞂', '𝞼', '', 'о', '', 'օ', 'ס', 'ه', '𞸤', '𞹤', '𞺄', '', '', '', '', 'ھ', '', '', '', '', 'ہ', '', '', '', '', 'ە', '', '', '𐓪', '𑣈', '𑣗', '𐐬']
54-
5560
export default {
56-
data: function () {
57-
return {
58-
easterEgg: ''
59-
}
60-
},
61-
props: ['server', 'serverNameList', 'isDefault'],
61+
props: ['manager', 'isDesktop'],
6262
computed: {
63-
serverName: function () {
64-
return this.isDefault ? 'Photon' : this.server.name
63+
server: function () {
64+
return this.manager.servers[this.manager.serverIndex]
65+
},
66+
isDefault: function () {
67+
return this.manager.serverIndex === 0
6568
},
6669
downloadingNumber: function () {
6770
let tasks = this.server.tasks
@@ -81,14 +84,12 @@ export default {
8184
connection: server.connection,
8285
rpc: JSON.parse(JSON.stringify(server.rpc)),
8386
options: JSON.parse(JSON.stringify(server.options)),
84-
isDefault: this.isDefault
87+
isDefault: this.isDefault,
88+
isDesktop: this.isDesktop
8589
}
8690
}
8791
},
8892
methods: {
89-
getEasterEgg: function () {
90-
if (this.isDefault) this.easterEgg = this.serverName.replace(/o/g, oConfusable[Math.floor(Math.random() * oConfusable.length)])
91-
},
9293
syncOptions: function () {
9394
this.server.checkConnection()
9495
this.server.syncOptions()
@@ -102,11 +103,23 @@ export default {
102103
purgeTasks: function (gids) {
103104
this.server.purgeTasks(gids)
104105
},
106+
addServer: function () {
107+
this.manager.addServer()
108+
this.manager.serverIndex = this.manager.servers.length - 1
109+
this.updateSettings()
110+
},
111+
removeServer: function () {
112+
this.manager.removeServer()
113+
this.updateSettings()
114+
},
115+
setServerIndex: function (index) {
116+
this.manager.setServerIndex(index)
117+
},
105118
updateSettings: function () {
106119
let server = this.server
107120
let settings = this.settings
108121
server.setServer(settings.name, settings.rpc, settings.options, !this.isDefault)
109-
this.$emit('updateServer')
122+
this.manager.writeStorage()
110123
}
111124
}
112125
}
@@ -129,11 +142,15 @@ export default {
129142
align-items: stretch;
130143
}
131144
145+
.profile_active {
146+
background-color: #666;
147+
}
148+
132149
.router-link-active {
133150
background-color: #00A0F1;
134151
}
135152
136-
.sidebar > .row {
153+
.sidebar .row {
137154
padding: 12px 12px;
138155
color: #ddd;
139156
text-decoration: none;

src/components/Main/Settings.vue

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
<template>
22
<div id="settings">
3+
<div class="toolbar">
4+
<a href="#" @click="$emit('addServer')">
5+
<i class="fas fa-file-medical"></i>
6+
</a>
7+
<a href="#" :class="{disabled: settings.isDefault}" @click="$emit('removeServer')">
8+
<i class="fas fa-trash-alt"></i>
9+
</a>
10+
</div>
11+
312
<div class="content">
413
<form @change="$emit('updateSettings')">
5-
<div id="settings-general" class="group" v-if="!settings.isDefault">
14+
<div id="settings-general" class="group" v-if="!(settings.isDesktop && settings.isDefault)">
615
<div class="header">{{ $t("message.settings.general") }}</div>
716
<div class="row">
817
<div class="left">
9-
<label for="settings-general-config">{{ $t("message.settings.config") }}</label>
18+
<label for="settings-general-config">{{ $t("message.settings.profile") }}</label>
1019
</div>
1120
<div class="right">
1221
<input id="settings-general-config" type="text" required v-model="settings.name">
1322
</div>
1423
</div>
1524
</div>
16-
<div id="settings-rpc" class="group" v-if="!settings.isDefault">
25+
<div id="settings-rpc" class="group" v-if="!(settings.isDesktop && settings.isDefault)">
1726
<div class="header">{{ $t("message.settings.rpc") }}</div>
1827
<div class="row">
1928
<div class="left">
@@ -64,7 +73,7 @@
6473
<label for="settings-download-path">{{ $t("message.settings.directory") }}</label>
6574
</div>
6675
<div class="right pair">
67-
<label for="settings-download-path-choose" class="button fixed" :class="{'disabled': !settings.isDefault}">{{ $t("message.settings.choose") }}</label>
76+
<label for="settings-download-path-choose" class="button fixed" :class="{'disabled': !(settings.isDesktop && settings.isDefault)}">{{ $t("message.settings.choose") }}</label>
6877
<input id="settings-download-path-choose" class="hidden" type="file" webkitdirectory mozdirectory msdirectory odirectory directory multiple @change="setDir($event)">
6978
<input class="expanded" type="text" disabled v-model="settings.options['dir']">
7079
</div>
@@ -149,6 +158,9 @@ export default {
149158
}
150159
</script>
151160

161+
<style lang="css" src="@fortawesome/fontawesome-free-webfonts/css/fa-solid.css" scoped></style>
162+
<style lang="css" src="@fortawesome/fontawesome-free-webfonts/css/fontawesome.css" scoped></style>
163+
<style lang="css" src="@/styles/toolbar.css" scoped></style>
152164
<style lang="css" src="@/styles/option.css" scoped></style>
153165
<style lang="css" scoped>
154166
.badge {

src/lang/en-US.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
},
1919
"settings": {
2020
"general": "General",
21-
"config": "Config",
21+
"profile": "Profile",
2222
"rpc": "RPC",
2323
"host": "Host",
2424
"port": "Port",

src/lang/zh-CN.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
},
1919
"settings": {
2020
"general": "通用",
21-
"config": "配置",
21+
"profile": "配置文件",
2222
"rpc": "RPC",
2323
"host": "主机",
2424
"port": "端口",

src/utils/aria2manager.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ export default class Aria2Manager {
1616
if (this.serverIndex >= this.servers.length) this.serverIndex = this.servers.length - 1
1717
}
1818

19+
setServerIndex (index) {
20+
this.serverIndex = Math.min(this.servers.length - 1, Math.max(0, index))
21+
}
22+
1923
setSyncInterval (interval = 3000) {
2024
this.sync = setInterval(() => this.syncTasks(), interval)
2125
}

0 commit comments

Comments
 (0)