Feature: network state tuning

Signed-off-by: LorenEteval <loren.eteval@proton.me>
This commit is contained in:
LorenEteval
2026-06-21 15:56:17 +08:00
committed by Loren Eteval
parent db2b69c5aa
commit 050e12dd6d
3 changed files with 59 additions and 16 deletions
-3
View File
@@ -118,6 +118,3 @@ NETWORK_CONNECTIVITY_TEST_URL = 'http://cp.cloudflare.com'
NETWORK_SPEED_TEST_URL = (
f'http://speed.cloudflare.com/__down?during=download&bytes={95 * 1024 * 1024}'
)
UNICODE_LARGE_RED_CIRCLE = '\U0001f534'
UNICODE_LARGE_GREEN_CIRCLE = '\U0001f7e2'
+27
View File
@@ -47,6 +47,9 @@ class AppStyleSheet:
'input': '#FFFFFF',
'input_focus': '#F7FBFF',
'danger': '#D9514E',
'danger_soft': '#FDECEC',
'success': '#2F817D',
'success_soft': '#DDF1EF',
'scroll_handle': '#B4C0CC',
'scroll_handle_hover': '#96A5B4',
},
@@ -69,6 +72,9 @@ class AppStyleSheet:
'input': '#232427',
'input_focus': '#282D2F',
'danger': '#F07178',
'danger_soft': '#4A2528',
'success': '#4FB6B2',
'success_soft': '#1F3A3A',
'scroll_handle': '#5B6067',
'scroll_handle_hover': '#70767F',
},
@@ -472,6 +478,27 @@ class AppStyleSheet:
background-color: {palette['panel']};
}}
QLabel#NetworkStateLabel {{
min-height: 22px;
padding: 3px 10px;
border: 1px solid {palette['border']};
border-radius: 5px;
background-color: {palette['raised']};
color: {palette['muted']};
}}
QLabel#NetworkStateLabel[networkState="success"] {{
border-left: 4px solid {palette['success']};
background-color: {palette['success_soft']};
color: {palette['text']};
}}
QLabel#NetworkStateLabel[networkState="failure"] {{
border-left: 4px solid {palette['danger']};
background-color: {palette['danger_soft']};
color: {palette['text']};
}}
QSplitter::handle {{
background-color: {palette['border']};
}}
+32 -13
View File
@@ -435,6 +435,8 @@ class AppMainWindow(AppQMainWindow):
# self.setStatusBar(QStatusBar(self))
self.networkState = AppQLabel(translatable=False)
self.networkState.setObjectName('NetworkStateLabel')
self.networkState.setVisible(False)
self.statusBar().addPermanentWidget(self.networkState)
@@ -501,24 +503,41 @@ class AppMainWindow(AppQMainWindow):
def resetNetworkState(self):
self.networkState.setText('')
self.networkState.setToolTip('')
self.networkState.setProperty('networkState', '')
self.networkState.setVisible(False)
self.refreshNetworkStateStyle()
def setNetworkState(self, success: bool, **kwargs):
remark = Storage.Extras.UserServerRemark()
if success:
if remark:
self.networkState.setText(f'{remark} {UNICODE_LARGE_GREEN_CIRCLE}')
else:
self.resetNetworkState()
else:
errorString = kwargs.pop('errorString', '')
if not remark:
self.resetNetworkState()
if remark:
self.networkState.setText(
f'{remark} - {errorString} {UNICODE_LARGE_RED_CIRCLE}'
)
else:
self.resetNetworkState()
return
if success:
self.networkState.setText(f'{_("Network OK")} - {remark}')
self.networkState.setToolTip(remark)
self.networkState.setProperty('networkState', 'success')
self.refreshNetworkStateStyle()
return
errorString = kwargs.pop('errorString', '')
self.networkState.setText(f'{_("Network error")} - {remark}')
self.networkState.setToolTip(f'{remark}\n{errorString}'.strip())
self.networkState.setProperty('networkState', 'failure')
self.refreshNetworkStateStyle()
def refreshNetworkStateStyle(self):
self.networkState.style().unpolish(self.networkState)
self.networkState.style().polish(self.networkState)
self.networkState.setVisible(bool(self.networkState.text()))
@staticmethod
def openApplicationFolder():