Skip to content

Releases: samschott/maestral

Maestral v0.6.1

27 Feb 23:02
ce87e63
Compare
Choose a tag to compare

This release improves desktop notifications: Notifications will now only appear for remote file changes and you can chose between different notification levels (CLI only) and snooze notifications temporarily. It also reintroduces the maestral autostart command to start the sync daemon on login (requires systemd on Linux). This works independently of the GUI option "Start on login".

There have also been significant changes in package structure: the GUI has been split off into a separate package maestral-qt which will be installed with the gui extra pip3 install -U maestral[gui] or directly with pip3 install -U maestral-qt. A native Cocoa GUI (maestral-cocoa) for macOS is currently in testing and will likely be released with the next update.

Other changes include improved error handling, cleaned up config files and some tweaks to CLI commands. As always, there are several bug fixes. Thank you for all your feedback!

Added:

  • New CLI command maestral autostart to start the daemon on login. This requires systemd on Linux. The "Start on login" option of the GUI remains independent and the GUI will attach to an existing daemon if it finds one, i.e., if it was started before the GUI.
  • Added desktop notifications for errors: Serious errors such as revoked Dropbox access, deleted Dropbox folder, etc, were previously only shown in the GUI as an alert window or printed as warnings when invoking a CLI command.
  • Support for different levels of desktop notifications (CLI only). You can now select between FILECHANGE, SYNCISSUE, ERROR and NONE with maestral notify LEVEL.
  • Added an option to snooze notifications. In the CLI, use maestral notify snooze N to snooze notifications for N minutes. In the GUI, use the "Snooze Notifications" menu.
  • Support using an existing directory when setting up Maestral through the CLI. This was previously only supported in the GUI. Files and folders in the existing directory will be merged with your Dropbox. This is useful when relinking an old account.
  • The CLI command maestral restart now supports restarting Maestral into the current process instead of spawning a new process. This is enabled by passing the --foreground (-f) option.

Changed:

  • Split off GUI into separate python packages (maestral-qt, maestral-cocoa).
  • Notify only for remote changes and not for those which originated locally. This should significantly reduce the number of unwanted notifications.
  • Renamed maestral notifications to maestral notify for brevity.
  • Renamed the set-dir command to move-dir to emphasize that it moves the local Dropbox folder to a new location.
  • Configurations are now tied to a Dropbox account:
    • New configurations are now created on-demand when calling maestral gui or maestral start with a new configuration name.
    • A configuration is automatically removed when unlinking a Dropbox account.
    • All configurations can be listed together with the account emails with maestral configs. This replaces maestral config list.
  • For app bundles on macOS, you can now pass a config option --config-name to the bundle's executable ("Maestral.app/Contents/MacOS/main"). It will then use the specified configuration if it already exists or to create a new one.
  • The GUI no longer restarts after completing the setup dialog.
  • Removed sync and application state info from the config file. Sync and application states are now saved separately in '~/.local/share/maestral/CONFIG_NAME.state' on Linux and '~/Library/Application Support/maestral/CONFIG_NAME.state' on macOS.
  • Use atomic save to prevent corruption of the sync index if Maestral crashes or is killed during a save.
  • Moved the sync index to the same folder as the application state.
  • Improved conflict detection and resolution when changing files which are currently being uploaded or downloaded.

Fixed:

  • Fixes an issue where local changes while syncing was not running could be overwritten by remote changes instead of resulting in a conflicting copy.
  • Fixes an issue where local file events could be ignored while a download is in progress.
  • Fixes an issue where a new local file could be incorrectly deleted if it was created just after a remote item at the same path was deleted.
  • Fixes an issue where maestral stop and maestral restart would not interrupt running sync jobs but instead wait for them to be completed. Now, Maestral will be force-quit if necessary and aborted jobs will be resumed when starting Maestral again.
  • Correctly handle when a folder is replaced by a file and vice versa.
  • Correctly handle additional error types: internal Dropbox server error, insufficient space on local drive, file name too long for local file system and out-of-memory error.
  • Automatically resume upload in case of dropped packages instead of raising a sync issue.
  • Set the log level for the systemd journal according to user settings instead of always using logging.DEBUG.
  • Run checks for Dropbox folder location and link status when invoking maestral restart.
  • Notify the user through the GUI when moving the Dropbox directory fails instead of silently keeping the old directory.
  • Fixes an issue where the environment variable XDG_DATA_DIR would not be respected in Linux.

