mirror of
https://github.com/LorenEteval/Furious.git
synced 2026-09-22 23:08:08 +03:00
Add administrator restart support on Windows
Signed-off-by: Loren Eteval <loren.eteval@proton.me>
This commit is contained in:
Vendored
+43
-3
@@ -35,6 +35,14 @@ TRANSLATION = {
|
||||
"ZH": "新的更改将于下次生效",
|
||||
"isReviewed": "True"
|
||||
},
|
||||
"Reconnect now?": {
|
||||
"source": [
|
||||
"Furious.Qt.QtWidgets"
|
||||
],
|
||||
"RU": "Переподключиться сейчас?",
|
||||
"ZH": "现在重新连接?",
|
||||
"isReviewed": "True"
|
||||
},
|
||||
"Unrecognized Configuration. Please modify it in the editor": {
|
||||
"source": [
|
||||
"Furious.Qt.QtWidgets"
|
||||
@@ -1043,12 +1051,12 @@ TRANSLATION = {
|
||||
"ZH": "TUN模式已禁用(管理员)",
|
||||
"isReviewed": "True"
|
||||
},
|
||||
"TUN Mode Disabled (root)": {
|
||||
"TUN Mode Disabled (Superuser)": {
|
||||
"source": [
|
||||
"Furious.TrayActions.Settings"
|
||||
],
|
||||
"RU": "TUN режим отключен (root)",
|
||||
"ZH": "TUN模式已禁用(root)",
|
||||
"RU": "TUN режим отключен (Superuser)",
|
||||
"ZH": "TUN模式已禁用(Superuser)",
|
||||
"isReviewed": "True"
|
||||
},
|
||||
"Settings": {
|
||||
@@ -1701,5 +1709,37 @@ TRANSLATION = {
|
||||
"RU": "Автоматическая настройка буфера приема TCP",
|
||||
"ZH": "TCP接收缓冲区自动调优",
|
||||
"isReviewed": "True"
|
||||
},
|
||||
"Restart The Application As Administrator": {
|
||||
"source": [
|
||||
"Furious.Window.AppMainWindow"
|
||||
],
|
||||
"RU": "Перезапустите приложение от имени администратора",
|
||||
"ZH": "以管理员身份重新启动应用程序",
|
||||
"isReviewed": "True"
|
||||
},
|
||||
"Restart The Application As Superuser": {
|
||||
"source": [
|
||||
"Furious.Window.AppMainWindow"
|
||||
],
|
||||
"RU": "Перезапустите приложение от имени суперпользователя",
|
||||
"ZH": "以Superuser身份重新启动应用程序",
|
||||
"isReviewed": "True"
|
||||
},
|
||||
"Administrator": {
|
||||
"source": [
|
||||
"Furious.Widget.SystemTrayIcon"
|
||||
],
|
||||
"RU": "Administrator",
|
||||
"ZH": "管理员",
|
||||
"isReviewed": "True"
|
||||
},
|
||||
"I am, the supreme authority.": {
|
||||
"source": [
|
||||
"Furious.Window.AppMainWindow"
|
||||
],
|
||||
"RU": "Я — единственная высшая инстанция.",
|
||||
"ZH": "我就是至高无上的存在。",
|
||||
"isReviewed": "True"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
# Copyright (C) 2024–present Loren Eteval & contributors <loren.eteval@proton.me>
|
||||
#
|
||||
# This file is part of Furious.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from enum import Enum
|
||||
|
||||
__all__ = ['AppCommands']
|
||||
|
||||
|
||||
class AppCommands(Enum):
|
||||
Empty = 'empty'
|
||||
RunAs = 'runas'
|
||||
+448
-181
@@ -280,6 +280,70 @@ a.5.5 0 0 1-.478\
|
||||
-.647L9.89 2.41 \
|
||||
4.157 8.5z\x22/>\x0d\x0a<\
|
||||
/svg>\
|
||||
\x00\x00\x03\xd7\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
//www.w3.org/200\
|
||||
0/svg\x22 width=\x2216\
|
||||
\x22 height=\x2216\x22 fi\
|
||||
ll=\x22currentColor\
|
||||
\x22 class=\x22bi bi-p\
|
||||
erson-gear\x22 view\
|
||||
Box=\x220 0 16 16\x22>\
|
||||
\x0a <path d=\x22M11 \
|
||||
5a3 3 0 1 1-6 0 \
|
||||
3 3 0 0 1 6 0M8 \
|
||||
7a2 2 0 1 0 0-4 \
|
||||
2 2 0 0 0 0 4m.2\
|
||||
56 7a4.5 4.5 0 0\
|
||||
1-.229-1.004H3c\
|
||||
.001-.246.154-.9\
|
||||
86.832-1.664C4.4\
|
||||
84 10.68 5.711 1\
|
||||
0 8 10q.39 0 .74\
|
||||
.025c.226-.341.4\
|
||||
96-.65.804-.918Q\
|
||||
8.844 9.002 8 9c\
|
||||
-5 0-6 3-6 4s1 1\
|
||||
1 1zm3.63-4.54c\
|
||||
.18-.613 1.048-.\
|
||||
613 1.229 0l.043\
|
||||
.148a.64.64 0 0 \
|
||||
0 .921.382l.136-\
|
||||
.074c.561-.306 1\
|
||||
.175.308.87.869l\
|
||||
-.075.136a.64.64\
|
||||
0 0 0 .382.92l.\
|
||||
149.045c.612.18.\
|
||||
612 1.048 0 1.22\
|
||||
9l-.15.043a.64.6\
|
||||
4 0 0 0-.38.921l\
|
||||
.074.136c.305.56\
|
||||
1-.309 1.175-.87\
|
||||
.87l-.136-.075a.\
|
||||
64.64 0 0 0-.92.\
|
||||
382l-.045.149c-.\
|
||||
18.612-1.048.612\
|
||||
-1.229 0l-.043-.\
|
||||
15a.64.64 0 0 0-\
|
||||
.921-.38l-.136.0\
|
||||
74c-.561.305-1.1\
|
||||
75-.309-.87-.87l\
|
||||
.075-.136a.64.64\
|
||||
0 0 0-.382-.92l\
|
||||
-.148-.045c-.613\
|
||||
-.18-.613-1.048 \
|
||||
0-1.229l.148-.04\
|
||||
3a.64.64 0 0 0 .\
|
||||
382-.921l-.074-.\
|
||||
136c-.306-.561.3\
|
||||
08-1.175.869-.87\
|
||||
l.136.075a.64.64\
|
||||
0 0 0 .92-.382z\
|
||||
M14 12.5a1.5 1.5\
|
||||
0 1 0-3 0 1.5 1\
|
||||
.5 0 0 0 3 0\x22/>\x0a\
|
||||
</svg>\
|
||||
\x00\x00\x02\x12\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
@@ -850,6 +914,37 @@ zM3 4a1 1 0 0 1 \
|
||||
-1 1H4a1 1 0 0 1\
|
||||
-1-1V4z\x22/>\x0d\x0a</sv\
|
||||
g>\
|
||||
\x00\x00\x01\xcc\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
//www.w3.org/200\
|
||||
0/svg\x22 width=\x2216\
|
||||
\x22 height=\x2216\x22 fi\
|
||||
ll=\x22currentColor\
|
||||
\x22 class=\x22bi bi-f\
|
||||
older2\x22 viewBox=\
|
||||
\x220 0 16 16\x22>\x0a <\
|
||||
path d=\x22M1 3.5A1\
|
||||
.5 1.5 0 0 1 2.5\
|
||||
2h2.764c.958 0 \
|
||||
1.76.56 2.311 1.\
|
||||
184C7.985 3.648 \
|
||||
8.48 4 9 4h4.5A1\
|
||||
.5 1.5 0 0 1 15 \
|
||||
5.5v7a1.5 1.5 0 \
|
||||
0 1-1.5 1.5h-11A\
|
||||
1.5 1.5 0 0 1 1 \
|
||||
12.5zM2.5 3a.5.5\
|
||||
0 0 0-.5.5V6h12\
|
||||
v-.5a.5.5 0 0 0-\
|
||||
.5-.5H9c-.964 0-\
|
||||
1.71-.629-2.174-\
|
||||
1.154C6.374 3.33\
|
||||
4 5.82 3 5.264 3\
|
||||
zM14 7H2v5.5a.5.\
|
||||
5 0 0 0 .5.5h11a\
|
||||
.5.5 0 0 0 .5-.5\
|
||||
z\x22/>\x0a</svg>\
|
||||
\x00\x00\x02U\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
@@ -1367,6 +1462,30 @@ A7.568 7.568 0 0\
|
||||
96 5.054-1.902Z\x22\
|
||||
/>\x0d\x0a </g>\x0d\x0a</s\
|
||||
vg>\
|
||||
\x00\x00\x01]\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
//www.w3.org/200\
|
||||
0/svg\x22 width=\x2216\
|
||||
\x22 height=\x2216\x22 fi\
|
||||
ll=\x22currentColor\
|
||||
\x22 class=\x22bi bi-a\
|
||||
rrow-clockwise\x22 \
|
||||
viewBox=\x220 0 16 \
|
||||
16\x22>\x0a <path fil\
|
||||
l-rule=\x22evenodd\x22\
|
||||
d=\x22M8 3a5 5 0 1\
|
||||
0 4.546 2.914.5\
|
||||
.5 0 0 1 .908-.4\
|
||||
17A6 6 0 1 1 8 2\
|
||||
z\x22/>\x0a <path d=\x22\
|
||||
M8 4.466V.534a.2\
|
||||
5.25 0 0 1 .41-.\
|
||||
192l2.36 1.966c.\
|
||||
12.1.12.284 0 .3\
|
||||
84L8.41 4.658A.2\
|
||||
5.25 0 0 1 8 4.4\
|
||||
66\x22/>\x0a</svg>\
|
||||
\x00\x00\x02<\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
@@ -1678,7 +1797,7 @@ m4.905-2.767-3.6\
|
||||
.686-1.894a.503.\
|
||||
503 0 0 0-.461 0\
|
||||
z\x22/>\x0d\x0a</svg>\
|
||||
\x00\x00\x03\xe1\
|
||||
\x00\x00\x03\xe3\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
//www.w3.org/200\
|
||||
@@ -1687,62 +1806,62 @@ svg xmlns=\x22http:\
|
||||
ll=\x22currentColor\
|
||||
\x22 class=\x22bi bi-d\
|
||||
iagram-3\x22 viewBo\
|
||||
x=\x220 0 16 16\x22>\x0a \
|
||||
<path fill-rule\
|
||||
=\x22evenodd\x22 d=\x22M6\
|
||||
3.5A1.5 1.5 0 0\
|
||||
1 7.5 2h1A1.5 1\
|
||||
.5 0 0 1 10 3.5v\
|
||||
1A1.5 1.5 0 0 1 \
|
||||
8.5 6v1H14a.5.5 \
|
||||
0 0 1 .5.5v1a.5.\
|
||||
5 0 0 1-1 0V8h-5\
|
||||
v.5a.5.5 0 0 1-1\
|
||||
0V8h-5v.5a.5.5 \
|
||||
0 0 1-1 0v-1A.5.\
|
||||
5 0 0 1 2 7h5.5V\
|
||||
6A1.5 1.5 0 0 1 \
|
||||
6 4.5zM8.5 5a.5.\
|
||||
5 0 0 0 .5-.5v-1\
|
||||
a.5.5 0 0 0-.5-.\
|
||||
5h-1a.5.5 0 0 0-\
|
||||
.5.5v1a.5.5 0 0 \
|
||||
0 .5.5zM0 11.5A1\
|
||||
.5 1.5 0 0 1 1.5\
|
||||
10h1A1.5 1.5 0 \
|
||||
0 1 4 11.5v1A1.5\
|
||||
1.5 0 0 1 2.5 1\
|
||||
4h-1A1.5 1.5 0 0\
|
||||
1 0 12.5zm1.5-.\
|
||||
5a.5.5 0 0 0-.5.\
|
||||
5v1a.5.5 0 0 0 .\
|
||||
5.5h1a.5.5 0 0 0\
|
||||
.5-.5v-1a.5.5 0\
|
||||
0 0-.5-.5zm4.5.\
|
||||
5A1.5 1.5 0 0 1 \
|
||||
7.5 10h1a1.5 1.5\
|
||||
0 0 1 1.5 1.5v1\
|
||||
A1.5 1.5 0 0 1 8\
|
||||
.5 14h-1A1.5 1.5\
|
||||
0 0 1 6 12.5zm1\
|
||||
.5-.5a.5.5 0 0 0\
|
||||
x=\x220 0 16 16\x22>\x0d\x0a\
|
||||
<path fill-rul\
|
||||
e=\x22evenodd\x22 d=\x22M\
|
||||
6 3.5A1.5 1.5 0 \
|
||||
0 1 7.5 2h1A1.5 \
|
||||
1.5 0 0 1 10 3.5\
|
||||
v1A1.5 1.5 0 0 1\
|
||||
8.5 6v1H14a.5.5\
|
||||
0 0 1 .5.5v1a.5\
|
||||
.5 0 0 1-1 0V8h-\
|
||||
5v.5a.5.5 0 0 1-\
|
||||
1 0V8h-5v.5a.5.5\
|
||||
0 0 1-1 0v-1A.5\
|
||||
.5 0 0 1 2 7h5.5\
|
||||
V6A1.5 1.5 0 0 1\
|
||||
6 4.5zM8.5 5a.5\
|
||||
.5 0 0 0 .5-.5v-\
|
||||
1a.5.5 0 0 0-.5-\
|
||||
.5h-1a.5.5 0 0 0\
|
||||
-.5.5v1a.5.5 0 0\
|
||||
0 .5.5h1a.5.5 0\
|
||||
0 0 .5-.5v-1a.5\
|
||||
.5 0 0 0-.5-.5zm\
|
||||
4.5.5a1.5 1.5 0 \
|
||||
0 1 1.5-1.5h1a1.\
|
||||
5 1.5 0 0 1 1.5 \
|
||||
1.5v1a1.5 1.5 0 \
|
||||
0 1-1.5 1.5h-1a1\
|
||||
.5 1.5 0 0 1-1.5\
|
||||
-1.5zm1.5-.5a.5.\
|
||||
5 0 0 0-.5.5v1a.\
|
||||
5.5 0 0 0 .5.5h1\
|
||||
a.5.5 0 0 0 .5-.\
|
||||
5v-1a.5.5 0 0 0-\
|
||||
.5-.5z\x22/>\x0a</svg>\
|
||||
\
|
||||
0 .5.5zM0 11.5A\
|
||||
1.5 1.5 0 0 1 1.\
|
||||
5 10h1A1.5 1.5 0\
|
||||
0 1 4 11.5v1A1.\
|
||||
5 1.5 0 0 1 2.5 \
|
||||
14h-1A1.5 1.5 0 \
|
||||
0 1 0 12.5zm1.5-\
|
||||
.5a.5.5 0 0 0-.5\
|
||||
.5v1a.5.5 0 0 0 \
|
||||
.5.5h1a.5.5 0 0 \
|
||||
0 .5-.5v-1a.5.5 \
|
||||
0 0 0-.5-.5zm4.5\
|
||||
.5A1.5 1.5 0 0 1\
|
||||
7.5 10h1a1.5 1.\
|
||||
5 0 0 1 1.5 1.5v\
|
||||
1A1.5 1.5 0 0 1 \
|
||||
8.5 14h-1A1.5 1.\
|
||||
5 0 0 1 6 12.5zm\
|
||||
1.5-.5a.5.5 0 0 \
|
||||
0-.5.5v1a.5.5 0 \
|
||||
0 0 .5.5h1a.5.5 \
|
||||
0 0 0 .5-.5v-1a.\
|
||||
5.5 0 0 0-.5-.5z\
|
||||
m4.5.5a1.5 1.5 0\
|
||||
0 1 1.5-1.5h1a1\
|
||||
.5 1.5 0 0 1 1.5\
|
||||
1.5v1a1.5 1.5 0\
|
||||
0 1-1.5 1.5h-1a\
|
||||
1.5 1.5 0 0 1-1.\
|
||||
5-1.5zm1.5-.5a.5\
|
||||
.5 0 0 0-.5.5v1a\
|
||||
.5.5 0 0 0 .5.5h\
|
||||
1a.5.5 0 0 0 .5-\
|
||||
.5v-1a.5.5 0 0 0\
|
||||
-.5-.5z\x22/>\x0d\x0a</sv\
|
||||
g>\
|
||||
\x00\x00\x02E\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
@@ -2555,6 +2674,71 @@ l5.732-6.09H9a.5\
|
||||
47L9.89 2.41 4.1\
|
||||
57 8.5z\x22/>\x0d\x0a</sv\
|
||||
g>\
|
||||
\x00\x00\x03\xe4\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
//www.w3.org/200\
|
||||
0/svg\x22 width=\x2216\
|
||||
\x22 height=\x2216\x22 fi\
|
||||
ll=\x22currentColor\
|
||||
\x22 class=\x22bi bi-p\
|
||||
erson-gear\x22 view\
|
||||
Box=\x220 0 16 16\x22>\
|
||||
\x0a <path fill=\x22w\
|
||||
hite\x22 d=\x22M11 5a3\
|
||||
3 0 1 1-6 0 3 3\
|
||||
0 0 1 6 0M8 7a2\
|
||||
2 0 1 0 0-4 2 2\
|
||||
0 0 0 0 4m.256 \
|
||||
7a4.5 4.5 0 0 1-\
|
||||
.229-1.004H3c.00\
|
||||
1-.246.154-.986.\
|
||||
832-1.664C4.484 \
|
||||
10.68 5.711 10 8\
|
||||
10q.39 0 .74.02\
|
||||
5c.226-.341.496-\
|
||||
.65.804-.918Q8.8\
|
||||
44 9.002 8 9c-5 \
|
||||
0-6 3-6 4s1 1 1 \
|
||||
1zm3.63-4.54c.18\
|
||||
-.613 1.048-.613\
|
||||
1.229 0l.043.14\
|
||||
8a.64.64 0 0 0 .\
|
||||
921.382l.136-.07\
|
||||
4c.561-.306 1.17\
|
||||
5.308.87.869l-.0\
|
||||
75.136a.64.64 0 \
|
||||
0 0 .382.92l.149\
|
||||
.045c.612.18.612\
|
||||
1.048 0 1.229l-\
|
||||
.15.043a.64.64 0\
|
||||
0 0-.38.921l.07\
|
||||
4.136c.305.561-.\
|
||||
309 1.175-.87.87\
|
||||
l-.136-.075a.64.\
|
||||
64 0 0 0-.92.382\
|
||||
l-.045.149c-.18.\
|
||||
612-1.048.612-1.\
|
||||
229 0l-.043-.15a\
|
||||
.64.64 0 0 0-.92\
|
||||
1-.38l-.136.074c\
|
||||
-.561.305-1.175-\
|
||||
.309-.87-.87l.07\
|
||||
5-.136a.64.64 0 \
|
||||
0 0-.382-.92l-.1\
|
||||
48-.045c-.613-.1\
|
||||
8-.613-1.048 0-1\
|
||||
.229l.148-.043a.\
|
||||
64.64 0 0 0 .382\
|
||||
-.921l-.074-.136\
|
||||
c-.306-.561.308-\
|
||||
1.175.869-.87l.1\
|
||||
36.075a.64.64 0 \
|
||||
0 0 .92-.382zM14\
|
||||
12.5a1.5 1.5 0 \
|
||||
1 0-3 0 1.5 1.5 \
|
||||
0 0 0 3 0\x22/>\x0a</s\
|
||||
vg>\
|
||||
\x00\x00\x02,\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
@@ -3001,6 +3185,38 @@ h7a1 1 0 0 1 1 1\
|
||||
v10a1 1 0 0 1-1 \
|
||||
1H4a1 1 0 0 1-1-\
|
||||
1V4z\x22/>\x0d\x0a</svg>\
|
||||
\x00\x00\x01\xd9\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
//www.w3.org/200\
|
||||
0/svg\x22 width=\x2216\
|
||||
\x22 height=\x2216\x22 fi\
|
||||
ll=\x22currentColor\
|
||||
\x22 class=\x22bi bi-f\
|
||||
older2\x22 viewBox=\
|
||||
\x220 0 16 16\x22>\x0a <\
|
||||
path fill=\x22white\
|
||||
\x22 d=\x22M1 3.5A1.5 \
|
||||
1.5 0 0 1 2.5 2h\
|
||||
2.764c.958 0 1.7\
|
||||
6.56 2.311 1.184\
|
||||
C7.985 3.648 8.4\
|
||||
8 4 9 4h4.5A1.5 \
|
||||
1.5 0 0 1 15 5.5\
|
||||
v7a1.5 1.5 0 0 1\
|
||||
-1.5 1.5h-11A1.5\
|
||||
1.5 0 0 1 1 12.\
|
||||
5zM2.5 3a.5.5 0 \
|
||||
0 0-.5.5V6h12v-.\
|
||||
5a.5.5 0 0 0-.5-\
|
||||
.5H9c-.964 0-1.7\
|
||||
1-.629-2.174-1.1\
|
||||
54C6.374 3.334 5\
|
||||
.82 3 5.264 3zM1\
|
||||
4 7H2v5.5a.5.5 0\
|
||||
0 0 .5.5h11a.5.\
|
||||
5 0 0 0 .5-.5z\x22/\
|
||||
>\x0a</svg>\
|
||||
\x00\x00\x02\x96\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
@@ -3269,6 +3485,32 @@ white\x22 d=\x22M7.009\
|
||||
.126 3.936-.896 \
|
||||
5.054-1.902Z\x22/>\x0d\
|
||||
\x0a</svg>\
|
||||
\x00\x00\x01w\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
//www.w3.org/200\
|
||||
0/svg\x22 width=\x2216\
|
||||
\x22 height=\x2216\x22 fi\
|
||||
ll=\x22currentColor\
|
||||
\x22 class=\x22bi bi-a\
|
||||
rrow-clockwise\x22 \
|
||||
viewBox=\x220 0 16 \
|
||||
16\x22>\x0a <path fil\
|
||||
l=\x22white\x22 fill-r\
|
||||
ule=\x22evenodd\x22 d=\
|
||||
\x22M8 3a5 5 0 1 0 \
|
||||
4.546 2.914.5.5 \
|
||||
0 0 1 .908-.417A\
|
||||
6 6 0 1 1 8 2z\x22/\
|
||||
>\x0a <path fill=\x22\
|
||||
white\x22 d=\x22M8 4.4\
|
||||
66V.534a.25.25 0\
|
||||
0 1 .41-.192l2.\
|
||||
36 1.966c.12.1.1\
|
||||
2.284 0 .384L8.4\
|
||||
1 4.658A.25.25 0\
|
||||
0 1 8 4.466\x22/>\x0a\
|
||||
</svg>\
|
||||
\x00\x00\x02I\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
@@ -3455,7 +3697,7 @@ l.694 3.957-3.68\
|
||||
6-1.894a.503.503\
|
||||
0 0 0-.461 0z\x22/\
|
||||
>\x0d\x0a</svg>\
|
||||
\x00\x00\x03\xee\
|
||||
\x00\x00\x03\xf0\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
//www.w3.org/200\
|
||||
@@ -3464,62 +3706,62 @@ svg xmlns=\x22http:\
|
||||
ll=\x22currentColor\
|
||||
\x22 class=\x22bi bi-d\
|
||||
iagram-3\x22 viewBo\
|
||||
x=\x220 0 16 16\x22>\x0a \
|
||||
<path fill=\x22whi\
|
||||
te\x22 fill-rule=\x22e\
|
||||
venodd\x22 d=\x22M6 3.\
|
||||
5A1.5 1.5 0 0 1 \
|
||||
7.5 2h1A1.5 1.5 \
|
||||
0 0 1 10 3.5v1A1\
|
||||
.5 1.5 0 0 1 8.5\
|
||||
6v1H14a.5.5 0 0\
|
||||
1 .5.5v1a.5.5 0\
|
||||
0 1-1 0V8h-5v.5\
|
||||
a.5.5 0 0 1-1 0V\
|
||||
8h-5v.5a.5.5 0 0\
|
||||
1-1 0v-1A.5.5 0\
|
||||
0 1 2 7h5.5V6A1\
|
||||
.5 1.5 0 0 1 6 4\
|
||||
.5zM8.5 5a.5.5 0\
|
||||
0 0 .5-.5v-1a.5\
|
||||
.5 0 0 0-.5-.5h-\
|
||||
1a.5.5 0 0 0-.5.\
|
||||
5v1a.5.5 0 0 0 .\
|
||||
5.5zM0 11.5A1.5 \
|
||||
1.5 0 0 1 1.5 10\
|
||||
h1A1.5 1.5 0 0 1\
|
||||
4 11.5v1A1.5 1.\
|
||||
5 0 0 1 2.5 14h-\
|
||||
1A1.5 1.5 0 0 1 \
|
||||
0 12.5zm1.5-.5a.\
|
||||
5.5 0 0 0-.5.5v1\
|
||||
a.5.5 0 0 0 .5.5\
|
||||
h1a.5.5 0 0 0 .5\
|
||||
-.5v-1a.5.5 0 0 \
|
||||
0-.5-.5zm4.5.5A1\
|
||||
.5 1.5 0 0 1 7.5\
|
||||
10h1a1.5 1.5 0 \
|
||||
0 1 1.5 1.5v1A1.\
|
||||
5 1.5 0 0 1 8.5 \
|
||||
14h-1A1.5 1.5 0 \
|
||||
0 1 6 12.5zm1.5-\
|
||||
.5a.5.5 0 0 0-.5\
|
||||
x=\x220 0 16 16\x22>\x0d\x0a\
|
||||
<path fill=\x22wh\
|
||||
ite\x22 fill-rule=\x22\
|
||||
evenodd\x22 d=\x22M6 3\
|
||||
.5A1.5 1.5 0 0 1\
|
||||
7.5 2h1A1.5 1.5\
|
||||
0 0 1 10 3.5v1A\
|
||||
1.5 1.5 0 0 1 8.\
|
||||
5 6v1H14a.5.5 0 \
|
||||
0 1 .5.5v1a.5.5 \
|
||||
0 0 1-1 0V8h-5v.\
|
||||
5a.5.5 0 0 1-1 0\
|
||||
V8h-5v.5a.5.5 0 \
|
||||
0 1-1 0v-1A.5.5 \
|
||||
0 0 1 2 7h5.5V6A\
|
||||
1.5 1.5 0 0 1 6 \
|
||||
4.5zM8.5 5a.5.5 \
|
||||
0 0 0 .5-.5v-1a.\
|
||||
5.5 0 0 0-.5-.5h\
|
||||
-1a.5.5 0 0 0-.5\
|
||||
.5v1a.5.5 0 0 0 \
|
||||
.5.5h1a.5.5 0 0 \
|
||||
0 .5-.5v-1a.5.5 \
|
||||
0 0 0-.5-.5zm4.5\
|
||||
.5a1.5 1.5 0 0 1\
|
||||
1.5-1.5h1a1.5 1\
|
||||
.5 0 0 1 1.5 1.5\
|
||||
v1a1.5 1.5 0 0 1\
|
||||
-1.5 1.5h-1a1.5 \
|
||||
1.5 0 0 1-1.5-1.\
|
||||
5zm1.5-.5a.5.5 0\
|
||||
0 0-.5.5v1a.5.5\
|
||||
0 0 0 .5.5h1a.5\
|
||||
.5 0 0 0 .5-.5v-\
|
||||
1a.5.5 0 0 0-.5-\
|
||||
.5z\x22/>\x0a</svg>\
|
||||
.5.5zM0 11.5A1.5\
|
||||
1.5 0 0 1 1.5 1\
|
||||
0h1A1.5 1.5 0 0 \
|
||||
1 4 11.5v1A1.5 1\
|
||||
.5 0 0 1 2.5 14h\
|
||||
-1A1.5 1.5 0 0 1\
|
||||
0 12.5zm1.5-.5a\
|
||||
.5.5 0 0 0-.5.5v\
|
||||
1a.5.5 0 0 0 .5.\
|
||||
5h1a.5.5 0 0 0 .\
|
||||
5-.5v-1a.5.5 0 0\
|
||||
0-.5-.5zm4.5.5A\
|
||||
1.5 1.5 0 0 1 7.\
|
||||
5 10h1a1.5 1.5 0\
|
||||
0 1 1.5 1.5v1A1\
|
||||
.5 1.5 0 0 1 8.5\
|
||||
14h-1A1.5 1.5 0\
|
||||
0 1 6 12.5zm1.5\
|
||||
-.5a.5.5 0 0 0-.\
|
||||
5.5v1a.5.5 0 0 0\
|
||||
.5.5h1a.5.5 0 0\
|
||||
0 .5-.5v-1a.5.5\
|
||||
0 0 0-.5-.5zm4.\
|
||||
5.5a1.5 1.5 0 0 \
|
||||
1 1.5-1.5h1a1.5 \
|
||||
1.5 0 0 1 1.5 1.\
|
||||
5v1a1.5 1.5 0 0 \
|
||||
1-1.5 1.5h-1a1.5\
|
||||
1.5 0 0 1-1.5-1\
|
||||
.5zm1.5-.5a.5.5 \
|
||||
0 0 0-.5.5v1a.5.\
|
||||
5 0 0 0 .5.5h1a.\
|
||||
5.5 0 0 0 .5-.5v\
|
||||
-1a.5.5 0 0 0-.5\
|
||||
-.5z\x22/>\x0d\x0a</svg>\
|
||||
\x00\x00\x02_\
|
||||
<\
|
||||
svg xmlns=\x22http:\
|
||||
@@ -3839,6 +4081,10 @@ qt_resource_name = b"\
|
||||
\x00l\
|
||||
\x00i\x00g\x00h\x00t\x00n\x00i\x00n\x00g\x00-\x00c\x00h\x00a\x00r\x00g\x00e\x00.\
|
||||
\x00s\x00v\x00g\
|
||||
\x00\x0f\
|
||||
\x08\xc8\xa6G\
|
||||
\x00p\
|
||||
\x00e\x00r\x00s\x00o\x00n\x00-\x00g\x00e\x00a\x00r\x00.\x00s\x00v\x00g\
|
||||
\x00\x1f\
|
||||
\x08\x8eR\x07\
|
||||
\x00l\
|
||||
@@ -3879,6 +4125,10 @@ qt_resource_name = b"\
|
||||
\x00f\
|
||||
\x00i\x00l\x00e\x00s\x00.\x00s\x00v\x00g\
|
||||
\x00\x0b\
|
||||
\x0c\x8f\x9f\x87\
|
||||
\x00f\
|
||||
\x00o\x00l\x00d\x00e\x00r\x002\x00.\x00s\x00v\x00g\
|
||||
\x00\x0b\
|
||||
\x05X\xfd\x87\
|
||||
\x00q\
|
||||
\x00r\x00-\x00c\x00o\x00d\x00e\x00.\x00s\x00v\x00g\
|
||||
@@ -3910,6 +4160,11 @@ qt_resource_name = b"\
|
||||
\x00o\x00c\x00k\x00e\x00t\x00-\x00t\x00a\x00k\x00e\x00o\x00f\x00f\x00-\x00c\x00o\
|
||||
\x00n\x00n\x00e\x00c\x00t\x00e\x00d\x00-\x00d\x00a\x00r\x00k\x00.\x00s\x00v\x00g\
|
||||
\
|
||||
\x00\x13\
|
||||
\x06\x9a\xb4\xa7\
|
||||
\x00a\
|
||||
\x00r\x00r\x00o\x00w\x00-\x00c\x00l\x00o\x00c\x00k\x00w\x00i\x00s\x00e\x00.\x00s\
|
||||
\x00v\x00g\
|
||||
\x00\x0b\
|
||||
\x02^N'\
|
||||
\x00d\
|
||||
@@ -3996,149 +4251,161 @@ qt_resource_struct = b"\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x00\x10\x00\x02\x00\x00\x00'\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x10\x00\x02\x00\x00\x00*\x00\x00\x00\x03\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x01\xcc\x00\x00\x00\x00\x00\x01\x00\x00'\xfb\
|
||||
\x00\x00\x01\xf0\x00\x00\x00\x00\x00\x01\x00\x00+\xd6\
|
||||
\x00\x00\x01\x93\xdal,\x95\
|
||||
\x00\x00\x044\x00\x02\x00\x00\x00 \x00\x00\x00*\
|
||||
\x00\x00\x04\xa0\x00\x02\x00\x00\x00#\x00\x00\x00-\
|
||||
\x00\x00\x00\x00\x00\x00\x00\x00\
|
||||
\x00\x00\x02\xe0\x00\x00\x00\x00\x00\x01\x00\x00C\xb4\
|
||||
\x00\x00\x03 \x00\x00\x00\x00\x00\x01\x00\x00I_\
|
||||
\x00\x00\x01\x93\xdal,\x96\
|
||||
\x00\x00\x03 \x00\x00\x00\x00\x00\x01\x00\x00J\x09\
|
||||
\x00\x00\x03`\x00\x00\x00\x00\x00\x01\x00\x00O\xb4\
|
||||
\x00\x00\x01\x93\xdal,\x97\
|
||||
\x00\x00\x03\xce\x00\x00\x00\x00\x00\x01\x00\x00V\x9b\
|
||||
\x00\x00\x04:\x00\x00\x00\x00\x00\x01\x00\x00]\xa7\
|
||||
\x00\x00\x01\x93\xdal,\x98\
|
||||
\x00\x00\x03h\x00\x00\x00\x00\x00\x01\x00\x00R\x01\
|
||||
\x00\x00\x03\xd4\x00\x00\x00\x00\x00\x01\x00\x00Y\x0d\
|
||||
\x00\x00\x01\x93\xdal,\x93\
|
||||
\x00\x00\x02$\x00\x00\x00\x00\x00\x01\x00\x001,\
|
||||
\x00\x00\x02H\x00\x00\x00\x00\x00\x01\x00\x005\x07\
|
||||
\x00\x00\x01\x93\xdal,\x94\
|
||||
\x00\x00\x02\xba\x00\x00\x00\x00\x00\x01\x00\x00A7\
|
||||
\x00\x00\x02\xfa\x00\x00\x00\x00\x00\x01\x00\x00F\xe2\
|
||||
\x00\x00\x01\x93\xdal,\x94\
|
||||
\x00\x00\x00\x98\x00\x00\x00\x00\x00\x01\x00\x00\x0a\xea\
|
||||
\x00\x00\x01\x93\xdal,\x96\
|
||||
\x00\x00\x02\x02\x00\x00\x00\x00\x00\x01\x00\x00/\x91\
|
||||
\x00\x00\x02&\x00\x00\x00\x00\x00\x01\x00\x003l\
|
||||
\x00\x00\x01\x93\xdal,\x93\
|
||||
\x00\x00\x04\x8c\x00\x00\x00\x00\x00\x01\x00\x00j\xd3\
|
||||
\x00\x00\x04\xf8\x00\x00\x00\x00\x00\x01\x00\x00q\xe1\
|
||||
\x00\x00\x01\x93\xdal,\x95\
|
||||
\x00\x00\x05b\x00\x00\x00\x00\x00\x01\x00\x00{\x89\
|
||||
\x00\x00\x05\xce\x00\x00\x00\x00\x00\x01\x00\x00\x82\x97\
|
||||
\x00\x00\x01\x93\xdal,\x98\
|
||||
\x00\x00\x02X\x00\x00\x00\x00\x00\x01\x00\x005\x0c\
|
||||
\x00\x00\x02\x98\x00\x00\x00\x00\x00\x01\x00\x00:\xb7\
|
||||
\x00\x00\x01\x93\xdal,\x98\
|
||||
\x00\x00\x02<\x00\x00\x00\x00\x00\x01\x00\x002\xb3\
|
||||
\x00\x00\x02|\x00\x00\x00\x00\x00\x01\x00\x008^\
|
||||
\x00\x00\x01\x93\xdal,\x96\
|
||||
\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00#:\
|
||||
\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x00'\x15\
|
||||
\x00\x00\x01\x93\xdal,\x93\
|
||||
\x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x00\x1f\x9a\
|
||||
\x00\x00\x01\xba\x00\x00\x00\x00\x00\x01\x00\x00#u\
|
||||
\x00\x00\x01\x93\xdal,\x99\
|
||||
\x00\x00\x04d\x00\x00\x00\x00\x00\x01\x00\x00h\x8a\
|
||||
\x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x00W\xac\
|
||||
\x00\x00\x01\x9a\xd9\x08\xa4\xd1\
|
||||
\x00\x00\x04\xd0\x00\x00\x00\x00\x00\x01\x00\x00o\x98\
|
||||
\x00\x00\x01\x93\xdal,\x96\
|
||||
\x00\x00\x00t\x00\x00\x00\x00\x00\x01\x00\x00\x08\x90\
|
||||
\x00\x00\x01\x93\xdal,\x95\
|
||||
\x00\x00\x04\xb0\x00\x00\x00\x00\x00\x01\x00\x00l\xa6\
|
||||
\x00\x00\x05\x1c\x00\x00\x00\x00\x00\x01\x00\x00s\xb4\
|
||||
\x00\x00\x01\x93\xdal,\x94\
|
||||
\x00\x00\x00Z\x00\x00\x00\x00\x00\x01\x00\x00\x01z\
|
||||
\x00\x00\x01\x93\xdal,\x95\
|
||||
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x10d\
|
||||
\x00\x00\x01\x0a\x00\x00\x00\x00\x00\x01\x00\x00\x14?\
|
||||
\x00\x00\x01\x93\xdal,\x95\
|
||||
\x00\x00\x05\xf0\x00\x00\x00\x00\x00\x01\x00\x00\x86\xc7\
|
||||
\x00\x00\x06\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x8d\xd5\
|
||||
\x00\x00\x01\x93\xdal,\x98\
|
||||
\x00\x00\x03\x84\x00\x00\x00\x00\x00\x01\x00\x00TA\
|
||||
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x10d\
|
||||
\x00\x00\x01\x9a\xd5bh\x19\
|
||||
\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00[M\
|
||||
\x00\x00\x01\x93\xdal,\x94\
|
||||
\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x00=\x06\
|
||||
\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00B\xb1\
|
||||
\x00\x00\x01\x93\xdal,\x99\
|
||||
\x00\x00\x05\x18\x00\x00\x00\x00\x00\x01\x00\x00vS\
|
||||
\x00\x00\x05\x84\x00\x00\x00\x00\x00\x01\x00\x00}a\
|
||||
\x00\x00\x01\x93\xdal,\x93\
|
||||
\x00\x00\x01*\x00\x00\x00\x00\x00\x01\x00\x00\x12z\
|
||||
\x00\x00\x01N\x00\x00\x00\x00\x00\x01\x00\x00\x16U\
|
||||
\x00\x00\x01\x93\xdal,\x98\
|
||||
\x00\x00\x04\x1e\x00\x00\x00\x00\x00\x01\x00\x00b$\
|
||||
\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00i0\
|
||||
\x00\x00\x01\x93\xdal,\x99\
|
||||
\x00\x00\x05\xd0\x00\x00\x00\x00\x00\x01\x00\x00\x85\xb0\
|
||||
\x00\x00\x06<\x00\x00\x00\x00\x00\x01\x00\x00\x8c\xbe\
|
||||
\x00\x00\x01\x93\xdal,\x96\
|
||||
\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00Uw\
|
||||
\x00\x00\x04\x16\x00\x00\x00\x00\x00\x01\x00\x00\x5c\x83\
|
||||
\x00\x00\x01\x93\xdal,\x99\
|
||||
\x00\x00\x05H\x00\x00\x00\x00\x00\x01\x00\x00w\xce\
|
||||
\x00\x00\x05\xb4\x00\x00\x00\x00\x00\x01\x00\x00~\xdc\
|
||||
\x00\x00\x01\x93\xdal,\x98\
|
||||
\x00\x00\x05\xa0\x00\x00\x00\x00\x00\x01\x00\x00\x83\x81\
|
||||
\x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x8f\
|
||||
\x00\x00\x01\x93\xdal,\x93\
|
||||
\x00\x00\x04\xce\x00\x00\x00\x00\x00\x01\x00\x00nX\
|
||||
\x00\x00\x05:\x00\x00\x00\x00\x00\x01\x00\x00uf\
|
||||
\x00\x00\x01\x93\xdal,\x97\
|
||||
\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x00>\xb5\
|
||||
\x00\x00\x02`\x00\x00\x00\x00\x00\x01\x00\x006\x8e\
|
||||
\x00\x00\x01\x9a\xd9\x08\xac.\
|
||||
\x00\x00\x02\xe0\x00\x00\x00\x00\x00\x01\x00\x00D`\
|
||||
\x00\x00\x01\x93\xdal,\x99\
|
||||
\x00\x00\x04\x02\x00\x00\x00\x00\x00\x01\x00\x00^\x95\
|
||||
\x00\x00\x04n\x00\x00\x00\x00\x00\x01\x00\x00e\xa1\
|
||||
\x00\x00\x01\x93\xdal,\x99\
|
||||
\x00\x00\x04D\x00\x00\x00\x00\x00\x01\x00\x00d\xa5\
|
||||
\x00\x00\x01\x96\xde\xd9\xe7G\
|
||||
\x00\x00\x01b\x00\x00\x00\x00\x00\x01\x00\x00\x1at\
|
||||
\x00\x00\x04\xb0\x00\x00\x00\x00\x00\x01\x00\x00k\xb1\
|
||||
\x00\x00\x01\x96\xe7\xdc\x22W\
|
||||
\x00\x00\x01\x86\x00\x00\x00\x00\x00\x01\x00\x00\x1eO\
|
||||
\x00\x00\x01\x93\xdal,\x94\
|
||||
\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x01\x00\x00\x0e\xca\
|
||||
\x00\x00\x01\x93\xdal,\x95\
|
||||
\x00\x00\x00(\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
|
||||
\x00\x00\x01\x93\xdal,\x93\
|
||||
\x00\x00\x01\xec\x00\x00\x00\x00\x00\x01\x00\x00+\xfb\
|
||||
\x00\x00\x02\x10\x00\x00\x00\x00\x00\x01\x00\x00/\xd6\
|
||||
\x00\x00\x01\x93\xdal,\x9f\
|
||||
\x00\x00\x01\xcc\x00\x00\x00\x00\x00\x01\x00\x00\xa9\x14\
|
||||
\x00\x00\x01\xf0\x00\x00\x00\x00\x00\x01\x00\x00\xb4\x0a\
|
||||
\x00\x00\x01\x93\xdal,\x9c\
|
||||
\x00\x00\x02\xe0\x00\x00\x00\x00\x00\x01\x00\x00\xbd\x96\
|
||||
\x00\x00\x03 \x00\x00\x00\x00\x00\x01\x00\x00\xcai\
|
||||
\x00\x00\x01\x93\xdal,\x9d\
|
||||
\x00\x00\x03h\x00\x00\x00\x00\x00\x01\x00\x00\xc4\x12\
|
||||
\x00\x00\x03\xd4\x00\x00\x00\x00\x00\x01\x00\x00\xd2`\
|
||||
\x00\x00\x01\x93\xdal,\x9a\
|
||||
\x00\x00\x02$\x00\x00\x00\x00\x00\x01\x00\x00\xb2y\
|
||||
\x00\x00\x02H\x00\x00\x00\x00\x00\x01\x00\x00\xbdo\
|
||||
\x00\x00\x01\x93\xdal,\x9b\
|
||||
\x00\x00\x02\xba\x00\x00\x00\x00\x00\x01\x00\x00\xbb\x0c\
|
||||
\x00\x00\x02\xfa\x00\x00\x00\x00\x00\x01\x00\x00\xc7\xdf\
|
||||
\x00\x00\x01\x93\xdal,\x9b\
|
||||
\x00\x00\x00\x98\x00\x00\x00\x00\x00\x01\x00\x00\x93\xa2\
|
||||
\x00\x00\x00\x98\x00\x00\x00\x00\x00\x01\x00\x00\x9a\xb0\
|
||||
\x00\x00\x01\x93\xdal,\x9d\
|
||||
\x00\x00\x02\x02\x00\x00\x00\x00\x00\x01\x00\x00\xb0\xd1\
|
||||
\x00\x00\x02&\x00\x00\x00\x00\x00\x01\x00\x00\xbb\xc7\
|
||||
\x00\x00\x01\x93\xdal,\x9a\
|
||||
\x00\x00\x04\x8c\x00\x00\x00\x00\x00\x01\x00\x00\xd5_\
|
||||
\x00\x00\x04\xf8\x00\x00\x00\x00\x00\x01\x00\x00\xe3\xaf\
|
||||
\x00\x00\x01\x93\xdal,\x9c\
|
||||
\x00\x00\x02<\x00\x00\x00\x00\x00\x01\x00\x00\xb4\x0d\
|
||||
\x00\x00\x02|\x00\x00\x00\x00\x00\x01\x00\x00\xc0\xe0\
|
||||
\x00\x00\x01\x93\xdal,\x9d\
|
||||
\x00\x00\x01\xae\x00\x00\x00\x00\x00\x01\x00\x00\xa4F\
|
||||
\x00\x00\x01\xd2\x00\x00\x00\x00\x00\x01\x00\x00\xaf<\
|
||||
\x00\x00\x01\x93\xdal,\x9a\
|
||||
\x00\x00\x01\x96\x00\x00\x00\x00\x00\x01\x00\x00\xa0\x99\
|
||||
\x00\x00\x01\xba\x00\x00\x00\x00\x00\x01\x00\x00\xab\x8f\
|
||||
\x00\x00\x01\x93\xdal,\x9e\
|
||||
\x00\x00\x04d\x00\x00\x00\x00\x00\x01\x00\x00\xd2\xfc\
|
||||
\x00\x00\x03\xa8\x00\x00\x00\x00\x00\x01\x00\x00\xd0\xe5\
|
||||
\x00\x00\x01\x9a\xd9\x09m\x86\
|
||||
\x00\x00\x04\xd0\x00\x00\x00\x00\x00\x01\x00\x00\xe1L\
|
||||
\x00\x00\x01\x93\xdal,\x9d\
|
||||
\x00\x00\x00t\x00\x00\x00\x00\x00\x01\x00\x00\x91.\
|
||||
\x00\x00\x00t\x00\x00\x00\x00\x00\x01\x00\x00\x98<\
|
||||
\x00\x00\x01\x93\xdal,\x9c\
|
||||
\x00\x00\x04\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xd7L\
|
||||
\x00\x00\x05\x1c\x00\x00\x00\x00\x00\x01\x00\x00\xe5\x9c\
|
||||
\x00\x00\x01\x93\xdal,\x9b\
|
||||
\x00\x00\x00Z\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x0b\
|
||||
\x00\x00\x00Z\x00\x00\x00\x00\x00\x01\x00\x00\x91\x19\
|
||||
\x00\x00\x01\x93\xdal,\x9b\
|
||||
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x00\x996\
|
||||
\x00\x00\x01\x0a\x00\x00\x00\x00\x00\x01\x00\x00\xa4,\
|
||||
\x00\x00\x01\x93\xdal,\x9c\
|
||||
\x00\x00\x05\xf0\x00\x00\x00\x00\x00\x01\x00\x00\xe1\xfc\
|
||||
\x00\x00\x06\x5c\x00\x00\x00\x00\x00\x01\x00\x00\xf0L\
|
||||
\x00\x00\x01\x93\xdal,\x9d\
|
||||
\x00\x00\x03\x84\x00\x00\x00\x00\x00\x01\x00\x00\xc6_\
|
||||
\x00\x00\x00\xe6\x00\x00\x00\x00\x00\x01\x00\x00\xa0D\
|
||||
\x00\x00\x01\x9a\xd5c1\xd5\
|
||||
\x00\x00\x03\xf0\x00\x00\x00\x00\x00\x01\x00\x00\xd4\xad\
|
||||
\x00\x00\x01\x93\xdal,\x9b\
|
||||
\x00\x00\x02\x82\x00\x00\x00\x00\x00\x01\x00\x00\xb6\xa7\
|
||||
\x00\x00\x02\xc2\x00\x00\x00\x00\x00\x01\x00\x00\xc3z\
|
||||
\x00\x00\x01\x93\xdal,\x9e\
|
||||
\x00\x00\x05\x18\x00\x00\x00\x00\x00\x01\x00\x00\xd9\x18\
|
||||
\x00\x00\x05\x84\x00\x00\x00\x00\x00\x01\x00\x00\xe7h\
|
||||
\x00\x00\x01\x93\xdal,\x9a\
|
||||
\x00\x00\x04\x1e\x00\x00\x00\x00\x00\x01\x00\x00\xcc|\
|
||||
\x00\x00\x04\x8a\x00\x00\x00\x00\x00\x01\x00\x00\xda\xca\
|
||||
\x00\x00\x01\x93\xdal,\x9e\
|
||||
\x00\x00\x05\xd0\x00\x00\x00\x00\x00\x01\x00\x00\xe0\xd8\
|
||||
\x00\x00\x06<\x00\x00\x00\x00\x00\x01\x00\x00\xef(\
|
||||
\x00\x00\x01\x93\xdal,\x9d\
|
||||
\x00\x00\x03\xaa\x00\x00\x00\x00\x00\x01\x00\x00\xc7\xa2\
|
||||
\x00\x00\x04\x16\x00\x00\x00\x00\x00\x01\x00\x00\xd5\xf0\
|
||||
\x00\x00\x01\x93\xdal,\x9f\
|
||||
\x00\x00\x05H\x00\x00\x00\x00\x00\x01\x00\x00\xda\xa0\
|
||||
\x00\x00\x05\xb4\x00\x00\x00\x00\x00\x01\x00\x00\xe8\xf0\
|
||||
\x00\x00\x01\x93\xdal,\x9d\
|
||||
\x00\x00\x05\xa0\x00\x00\x00\x00\x00\x01\x00\x00\xde\x8f\
|
||||
\x00\x00\x06\x0c\x00\x00\x00\x00\x00\x01\x00\x00\xec\xdf\
|
||||
\x00\x00\x01\x93\xdal,\x9a\
|
||||
\x00\x00\x02\xa0\x00\x00\x00\x00\x00\x01\x00\x00\xb8c\
|
||||
\x00\x00\x02`\x00\x00\x00\x00\x00\x01\x00\x00\xbf\x03\
|
||||
\x00\x00\x01\x9a\xd9\x09\x9e\xcd\
|
||||
\x00\x00\x02\xe0\x00\x00\x00\x00\x00\x01\x00\x00\xc56\
|
||||
\x00\x00\x01\x93\xdal,\x9e\
|
||||
\x00\x00\x04\x02\x00\x00\x00\x00\x00\x01\x00\x00\xc8\xd3\
|
||||
\x00\x00\x04n\x00\x00\x00\x00\x00\x01\x00\x00\xd7!\
|
||||
\x00\x00\x01\x93\xdal,\x9e\
|
||||
\x00\x00\x04D\x00\x00\x00\x00\x00\x01\x00\x00\xcf\x0a\
|
||||
\x00\x00\x01\x96\xde\xdb.r\
|
||||
\x00\x00\x01b\x00\x00\x00\x00\x00\x01\x00\x00\x9bf\
|
||||
\x00\x00\x04\xb0\x00\x00\x00\x00\x00\x01\x00\x00\xddX\
|
||||
\x00\x00\x01\x96\xe7\xdc\x22W\
|
||||
\x00\x00\x01\x86\x00\x00\x00\x00\x00\x01\x00\x00\xa6\x5c\
|
||||
\x00\x00\x01\x93\xdal,\x9b\
|
||||
\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x01\x00\x00\x97\x8f\
|
||||
\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x01\x00\x00\x9e\x9d\
|
||||
\x00\x00\x01\x93\xdal,\x9c\
|
||||
\x00\x00\x00(\x00\x00\x00\x00\x00\x01\x00\x00\x88\x84\
|
||||
\x00\x00\x00(\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x92\
|
||||
\x00\x00\x01\x93\xdal,\x9a\
|
||||
\x00\x00\x01\xec\x00\x00\x00\x00\x00\x01\x00\x00\xad!\
|
||||
\x00\x00\x02\x10\x00\x00\x00\x00\x00\x01\x00\x00\xb8\x17\
|
||||
\x00\x00\x01\x93\xdal,\x9f\
|
||||
"
|
||||
|
||||
|
||||
@@ -101,12 +101,12 @@ else:
|
||||
|
||||
APPLICATION_TUN_INTERFACE_DNS_ADDRESS = '1.1.1.1'
|
||||
|
||||
ADMINISTRATOR_NAME = 'Administrator' if PLATFORM == 'Windows' else 'root'
|
||||
ADMINISTRATOR_NAME = 'Administrator' if PLATFORM == 'Windows' else 'Superuser'
|
||||
|
||||
NETWORK_STATE_TEST_URL = 'http://cp.cloudflare.com'
|
||||
NETWORK_SPEED_TEST_URL = (
|
||||
'http://speed.cloudflare.com/__down?during=download&bytes=104857600'
|
||||
)
|
||||
|
||||
UNICODE_LARGE_RED_CIRCLE = u'\U0001F534'
|
||||
UNICODE_LARGE_GREEN_CIRCLE = u'\U0001F7E2'
|
||||
UNICODE_LARGE_RED_CIRCLE = u'\U0001f534'
|
||||
UNICODE_LARGE_GREEN_CIRCLE = u'\U0001f7e2'
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from Furious.Frozenlib.Constants import *
|
||||
from Furious.Frozenlib.Globals import *
|
||||
from Furious.Frozenlib.Utility import *
|
||||
@@ -26,7 +28,7 @@ __all__ = ['PySide6Legacy']
|
||||
|
||||
class PySide6Legacy:
|
||||
@staticmethod
|
||||
def enumValueWrapper(enum):
|
||||
def enumValueWrapper(enum) -> int:
|
||||
# Protect PySide6 enum wrapper behavior changes
|
||||
if versionToValue(PYSIDE6_VERSION) < versionToValue('6.2.2'):
|
||||
return enum
|
||||
@@ -34,7 +36,7 @@ class PySide6Legacy:
|
||||
return enum.value
|
||||
|
||||
@staticmethod
|
||||
def eventLoopWait(ms):
|
||||
def eventLoopWait(ms) -> None:
|
||||
# Protect qWait method does not exist in some
|
||||
# old PySide6 version
|
||||
if versionToValue(PYSIDE6_VERSION) < versionToValue('6.3.1'):
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
from .AppCommands import *
|
||||
from .AppSettings import *
|
||||
from .Constants import *
|
||||
from .Globals import *
|
||||
|
||||
+30
-2
@@ -639,11 +639,38 @@ class NewChangesNextTimeMBox(AppQMessageBox):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.setWindowTitle(_(APPLICATION_NAME))
|
||||
self.setIcon(AppQMessageBox.Icon.Information)
|
||||
self.setText(_('New changes will take effect next time'))
|
||||
self.setStandardButtons(
|
||||
AppQMessageBox.StandardButton.Yes | AppQMessageBox.StandardButton.No
|
||||
)
|
||||
self.setText(self.customText())
|
||||
|
||||
@staticmethod
|
||||
def customText() -> str:
|
||||
return (
|
||||
_('New changes will take effect next time') + '\n\n' + _('Reconnect now?')
|
||||
)
|
||||
|
||||
def retranslate(self):
|
||||
self.setWindowTitle(_(self.windowTitle()))
|
||||
self.setText(self.customText())
|
||||
|
||||
# Ignore informative text, buttons
|
||||
|
||||
self.moveToCenter()
|
||||
|
||||
|
||||
def showNewChangesNextTimeMBox(**kwargs):
|
||||
|
||||
@QtCore.Slot(int)
|
||||
def handleResultCode(code):
|
||||
if code == PySide6Legacy.enumValueWrapper(AppQMessageBox.StandardButton.Yes):
|
||||
APP().systemTray.ConnectAction.doReconnect()
|
||||
else:
|
||||
# Do nothing
|
||||
pass
|
||||
|
||||
try:
|
||||
method = kwargs.pop('method', 'open')
|
||||
|
||||
@@ -656,11 +683,12 @@ def showNewChangesNextTimeMBox(**kwargs):
|
||||
mbox.setWindowModality(QtCore.Qt.WindowModality.ApplicationModal)
|
||||
|
||||
if method == 'open':
|
||||
mbox.finished.connect(handleResultCode)
|
||||
# Show the MessageBox asynchronously
|
||||
mbox.open()
|
||||
else:
|
||||
# Show the MessageBox and wait for the user to close it
|
||||
mbox.exec()
|
||||
handleResultCode(mbox.exec())
|
||||
except Exception:
|
||||
# Any non-exit exceptions
|
||||
|
||||
|
||||
@@ -161,6 +161,10 @@ class ConnectAction(AppQAction):
|
||||
|
||||
APP().systemTray.showMessage(message)
|
||||
|
||||
def doReconnect(self, message=''):
|
||||
self.doDisconnectWithTrayMessage(message)
|
||||
self.trigger()
|
||||
|
||||
def doConnect(self):
|
||||
# Connect action
|
||||
assert self.textCompare('Connect')
|
||||
@@ -289,9 +293,12 @@ class ConnectAction(AppQAction):
|
||||
hasNewVersionCallback=newVersionCallback,
|
||||
)
|
||||
|
||||
# Automatically update assets
|
||||
self.assetDownloadManager.configureHttpProxy(connectedHttpProxy)
|
||||
self.assetDownloadManager.download()
|
||||
if SystemRuntime.appImagePath():
|
||||
logger.info('skipped auto assets update due to running from Linux AppImage')
|
||||
else:
|
||||
# Automatically update assets
|
||||
self.assetDownloadManager.configureHttpProxy(connectedHttpProxy)
|
||||
self.assetDownloadManager.download()
|
||||
|
||||
def callActionFromQueue(self):
|
||||
try:
|
||||
|
||||
@@ -26,7 +26,7 @@ BUILTIN_ROUTING = ['Bypass Mainland China', 'Global', 'Custom']
|
||||
registerAppSettings('Routing', validRange=BUILTIN_ROUTING)
|
||||
|
||||
# ALL BUILTIN ROUTING VALUE
|
||||
TRANSLATABLE_BUILTIN_ROUTING = [
|
||||
_TRANSLATABLE_BUILTIN_ROUTING = [
|
||||
_('Bypass Mainland China'),
|
||||
_('Global'),
|
||||
_('Custom'),
|
||||
@@ -44,8 +44,7 @@ class RoutingChildAction(AppQAction):
|
||||
AppSettings.set('Routing', textEnglish)
|
||||
|
||||
if APP().isSystemTrayConnected():
|
||||
APP().systemTray.ConnectAction.doDisconnect()
|
||||
APP().systemTray.ConnectAction.trigger()
|
||||
APP().systemTray.ConnectAction.doReconnect()
|
||||
|
||||
|
||||
class RoutingAction(AppQAction):
|
||||
|
||||
@@ -38,10 +38,10 @@ registerAppSettings(
|
||||
)
|
||||
registerAppSettings('ShowTabAndSpacesInEditor', isBinary=True)
|
||||
|
||||
# Administrator, root
|
||||
TRANSLATABLE_TUN_MODE = [
|
||||
# Administrator, Superuser
|
||||
_TRANSLATABLE_TUN_MODE = [
|
||||
_('TUN Mode Disabled (Administrator)'),
|
||||
_('TUN Mode Disabled (root)'),
|
||||
_('TUN Mode Disabled (Superuser)'),
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -87,11 +87,28 @@ class SingletonApplication(ApplicationExitHelper):
|
||||
self.socket.connectToServer(self.serverName)
|
||||
|
||||
if self.socket.waitForConnected(1000):
|
||||
# Show tray message in the started instance
|
||||
self.socket.close()
|
||||
if len(sys.argv) == 1:
|
||||
command = AppCommands.Empty.value
|
||||
else:
|
||||
command = sys.argv[1]
|
||||
|
||||
# Do not start
|
||||
return True
|
||||
self.socket.write(command.encode())
|
||||
self.socket.flush()
|
||||
|
||||
if command == AppCommands.Empty.value:
|
||||
# Show tray message in the started instance. Do not start
|
||||
return True
|
||||
elif command == AppCommands.RunAs.value:
|
||||
if self.socket.waitForDisconnected(3000):
|
||||
# The other instance have been exited. Start
|
||||
return False
|
||||
else:
|
||||
# Do not start
|
||||
return True
|
||||
else:
|
||||
# TODO: Not implemented
|
||||
# Do not start
|
||||
return True
|
||||
else:
|
||||
# Remove the old socket file if it exists
|
||||
socket_path = QLocalServer.removeServer(self.serverName)
|
||||
@@ -102,7 +119,7 @@ class SingletonApplication(ApplicationExitHelper):
|
||||
logger.info(f'no existing socket file found for: {self.serverName}')
|
||||
|
||||
# New instance
|
||||
self.server.newConnection.connect(self.showExistingApp)
|
||||
self.server.newConnection.connect(self.handleNewConnection)
|
||||
|
||||
if not self.server.listen(self.serverName):
|
||||
# Do not start
|
||||
@@ -114,7 +131,7 @@ class SingletonApplication(ApplicationExitHelper):
|
||||
return False
|
||||
|
||||
@QtCore.Slot()
|
||||
def showExistingApp(self):
|
||||
def handleNewConnection(self):
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
@@ -156,13 +173,33 @@ class Application(ApplicationFactory, SingletonApplication):
|
||||
|
||||
@callRateLimited(maxCallPerSecond=2)
|
||||
@QtCore.Slot()
|
||||
def showExistingApp(self):
|
||||
if isinstance(self.systemTray, SystemTrayIcon):
|
||||
logger.info('attempting to start multiple instance. Show tray message')
|
||||
def handleNewConnection(self):
|
||||
socket = self.server.nextPendingConnection()
|
||||
socket.readyRead.connect(functools.partial(self.handleNewData, socket))
|
||||
|
||||
self.systemTray.showMessage(_('Already started'))
|
||||
@QtCore.Slot(QLocalSocket)
|
||||
def handleNewData(self, socket: QLocalSocket):
|
||||
data = socket.readAll().data()
|
||||
|
||||
if isinstance(data, bytes):
|
||||
datastr = data.decode('utf-8', 'replace')
|
||||
else:
|
||||
# The tray hasn't been initialized. Do nothing
|
||||
datastr = str(data)
|
||||
|
||||
if datastr == AppCommands.Empty.value:
|
||||
if isinstance(self.systemTray, SystemTrayIcon):
|
||||
logger.info('attempting to start multiple instance. Show tray message')
|
||||
|
||||
self.systemTray.showMessage(_('Already started'))
|
||||
else:
|
||||
# The tray hasn't been initialized. Do nothing
|
||||
pass
|
||||
elif datastr == AppCommands.RunAs.value:
|
||||
logger.info('detected requests to start as admin in new instance. Exiting')
|
||||
|
||||
self.exit()
|
||||
else:
|
||||
# TODO: Not implemented
|
||||
pass
|
||||
|
||||
def configureLogging(self):
|
||||
@@ -248,11 +285,7 @@ class Application(ApplicationFactory, SingletonApplication):
|
||||
SystemProxy.off()
|
||||
SystemProxy.daemonOff()
|
||||
|
||||
if PLATFORM == 'Darwin':
|
||||
AppThreadPool().clear()
|
||||
|
||||
for timeout in [1000, 2000, 3000]:
|
||||
QtCore.QTimer.singleShot(timeout, APP().exit)
|
||||
AppThreadPool().clear()
|
||||
|
||||
logger.info('final cleanup done')
|
||||
|
||||
@@ -295,6 +328,10 @@ class Application(ApplicationFactory, SingletonApplication):
|
||||
|
||||
self.threadPool.clear()
|
||||
|
||||
# Dirty exit
|
||||
for timeout in [1000, 2000, 3000]:
|
||||
QtCore.QTimer.singleShot(timeout, APP().exit)
|
||||
|
||||
super().exit(exitcode)
|
||||
|
||||
def run(self):
|
||||
|
||||
@@ -32,6 +32,10 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
__all__ = ['SystemTrayIcon']
|
||||
|
||||
_TRANSLATABLE_ADMIN = [
|
||||
_('Administrator'),
|
||||
]
|
||||
|
||||
|
||||
class SystemTrayIcon(
|
||||
Mixins.QTranslatable,
|
||||
@@ -183,7 +187,12 @@ class SystemTrayIcon(
|
||||
APP().mainWindow.show()
|
||||
|
||||
def setCustomToolTip(self):
|
||||
self.setToolTip(f'{_(APPLICATION_NAME)} {APPLICATION_VERSION}')
|
||||
if SystemRuntime.isAdmin():
|
||||
self.setToolTip(
|
||||
f'{_(APPLICATION_NAME)} {APPLICATION_VERSION} ({_(ADMINISTRATOR_NAME)})'
|
||||
)
|
||||
else:
|
||||
self.setToolTip(f'{_(APPLICATION_NAME)} {APPLICATION_VERSION}')
|
||||
|
||||
def disconnectedCallback(self):
|
||||
self.setDisconnectedIcon()
|
||||
|
||||
@@ -766,7 +766,7 @@ class UserServersQTableWidgetHeaders:
|
||||
|
||||
|
||||
# ALL Headers VALUE
|
||||
TRANSLATABLE_HEADERS = [
|
||||
_TRANSLATABLE_HEADERS = [
|
||||
_('Remark'),
|
||||
_('Protocol'),
|
||||
_('Address'),
|
||||
@@ -1108,8 +1108,7 @@ class UserServersQTableWidget(Mixins.QTranslatable, AppQTableWidget):
|
||||
self.activateItemByIndex(newIndex, True)
|
||||
|
||||
if APP().isSystemTrayConnected():
|
||||
APP().systemTray.ConnectAction.doDisconnect()
|
||||
APP().systemTray.ConnectAction.trigger()
|
||||
APP().systemTray.ConnectAction.doReconnect()
|
||||
|
||||
@functools.lru_cache(None)
|
||||
def getGuiEditorByProtocol(self, protocol: Protocol, **kwargs):
|
||||
|
||||
@@ -79,7 +79,7 @@ class UserSubsAppQComboBox(AppQComboBox):
|
||||
|
||||
|
||||
# Headers VALUE
|
||||
TRANSLATABLE_HEADERS = [
|
||||
_TRANSLATABLE_HEADERS = [
|
||||
_('Never'),
|
||||
_('Every 5 mins'),
|
||||
_('Every 10 mins'),
|
||||
|
||||
@@ -22,6 +22,7 @@ from Furious.Interface import *
|
||||
from Furious.Library import *
|
||||
from Furious.Qt import *
|
||||
from Furious.Qt import gettext as _
|
||||
from Furious.Utility import *
|
||||
from Furious.Widget.UserServersQTableWidget import *
|
||||
from Furious.Widget.GuiTUNSettings import *
|
||||
from Furious.Window.UserSubsWindow import *
|
||||
@@ -106,7 +107,10 @@ class AppMainWindow(AppQMainWindow):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self.setWindowTitle(_(APPLICATION_NAME))
|
||||
if SystemRuntime.isAdmin():
|
||||
self.setWindowTitle(f'{_(APPLICATION_NAME)} ({_(ADMINISTRATOR_NAME)})')
|
||||
else:
|
||||
self.setWindowTitle(f'{_(APPLICATION_NAME)}')
|
||||
# TODO: Need this?
|
||||
# self.setAttribute(QtCore.Qt.WidgetAttribute.WA_ShowWithoutActivating)
|
||||
|
||||
@@ -235,14 +239,16 @@ class AppMainWindow(AppQMainWindow):
|
||||
]
|
||||
|
||||
if PLATFORM == 'Darwin':
|
||||
openAppFolderAction = [None]
|
||||
openAppFolderAction = []
|
||||
else:
|
||||
openAppFolderAction = [
|
||||
AppQSeperator(),
|
||||
AppQAction(
|
||||
_('Open Application Folder'),
|
||||
icon=bootstrapIcon('folder2.svg'),
|
||||
checkable=False,
|
||||
callback=lambda: self.openApplicationFolder(),
|
||||
),
|
||||
AppQSeperator(),
|
||||
]
|
||||
|
||||
if PLATFORM == 'Windows' or PLATFORM == 'Darwin':
|
||||
@@ -258,13 +264,31 @@ class AppMainWindow(AppQMainWindow):
|
||||
else:
|
||||
customizeTUNSettingsAction = []
|
||||
|
||||
if PLATFORM == 'Windows' or PLATFORM == 'Darwin':
|
||||
_TRANSLATABLE_RESTART_AS_ADMIN = [
|
||||
_('Restart The Application As Administrator'),
|
||||
_('Restart The Application As Superuser'),
|
||||
]
|
||||
|
||||
restartAsAdminAction = [
|
||||
AppQAction(
|
||||
_(f'Restart The Application As {ADMINISTRATOR_NAME}'),
|
||||
icon=bootstrapIcon('arrow-clockwise.svg'),
|
||||
checkable=False,
|
||||
callback=lambda: self.restartAsAdmin(),
|
||||
),
|
||||
]
|
||||
else:
|
||||
restartAsAdminAction = []
|
||||
|
||||
toolsActions = [
|
||||
*customizeTUNSettingsAction,
|
||||
*restartAsAdminAction,
|
||||
*openAppFolderAction,
|
||||
AppQAction(
|
||||
_('Manage Xray-core Asset File...'),
|
||||
callback=lambda: self.xrayAssetViewerWindow.show(),
|
||||
),
|
||||
*openAppFolderAction,
|
||||
]
|
||||
|
||||
if hasattr(AppQAction, 'setMenu'):
|
||||
@@ -367,7 +391,7 @@ class AppMainWindow(AppQMainWindow):
|
||||
}
|
||||
|
||||
# Corresponds to menus defined above
|
||||
TRANSLATABLE_MENU_NAME = [
|
||||
_TRANSLATABLE_MENU_NAME = [
|
||||
_('Log'),
|
||||
_('Server'),
|
||||
_('Subscription'),
|
||||
@@ -464,6 +488,33 @@ class AppMainWindow(AppQMainWindow):
|
||||
else:
|
||||
logger.error(f'open application folder \'{appFolder}\' failed')
|
||||
|
||||
@staticmethod
|
||||
def restartAsAdmin():
|
||||
if not SystemRuntime.isScriptMode():
|
||||
if not SystemRuntime.isAdmin():
|
||||
process = QtCore.QProcess()
|
||||
|
||||
if PLATFORM == 'Windows':
|
||||
process.startDetached(
|
||||
'powershell',
|
||||
arguments=[
|
||||
'-Command',
|
||||
f'Start-Process \'{APP().applicationFilePath()}\' '
|
||||
f'\'{AppCommands.RunAs.value}\' -Verb runAs',
|
||||
],
|
||||
)
|
||||
else:
|
||||
mbox = AppQMessageBox(icon=AppQMessageBox.Icon.Information)
|
||||
mbox.setWindowTitle(_(APPLICATION_NAME))
|
||||
mbox.setText(_('I am, the supreme authority.'))
|
||||
|
||||
# Show the MessageBox asynchronously
|
||||
mbox.open()
|
||||
|
||||
logger.info('ignored request to restart as admin as already is')
|
||||
else:
|
||||
logger.info(f'ignored request to restart as admin in script mode')
|
||||
|
||||
@staticmethod
|
||||
def openAboutPage():
|
||||
if QDesktopServices.openUrl(QtCore.QUrl(APPLICATION_ABOUT_PAGE)):
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-clockwise" viewBox="0 0 16 16">
|
||||
<path fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2z"/>
|
||||
<path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 349 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-folder2" viewBox="0 0 16 16">
|
||||
<path d="M1 3.5A1.5 1.5 0 0 1 2.5 2h2.764c.958 0 1.76.56 2.311 1.184C7.985 3.648 8.48 4 9 4h4.5A1.5 1.5 0 0 1 15 5.5v7a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 1 12.5zM2.5 3a.5.5 0 0 0-.5.5V6h12v-.5a.5.5 0 0 0-.5-.5H9c-.964 0-1.71-.629-2.174-1.154C6.374 3.334 5.82 3 5.264 3zM14 7H2v5.5a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 460 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-gear" viewBox="0 0 16 16">
|
||||
<path d="M11 5a3 3 0 1 1-6 0 3 3 0 0 1 6 0M8 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4m.256 7a4.5 4.5 0 0 1-.229-1.004H3c.001-.246.154-.986.832-1.664C4.484 10.68 5.711 10 8 10q.39 0 .74.025c.226-.341.496-.65.804-.918Q8.844 9.002 8 9c-5 0-6 3-6 4s1 1 1 1zm3.63-4.54c.18-.613 1.048-.613 1.229 0l.043.148a.64.64 0 0 0 .921.382l.136-.074c.561-.306 1.175.308.87.869l-.075.136a.64.64 0 0 0 .382.92l.149.045c.612.18.612 1.048 0 1.229l-.15.043a.64.64 0 0 0-.38.921l.074.136c.305.561-.309 1.175-.87.87l-.136-.075a.64.64 0 0 0-.92.382l-.045.149c-.18.612-1.048.612-1.229 0l-.043-.15a.64.64 0 0 0-.921-.38l-.136.074c-.561.305-1.175-.309-.87-.87l.075-.136a.64.64 0 0 0-.382-.92l-.148-.045c-.613-.18-.613-1.048 0-1.229l.148-.043a.64.64 0 0 0 .382-.921l-.074-.136c-.306-.561.308-1.175.869-.87l.136.075a.64.64 0 0 0 .92-.382zM14 12.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 983 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-clockwise" viewBox="0 0 16 16">
|
||||
<path fill="white" fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2z"/>
|
||||
<path fill="white" d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 375 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-folder2" viewBox="0 0 16 16">
|
||||
<path fill="white" d="M1 3.5A1.5 1.5 0 0 1 2.5 2h2.764c.958 0 1.76.56 2.311 1.184C7.985 3.648 8.48 4 9 4h4.5A1.5 1.5 0 0 1 15 5.5v7a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 1 12.5zM2.5 3a.5.5 0 0 0-.5.5V6h12v-.5a.5.5 0 0 0-.5-.5H9c-.964 0-1.71-.629-2.174-1.154C6.374 3.334 5.82 3 5.264 3zM14 7H2v5.5a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 473 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-person-gear" viewBox="0 0 16 16">
|
||||
<path fill="white" d="M11 5a3 3 0 1 1-6 0 3 3 0 0 1 6 0M8 7a2 2 0 1 0 0-4 2 2 0 0 0 0 4m.256 7a4.5 4.5 0 0 1-.229-1.004H3c.001-.246.154-.986.832-1.664C4.484 10.68 5.711 10 8 10q.39 0 .74.025c.226-.341.496-.65.804-.918Q8.844 9.002 8 9c-5 0-6 3-6 4s1 1 1 1zm3.63-4.54c.18-.613 1.048-.613 1.229 0l.043.148a.64.64 0 0 0 .921.382l.136-.074c.561-.306 1.175.308.87.869l-.075.136a.64.64 0 0 0 .382.92l.149.045c.612.18.612 1.048 0 1.229l-.15.043a.64.64 0 0 0-.38.921l.074.136c.305.561-.309 1.175-.87.87l-.136-.075a.64.64 0 0 0-.92.382l-.045.149c-.18.612-1.048.612-1.229 0l-.043-.15a.64.64 0 0 0-.921-.38l-.136.074c-.561.305-1.175-.309-.87-.87l.075-.136a.64.64 0 0 0-.382-.92l-.148-.045c-.613-.18-.613-1.048 0-1.229l.148-.043a.64.64 0 0 0 .382-.921l-.074-.136c-.306-.561.308-1.175.869-.87l.136.075a.64.64 0 0 0 .92-.382zM14 12.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 996 B |
@@ -1,6 +1,7 @@
|
||||
<!DOCTYPE RCC>
|
||||
<RCC version="1.0">
|
||||
<qresource prefix="Icons/bootstrap">
|
||||
<file alias="arrow-clockwise.svg">Icons/bootstrap/arrow-clockwise.svg</file>
|
||||
<file alias="arrow-return-left.svg">Icons/bootstrap/arrow-return-left.svg</file>
|
||||
<file alias="arrow-return-right.svg">Icons/bootstrap/arrow-return-right.svg</file>
|
||||
<file alias="box-arrow-in-left.svg">Icons/bootstrap/box-arrow-in-left.svg</file>
|
||||
@@ -11,6 +12,7 @@
|
||||
<file alias="download.svg">Icons/bootstrap/download.svg</file>
|
||||
<file alias="file-earmark.svg">Icons/bootstrap/file-earmark.svg</file>
|
||||
<file alias="files.svg">Icons/bootstrap/files.svg</file>
|
||||
<file alias="folder2.svg">Icons/bootstrap/folder2.svg</file>
|
||||
<file alias="folder2-open.svg">Icons/bootstrap/folder2-open.svg</file>
|
||||
<file alias="gear-wide-connected.svg">Icons/bootstrap/gear-wide-connected.svg</file>
|
||||
<file alias="globe2.svg">Icons/bootstrap/globe2.svg</file>
|
||||
@@ -22,6 +24,7 @@
|
||||
<file alias="lock-fill.svg">Icons/bootstrap/lock-fill.svg</file>
|
||||
<file alias="monochrome-rocket-takeoff.svg">Icons/bootstrap/monochrome-rocket-takeoff.svg</file>
|
||||
<file alias="pencil-square.svg">Icons/bootstrap/pencil-square.svg</file>
|
||||
<file alias="person-gear.svg">Icons/bootstrap/person-gear.svg</file>
|
||||
<file alias="pin-angle.svg">Icons/bootstrap/pin-angle.svg</file>
|
||||
<file alias="qr-code.svg">Icons/bootstrap/qr-code.svg</file>
|
||||
<file alias="rocket-takeoff.svg">Icons/bootstrap/rocket-takeoff.svg</file>
|
||||
@@ -41,6 +44,7 @@
|
||||
<file alias="wifi.svg">Icons/bootstrap/wifi.svg</file>
|
||||
</qresource>
|
||||
<qresource prefix="Icons/bootstrap/white">
|
||||
<file alias="arrow-clockwise.svg">Icons/bootstrap/white/arrow-clockwise.svg</file>
|
||||
<file alias="arrow-return-left.svg">Icons/bootstrap/white/arrow-return-left.svg</file>
|
||||
<file alias="arrow-return-right.svg">Icons/bootstrap/white/arrow-return-right.svg</file>
|
||||
<file alias="box-arrow-in-left.svg">Icons/bootstrap/white/box-arrow-in-left.svg</file>
|
||||
@@ -51,6 +55,7 @@
|
||||
<file alias="download.svg">Icons/bootstrap/white/download.svg</file>
|
||||
<file alias="file-earmark.svg">Icons/bootstrap/white/file-earmark.svg</file>
|
||||
<file alias="files.svg">Icons/bootstrap/white/files.svg</file>
|
||||
<file alias="folder2.svg">Icons/bootstrap/white/folder2.svg</file>
|
||||
<file alias="folder2-open.svg">Icons/bootstrap/white/folder2-open.svg</file>
|
||||
<file alias="gear-wide-connected.svg">Icons/bootstrap/white/gear-wide-connected.svg</file>
|
||||
<file alias="globe2.svg">Icons/bootstrap/white/globe2.svg</file>
|
||||
@@ -62,6 +67,7 @@
|
||||
<file alias="lock-fill.svg">Icons/bootstrap/white/lock-fill.svg</file>
|
||||
<file alias="monochrome-rocket-takeoff.svg">Icons/bootstrap/white/monochrome-rocket-takeoff.svg</file>
|
||||
<file alias="pencil-square.svg">Icons/bootstrap/white/pencil-square.svg</file>
|
||||
<file alias="person-gear.svg">Icons/bootstrap/white/person-gear.svg</file>
|
||||
<file alias="pin-angle.svg">Icons/bootstrap/white/pin-angle.svg</file>
|
||||
<file alias="qr-code.svg">Icons/bootstrap/white/qr-code.svg</file>
|
||||
<file alias="router.svg">Icons/bootstrap/white/router.svg</file>
|
||||
|
||||
Reference in New Issue
Block a user