Move more logic into GuiCommon and out of MainWindow

This commit is contained in:
Micah Lee 2019-10-20 21:36:30 -07:00
parent 2a07a3572f
commit b8dc0551d3
No known key found for this signature in database
GPG Key ID: 403C2657CD994F73
3 changed files with 39 additions and 29 deletions

View File

@ -60,7 +60,6 @@ def main():
The main() function implements all of the logic that the GUI version of onionshare uses.
"""
common = Common()
common.gui = GuiCommon(common)
# Display OnionShare banner
print(f"OnionShare {common.version} | https://onionshare.org/")
@ -156,8 +155,11 @@ def main():
# TODO: open tab
return
# Attach the GUI common parts to the common object
common.gui = GuiCommon(common, qtapp, local_only, config)
# Launch the gui
main_window = MainWindow(common, qtapp, filenames, config, local_only)
main_window = MainWindow(common, filenames)
# Clean up when app quits
def shutdown():

View File

@ -17,6 +17,7 @@ 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 <http://www.gnu.org/licenses/>.
"""
from onionshare import strings
class GuiCommon:
@ -28,8 +29,20 @@ class GuiCommon:
MODE_RECEIVE = "receive"
MODE_WEBSITE = "website"
def __init__(self, common):
def __init__(self, common, qtapp, local_only, config):
self.common = common
self.qtapp = qtapp
self.local_only = local_only
# Load settings, if a custom config was passed in
self.config = config
if self.config:
self.common.load_settings(self.config)
else:
self.common.load_settings()
# Load strings
strings.load_strings(self.common)
self.css = {
# OnionShareGui styles

View File

@ -42,22 +42,19 @@ class MainWindow(QtWidgets.QMainWindow):
MainWindow is the OnionShare main window, which contains the GUI elements, including all open tabs
"""
def __init__(self, common, qtapp, filenames, config=False, local_only=False):
def __init__(self, common, filenames):
super(MainWindow, self).__init__()
self.common = common
self.common.log("MainWindow", "__init__")
self.qtapp = qtapp
self.local_only = local_only
self.mode = self.common.gui.MODE_SHARE
# Start the Onion
self.onion = Onion(common)
# Start the OnionShare app
self.app = OnionShare(common, self.onion, local_only)
self.app = OnionShare(common, self.onion, self.common.gui.local_only)
# Initialize the window
self.setMinimumWidth(820)
@ -68,15 +65,6 @@ class MainWindow(QtWidgets.QMainWindow):
QtGui.QIcon(self.common.get_resource_path("images/logo.png"))
)
# Load settings, if a custom config was passed in
self.config = config
if self.config:
self.common.load_settings(self.config)
else:
self.common.load_settings()
strings.load_strings(self.common)
# System tray
menu = QtWidgets.QMenu()
self.settings_action = menu.addAction(strings._("gui_settings_window_title"))
@ -87,6 +75,7 @@ class MainWindow(QtWidgets.QMainWindow):
exit_action.triggered.connect(self.close)
self.system_tray = QtWidgets.QSystemTrayIcon(self)
# The convention is Mac systray icons are always grayscale
if self.common.platform == "Darwin":
self.system_tray.setIcon(
@ -163,13 +152,13 @@ class MainWindow(QtWidgets.QMainWindow):
# Share mode
self.share_mode = ShareMode(
self.common,
qtapp,
self.common.gui.qtapp,
self.app,
self.status_bar,
self.server_status_label,
self.system_tray,
filenames,
self.local_only,
self.common.gui.local_only,
)
self.share_mode.init()
self.share_mode.server_status.server_started.connect(
@ -194,13 +183,13 @@ class MainWindow(QtWidgets.QMainWindow):
# Receive mode
self.receive_mode = ReceiveMode(
self.common,
qtapp,
self.common.gui.qtapp,
self.app,
self.status_bar,
self.server_status_label,
self.system_tray,
None,
self.local_only,
self.common.gui.local_only,
)
self.receive_mode.init()
self.receive_mode.server_status.server_started.connect(
@ -227,7 +216,7 @@ class MainWindow(QtWidgets.QMainWindow):
# Website mode
self.website_mode = WebsiteMode(
self.common,
qtapp,
self.common.gui.qtapp,
self.app,
self.status_bar,
self.server_status_label,
@ -284,10 +273,10 @@ class MainWindow(QtWidgets.QMainWindow):
self.timer.timeout.connect(self.timer_callback)
# Start the "Connecting to Tor" dialog, which calls onion.connect()
tor_con = TorConnectionDialog(self.common, self.qtapp, self.onion)
tor_con = TorConnectionDialog(self.common, self.common.gui.qtapp, self.onion)
tor_con.canceled.connect(self._tor_connection_canceled)
tor_con.open_settings.connect(self._tor_connection_open_settings)
if not self.local_only:
if not self.common.gui.local_only:
tor_con.start()
# Start the timer
@ -490,7 +479,7 @@ class MainWindow(QtWidgets.QMainWindow):
)
# Wait 1ms for the event loop to finish, then quit
QtCore.QTimer.singleShot(1, self.qtapp.quit)
QtCore.QTimer.singleShot(1, self.common.gui.qtapp.quit)
# Wait 100ms before asking
QtCore.QTimer.singleShot(100, ask)
@ -519,7 +508,7 @@ class MainWindow(QtWidgets.QMainWindow):
# We might've stopped the main requests timer if a Tor connection failed.
# If we've reloaded settings, we probably succeeded in obtaining a new
# connection. If so, restart the timer.
if not self.local_only:
if not self.common.gui.local_only:
if self.onion.is_authenticated():
if not self.timer.isActive():
self.timer.start(500)
@ -543,7 +532,11 @@ class MainWindow(QtWidgets.QMainWindow):
self.website_mode.server_status.autostart_timer_container.hide()
d = SettingsDialog(
self.common, self.onion, self.qtapp, self.config, self.local_only
self.common,
self.onion,
self.common.gui.qtapp,
self.common.gui.config,
self.common.gui.local_only,
)
d.settings_saved.connect(reload_settings)
d.exec_()
@ -568,7 +561,9 @@ class MainWindow(QtWidgets.QMainWindow):
),
)
self.update_thread = UpdateThread(self.common, self.onion, self.config)
self.update_thread = UpdateThread(
self.common, self.onion, self.common.gui.config
)
self.update_thread.update_available.connect(update_available)
self.update_thread.start()
@ -579,7 +574,7 @@ class MainWindow(QtWidgets.QMainWindow):
"""
self.update()
if not self.local_only:
if not self.common.gui.local_only:
# Have we lost connection to Tor somehow?
if not self.onion.is_authenticated():
self.timer.stop()