Refine configuration editing

Signed-off-by: Loren Eteval <loren.eteval@proton.me>
This commit is contained in:
Loren Eteval
2023-09-27 22:35:38 +08:00
parent edd7473c71
commit df3dad07eb
+28 -26
View File
@@ -1256,7 +1256,7 @@ def getSubsRemarkFromUnique(server):
class Worker:
def __init__(self, serverIdx, serverObj, updateCallback=None):
def __init__(self, serverIdx, serverObj):
self.serverIdx = serverIdx
self.serverObj = serverObj
@@ -1264,8 +1264,6 @@ class Worker:
self.serverRef = APP().ServerWidget.ServerList
self.deletedId = APP().ServerWidget.deletedServerId
self.updateCallback = updateCallback
def serverDeleted(self):
if (
# Fast search for deletion
@@ -1278,10 +1276,10 @@ class Worker:
else:
return False
def update(self):
if not callable(self.updateCallback):
return
def updateCallback(self, index, reference):
raise NotImplementedError
def updateResult(self):
if self.serverDeleted():
# Deleted. Do nothing
return
@@ -1308,12 +1306,15 @@ class PingDelayWorker(Worker, QtCore.QObject, QtCore.QRunnable):
updateTable = QtCore.Signal(int, dict)
def __init__(self, serverIdx, serverObj):
super().__init__(serverIdx, serverObj, updateCallback=self.updateTable.emit)
super().__init__(serverIdx, serverObj)
# Explictly called __init__
QtCore.QObject.__init__(self)
QtCore.QRunnable.__init__(self)
def updateCallback(self, index, reference):
self.updateTable.emit(index, reference)
def run(self):
if self.serverDeleted():
# Deleted. Do nothing
@@ -1331,7 +1332,7 @@ class PingDelayWorker(Worker, QtCore.QObject, QtCore.QRunnable):
# Any non-exit exceptions
self.serverObj['delayResult'] = 'Timeout'
self.update()
self.updateResult()
return
@@ -1340,12 +1341,12 @@ class PingDelayWorker(Worker, QtCore.QObject, QtCore.QRunnable):
else:
self.serverObj['delayResult'] = f'{round(result)}ms'
self.update()
self.updateResult()
class DownSpeedWorker(Worker):
def __init__(self, serverIdx, serverObj, updateCallback):
super().__init__(serverIdx, serverObj, updateCallback=updateCallback)
def __init__(self, serverIdx, serverObj):
super().__init__(serverIdx, serverObj)
self.core = None
@@ -1358,6 +1359,9 @@ class DownSpeedWorker(Worker):
self.networkReply = None
self.networkAccessManager = QNetworkAccessManager()
def updateCallback(self, index, reference):
APP().ServerWidget.flushServerSpeedResult(index, reference)
def abort(self):
if self.networkReply is not None:
self.networkReply.abort()
@@ -1369,7 +1373,7 @@ class DownSpeedWorker(Worker):
def cancelTest(self):
self.serverObj['speedResult'] = 'Canceled'
self.update()
self.updateResult()
self.testFinished = True
def isFinished(self):
@@ -1390,7 +1394,7 @@ class DownSpeedWorker(Worker):
return
self.serverObj['speedResult'] = '0.00 M/s'
self.update()
self.updateResult()
try:
coreJSON = Configuration.toJSON(config)
@@ -1404,7 +1408,7 @@ class DownSpeedWorker(Worker):
def coreExitCallback(exitcode):
self.serverObj['speedResult'] = 'Canceled'
self.update()
self.updateResult()
if coreType == XrayCore.name():
# Force redirect
@@ -1506,7 +1510,7 @@ class DownSpeedWorker(Worker):
# Has speed value
self.speedValue = True
self.serverObj['speedResult'] = f'{downloadSpeed:.2f} M/s'
self.update()
self.updateResult()
@QtCore.Slot()
def handleFinished(self):
@@ -1523,7 +1527,7 @@ class DownSpeedWorker(Worker):
self.serverObj['speedResult'] = f'{downloadSpeed:.2f} M/s'
self.update()
self.updateResult()
self.testFinished = True
@@ -2118,16 +2122,11 @@ class ServerWidget(Translatable, SupportConnectedCallback, TableWidget):
self.flushServerResultByColumn(row, ServerWidget.SPEED_INDEX, server)
def testPingDelayByReference(self, indexes, references):
for index, server in enumerate(references):
worker = PingDelayWorker(indexes[index], server)
for index, reference in zip(indexes, references):
worker = PingDelayWorker(index, reference)
worker.setAutoDelete(True)
worker.updateTable.connect(self.flushServerDelayResult)
# Note: During testing, the thread pool seemed to
# occupy memory infinitely. This appears to be a
# PySide6 memory leak bug. Not sure if PyQt6 has this problem.
#
# Furious should have set up all the necessary flags.
self.pingThreadPool.start(worker)
@QtCore.Slot()
@@ -2140,7 +2139,7 @@ class ServerWidget(Translatable, SupportConnectedCallback, TableWidget):
return
def testDownloadSpeed(counter=0, timeout=5000, step=100):
worker = DownSpeedWorker(index, server, self.flushServerSpeedResult)
worker = DownSpeedWorker(index, server)
worker.run()
while not APP().exiting and not worker.isFinished() and counter < timeout:
@@ -2161,10 +2160,10 @@ class ServerWidget(Translatable, SupportConnectedCallback, TableWidget):
testDownloadSpeed()
def testDownSpeedByReference(self, indexes, references):
for index, server in enumerate(references):
for index, reference in zip(indexes, references):
# Served by FIFO
try:
self.downSpeedQueue.put_nowait((indexes[index], server))
self.downSpeedQueue.put_nowait((index, reference))
except Exception:
# Any non-exit exceptions
@@ -2683,6 +2682,9 @@ class EditConfigurationWidget(MainWindow):
def pingThreadPool(self):
return self.serverWidget.pingThreadPool
def flushServerSpeedResult(self, row, server):
self.serverWidget.flushServerSpeedResult(row, server)
def saveScrollBarValue(self, index):
self.serverWidget.saveScrollBarValue(index)