From 98f07b47efa34a8c8981c1f5bb6bd9f8ea99aad9 Mon Sep 17 00:00:00 2001
From: yang <ry219@ic.ac.uk>
Date: Fri, 9 Oct 2020 11:53:33 +0800
Subject: [PATCH] Add config option to disable use system proxy

---
 cutelog/config.py                       |   1 +
 cutelog/listener.py                     |   4 +-
 cutelog/resources/ui/settings_dialog.ui | 132 ++++++++++++++----------
 cutelog/settings_dialog.py              |   2 +
 setup.py                                |  22 +++-
 5 files changed, 99 insertions(+), 62 deletions(-)

diff --git a/cutelog/config.py b/cutelog/config.py
index 2af282d..4392c4b 100644
--- a/cutelog/config.py
+++ b/cutelog/config.py
@@ -72,6 +72,7 @@ OPTION_SPEC = (
     ('single_tab_mode_default',      bool, False),
     ('extra_mode_default',           bool, False),
     ('default_serialization_format', str,  'pickle'),
+    ('use_system_proxy',             bool, False),
 
     # Advanced
     ('console_logging_level',        int,   30),
diff --git a/cutelog/listener.py b/cutelog/listener.py
index e29f996..d8b581b 100644
--- a/cutelog/listener.py
+++ b/cutelog/listener.py
@@ -4,7 +4,7 @@ import struct
 import time
 
 from qtpy.QtCore import QThread, Signal
-from qtpy.QtNetwork import QHostAddress, QTcpServer, QTcpSocket
+from qtpy.QtNetwork import QHostAddress, QTcpServer, QTcpSocket, QNetworkProxyFactory
 
 from .config import CONFIG, MSGPACK_SUPPORT, CBOR_SUPPORT
 from .logger_tab import LogRecord
@@ -27,6 +27,8 @@ class LogServer(QTcpServer):
         self.conn_count = 0
 
         self.threads = []
+        QNetworkProxyFactory.setUseSystemConfiguration(CONFIG['use_system_proxy'])
+
 
     def start(self):
         self.log.info('Starting the server')
diff --git a/cutelog/resources/ui/settings_dialog.ui b/cutelog/resources/ui/settings_dialog.ui
index c20eca4..8112727 100644
--- a/cutelog/resources/ui/settings_dialog.ui
+++ b/cutelog/resources/ui/settings_dialog.ui
@@ -66,7 +66,7 @@
       </sizepolicy>
      </property>
      <property name="currentIndex">
-      <number>0</number>
+      <number>2</number>
      </property>
      <widget class="QWidget" name="pageAppearance">
       <layout class="QGridLayout" name="gridLayout_3">
@@ -396,8 +396,8 @@
        <property name="verticalSpacing">
         <number>10</number>
        </property>
-       <item row="2" column="0">
-        <widget class="QLabel" name="label_16">
+       <item row="1" column="0">
+        <widget class="QLabel" name="label_13">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
            <horstretch>0</horstretch>
@@ -405,47 +405,54 @@
           </sizepolicy>
          </property>
          <property name="text">
-          <string>Default serialization format</string>
+          <string>Server listen port</string>
          </property>
         </widget>
        </item>
-       <item row="0" column="1">
-        <widget class="QLineEdit" name="listenHostLine">
+       <item row="0" column="0">
+        <widget class="QLabel" name="label_12">
          <property name="sizePolicy">
-          <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
+          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <property name="placeholderText">
-          <string>0.0.0.0</string>
+         <property name="text">
+          <string>Server listen address</string>
          </property>
         </widget>
        </item>
-       <item row="1" column="0">
-        <widget class="QLabel" name="label_13">
+       <item row="0" column="1">
+        <widget class="QLineEdit" name="listenHostLine">
          <property name="sizePolicy">
-          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+          <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <property name="text">
-          <string>Server listen port</string>
+         <property name="placeholderText">
+          <string>0.0.0.0</string>
          </property>
         </widget>
        </item>
-       <item row="0" column="0">
-        <widget class="QLabel" name="label_12">
+       <item row="2" column="1">
+        <widget class="QComboBox" name="serializationFormatCombo">
          <property name="sizePolicy">
-          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+          <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <property name="text">
-          <string>Server listen address</string>
-         </property>
+         <item>
+          <property name="text">
+           <string>pickle</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>json</string>
+          </property>
+         </item>
         </widget>
        </item>
        <item row="1" column="1">
@@ -461,21 +468,21 @@
          </property>
         </widget>
        </item>
-       <item row="7" column="0" colspan="2">
-        <spacer name="verticalSpacer_3">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
+       <item row="2" column="0">
+        <widget class="QLabel" name="label_16">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
          </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>40</height>
-          </size>
+         <property name="text">
+          <string>Default serialization format</string>
          </property>
-        </spacer>
+        </widget>
        </item>
-       <item row="5" column="0">
-        <widget class="QLabel" name="label_15">
+       <item row="4" column="0">
+        <widget class="QLabel" name="label_14">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
            <horstretch>0</horstretch>
@@ -483,7 +490,7 @@
           </sizepolicy>
          </property>
          <property name="text">
-          <string>Extra mode by default</string>
+          <string>Single tab mode by default</string>
          </property>
         </widget>
        </item>
@@ -494,35 +501,28 @@
          </property>
         </widget>
        </item>
-       <item row="5" column="1">
-        <widget class="QCheckBox" name="extraModeCheckBox">
-         <property name="text">
-          <string/>
+       <item row="3" column="0" colspan="2">
+        <widget class="Line" name="line">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
          </property>
         </widget>
        </item>
-       <item row="2" column="1">
-        <widget class="QComboBox" name="serializationFormatCombo">
+       <item row="6" column="0">
+        <widget class="QLabel" name="label_18">
          <property name="sizePolicy">
-          <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
+          <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
            <horstretch>0</horstretch>
            <verstretch>0</verstretch>
           </sizepolicy>
          </property>
-         <item>
-          <property name="text">
-           <string>pickle</string>
-          </property>
-         </item>
-         <item>
-          <property name="text">
-           <string>json</string>
-          </property>
-         </item>
+         <property name="text">
+          <string>Use system proxy</string>
+         </property>
         </widget>
        </item>
-       <item row="4" column="0">
-        <widget class="QLabel" name="label_14">
+       <item row="5" column="0">
+        <widget class="QLabel" name="label_15">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
            <horstretch>0</horstretch>
@@ -530,14 +530,34 @@
           </sizepolicy>
          </property>
          <property name="text">
-          <string>Single tab mode by default</string>
+          <string>Extra mode by default</string>
          </property>
         </widget>
        </item>
-       <item row="3" column="0" colspan="2">
-        <widget class="Line" name="line">
+       <item row="5" column="1">
+        <widget class="QCheckBox" name="extraModeCheckBox">
+         <property name="text">
+          <string/>
+         </property>
+        </widget>
+       </item>
+       <item row="8" column="0" colspan="2">
+        <spacer name="verticalSpacer_3">
          <property name="orientation">
-          <enum>Qt::Horizontal</enum>
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+       <item row="6" column="1">
+        <widget class="QCheckBox" name="useSystemProxyCheckBox">
+         <property name="text">
+          <string/>
          </property>
         </widget>
        </item>
diff --git a/cutelog/settings_dialog.py b/cutelog/settings_dialog.py
index 9e784e3..de2fde6 100644
--- a/cutelog/settings_dialog.py
+++ b/cutelog/settings_dialog.py
@@ -62,6 +62,7 @@ class SettingsDialog(QDialog):
         self.listenPortLine.setText(str(CONFIG['listen_port']))
         self.singleTabCheckBox.setChecked(CONFIG['single_tab_mode_default'])
         self.extraModeCheckBox.setChecked(CONFIG['extra_mode_default'])
+        self.useSystemProxyCheckBox.setChecked(CONFIG['use_system_proxy'])
         if MSGPACK_SUPPORT:
             self.serializationFormatCombo.addItem("msgpack")
         if CBOR_SUPPORT:
@@ -105,6 +106,7 @@ class SettingsDialog(QDialog):
         o['single_tab_mode_default'] = self.singleTabCheckBox.isChecked()
         o['extra_mode_default'] = self.extraModeCheckBox.isChecked()
         o['default_serialization_format'] = self.serializationFormatCombo.currentText()
+        o['use_system_proxy'] = self.useSystemProxyCheckBox.isChecked()
 
         # Advanced
         o['benchmark_interval'] = float(self.benchmarkIntervalLine.text())
diff --git a/setup.py b/setup.py
index 32d3230..b14609f 100644
--- a/setup.py
+++ b/setup.py
@@ -1,10 +1,11 @@
 # -*- coding: utf-8 -*-
 
 from os.path import dirname, join
+
 from setuptools import setup
+from setuptools.command.build_py import build_py
 from setuptools.command.install import install
 
-
 VERSION = '2.0.4'
 
 
@@ -15,7 +16,7 @@ def build_qt_resources():
     except ImportError as e:
         raise Exception("Building from source requires PyQt5") from e
     pyrcc_main.processResourceFile(['cutelog/resources/resources.qrc'],
-                                    'cutelog/resources.py', False)
+                                   'cutelog/resources.py', False)
     # Rewrite PyQt5 import statements to qtpy
     with open('cutelog/resources.py', 'r') as rf:
         lines = rf.readlines()
