Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
@handle_disconnect
def get_profile_pic(self):
"""
Download the user's profile picture from Dropbox. The picture saved in Maestral's
cache directory for retrieval when there is no internet connection.
:returns: Path to saved profile picture or None if no profile picture is set.
"""
try:
res = self.client.get_account_info()
except MaestralApiError:
pass
else:
if res.profile_photo_url:
# download current profile pic
res = requests.get(res.profile_photo_url)
@handle_disconnect
def list_folder(self, dbx_path, **kwargs):
"""
List all items inside the folder given by :param:`dbx_path`.
:param dbx_path: Path to folder on Dropbox.
:return: List of Dropbox item metadata as dicts.
:rtype: list[dict]
"""
dbx_path = "" if dbx_path == "/" else dbx_path
res = self.client.list_folder(dbx_path, **kwargs)
entries = [dropbox_stone_to_dict(e) for e in res.entries]
return entries
@handle_disconnect
def populate_folders_list(self, overload=None):
self.excluded_folders = self.mdbx.excluded_folders
self.async_loader = AsyncLoadFolders(self.mdbx, self)
self.dbx_root = DropboxPathModel(self.mdbx, self.async_loader, "/")
self.dbx_model = TreeModel(self.dbx_root)
self.dbx_model.loading_done.connect(self.ui_loaded)
self.dbx_model.loading_failed.connect(self.ui_failed)
self.dbx_model.dataChanged.connect(self.update_select_all_checkbox)
self.treeViewFolders.setModel(self.dbx_model)
@handle_disconnect
def get_account_info(self):
"""
Gets account information from Dropbox and returns it as a dictionary.
The entries will either be of type ``str`` or ``bool``.
:returns: Dropbox account information.
:rtype: dict[str, bool]
"""
res = self.client.get_account_info()
return dropbox_stone_to_dict(res)
@handle_disconnect
def get_remote_dropbox_async(self, dbx_path, callback=None):
"""
Runs `sync.get_remote_dropbox` in the background, downloads the full
Dropbox folder `dbx_path` to the local drive. The folder is temporarily
excluded from the local observer to prevent duplicate uploads.
:param str dbx_path: Path to folder on Dropbox.
:param callback: Function to call after download.
"""
is_root = dbx_path == ""
if not is_root: # exclude only specific folder otherwise
self.monitor.queue_downloading.put(self.sync.to_local_path(dbx_path))
if callback == "start_sync":
callback = self.start_sync
@handle_disconnect
def get_space_usage(self):
"""
Gets the space usage stored by Dropbox and returns it as a dictionary.
The entries will either be of type ``str`` or ``bool``.
:returns: Dropbox account information.
:rtype: dict[str, bool]
"""
res = self.client.get_space_usage()
return dropbox_stone_to_dict(res)
@handle_disconnect
def populate_folders_list(self, overload=None):
self.async_loader = AsyncLoadFolders(self.mdbx, self)
self.dbx_root = DropboxPathModel(self.mdbx, self.async_loader, "/")
self.dbx_model = TreeModel(self.dbx_root)
self.dbx_model.dataChanged.connect(self.update_select_all_checkbox)
self.treeViewFolders.setModel(self.dbx_model)
self.dbx_model.loading_done.connect(
lambda: self.pushButtonFolderSelectionSelect.setEnabled(True))
self.dbx_model.loading_failed.connect(
lambda: self.pushButtonFolderSelectionSelect.setEnabled(False))
self.dbx_model.loading_done.connect(
lambda: self.selectAllCheckBox.setEnabled(True))
self.dbx_model.loading_failed.connect(
lambda: self.selectAllCheckBox.setEnabled(False))
@handle_disconnect
def _include_folder_without_subfolders(self, dbx_path):
"""Sets a folder to included without explicitly including its subfolders. This
is to be used internally, when a folder has been removed from the excluded list,
but some of its subfolders may have been added."""
dbx_path = dbx_path.lower().rstrip(osp.sep)
excluded_folders = self.sync.excluded_folders
if dbx_path not in excluded_folders:
return
excluded_folders.remove(dbx_path)
self.sync.excluded_folders = excluded_folders
self.get_remote_dropbox_async(dbx_path)
@handle_disconnect
def include_folder(self, dbx_path):
"""
Includes folder in sync and downloads in the background. It is safe to
call this method with folders which have already been included, they
will not be downloaded again.
:param str dbx_path: Dropbox folder to include.
:return: ``True`` on success, ``False`` on failure.
:rtype: bool
:raises: ValueError if ``dbx_path`` is inside another excluded folder.
"""
dbx_path = dbx_path.lower().rstrip(osp.sep)
old_excluded_folders = self.sync.excluded_folders
@handle_disconnect
def on_accepted(self, overload=None):
"""
Apply changes to local Dropbox folder.
"""
if not self.mdbx.connected:
self.dbx_model.on_loading_failed()
return
self.apply_selection()
self.mdbx.set_excluded_folders(self.excluded_folders)