Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def setup_ui_linked(self):
self.autostart = None
if not self.mdbx:
return
self.setToolTip(IDLE)
# ------------- populate context menu -------------------
self.menu.clear()
openDropboxFolderAction = self.menu.addAction("Open Dropbox Folder")
openDropboxFolderAction.triggered.connect(lambda: click.launch(self.mdbx.dropbox_path))
openWebsiteAction = self.menu.addAction("Launch Dropbox Website")
openWebsiteAction.triggered.connect(self.on_website_clicked)
self.menu.addSeparator()
self.accountEmailAction = self.menu.addAction(self.mdbx.get_conf("account", "email"))
self.accountEmailAction.setEnabled(False)
self.accountUsageAction = self.menu.addAction(self.mdbx.get_conf("account", "usage"))
self.syncIssuesAction = self.menu.addAction("Show Sync Issues...")
self.syncIssuesAction.triggered.connect(self.on_sync_issues_clicked)
rebuildAction = self.menu.addAction("Rebuild index...")
rebuildAction.triggered.connect(self.on_rebuild_clicked)
self.menu.addSeparator()
if self._started:
quitAction = self.menu.addAction("Quit Maestral")
else:
quitAction = self.menu.addAction("Quit Maestral GUI")
quitAction.triggered.connect(self.quit)
# --------------- switch to idle icon -------------------
self.setIcon(IDLE)
def load_tray_icons(self):
icons = dict()
icon_mapping = {
IDLE: "idle",
SYNCING: "syncing",
PAUSED: "paused",
STOPPED: "error",
DISCONNECTED: "disconnected",
SYNC_ERROR: "error",
}
if self.contextMenuVisible() and platform.system() == "Darwin":
color = "light"
else:
color = None
for key in icon_mapping:
icons[key] = get_system_tray_icon(icon_mapping[key], color=color)
return icons
openDropboxFolderAction = self.menu.addAction("Open Dropbox Folder")
openDropboxFolderAction.triggered.connect(lambda: click.launch(self.mdbx.dropbox_path))
openWebsiteAction = self.menu.addAction("Launch Dropbox Website")
openWebsiteAction.triggered.connect(self.on_website_clicked)
self.menu.addSeparator()
self.accountEmailAction = self.menu.addAction(self.mdbx.get_conf("account", "email"))
self.accountEmailAction.setEnabled(False)
self.accountUsageAction = self.menu.addAction(self.mdbx.get_conf("account", "usage"))
self.accountUsageAction.setEnabled(False)
self.menu.addSeparator()
self.statusAction = self.menu.addAction(IDLE)
self.statusAction.setEnabled(False)
self.pauseAction = self.menu.addAction(self.PAUSE_TEXT if self.mdbx.syncing else self.RESUME_TEXT)
self.pauseAction.triggered.connect(self.on_start_stop_clicked)
self.recentFilesMenu = self.menu.addMenu("Recently Changed Files")
if platform.system() == "Linux":
# on linux, submenu.aboutToShow may not be emitted
# (see https://bugreports.qt.io/browse/QTBUG-55911)
# therefore, we update the recent files list when the main menu is about to show
self.menu.aboutToShow.connect(self.update_recent_files)
else:
self.recentFilesMenu.aboutToShow.connect(self.update_recent_files)
self.menu.addSeparator()
preferencesAction = self.menu.addAction("Preferences...")
preferencesAction.triggered.connect(self.on_settings_clicked)
def folder_download_worker(monitor, dbx_path, callback=None):
"""
Worker to download a whole Dropbox directory in the background.
:param class monitor: :class:`Monitor` instance.
:param str dbx_path: Path to directory on Dropbox.
:param callback: function to be called after download is complete
"""
time.sleep(2) # wait for pausing to take effect
with monitor.sync.lock:
completed = False
while not completed:
try:
monitor.sync.get_remote_dropbox(dbx_path)
logger.info(IDLE)
if dbx_path == "":
monitor.sync.last_sync = time.time()
else:
# remove folder from excluded list
monitor.queue_downloading.queue.remove(
monitor.sync.to_local_path(dbx_path))
time.sleep(1)
completed = True
if callback is not None:
callback()
except CONNECTION_ERRORS:
logger.debug(DISCONNECTED, exc_info=True)
logger.info(DISCONNECTED)
def _resume_on_connect(self, overload=None):
"""Resumes syncing."""
if self.syncing.is_set():
logger.debug("Syncing was already running")
return
if not self._auto_resume_on_connect:
return
self.sync.clear_all_sync_errors() # clear all previous sync errors
self.syncing.set() # resumes upload_thread, download_thread and file handler
logger.info(IDLE)