Removed:

  • Removed "-a" option from maestral ls to show hidden entries that start with a period. Now, all entries are shown by default.
  • Removed the maestral config command group. Configurations are now created and deleted on-demand and can be listed with maestral configs.

Maestral v0.5.2

29 Jan 22:08
Compare
Choose a tag to compare

This release focuses on bug fixes and removes several corner case sync issues due to large directory structure changes, e.g., caused by version control programs such as git. It also adds optional automatic bug reporting on an opt-in basis.

Added:

  • Added automatic bug reporting with bugsnag. This is disabled by default and can be enabled in the Settings pane or with the command maestral analytics -Y. The information sent with the bug report contains a traceback, the Python version, basic platform information (e.g, 'Darwin-19.2.0-x86_64-i386-64bit') and potentially the version of PyQt5 and the user's desktop environment. No personal information will be shared.

Changed:

  • Improved the code which handles multiple configurations: Explicitly pass the config name to classes instead of keeping it as a global variable.
  • Improved starting of the daemon: ensure that the right python executable is used.
  • Order of commands returned by maestral --help by importance instead of alphabetically.
  • Sync errors will now be listed by maestral status if present.
  • Live updates to the Settings window when settings are changed from the command line.

Fixed:

  • Fixed an issue on macOS where some directory deletions could be ignored in case of rapid successive deletions.
  • Fixed an unexpected exception when attempting to create a directory that already exists. Do not rely on the exists_ok parameter in os.makedirs but catch FileExistsError explicitly (see https://bugs.python.org/issue13498).
  • Fixed an AttributeError when a local folder is replaced by file: the Dropbox metadata of the folder will not have a content hash. This mostly occurs when modifying a folder structure programmatically, for instance with git.
  • Fixed an AttributeError when a remote file has been replaced by a folder before its changes could be downloaded: the Dropbox metadata of the folder will not have a content hash.
  • Fixed an bug introduced in v0.5.0 which would cause rebuilding the index to block indefinitely.
  • Fixed a crash of the GUI when closing the settings window shortly after closing the "Chose folders to sync..." dialog. This was caused by QThreads being destroyed while the threads were still running.
  • Fixed an issue where the local revision number of a file could be set to 'folder', resulting in an exception from the Dropbox API.
  • Fixed a bug when the "relink dialog" (shown when Maestral's Dropbox access has expired) might use the wrong Dropbox account when syncing multiple accounts.
  • Fixed an issue with imports in Pyro5 5.7 which prevented the daemon from starting.

Removed:

  • Removed the command maestral errors from the CLI.

Maestral v0.5.0

19 Dec 15:31
43c3e73
Compare
Choose a tag to compare

This release improves the sync reliability in case of rapid successive changes to the local Dropbox folder. It also improves error handling and includes other bug fixes. This may be considered the first release candidate for a stable v1.0.0.

Added:

  • Show a small bell on top of system tray icon in case of sync issues.
  • Notify the user when the local Dropbox folder contains too many items to watch and recommend increasing the maximum number of inotify watches (Linux only).
  • Notify the user when an upload fails because a file exceeds the size limit of 350 GB.
  • Notify the user when an upload fails due to dropped network packages.
  • Adds a command line option maestral link -r to relink to an existing account without resetting the sync state. This is the equivalent of the GUI 'relink dialog'.

Changed:

  • Refines some error messages.
  • Improves error handling in CLI: avoid printing full Python tracebacks to the console. Print concise and actionable error messages instead if possible.
  • Improves formatting of maestral ls output.
  • Improves status notifications for large uploads: dynamically adapt the unit to show up to four significant digits (e.g., "16MB/1.6GB" instead of "0/1.6GB").
  • Reduces memory footprint of macOS app by stripping docstrings (at least 5MB in dropbox package only).

Fixed:

  • Fixes multiple sync issues and corner cases due to rapid and successive file changes: The algorithm which combines successive changes of a local file to a single file event (created / deleted / modified / moved) has been simplified and improved.
  • Fixes an issue which could cause the watchdog thread to crash silently on case-sensitive file systems when saving changes to a file.
  • Removes sip import because it may fail depending on how PyQt was installed.
  • Fixed an issue where user notifications would not appear for certain implementations of 'notify-send'.
  • Fixes an error when setting the log level from the CLI.
  • Fixes an error when relinking Maestral through the GUI after its Dropbox access has been revoked.

Maestral v0.4.4

30 Nov 14:31
ed440a4
Compare
Choose a tag to compare

This updates focuses on bug fixes and performance improvements. Notably, it reduces the memory usage of the GUI by ~ 30MB. If you are upgrading from v0.2.4 or earlier, please perform an incremental update to v0.4.3 first (see Removed section).

Changed:

  • Show a progress dialog while checking for updates when requested by the user.
  • Show an error message when the GUI cannot connect to or start a sync daemon.
  • Reduces the memory footprint of the GUI by ~ 30 MB by avoiding Dropbox API imports and deleting QWidgets when they are not visible.
  • Changing the log level (e.g., maestral log level DEBUG) no longer requires a restart of the maestral daemon to become effective.
  • maestral set-dir now takes the new path as an argument: maestral set-dir PATH. If not given, the user will be prompted to input a path or use the default.
  • Migrated from Pyro4 to Pyro5 for communication with sync daemon.

Fixed:

  • Fixes an unhandled error when trying to upload changes to a file which is not currently indexed by Maestral.
  • Fixes an unhandled error when attempting to calculate the content hash of a file which has been deleted locally. This can occur after Maestral has been notified of remote changes to a file which is deleted locally before comparing file contents.
  • Fixes a bug which could result in multiple false "conflicting copies" of a file when the user modifies the file while it is being uploaded.
  • Fixes a regression bug which would prevent the creation and selection of new configs for different Dropbox accounts.
  • Fixes a bug that would prevent Maestral from properly shutting down a sync daemon which was started from the GUI. This was a result of the daemon's sync threads not exiting as long as a parent process from the same process group is still alive (the GUI in our case). We prevent this by using "double-fork" magic to properly orphan the daemon process so that init will perform its cleanup. See Stevens' "Advanced Programming in the UNIX Environment" for details (ISBN 0201563177).
  • Fixes an issue where the application launcher which is used to start Maestral on login in Linux may be untrusted.
  • Fixes an issue where maestral set-dir would fail if the new directory is the same as the old directory.

Removed:

  • Removed code to migrate config files and sync indices from Maestral versions prior to v0.2.5.
  • Removed code to migrate authentication keys to the system keyring when upgrading from v0.1.2 or earlier.

Maestral v0.4.3

02 Nov 11:55
dcecf94
Compare
Choose a tag to compare

This release focuses on UI fixes and improvements.

Fixed:

  • Fixes a bug which would prevent periodic update checks from running.
  • Fixes an issue where the system tray icon would not be displayed on Qt 5.13.1 with enabled HighDpi support.
  • Fixes an issue which would prevent system tray icons from loading on Gnome 3.
  • Fixes and issue which would prevent macOS binaries from running due to the team ID missing in the a code-signing certificate. Note that, even though the macOS binary is code-signed, the certificate is not from Apple's Developer Program. Therefore, to run the app, you will have to "right-lick -> Open".

Changed:

  • Tweaked system tray icon design.
  • Use NSUserNotificationCenter when running from Python outside of an app bundle.

Removed:

  • Removed automatic detection of Gnome screen scaling factors because it caused problems on a few desktop environments. Set the environment variable QT_SCREEN_SCALE_FACTORS instead to enable it manually if required.

Maestral v0.4.2

24 Oct 14:09
972c43a
Compare
Choose a tag to compare

This release focuses on bug fixes and sync improvements.

Added:

  • Added a command maestral activity which gives a live view of all items queued for syncing or currently being synced.

Fixed:

  • Fixes crash of the sync thread when attempting to download a file from Dropbox which has been deleted after it has been queued for download but before the actual download attempt.
  • Fixes crash of the sync thread when attempting to upload a file to Dropbox which has been deleted after it has been queued for upload but before the actual upload attempt.
  • Fixes a bug where the revision number of a file could be incorrectly set to "folder".
  • Fixes a crash of the sync thread while indexing local changes (after a restart) if an indexed item has been deleted before we could check if it is a file or a folder.
  • Fixes a bug where newly downloaded files could be immediately re-uploaded in some cases.
  • Fixes a crash on startup when started as systemd service with watchdog.

Maestral v0.4.1

02 Oct 12:45
18cdd2d
Compare
Choose a tag to compare

This release focuses on bug fixes and performance improvements. Notable changes are:

  • You can now rebuild Maestral's index from the command line with maestral rebuild-index.
  • Communication between the sync daemon and frontend (GUI or CLI) is faster and more secure.
  • Improved system tray notifications.

Here is the list of all changes:

Added:

  • Added maestral rebuild-index command to CLI.
  • Added support for systemd software watchdog (see #55).

Changed:

  • Renamed command maestral config new to maestral config add.
  • Renamed command maestral config delete to maestral config remove.
  • Improved system tray notifications:
    • Display the name of the user who changed a file.
    • Added app-icon and and app-name to Linux notifications.
    • Migrated macOS notifications from NSUserNotificationCenter (deprecated) to UNUserNotificatioCenter for macOS Mojave and higher.
  • Improved appearance of unlink dialog: show spinning progress indicator and perform unlink in the background.
  • Show menu entry "No recent files" when there are no recently changed files to display.
  • Use Unix domain sockets instead of TCP/IP sockets for communication with daemon. This means that communication is lighter, faster and more secure (other users on the same PC can no longer connect to your sync daemon).
  • Use NSTemporaryDirectory on macOS as runtime dir.
  • Simplified code for the initial sync.

Fixed:

  • Fixes a bug where the CLI setup dialog could fail when choosing to replace an existing Dropbox folder.
  • Fixes a bug which would cause maestral start to hang indefinitely if the daemon is not created successfully (see #57).
  • Fixes a bug which would cause maestral unlink to fail when the Maestral daemon is still running.
  • Fixes a bug where the Maestral GUI would show a paused icon during the initial sync after setup.
  • Fixes a bug where the menu bar item "Pause Syncing" would not change to "Resume Syncing" when pausing sync through the CLI via maestral pause (and vice versa).
  • Catch unexpected exceptions in sync threads and display to user instead of crashing.
  • Do not upload changes to an excluded folder but raise a sync issue instead.
  • Fixes wrong color of system tray / menu bar icon on macOS when clicked in light-mode.
  • Fixes a regression bug from v0.4.0 which caused the creation of new configs for separate Dropbox accounts to fail silently.
  • Fixes a bug which could result in a missing sync cursor when running the Maestral after the initial setup. This would come from parallel access to the config files from a thread spawned by the setup dialog and the Maestral daemon itself. We now make sure that the setup dialog leaves no threads behind after exiting.
  • Fixes a bug which could cause false sync errors when adding a nested folder structure to the local Dropbox folder.
  • Fixes a bug in converting Dropbox DeleteErrors raised because of an invalid path to MaestralApiErrors.
  • Fixes a bug which would prevent Maestral from detecting local changes to files that are part of a batch which is currently being downloaded.
  • Fixes a bug where the user may be asked to create a new keyring in a non-default wallet if multiple wallets are available on first start (see #56). See jaraco/keyring#391 for the current behaviour of Python keyring.
  • Fixes a bug which could cause the Maestral daemon to be started with a different PATH than the invoking command (see #57).
  • Fixes a bug where changes to a file which is not synced locally would trigger "file added" instead of "file changed" notifications.

Maestral v0.4.0

15 Sep 13:43
Compare
Choose a tag to compare

Main changes are:

  • Support the exclusion of subfolders.
  • Check and notify if updates are available.
  • Decoupled GUI and sync daemon.
  • Cleaned up the command line interface. Use maestral start instead of maestral daemon start and maestral start --foreground instead of maestral sync.
  • Bug fixes and performance improvements.

Details are given below.

Added:

  • Method to get the sync status of individual files or folders. This is also accessible through the CLI via maestral file-status LOCAL_PATH. In the future, this could be used by file manager plugins to overlay the sync status of files.
  • Support to exclude subfolders in the main API, CLI and GUI.
  • Added a command group maestral excluded to view and manage excluded folders. Available commands are add, remove and show.
  • For case-sensitive file systems: Automatically rename created items which have the same name as an existing item, but with a different case. This avoids possible issues on case-sensitive file systems since Dropbox itself is not case-sensitive.
  • GUI notifications when a new version of Maestral is available, configurable to daily, weekly, monthly or never.
  • A new "Check for updates..." menu entry.
  • Better integration with systemd: When the daemon is started from systemd, status updates and ready / stopping signals are sent to systemd and the log is sent to the journal instead of stdout. This requires the installation of the systemd extra as pip3 install -U maestral[systemd], which will install sdnotify and systemd-python. The latter may require you install additional packages through your system's package manager first. See here for installation instructions.

Changed:

  • Separated daemon and CLI code into different modules.
  • Simplified CLI:
    • Moved commands from maestral daemon to main command group, i.e., maestral daemon start is now maestral start.
    • Removed maestral sync. Use maestral start --foreground instead.
  • GUI now uses only the main Maestral API which is exposed over sockets.
  • Changed returned values of the Maestral API to Python types only for better serialisation.
  • GUI now starts its own daemon on demand or attaches to an existing one. This daemon will run in a separate process, unless started from a macOS App bundle.
  • Improved startup time for large folders: Moved indexing of local files after a restart to the upload_thread.
  • Sync engine moved to a submodule.
  • Setup dialog no longer returns a Maestral instance on success but just True. It is up to the GUI to create or attach to a Maestral daemon.

Fixed:

  • Fixed an incorrect error being raised for a corrupted rev file, which could lead to a crash or misleading error message.
  • Fixed a bug which would cause a renamed file with a previously invalid name not to sync to Dropbox.
  • Fixed a bug in the GUI which would cause clicking on a recently changed file to reveal the wrong item in the file manager.
  • Fixed a bug which would cause the sync thread to crash when attempting to follow a broken symlink (#50). Now, the error will be reported to the user as a sync issue. Thanks to @michaelbjames for the fix.
  • Fixes a bug where the Dropbox path is not reset when aborting the setup dialog.

Removed:

  • Removed the CLI command maestral sync. Use maestral start --foreground instead.

Maestral v0.3.2

18 Aug 22:52
677e2e9
Compare
Choose a tag to compare

This release fixes a bug that could result in only changes of top-level items being synced. This affects users who carried out the initial linking with Maestral v0.2.5 or later and selected to exclude folders before the first download. Users affected by this should rebuild Maestral's index after updating by selecting "Rebuild index..." in the main menu.

Other improvements include expanded command line scripts with more useful output, minor bug fixes and small tweaks to the UI.

Added:

  • Added a "status" property to maestral.main which shows the last log message.
  • Added a command group maestral log to view and clear the log as well set the logging level. Commands are:
    • maestral log show: Shows the logs in terminal.
    • maestral log clear: Clears the logs.
    • maestral log level: Returns the current log level.
    • maestral log level [DEBUG|INFO|WARNING|ERROR]: Sets the log level to the given
      value. Affects both stdout and file logs.
  • Added an option "-a" to maestral ls to include hidden files.
  • Added tooltips for system tray icon when not on macOS.

Changed:

  • Made log levels persistent between sessions.
  • Changed the name of maestral list to maestral ls and, by default, do not list "hidden" items that start with a dot. Added an option "-a" to explicitly list all files in a directory.
  • Improved output from command line scripts:
    • Wrap all long outputs in empty lines.
    • Show more informative status.
    • Show Dropbox folder location in account-info.
    • Add colours to outputs like "[OK]" and "[FAILED]".
  • Set minimum version requirement for click package.
  • Reduced the startup time by downloading profile picture in a thread. Periodically update in the background (every 20 min).
  • Check hashes before uploading modified files. This speeds up re-linking an old folder by orders of magnitude.
  • Enable the creation of multiple autostart entries for different configurations.
  • Fall back to PNG tray icons if the platform may not support our svg format.

Fixed:

  • Fixed a bug which would not allow running maestral for the first time before explicitly adding a configuration with maestral config new. Now, a default configuration is created automatically on first run.
  • Prevent the GUI and a daemon from syncing the same folder at the same time.
  • Fixed the creation of multiple daemons. A new daemon will no longer overwrite an old one and maestral daemon start will do nothing if a daemon for the given configuration is already running.
  • Automatic allocation of ports for the communication between daemon and client.
  • Show the (Dropbox) file path in the string representation of MaestralApiError. Previously, one could not see from the traceback which file caused the error.
  • Fixed a bug that would result in only changes of top-level items being synced. This affects users who carrier out the initial linking with Maestral v0.2.5 or later (commit 40be316) and selected to exclude folders before the initial sync. Users affected by this bug should rebuild Maestral's index by selecting "Rebuild index..." in the main menu.

Maestral v0.3.0

14 Aug 19:50
18bcc3a
Compare
Choose a tag to compare

This release includes several significant changes. The largest are:

  1. Support for multiple Dropbox accounts (via the command line)
  2. A Maestral daemon for the command line
  3. A redesigned settings window with more prominent account information

The use of the new command line scripts is documented in the README and other changes can be found in the CHANGELOG.