From 6f38b93c8f57da073e22d2d12715170e37e927fe Mon Sep 17 00:00:00 2001 From: Loren Eteval Date: Fri, 10 May 2024 13:10:43 +0800 Subject: [PATCH] Cache guiEditor in server table widget #79 Signed-off-by: Loren Eteval --- Furious/Widget/UserServersQTableWidget.py | 55 ++++++++++++++--------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/Furious/Widget/UserServersQTableWidget.py b/Furious/Widget/UserServersQTableWidget.py index 0d3f633..dd01c28 100644 --- a/Furious/Widget/UserServersQTableWidget.py +++ b/Furious/Widget/UserServersQTableWidget.py @@ -879,24 +879,34 @@ class UserServersQTableWidget(QTranslatable, AppQTableWidget): APP().systemTray.ConnectAction.doDisconnect() APP().systemTray.ConnectAction.trigger() + @functools.lru_cache(None) + def getGuiEditorByProtocol(self, protocol, **kwargs): + logger.debug(f'getGuiEditorByProtocol called with protocol {protocol}') + + if protocolRepr(protocol) == Protocol.VMess: + return GuiVMess(parent=self, **kwargs) + if protocolRepr(protocol) == Protocol.VLESS: + return GuiVLESS(parent=self, **kwargs) + if protocolRepr(protocol) == Protocol.Shadowsocks: + return GuiShadowsocks(parent=self, **kwargs) + if protocolRepr(protocol) == Protocol.Trojan: + return GuiTrojan(parent=self, **kwargs) + if protocolRepr(protocol) == Protocol.Hysteria2: + return GuiHysteria2(parent=self, **kwargs) + if protocolRepr(protocol) == Protocol.Hysteria1: + return GuiHysteria1(parent=self, **kwargs) + + return None + def getGuiEditorByFactory(self, factory, **kwargs): if isinstance(factory, ConfigurationXray): protocol = factory.proxyProtocol - if protocolRepr(protocol) == Protocol.VMess: - guiEditor = GuiVMess(parent=self, **kwargs) - elif protocolRepr(protocol) == Protocol.VLESS: - guiEditor = GuiVLESS(parent=self, **kwargs) - elif protocolRepr(protocol) == Protocol.Shadowsocks: - guiEditor = GuiShadowsocks(parent=self, **kwargs) - elif protocolRepr(protocol) == Protocol.Trojan: - guiEditor = GuiTrojan(parent=self, **kwargs) - else: - guiEditor = None + guiEditor = self.getGuiEditorByProtocol(protocol, **kwargs) elif isinstance(factory, ConfigurationHysteria2): - guiEditor = GuiHysteria2(parent=self, **kwargs) + guiEditor = self.getGuiEditorByProtocol(Protocol.Hysteria2, **kwargs) elif isinstance(factory, ConfigurationHysteria1): - guiEditor = GuiHysteria1(parent=self, **kwargs) + guiEditor = self.getGuiEditorByProtocol(Protocol.Hysteria1, **kwargs) else: guiEditor = None @@ -930,19 +940,20 @@ class UserServersQTableWidget(QTranslatable, AppQTableWidget): def handleAccepted(): modified = guiEditor.inputToFactory(factory) - self.flushRow(index, factory) + if modified: + self.flushRow(index, factory) - if index == AS_UserActivatedItemIndex(): - try: - if modified and APP().isSystemTrayConnected(): - mbox = NewChangesNextTimeMBox() + if index == AS_UserActivatedItemIndex(): + try: + if APP().isSystemTrayConnected(): + mbox = NewChangesNextTimeMBox() - # Show the MessageBox asynchronously - mbox.open() - except Exception: - # Any non-exit exceptions + # Show the MessageBox asynchronously + mbox.open() + except Exception: + # Any non-exit exceptions - pass + pass guiEditor.connectAccepted(handleAccepted) guiEditor.open()