samschott / maestral Goto Github PK
View Code? Open in Web Editor NEWOpen-source Dropbox client for macOS and Linux
Home Page: https://maestral.app
License: MIT License
Open-source Dropbox client for macOS and Linux
Home Page: https://maestral.app
License: MIT License
Hi! Thanks for a great project. I really like it so far.
As the title says. Is there any chance of support for OpenBSD?
Describe the bug
The start-on-login option the GUI currently only works on macOS and Gnome desktops.
System (please complete the following information):
Any environments apart form macOS and Gnome.
*To do
Disable the checkbox if a platform is detect which is currently not supported. Possibly expand support to other desktop environments. Check if Qt provides a functionality to register an app with the systems preferred method for launching on login.
Describe the bug
When running the GUI (which works), there is no icon for the Maestral entry in tray.
To Reproduce
Launch maestral gui
.
Expected behaviour
The standard logo to show.
System (please complete the following information):
[idnovic@id-lappy ~]0$ maestral-gui
Warning: PyQt5 is required to run the Maestral GUI. Run `pip install pyqt5` to install it.
Traceback (most recent call last):
File "/home/idnovic/.local/bin/maestral", line 11, in <module>
load_entry_point('maestral==0.2b0', 'console_scripts', 'maestral')()
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/console_script.py", line 30, in gui
from maestral.gui.main import run
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/gui/main.py", line 26, in <module>
from maestral.gui.settings_window import SettingsWindow
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/gui/settings_window.py", line 13, in <module>
from PyQt5 import QtGui, QtCore, QtWidgets, uic
ImportError: cannot import name 'uic' from 'PyQt5' (/usr/lib64/python3.7/site-packages/PyQt5/__init__.py)
[idnovic@id-lappy ~]1$ pip3 install --user pyqt5
Requirement already satisfied: pyqt5 in /usr/lib64/python3.7/site-packages (5.12.2)
It seems I have the dependency installed but still have an import problem.
Do you have suggestions?
Describe the bug
asks to create kdwallet on gnome system
To Reproduce
run maestral gui first time
Expected behaviour
will use gnome-keyring on gnome desktop and kwallet on kde system
System (please complete the following information):
Additional context
Add any other context about the problem here.
Describe the bug
I installed maestral-dropbox on two machines. One had no files from dropbox, and the other already have an updated library. The one without downloaded all files with no errors. The other fails and the icon keeps looking like its updating - this error is printed:
[chansen@Magnus ~]$ maestral-gui
> MaestralApiClient is ready.
2019-08-14 19:36:40 maestral.monitor INFO: Up to date
2019-08-14 19:36:40 maestral.monitor ERROR: Maestral index has become corrupted. Please rebuild.
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/maestral/monitor.py", line 397, in _load_rev_dict_from_file
assert isinstance(rev_dict_cache, dict)
AssertionError
2019-08-14 19:36:42 maestral.monitor INFO: Indexing...
2019-08-14 19:36:44 maestral.client INFO: Indexing 500...
2019-08-14 19:36:46 maestral.client INFO: Indexing 1512...
2019-08-14 19:36:48 maestral.client INFO: Indexing 2012...
2019-08-14 19:36:49 maestral.client INFO: Indexing 2512...
2019-08-14 19:36:50 maestral.monitor INFO: Syncing...
Exception in thread MaestralFolderDownloader:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3.7/site-packages/maestral/main.py", line 77, in folder_download_worker
monitor.sync.get_remote_dropbox(dbx_path)
File "/usr/lib/python3.7/site-packages/maestral/monitor.py", line 188, in wrapper
res = func(self, *args, **kwargs)
File "/usr/lib/python3.7/site-packages/maestral/monitor.py", line 909, in get_remote_dropbox
success.append(self.apply_remote_changes(root_result, save_cursor=False))
File "/usr/lib/python3.7/site-packages/maestral/monitor.py", line 974, in apply_remote_changes
success = self._create_local_entry(folder)
File "/usr/lib/python3.7/site-packages/maestral/monitor.py", line 188, in wrapper
res = func(self, *args, **kwargs)
File "/usr/lib/python3.7/site-packages/maestral/monitor.py", line 1228, in _create_local_entry
self.set_local_rev(entry.path_display, "folder")
File "/usr/lib/python3.7/site-packages/maestral/monitor.py", line 478, in set_local_rev
if rev == self._rev_dict_cache.get(dbx_path, None):
AttributeError: 'int' object has no attribute 'get'
To Reproduce
Expected behaviour
Mastral-gui uploads latest files goes into sleep.
System (please complete the following information):
Additional context
Add any other context about the problem here.
Describe the bug
Maestral hangs after set up.
To Reproduce
Steps to reproduce the behaviour.
pip install --user maestral
maestral gui
, get token, enterExpected behaviour
A clear and concise description of what you expected to happen.
Maestral should start syncing data. Instead, it hangs.
2019-09-25 23:31:27 maestral.sync.monitor WARNING: Maestral index could not be found.
is printed to the console.
If you kill maestral after setting up via maestral gui
and start it via maestral start
, the same issue occurs.
System (please complete the following information):
Additional context
Add any other context about the problem here.
strace on the maestral start
process suggests it's hanging at creating/opening the pid file:
stat("/home/username", {st_mode=S_IFDIR|0700, st_size=45056, ...}) = 0
stat("/home/username", {st_mode=S_IFDIR|0700, st_size=45056, ...}) = 0
mkdir("/home/username/.cache", 0777) = -1 EEXIST (File exists)
stat("/home/username/.cache", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/run/user/1000", {st_mode=S_IFDIR|0700, st_size=300, ...}) = 0
mkdir("/run/user/1000/maestral", 0777) = -1 EEXIST (File exists)
stat("/run/user/1000/maestral", {st_mode=S_IFDIR|0755, st_size=40, ...}) = 0
openat(AT_FDCWD, "/run/user/1000/maestral/maestral.pid", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
Creating this file manually doesn't change things, though the strace output is slightly different:
fstat(17, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
ioctl(17, TCGETS, 0x7ffd74cf2bf0) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(17, 0, SEEK_CUR) = 0
ioctl(17, TCGETS, 0x7ffd74cf2b20) = -1 ENOTTY (Inappropriate ioctl for device)
lseek(17, 0, SEEK_CUR) = 0
fstat(17, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
read(17, "", 8192) = 0
close(17) = 0
stat("/home/username", {st_mode=S_IFDIR|0700, st_size=45056, ...}) = 0
stat("/home/username", {st_mode=S_IFDIR|0700, st_size=45056, ...}) = 0
mkdir("/home/username/.cache", 0777) = -1 EEXIST (File exists)
stat("/home/username/.cache", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/run/user/1000", {st_mode=S_IFDIR|0700, st_size=300, ...}) = 0
mkdir("/run/user/1000/maestral", 0777) = -1 EEXIST (File exists)
stat("/run/user/1000/maestral", {st_mode=S_IFDIR|0755, st_size=60, ...}) = 0
openat(AT_FDCWD, "/run/user/1000/maestral/maestral.pid", O_RDONLY|O_CLOEXEC) = 17
With the upcoming split between backend and frontend, it's likely that a user would want to run the backend under systemd. If that is the case, there are a few things maestral can do to make things nicer:
systemctl --user status maestral
will return the current status in the status field ("Syncing X out of Y", "Up to date" etc)Regd item 1, this means that systemd will only continue starting other services when maestral actively informs it that it is up and running. A use case would be the GUI running as a separate service under systemd that is dependent on the backup actually being up and running.
Regd item 2, we could avoid spamming the logs with "maestral.monitor INFO: Up to date" as it would simply just show the status in the status field.
Regd item 3, we currently get duplicated timestamps as journald captures the timestamp when the message was output to stdout and maestral also writes the time. Example:
Sep 08 21:55:59 mildred maestral[3444]: 2019-09-08 21:55:59 maestral.monitor INFO: Up to date
There are some python modules that can help with this:
I opened maestral-gui in terminal and closed it via the tray menu item "Quit Maestral" but maestral does not shutdown without timeout.
Few seconds after I quit maestral:
Shutting down threads.
Observer thread stopped.
Upload thread stopped.
Around a minute later
Shutting down threads.
Observer thread stopped.
Upload thread stopped.
Up to date
Download thread stopped.
Connection thread stopped.
If the sync state did not change what is the reason that maestral needs time to shutdown?
pi@raspiserver4:~ $ pip install --upgrade maestral
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting maestral
Could not find a version that satisfies the requirement maestral (from versions: )
No matching distribution found for maestral
So I deactivated the notifications currently because I got notified for remote files on my dropbox in folders that I do not sync locally.
You can imagine the notification spam while I was using an app on my iPad that saves its settings and files on dropbox.
Do not notify on unwanted files and folders.
On linux, it's generally frowned upon to write directly to a directory under $HOME. Instead write the config to $XDG_CONFIG_HOME which defaults to $HOME/.config.
The directory should also change accordingly, so that:
$HOME/.maestral
becomes $XDG_CONFIG_HOME/maestral
When running under systemd, if you continue sending READY=1
at an interval, systemd can enable watchdog mode, where it will automatically restart the service in case the heartbeat doesn't come.
The standard is to send it at an interval of $WATCHDOG_USEC / 2
. The variable is set by systemd.
Currently I can not start maestral-gui
[idnovic@id-lappy ~]1$ maestral-gui
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
QSocketNotifier: Can only be used with threads started with QThread
> Loading access token...
[OK]
> Loading access token...
[OK]
> MaestralClient is ready.
Traceback (most recent call last):
File "/home/idnovic/.local/bin/maestral", line 11, in <module>
load_entry_point('maestral==0.1.3.dev1', 'console_scripts', 'maestral')()
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/console_script.py", line 31, in gui
run()
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/gui/main.py", line 197, in run
maestral = FirstSyncDialog.configureMaestral() # returns None if aborted
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/gui/first_sync_dialog.py", line 281, in configureMaestral
fsd = FirstSyncDialog(parent)
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/gui/first_sync_dialog.py", line 134, in __init__
self.mdbx = Maestral(run=False)
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/main.py", line 128, in __init__
self.client = MaestralClient()
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/client.py", line 284, in __init__
with open(self.rev_file, "rb") as f:
IsADirectoryError: [Errno 21] Ist ein Verzeichnis: '.dropbox'
Describe the bug
There are some files in dropbox, that maestral (or maybe dropbox) doesn't like, but doesn't tell me which so I can't really do anything about it:
dropbox.exceptions.ApiError: ApiError('30f1d5eeaac843c1ff555c04e08561b8', UploadError('path', UploadWriteFailed(reason=WriteError('disallowed_name', None), upload_session_id='AAAAAAAAM9FqZ1pyxzgvlA')))
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/nix/store/jjccwr48ahjxvzg7v6gigacwhsj8k2m4-maestral-gui-0.2.6/lib/python3.7/site-packages/maestral/monitor.py", line 188, in wrapper
res = func(self, *args, **kwargs)
File "/nix/store/jjccwr48ahjxvzg7v6gigacwhsj8k2m4-maestral-gui-0.2.6/lib/python3.7/site-packages/maestral/monitor.py", line 710, in _apply_event
self._on_created(evnt)
File "/nix/store/jjccwr48ahjxvzg7v6gigacwhsj8k2m4-maestral-gui-0.2.6/lib/python3.7/site-packages/maestral/monitor.py", line 812, in _on_created
md = self.client.upload(path, dbx_path, autorename=True, mode=mode)
File "/nix/store/jjccwr48ahjxvzg7v6gigacwhsj8k2m4-maestral-gui-0.2.6/lib/python3.7/site-packages/maestral/client.py", line 282, in upload
raise to_maestral_error(exc, dbx_path) from exc
maestral.errors.PathError: Could not upload file: Dropbox will not save the file or folder because of its name.
2019-08-13 21:50:09 maestral.monitor ERROR: Sync error
Traceback (most recent call last):
File "/nix/store/jjccwr48ahjxvzg7v6gigacwhsj8k2m4-maestral-gui-0.2.6/lib/python3.7/site-packages/maestral/client.py", line 257, in upload
f.read(), dbx_path, client_modified=mtime_dt, **kwargs)
File "/nix/store/5ajzqlpk5l37lc4x2q4sb5hkszvf9kir-python3.7-dropbox-9.4.0/lib/python3.7/site-packages/dropbox/base.py", line 2458, in files_upload
f,
File "/nix/store/5ajzqlpk5l37lc4x2q4sb5hkszvf9kir-python3.7-dropbox-9.4.0/lib/python3.7/site-packages/dropbox/dropbox.py", line 296, in request
user_message_locale)
dropbox.exceptions.ApiError: ApiError('0c98289b3e80e3259fe670566c2d7f98', UploadError('path', UploadWriteFailed(reason=WriteError('disallowed_name', None), upload_session_id='AAAAAAAAM9IdJt1oBQwYjg')))
To Reproduce
Happens consistently but I obviously don't know which files are the case.
Expected behaviour
maestral to tell me which files were rejected.
System (please complete the following information):
At the moment only top level folders can be excluded from syncing.
Describe the bug
2019-08-14 15:36:46 maestral.main ERROR: Authentication error: Maestral's access to your Dropbox has been revoked. Please relink to continue syncing.
Traceback (most recent call last):
File "maestral/client.py", line 118, in get_account_info
File "dropbox/base.py", line 4508, in users_get_current_account
File "dropbox/dropbox.py", line 274, in request
File "dropbox/dropbox.py", line 365, in request_json_string_with_retry
File "dropbox/dropbox.py", line 463, in request_json_string
dropbox.exceptions.AuthError: AuthError('0fc15289f761ee76a47f75086dbf2a59', AuthError('invalid_access_token', None))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "maestral/main.py", line 120, in wrapper
File "maestral/main.py", line 205, in get_account_info
File "maestral/client.py", line 120, in get_account_info
maestral.errors.DropboxAuthError: Authentication error: Maestral's access to your Dropbox has been revoked. Please relink to continue syncing.
2019-08-14 15:40:51 maestral.main ERROR: Authentication error: Maestral's access to your Dropbox has been revoked. Please relink to continue syncing.
Traceback (most recent call last):
File "maestral/client.py", line 118, in get_account_info
File "dropbox/base.py", line 4508, in users_get_current_account
File "dropbox/dropbox.py", line 274, in request
File "dropbox/dropbox.py", line 365, in request_json_string_with_retry
File "dropbox/dropbox.py", line 463, in request_json_string
dropbox.exceptions.AuthError: AuthError('ae966154fc18f3f0da1a1b9588ca5e9a', AuthError('invalid_access_token', None))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "maestral/main.py", line 120, in wrapper
File "maestral/main.py", line 205, in get_account_info
File "maestral/client.py", line 120, in get_account_info
maestral.errors.DropboxAuthError: Authentication error: Maestral's access to your Dropbox has been revoked. Please relink to continue syncing.
To Reproduce
Nothing yet.
Expected behaviour
After revoking the app auth, it should ask to re-add it again.
System (please complete the following information):
macOS Mojave
This isn't a bug report but more of a discussion thing. If this isn't the right forum, please let me know.
It's currently possible to run maestral in a few different ways:
When run in daemon mode, it's possible to interact with the daemon, ie: maestral daemon errors
In GUI mode that's possible too but not when run in "sync" mode.
How about splitting up the application, so you have a few different components:
a. The sync engine that runs headlessly
b. A UI that could either be the current GUI that doesn't do any syncing on its own or a CLI UI
If launching the GUI without the "engine" running, it could be spawned. One application that does it this way is deluge (bittorrent application).
Currently, the user's authentication token is stored in the Maestral settings folder as a text file. This is potentially insecure if a third party gains unauthorized access to the users hard drive.
Store the token in the system keyring / keychain instead. This will be decrypted only when the user is logged in.
So I created a luks encrypted file. maestral should see it as binary without file type extension.
I moved the file inside my dropbox folder but maestral does not sync it.
the file was 125mb big and I retested with a 50mb version.
Can I somehow see how this file looks to maestral?
Original dropbox was able to sync it.
You can create a similar file:
# dd if=/dev/zero bs=1M count=100 of=~/test.img
# cryptsetup --cipher aes-xts-plain64 --key-size 512 luksFormat ~/test.img
# cryptsetup luksOpen ~/test.img test
# mkdosfs /dev/mapper/test
# mount /dev/mapper/test /mnt
...
# umount /mnt
# cryptsetup luksClose test
The macOS package created by pyinstaller (in folder mode) has a size of ~ 55 MB, most of which are Qt modules that Maestral does not actually use. Find a way to detect and excluded unneeded modules.
In --onefile mode, the macOS package has a much smaller size of 27 MB. This is however due to compression only.
Describe the bug
With version 0.4.1, everything works fine as long as I don't enable the watchdog.
I added this, as an override file in /run/user/1000/system/user/maestral.service.d/override.conf
:
[Service]
WatchdogSec = 30s
And now maestral refuses to start:
Oct 22 21:59:54 dolores systemd[1126]: Starting Maestral - a Dropbox clone...
Oct 22 21:59:55 dolores systemd[1126]: Started Maestral - a Dropbox clone.
Oct 22 21:59:55 dolores maestral[5770]: Traceback (most recent call last):
Oct 22 21:59:55 dolores maestral[5770]: File "/nix/store/vrllbj5ial3g70b2wd2bxmx01rxv32yw-maestral-0.4.1/lib/python3.7/site-packages/maestral/sync/daemon.py", line 119, in start_maestral_daemon
Oct 22 21:59:55 dolores maestral[5770]: m = ExposedMaestral(run=run)
Oct 22 21:59:55 dolores maestral[5770]: File "/nix/store/vrllbj5ial3g70b2wd2bxmx01rxv32yw-maestral-0.4.1/lib/python3.7/site-packages/maestral/sync/main.py", line 255, in __init__
Oct 22 21:59:55 dolores maestral[5770]: self.update_thread.start()
Oct 22 21:59:55 dolores maestral[5770]: File "/nix/store/8lhmyjarm73453f2mdz0xli9w8sy0wvh-python3-3.7.4/lib/python3.7/threading.py", line 848, in start
Oct 22 21:59:55 dolores maestral[5770]: raise RuntimeError("threads can only be started once")
Oct 22 21:59:55 dolores maestral[5770]: RuntimeError: threads can only be started once
To Reproduce
Add watchdogsec to service.
Expected behaviour
For it to not blow up.
A clear and concise description of what you expected to happen.
System (please complete the following information):
"x86_64-linux"
Linux 5.3.7, NixOS, 20.03.git.c02c4775b40M (Markhor)
yes
yes
nix-env (Nix) 2.3.1
""
"home-manager"
/home/peter/src/active/nixpkgs_unstable
Installing from github (I'm packing it for NixOS), I am able to launch both the cli and gui applications and sync succesfully without any problems.
However, if I try running maestral sync
from a systemd user service, it keeps prompting to go through the authorization process, so I am guessing that due to the different environment exposed to the systemd service, it is not able to find its configuration:
Aug 07 12:50:11 mildred maestral[435329]: Warning: PyQt5 is required to run the Maestral GUI. Run `pip install pyqt5` to install it.
Aug 07 12:50:11 mildred maestral[435329]: 1. Go to: https://www.dropbox.com/oauth2/authorize?response_type=code&client_id=oht3qeriq0h97xc
Aug 07 12:50:11 mildred maestral[435329]: 2. Click "Allow" (you might have to log in first).
Aug 07 12:50:11 mildred maestral[435329]: 3. Copy the authorization code.
Aug 07 12:50:11 mildred maestral[435329]: Enter the authorization code here:
Aug 07 12:50:11 mildred maestral[435329]: Aborted!
I am setting both HOME, DROPBOX_API_KEY and DROPBOX_API_SECRET in the systemd environment.
[Unit]
Description=Maestral - a Dropbox clone
[Service]
Environment="HOME=%h"
Environment="LOCALE_ARCHIVE=/nix/store/aqyxqxbxv1pcc52j71ba6jlzdyhgy5d3-glibc-locales-2.27/lib/locale/locale-archive"
Environment="PATH=/nix/store/k8lhqzpaaymshchz8ky3z4653h4kln9d-coreutils-8.31/bin:/nix/store/gjh3a8hqic3bqc2xzj8g2qxwz81wfjxx-findutils-4.6.0/bin:/nix/store/agcay3wmf74qinwshnjqy73w8rxf82hs-gnugrep-3.3/bin:/nix/store/vnyd3wh5i5kj66n9c5b8shzxjjrw22cn-gnused-4.7/bin:/nix/store/md7jdq475ij8cpifxb5rrh7y51qrfypq-systemd-242/bin:/nix/store/k8lhqzpaaymshchz8ky3z4653h4kln9d-coreutils-8.31/sbin:/nix/store/gjh3a8hqic3bqc2xzj8g2qxwz81wfjxx-findutils-4.6.0/sbin:/nix/store/agcay3wmf74qinwshnjqy73w8rxf82hs-gnugrep-3.3/sbin:/nix/store/vnyd3wh5i5kj66n9c5b8shzxjjrw22cn-gnused-4.7/sbin:/nix/store/md7jdq475ij8cpifxb5rrh7y51qrfypq-systemd-242/sbin"
Environment="QML2_IMPORT_PATH=/nix/store/qa3faa7dy41wxd1y2ldmg5fzc3pdwb10-qtbase-5.12.0-bin/lib/qt-5.12/qml"
Environment="QT_PLUGIN_PATH=/nix/store/qa3faa7dy41wxd1y2ldmg5fzc3pdwb10-qtbase-5.12.0-bin/lib/qt-5.12/plugins"
Environment="TZDIR=/nix/store/fsfddn3jj009rgy80fdv50lq13sp1p73-tzdata-2019a/share/zoneinfo"
EnvironmentFile=%t/keys/maestral
ExecStart=/nix/store/cmd69mskpzvp3adbgkhpl49bci65lrkb-maestral-0.2.4/bin/maestral sync
Nice=10
Restart=on-failure
I am running arch linux. Currently, maestral from the stable release works fine. However, if I build from the master branch, on launching maestral-gui I have the following error;
% maestral gui
Gkr-Message: 08:39:03.802: secret service operation failed: The name org.freedesktop.secrets was not provided by any .service files
> Loading access token...
> MaestralClient is ready.
Up to date
Indexing...
Up to date
Up to date
Up to date
QImage::pixel: coordinate (0,0) out of range
qt.qpa.xcb: QXcbConnection: XCB error: 2 (BadValue), sequence: 743, resource id: 0, major code: 1 (CreateWindow), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 744, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 745, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 746, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 748, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 749, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 750, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 755, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 756, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 757, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 760, resource id: 121634822, major code: 2 (ChangeWindowAttributes), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 761, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 764, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 765, resource id: 121634822, major code: 20 (GetProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 766, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 769, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 770, resource id: 121634822, major code: 129 (Unknown), minor code: 2
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 771, resource id: 121634822, major code: 19 (DeleteProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 773, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 775, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 776, resource id: 121634822, major code: 19 (DeleteProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 778, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 779, resource id: 121634822, major code: 12 (ConfigureWindow), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 795, resource id: 121634822, major code: 2 (ChangeWindowAttributes), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 796, resource id: 121634822, major code: 2 (ChangeWindowAttributes), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 797, resource id: 121634822, major code: 18 (ChangeProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 798, resource id: 121634822, major code: 19 (DeleteProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 799, resource id: 121634822, major code: 20 (GetProperty), minor code: 0
qt.qpa.xcb: QXcbConnection: XCB error: 3 (BadWindow), sequence: 800, resource id: 121634822, major code: 19 (DeleteProperty), minor code: 0
^CSyncing...
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/maestral/gui/main.py", line 309, in on_info_signal
def on_info_signal(self, status):
KeyboardInterrupt
/usr/bin/maestral-gui: line 6: 2983 Aborted (core dumped) maestral gui
I used ctrl-c to quit. The gui does not appear. I have all the libraries up to date.
dropbox.files_delete
command.Describe the bug
Unable to launch the unzipped Maestral.app.
To Reproduce
Unzip https://github.com/SamSchott/maestral-dropbox/releases/download/v0.4.2/Maestral.app.zip and attempt to launch it.
Expected behaviour
The application would launch.
System (please complete the following information):
Additional context
MacOS Console app displays the following messages:
Finder - LAUNCHING:0x0-0x4f04f Maestral foreground=0 bringForward=0 seed=114 userActivityCount=0
LoginWindow - -[ApplicationManager checkInAppContext:eventData:] | ApplicationManager: Checked in app : Maestral
kernel - Library Validation failed: Rejecting '/Applications/Maestral.app/Contents/MacOS/Python' (Team ID: none, platform: no) for process 'main(854)' (Team ID: none, platform: no), reason: mapped file has no Team ID and is not a platform binary (signed with custom identity or adhoc?)
LoginWindow - -[PersistentAppsSupport applicationQuit:] | for app:Maestral, _appTrackingState = 2
The GUI hangs, so I have to run it on command line. Details below.
Request a package that can be installed with a package manager like so:
sudo yum install maestral-dropbox
I had to install it in a slightly complicated way (CentOS 7):
Install Python
sudo yum install -y libgnome centos-release-scl rh-python36
#wrong python version by default
python --version
#fix new python version
scl enable rh-python36 bash
python --version
Install Maestral
sudo yum install -y python36-setuptools
sudo easy_install-3.6 pip
python3 -m pip install --upgrade maestral --user
python3 -m pip install --upgrade PyQt5 --user
Run Maestral GUI which often hangs
~/.local/bin/maestral gui
#may fail
#set up Dropbox account then quit
This command-line way works
~/.local/bin/maestral configure
~/.local/bin/maestral sync
I have no traybar icon in linux after I started maestral-gui
fedora 30
gnome wayland
Currently all version numbers of files are stored in a JSON format in the file '.dropbox' located in the user's Dropbox folder. Pickle is highly efficient at saving and loading this file, but his approach may not scale well for Dropbox folders with > 20,000 items.
Consider storing version numbers as extended attributes of files / folders instead, such as with xattr. This mimics the original Dropbox client and limits the number of supported file systems.
After the installation:
...
Installing collected packages: pathtools, PyYAML, argh, watchdog, dropbox, u-msgpack-python, maestral
Successfully installed PyYAML-5.1.1 argh-0.26.2 dropbox-9.4.0 maestral-0.2.3 pathtools-0.1.2 u-msgpack-python-2.5.1 watchdog-0.9.0
pi@raspiserver4:~ $ meastral
-bash: meastral: command not found
Instructions are not clear if the app name is meastral or maestral...
Describe the bug
giulio@giulio-HP-ProBook-430-G3:~/Desktop/maestral-dropbox-master$ maestral start Traceback (most recent call last): File "/usr/local/bin/maestral", line 11, in <module> load_entry_point('maestral==0.4.1', 'console_scripts', 'maestral')() File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 764, in __call__ return self.main(*args, **kwargs) File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 717, in main rv = self.invoke(ctx) File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1137, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 956, in invoke return ctx.invoke(self.callback, **ctx.params) File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 555, in invoke return callback(*args, **kwargs) File "/usr/local/lib/python3.6/dist-packages/maestral-0.4.1-py3.6.egg/maestral/cli.py", line 205, in start check_for_updates() File "/usr/local/lib/python3.6/dist-packages/maestral-0.4.1-py3.6.egg/maestral/cli.py", line 75, in check_for_updates from maestral.config.main import CONF File "/usr/local/lib/python3.6/dist-packages/maestral-0.4.1-py3.6.egg/maestral/config/main.py", line 81, in <module> migrate_config_files() File "/usr/local/lib/python3.6/dist-packages/maestral-0.4.1-py3.6.egg/maestral/config/base.py", line 134, in migrate_config_files shutil.copytree(old_path, new_path) File "/usr/lib/python3.6/shutil.py", line 321, in copytree os.makedirs(dst) File "/usr/lib/python3.6/os.py", line 220, in makedirs mkdir(name, mode) FileExistsError: [Errno 17] File exists: '/home/giulio/.config/maestral' giulio@giulio-HP-ProBook-430-G3:~/Desktop/maestral-dropbox-master$
To Reproduce
Install Maestral, set it up, uninstall it, reinstall and try to log in.
Expected behaviour
Maestral is supposed to allow me to run a configuration.
System (please complete the following information):
I updated from 200e47b to 7b12245 by using
pip3 install --user git+https://github.com/SamSchott/maestral
(wrong, right command below, this does not replace the installed files)
can you tell me where this file comes from? The file is from the older install. I moved the binary of maestral-gui from /bin to /.bin
but I can not find the following file in the newer version. Do I need to update it?
#!/usr/bin/python3
# EASY-INSTALL-ENTRY-SCRIPT: 'maestral==0.1.1','console_scripts','maestral'
__requires__ = 'maestral==0.1.1'
import re
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(
load_entry_point('maestral==0.1.1', 'console_scripts', 'maestral')()
)
It crashes with
> Loading access token...
> MaestralClient is ready.
Up to date
Maestral index could not be found. Rebuild if necessary.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/maestral/gui/first_sync_dialog.py", line 200, in on_dropbox_path
self.populate_folders_list()
File "/usr/local/lib/python3.7/dist-packages/maestral/gui/first_sync_dialog.py", line 241, in populate_folders_list
root_folders = self.mdbx.client.list_folder("", recursive=False)
File "/usr/local/lib/python3.7/dist-packages/maestral/client.py", line 476, in list_folder
**kwargs
TypeError: files_list_folder() got an unexpected keyword argument 'include_non_downloadable_files'
A dropped internet connection currently results in one of the worker threads to crash. Instead, catch the relevant errors, pause the sync and resume on reconnect.
Please add a log file.
You do mention to test all use cases with maestral but I would not know that something went wrong without a logfile to look at. Just log errors.
sync fails on a mackup file....
Downloading 3925/3935...
Traceback (most recent call last):
File "/home/billy/.local/bin/maestral", line 11, in <module>
sys.exit(main())
File "/home/billy/.local/lib/python3.6/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/billy/.local/lib/python3.6/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/billy/.local/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/billy/.local/lib/python3.6/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/billy/.local/lib/python3.6/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/billy/.local/lib/python3.6/site-packages/maestral/console_script.py", line 22, in sync
m = Maestral()
File "/home/billy/.local/lib/python3.6/site-packages/maestral/main.py", line 140, in __init__
success = self.sync.get_remote_dropbox()
File "/home/billy/.local/lib/python3.6/site-packages/maestral/monitor.py", line 201, in wrapper
res = func(self, *args, **kwargs)
File "/home/billy/.local/lib/python3.6/site-packages/maestral/monitor.py", line 893, in get_remote_dropbox
success = self.apply_remote_changes(result, save_cursor)
File "/home/billy/.local/lib/python3.6/site-packages/maestral/monitor.py", line 953, in apply_remote_changes
success += [f.result()]
File "/usr/lib/python3.6/concurrent/futures/_base.py", line 425, in result
return self.__get_result()
File "/usr/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
File "/usr/lib/python3.6/concurrent/futures/thread.py", line 56, in run
result = self.fn(*self.args, **self.kwargs)
File "/home/billy/.local/lib/python3.6/site-packages/maestral/monitor.py", line 201, in wrapper
res = func(self, *args, **kwargs)
File "/home/billy/.local/lib/python3.6/site-packages/maestral/monitor.py", line 1169, in _create_local_entry
md = self.client.download(entry.path_display, local_path)
File "/home/billy/.local/lib/python3.6/site-packages/maestral/client.py", line 317, in download
os.mkdir(dst_path_directory)
FileNotFoundError: [Errno 2] No such file or directory: '/home/billy/Dropbox/mackup/.config/libreoffice/4/user/extensions/bundled/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend'
I'm using Maestral 0.2.0, and the option to start Maestral automatically adds an autostart entry to a nonexistant mercury-gui
exec on Linux, instead of maestral gui
.
On Ubuntu 19.04, Maestral installed from PyPI.
Describe the bug
When using maestral compiled from source (or packaged for a distro that doesn't include the standard keys), maestral will fail with an exception if DROPBOX_API_KEY
and _SECRET
are not set.
Traceback (most recent call last):
File "/nix/store/jlbx4m9zv15b9hbf63s3wx2407l9h906-maestral-gui-0.2.6/lib/python3.7/site-packages/maestral/gui/setup_dialog.py", line 137, in on_link
self.auth_url = self.auth_session.get_auth_url()
File "/nix/store/jlbx4m9zv15b9hbf63s3wx2407l9h906-maestral-gui-0.2.6/lib/python3.7/site-packages/maestral/oauth.py", line 64, in get_auth_url
APP_KEY = os.environ["DROPBOX_API_KEY"]
File "/nix/store/w7gsq8v86hni4ynaqgwwlnlny115ylng-python3-3.7.4/lib/python3.7/os.py", line 678, in __getitem__
raise KeyError(key) from None
KeyError: 'DROPBOX_API_KEY'
[1] 6765 abort maestral-gui
To Reproduce
Expected behaviour
A graceful exit and message about the required variables not being set.
System (please complete the following information):
right after original dropbox was closed and maestral-gui was opened in the terminal
> Loading access token...
[OK]
> MaestralClient is ready.
Indexing...
Traceback (most recent call last):
File "/home/idnovic/.local/bin/maestral", line 11, in <module>
load_entry_point('maestral==0.1.2.dev0', 'console_scripts', 'maestral')()
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 764, in __call__
return self.main(*args, **kwargs)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/idnovic/.local/lib/python3.7/site-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/console_script.py", line 31, in gui
run()
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/gui/main.py", line 208, in run
maestral = Maestral()
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/main.py", line 143, in __init__
self.start_sync()
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/main.py", line 194, in start_sync
self.monitor.start()
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/monitor.py", line 555, in start
self.upload_local_changes_after_inactive()
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/monitor.py", line 601, in upload_local_changes_after_inactive
events = self._get_local_changes()
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/monitor.py", line 634, in _get_local_changes
if self.client.get_local_rev(dbx_path) is not None:
File "/home/idnovic/.local/lib/python3.7/site-packages/maestral/client.py", line 390, in get_local_rev
rev = rev_dict[dbx_path]
TypeError: 'int' object is not subscriptable
It would be helpful if the configuration options were documented. E.g., I don't understand the difference between main.path
and main.default_dir_name
.
Also, seems like some of it isn't even configuration, but just stored state?
Hello,
Like the title, it would be great if the application allows to use both work and personal account at the same time. It would be better if can use with multiple personal accounts.
Bests
Describe the bug
If a symlink to a dead file location is put under sync, maestral will give a FileNotFoundError
, not sync the file (expected), but will no longer update changes to valid files (unexpected).
This is a problem because emacs uses lock file that likely link nowhere, thus using emacs on a file under sync halts syncing of that file util maestral is restarted.
To Reproduce
0. [inside sync path]
ln -s foo bar
(where neither file already exists)Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/home/michael/.local/lib/python3.7/site-packages/maestral/monitor.py", line 1442, in upload_worker
sync.apply_local_changes(events, local_cursor)
File "/home/michael/.local/lib/python3.7/site-packages/maestral/monitor.py", line 659, in apply_local_changes
success += [f.result()]
File "/usr/lib/python3.7/concurrent/futures/_base.py", line 428, in result
return self.__get_result()
File "/usr/lib/python3.7/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
File "/usr/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/home/michael/.local/lib/python3.7/site-packages/maestral/monitor.py", line 189, in wrapper
res = func(self, *args, **kwargs)
File "/home/michael/.local/lib/python3.7/site-packages/maestral/monitor.py", line 738, in _apply_event
self._on_created(event)
File "/home/michael/.local/lib/python3.7/site-packages/maestral/monitor.py", line 816, in _on_created
size1 = osp.getsize(path)
File "/usr/lib/python3.7/genericpath.py", line 50, in getsize
return os.stat(filename).st_size
Expected behaviour
While bar
should not be synced, I would expect that file to be ignored and other changes to continue to propagate.
System (please complete the following information):
I'm on Linux, and have the following error on the stable release (0.2.3) when i try to set the dropbox folder using gui.
Gkr-Message: 17:08:09.928: secret service operation failed: The name org.freedesktop.secrets was not provided by any .service files
> Loading access token...
> MaestralClient is ready.
Up to date
Maestral index could not be found. Rebuild if necessary.
Traceback (most recent call last):
File "/usr/lib/python3.7/site-packages/maestral/gui/first_sync_dialog.py", line 200, in on_dropbox_path
self.populate_folders_list()
File "/usr/lib/python3.7/site-packages/maestral/gui/first_sync_dialog.py", line 241, in populate_folders_list
root_folders = self.mdbx.client.list_folder("", recursive=False)
File "/usr/lib/python3.7/site-packages/maestral/client.py", line 476, in list_folder
**kwargs
TypeError: files_list_folder() got an unexpected keyword argument 'include_non_downloadable_files'
/usr/bin/maestral-gui: line 6: 16289 Aborted
I assume has to do with python-dropbox, which is 9.2.0
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.