@@ -39,6 +40,17 @@ class CustomInstall(install):
         install.run(self)
 
 
+class CustomBuild(build_py):
+    def run(self):
+        try:
+            build_qt_resources()
+        except Exception as e:
+            print('Could not compile the resources.py file due to an exception: "{}"\n'
+                  'Aborting build.'.format(e))
+            raise
+        build_py.run(self)
+
+
 setup(
     name="cutelog",
     version=VERSION,
@@ -50,8 +62,8 @@ setup(
     url="https://github.com/busimus/cutelog/",
 
     python_requires=">=3.5",
-    install_requires=['PyQt5;platform_system=="Darwin"',    # it's better to use distro-supplied
-                      'PyQt5;platform_system=="Windows"',   # PyQt package on Linux
+    install_requires=['PyQt5;platform_system=="Darwin"',  # it's better to use distro-supplied
+                      'PyQt5;platform_system=="Windows"',  # PyQt package on Linux
                       'QtPy'],
 
     classifiers=[
@@ -80,5 +92,5 @@ setup(
     data_files=[('share/applications', ['share/cutelog.desktop']),
                 ('share/pixmaps', ['share/cutelog.png'])],
     zip_safe=False,
-    cmdclass=dict(install=CustomInstall)
+    cmdclass=dict(install=CustomInstall, build_py=CustomBuild)
 )
-- 
GitLab