maestral

Open-source Dropbox client for macOS and Linux

MIT License

Stars
3.1K
Committers
20
maestral - v1.4.6

Published by samschott over 3 years ago

Changed:

  • Performance improvements to selective sync dialog in GUI.

Fixed:

  • Fixed an IndexError during conflict resolution when the local item is a non-empty folder.
maestral - v1.4.5

Published by samschott over 3 years ago

Added:

  • Support CMD+Q keyboard shortcut to quit app on macOS.

Changed:

  • Clarified the "merge local folder" option in the GUI's setup dialog.

Fixed:

  • Fixed an issue where erroneous file conflicts could occur when a file name contains decomposed unicode characters such as "é" represented by "e" + "́" instead of a single character.
  • Fixed an issue where center-aligned text would appear right-aligned on Apple Silicon computers.

Dependencies:

  • Bumped desktop-notifier to v3.3.0. This fixes a segfault for non-framework distributions of Python such as Anaconda Python.
maestral - v1.4.4

Published by samschott over 3 years ago

Edit: Updated App bundle for macOS, the previous bundle was built with the wrong version of the toga GUI toolkit.

This release introduces support for tab-completion in the shell, allows you to choose the actual Dropbox folder instead of its parent folder / location from the GUI, and further reduces memory usage during startup indexing. As usual, several bugs have been squashed.

The website has also moved to its own domain at maestral.app. The source still lives in the website branch of the GitHub repo and contributions are welcome.

Added:

  • Added support for shell completion. Completion is available for the commands themselves and for several arguments, notably paths relative to the Dropbox folder and choices from a set of fixed options. Use the command maestral completion to generate shell completion scripts for bash, zsh or fish. See maestral completion --help for instructions on enabling shell completion.

Changed:

  • Improved error messages when inotify limits are reached on Linux.
  • GUI dialogs to select a local Dropbox folder now ask for the actual folder name instead of the location only.
  • Local indexing on startup is now carried out without loading the entire folder tree into memory. This further reduces peak memory usage and fragmentation.
  • Permission errors when scanning the contents of a local folder during startup indexing are now treated as fatal errors instead of skipping its content. This prevents items from being deleted on the server when they are still present locally but inaccessible.
  • Improved logging during daemon startup: Logging is now initialised immediately after the main imports and therefore captures potential errors early during the startup process.
  • Loggers are scoped per configuration instead of globally. This enables separating logs for Maestral instances for different configs which are running in the same process.
  • Improved performance and appearance of the selective sync dialog. Folder content is no longer pre-fetched but will be loaded on-demand when expanding a folder.

Fixed:

  • Fixes a rare issue where throttling of sync threads would be disabled if the "max_cpu_percent" config value would be set to 100% divided by the number of CPU cores (e.g, 25% on a 4-core CPU).
  • Fixes an issue where a local permission error would be treated as a fatal error instead of as a sync issue.
  • Moving the Dropbox folder between partitions no longer triggers a full resync.
  • Fixes an error when running the diff CLI command and selecting the local file as the base version.
  • Fixes download links in the update dialog.
  • Fixes an unexpected error which may occur when creating a conflicting copy.

Dependencies:

  • Bumped click to >= v8.0.0 to support shell completion.
  • Bumped survey to >= v3.4.3 for Python 3.6 support.
maestral - v1.4.3

Published by samschott over 3 years ago

This release improves performance and memory usage by switching from sqlalchamey to our own database interaction layer. It is also the first release with an app bundle that runs natively on Apple Silicon.

Maestral now also has a website with a detailed documentation of the command line interface, released with GitHub pages at https://samschott.github.io/maestral.

Changed:

  • We now use our own ORM layer instead of sqlalchemy. This improves both baseline memory usage and peak memory usage during startup and indexing.
  • Use a new network session for each thread and clean up network resources before the thread stops.
  • The macOS GUI will now show a dock icon if there is an open window.
  • The CLI will print full tracebacks to the console in case of unexpected errors.

Fixed:

  • Fixed detecting local changes when saving an MS Office on macOS with recent versions of the Office suite.

Dependencies:

  • Bumped desktop-notifier to >=3.2.2
  • Bumped watchdog to >=2.0.1
  • Removed sqlalchemy
  • Removed alembic
maestral - v1.4.2

Published by samschott over 3 years ago

Fixes an issue where the daemon might restart syncing when an internet connection is reestablished even though it should be paused.

maestral - v1.4.1

Published by samschott over 3 years ago

Fixes an issue where the daemon status may incorrectly report "Connecting..." even though the daemon is connected.

maestral - v1.4.0

Published by samschott over 3 years ago

This release brings significant extensions to the command line interface: It introduces commands to create and manage shared links, to compare older version of a file and print the diff output to the terminal, and commands for direct access to config values (note the warning below). It also adds optional one-way syncing, for instance to keep a mirror of a remote Dropbox folder while ignoring local changes.

Several bugs have been fixed which could occur when resuming the sync activity after the connection had been lost while indexing a remote folder.

Finally, this release removes automatic error reporting via Bugsnag. Please file any bug reports as issues on GitHub where it is possible to follow up.

Added:

  • Added a command maestral diff to compare different versions of a text file. The resulting diff is printed to the console. Credit goes to @OrangeFran.
  • Resurrected the command maestral revs to list previous versions (revisions) of a file.
  • Added a command group maestral sharelink to create and manage shared links. Subcommands are create to create a shared link for a file or folder, list to list shared links, either for a specific file or folder or for all items in your Dropbox, and revoke to revoke a shared link.
  • Added a command group maestral config to provide direct access to config values. Subcommands are get and set to read and write config values, respectively. This provides access to previously inaccessible config values such as reindex_interval or max_cpu_percent. Please refer to a Wiki for an overview of all config values. Use the set command with caution: setting some config values may leave the daemon in an inconsistent state (e.g., changing the location of the Dropbox folder). Always use the equivalent command from the Settings group (e.g., maestral move-dir).
  • Added the ability to disable a single sync direction, for instance to enable download syncs only. This can be useful when you want to mirror a remote folder while ignoring local changes or when syncing to a file system which does not support inotify. To use this, set the respective config values for upload or download to False. Note that conflict resolution remains unaffected. For instance, when an unsynced local change would be overwritten by a remote change, the local file will be moved to a "conflicting copy" first. However, the conflicting copy will not be uploaded.

Changed:

Changes to daemon:

  • Avoid scanning of objects matching an .mignore pattern (file watches will still be added however). This results in performance improvements during startup and resume. A resulting behavioral change is that maestral will remove files matching an ignore pattern from Dropbox. After this change it will be immaterial if an .mignore pattern is added before or after having matching files in Dropbox.
  • If Maestral is quit or interrupted during indexing, for instance due to connection problems, it will later resume from the same position instead of restarting from the beginning.
  • Indexing will no longer skip excluded folders. This is necessary for the above change.
  • Defer periodic reindexing, typically carried out weekly, if the device is not connected to an AC power supply. This prevents draining the battery when hashing file contents.
  • Improved the error message when the user is running out of inotify watches: Recommend default values of max_user_watches = 524288 and max_user_instances = 1024 or double the current values, whichever is higher. Advise to apply the changes with sysctl -p.

Changes to CLI:

  • Moved linking and unlinking to a new command group maestral auth with subcommands link, unlink and status.
  • Renamed the command file-status to filestatus.
  • Added a --yes, -Y flag to the unlink to command to skip the confirmation prompt.
  • Renamed the configs command to list config files to config-files.
  • Added an option --clean to config-files to remove all stale config files (those without a linked Dropbox account).

Fixed:

  • Fixes an issue with the CLI on Python 3.6 where commands that print dates to the console would raise an exception.
  • Properly handle a rare OSError "[Errno 41] Protocol wrong type for socket" on macOS, see https://bugs.python.org/issue33450.
  • Allow creating local files even if we cannot set their permissions, for instances on some mounted NTFS drives.
  • Fixes an issue with the selective sync dialog in the Qt / Linux GUI where the "Update" button could be incorrectly enabled or disabled.
  • Fixes an issue where a lost internet connection while starting the sync could lead to a stuck sync thread or an endless indexing cycle.
  • Fixes an issue where a lost internet connection during the download of a folder newly included in selective sync could result in the download never being completed.
  • Fixes an issue where pausing the sync during the download of a folder newly included in selective sync could result in the download never being completed. Credit goes to @andrewsali.

Removed:

  • Removed automatic error reporting via bugsnag.
  • Removed the CLI command maestral restart. Use stop and start instead.
  • Removed the CLI command maestral account-info. Use maestral auth status instead.
  • Removed the public API methods Maestral.resume_sync and Maestral.pause_sync. Use Maestral.start_sync and Maestral.stop_sync instead.

Dependencies:

  • Bumped survey to version >=3.2.2,<4.0.
  • Bumped keyring to version >=22.
  • Bumped watchdog to version >= 2.0.
  • Added desktop-notifier dependency. This is spin-off project from Maestral, built on the code previously in the notify module.
  • Removed the bugsnag dependency.
maestral - v1.3.1

Published by samschott almost 4 years ago

Fixes an incorrect entry point for the Qt GUI. Fixes a wrong version of survey bundled in the macOS App.

maestral - v1.3.0

Published by samschott almost 4 years ago

This release features an overhaul of the command line interface: commands are grouped by sections in the help output, dialogs and output formatting have been improved and many commands have become significantly faster.

This release also significantly reduces the CPU usage when idle and provides a whole series of bug fixes for GUI and daemon.

Added:

  • Desktop notifications for sync errors are now clickable and will show the related file or folder either on Dropbox or locally.
  • Desktop notifications now have a "Show" button to show a recently changed file.
  • Added a public API Maetral.status_change_longpoll for frontends to wait for status changes without frequent polling. status_change_longpoll blocks until there is a change in status and then returns True. The default timeout is 60 sec.

Changed:

  • Significant improvements to the command line interface:
    • Overhauled all CLI dialogs with nicer formatting and more interactive prompts using the survey package.
    • Improved output of many CLI commands, including ls, activity, and restore.
    • Increased speed of many CLI commands by importing only necessary modules.
    • Shortened help texts for CLI commands.
    • Group help output by function.
  • Reduced the CPU usage of daemon and GUIs in the idle state:
    • Increased timeouts for all event queues.
    • Decreased the frequency of daemon housekeeping tasks.
    • GUIs now use longpoll APIs to wait for state changes instead of frequent polling.
  • Improved performance when syncing a large number of remote deletions.
  • The Maestral.include_item() API now accepts paths which lie inside an excluded folder. When called with such a path, all immediate parents will be included as well.
  • The Maestral.excluded_items property is no longer read-only.
  • Some refactoring of the cli module to prepare for shell completion support.

Fixes:

  • Fixes an issue where all newly downloaded files would be created with 755 permissions. They are now created with the user's default permissions for new files instead.
  • Fixes an unexpected crash when the list of pending_downloads or download_errors would contain an invalid path, i.e., a Dropbox path for which we cannot get any current or deleted metadata.
  • Fixes an error when a local file name contains bytes which cannot be decoded by the reported file system encoding. This now raises a sync error instead of crashing. All log handlers have also been updated to deal with the resulting surrogate escapes.
  • Fixes possible loss of data when excluding an item from syncing while it is being downloaded. This is no longer possible and will raise a BusyError instead.
  • Fixes an issue where maestral ls would fail when run with the -l, --long flag.
  • Fixes an occasional IndexError during a download sync when trying to query past versions of a deleted item.
  • Fixes an issue which could cause a segfault of the selective sync dialog on macOS.
  • Fixes an issue where the selective sync dialog on Linux would not load the contents of more than 10 folders.
  • Fixes a regression with the autostart functionality of the Linux GUI. Autostart entries created with v1.2.2 will need be reset by toggling the checkbox "start on login" off and on.
  • Fixes an issue where two configs linked to the same Dropbox account would both be unlinked when trying to unlink only one of them.
  • Fixes an import error with v11.0 of the Dropbox SDK.

Removed:

  • Removed the maestral rev command to list old file revisions. Instead maestral restore will list possible revisions to restore.

Deprecated:

  • Deprecated the Maestral.set_excluded_items API. Use the setter for Maestral.excluded_items instead.

Development:

  • Updated tests and migrated fully to pytest.
  • Improved API documentation, including sections on the sync logic and on logging.
  • Added contributing guidelines.

Dependencies:

  • Require watchdog<=10.3 because of an unresolved issue in watchdog 0.10.4 on macOS.
  • Pin dropbox<12.0 to avoid bad surprises in case of breaking changes.
  • Add survey for an interactive CLI.
maestral - v1.2.2

Published by samschott almost 4 years ago

This release focuses on bug fixes and performance improvements. In particular, memory usage has been improved when syncing a Dropbox folder with a large number of items. It also fixes an issue with running the app bundle on macOS High Sierra.

Changes:

  • maestral file-status now accepts relative paths.
  • Runs the daemon in a Python interpreter with -OO flags. This strips docstrings and saves a few MB of memory.
  • Moves from pkg_resources to locate entry points and other metadata to the faster and more light-weight importlib.metadata.
  • Update scripts are no longer run after a fresh install or for a new config.
  • Significantly reduces memory usage during the initial sync of a Dropbox folder with many (> 10,000) items and when downloading a large set of changes. To achieve this, new APIs have been added to SyncEngine and DropboxClient that return iterators over remote changes. Dropbox servers are queried on every iteration and memory is freed after applying each batch of remote changes.
  • Maestral.get_history now returns only the last 100 sync events by default. This can be increased by setting the limit argument manually.
  • The total sync history kept in out database is limited to the last 1,000 events.
  • Switch from PyInstaller to briefcase for packaging on macOS.

Fixes:

  • Fixes an issue which would prevent the daemon from starting on macOS when running with Python 3.6.
  • Fixes a segfault of the GUI on macOS High Sierra.
  • Fixes an issue with the macOS GUI becoming unresponsive when opening the selective sync dialog if one of the displayed folders contains a large number (> 2k) of immediate children.
  • Fixes an issue with the Qt GUI crashing when opening the selective sync dialog if one of the folders contains a large number (> 2k) of immediate children.
  • Fixes an issue where Mastral.excluded_status would return "included" for items inside an excluded folder.
maestral - Maestral v1.2.1

Published by samschott about 4 years ago

This update provides bug fixes and some improvements to error handling. Major changes don't regard Maestral itself but its distribution: a Docker image is now available, thanks to @aries1980, and the macOS app bundle has been rebuilt with the macOS 11 SDK, providing full compatibility from macOS 10.14 Mojave to macOS 11.0 Big Sur.

Added:

  • Added a Docker image. The docker image is based on Linux and does not currently include a GUI.
  • Added -V, --version option to the command line interface to show the version and exit.

Changed:

  • Improves handling of database related errors such as database integrity, missing read / write permissions for the database file, etc.
  • Improves handling of errors when the keyring cannot be unlocked to delete credentials during an unlink.
  • Improves handling of errors when the keyring where Dropbox credentials are stored becomes unavailable, e.g., has been uninstalled.
  • Never start a subprocess when maestral is run with the -f, --foreground option. Previously, any required setup such as linking, etc, would still be performed in a subprocess.
  • Minor tweaks and improvements to the macOS GUI.
  • Allow sending desktop notifications in Linux before the daemon's event loop has started. This is useful for error messages which occur early during the initialization.
  • Improves log messages when the connection to Dropbox is lost.
  • Performance improvements to maestral activity in case of very large sync queues.

Fixes:

  • Fixes a database integrity error due to an unfulfilled unique constraint.
  • Fixes an issue when the daemon is launched with systemd where systemd would unexpectedly receive notifications from a subprocess instead of the main process.
  • Fixes an issue which would prevent syncing from automatically resuming after moving the local Dropbox directory with maestral move-dir or through the GUI.
  • Fixes a green background for sync issue views in the macOS GUI.
  • Fixes an issue where the system tray icon in KDE Plasma could fall back to the regular app icon or not show up at all,
  • Fixes an issue where the user may be asked to unlock or grant access to the system keyring twice on startup if access denied the first time.

Dependencies:

  • Adds alembic dependency for database migrations.
maestral - Maestral v1.2.0

Published by samschott about 4 years ago

The local file index and sync history are now stored in a SQLite database. After the update, Maestral will reindex your Dropbox to populate the new index. This may take a few minutes, depending on the number of files in your Dropbox.

This change enables several improvements to the command line interface and GUI: The command maestral activity now shows the progress of individual uploads or downloads. maestral history has been added to list recent sync events. In the GUI, the recent changes menu now has been replaced by a "Activity" window which shows all sync events of the past week.

This release also introduces clickable desktop notifications, performance improvements to indexing of local file changes, and bug fixes and smaller changes listed below.

Finally, this release introduces support for macOS 11 (Big Sur).

Added:

  • Added an option --external/-e to maestral log show to open the log in the platform's default program instead of showing it in the console.
  • Added a CLI command history to show all sync events of the past week.
  • Added a "Activity" window to show all sync events of the past week.
  • Desktop notifications are now clickable: for a single file change, clicking the notification will show the file in the platform's file manager. For a deletion, the Dropbox website is opened to provide options for restoring the file or folder.
  • Use entry points to discover GUI frontends. 3rd party GUIs can register a maestral_gui entry point to be launched with the maestral gui CLI command. If installed, maestral gui will default to the 1st party maestral-cocoa or maestral-qt GUIs on macOS and Linux, respectively.

Changed:

  • Transition to short-lived auth tokens for newly linked accounts.
  • Transition to OAuth scopes for app permissions.
  • Save all sync history and local index in SQLite database.
  • Reduce unnecessary path conversions during indexing of local changes.
  • Improved performance on case-sensitive file systems.
  • Sync remote changes in filename even if they are only a change in casing. Those changes where previously ignored.
  • Attempt to preserve local file permissions when syncing unless the file id has changed. Dropbox servers do store file permissions but don't make them available through the public API. We therefore cannot sync file permissions and instead choose not to overwrite locally set permissions on every download.
  • Changed return type of Maestral.get_activity from namedtuple to dict for better consistency throughout the API. Every uploading or downloading item will have 'size' and 'completed' entries to monitor the progress of syncing individual items.
  • The CLI command maestral activity now shows the progress of uploads and downloads for individual files.
  • Introduced type annotations throughout and fixed a few type-related bugs.
  • Added a field "Sync threads" to the output of the CLI command maestral status.
  • The output of maestral ls is now printed in a grid, similar to the ls command included with most platforms.
  • The macOS app bundle now uses Python 3.8, leading to some performance improvements when moving or copying file system trees.
  • Prepared the GUI for changes in macOS Big Sur: use native alerts and dialogs wherever possible and refactor loading of libraries.
  • Use an asyncio event loop instead of Pyro's event loop to run the daemon. This enables integration with the Cocoa run loop and callbacks when clicking notifications.

Fixed:

  • Fixes a bug where throttling of sync threads would raise an error when we cannot determine the CPU count.
  • Fixes a bug where sending SIGTERM to the daemon process would raise an error when we cannot determine its PID. Now, Stop.Failed is returned instead.
  • Fixes a bug which would result in incorrect systemd unit files for non-default config file names. Please disable and re-enable autostart with maestral autostart -Y|-N to replace old unit files.
  • Fixes a possible race condition when creating the cache directory.
  • Fixes error handling when a file is changed while uploading.

Removed:

  • Support for config names with spaces. Spaces could cause issues with autostart entries on some platforms.
  • The ability to run the daemon in a separate thread. The daemon must now always be run inits own process.

Dependencies:

  • Replaced jeepney dependency on Linux with dbus-next.
maestral - Maestral v1.1.0

Published by samschott over 4 years ago

This release expands the CLI functionality and improves the handling of file modification times during upload and download (used for display purposes only). It also fixes bugs with the "start on login" functionality of the macOS app bundle. After updating, please toggle "start on login" in the GUI or maestral autostart in the CLI to replace any old login items on macOS.

Added:

  • Added --include-deleted | -d option to maestral ls.
  • Added --long | -l option to maestral ls to include metadata in listing.
  • Added maestral revs command to list revisions of a file.
  • Added maestral restore command to restore an old revision of a file.

Changed:

  • Always create config directory if it does not yet exist.
  • Improved performance of converting Dropbox paths to correctly cased local paths.
  • Renamed macOS executable inside app bundle from "main" to "Maestral". This results in more informative process names.
  • Local files are now created with the "last modified" time provided by Dropbox servers. This only applies to new downloads. To update existing modified times, you will need to delete and redownload your Dropbox folder.

Fixed:

  • Fixes a thread-safety issue with desktop notifications.
  • Fixes a thread-safety issue when two frontends try to start or stop syncing at the same time.
  • Fixes an issue where Maestral could incorrectly identify a file system as case sensitive if the Dropbox folder and temporary directory are on partitions with different file systems.
  • Fixes incorrect file modification times uploaded to Dropbox for timezones outside of UTC. Those times are used for display purposes only.
  • Fixes an issue where the maestral autostart -Y CLI command would start the GUI on login in case of the macOS app bundle.
maestral - Maestral v1.0.3

Published by samschott over 4 years ago

Thanks to generous Github sponsors, the macOS app bundle is now properly signed and notarized.

Edit: The previous macOS app bundle had the wrong version number. This has been corrected now.

Changed:

  • Both "-h" and "--help" can now be used to print help output for a command.
  • Show both the daemon and GUI version in the GUI settings window.
  • The command line tool bundled with the macOS app now provides proper help output.
  • Significantly reduced CPU usage of the GUI on macOS.
  • The macOS app now uses a hardened runtime and is properly signed and notarized.

Fixed:

  • Fixes an issue which could lead to the local Dropbox folder being moved before syncing has been paused.
  • Fixes an issue where download errors would show a rev number instead of the Dropbox path.
  • Fixes a race condition when two processes try to start a sync daemon at the same time.
  • Fixes an issue in the macOS GUI where updating the displayed sync issues could fail.
  • Fixes truncated text in the macOS setup dialog.
  • Fixes an issue on fresh macOS installs where creating autostart entries could fail if /Library/LaunchAgents does not yet exist.
  • Fixes an issue in the macOS app bundle where installing the command line could tool would fail if /usr/local/bin is owned by root (as is default on a fresh install). Now, the user is asked for permission instead.

Dependencies:

  • Removed lockfile dependency.
  • Added fasteners dependency.
maestral - Maestral v1.0.3.beta1

Published by samschott over 4 years ago

Changed:

  • Significantly reduced CPU usage of the GUI on macOS.
  • Show both the daemon and GUI version in the GUI settings window.

Fixed:

  • Fixes an issue which could lead to the local Dropbox folder being moved before syncing has been paused.
  • Fixes an issue where download errors would show a rev number instead of the Dropbox path.
  • Fixes a race condition when two processes try to start a sync daemon at the same time.
  • Fixes an issue in the macOS GUI where updating the displayed sync issues could fail.

Dependencies:

  • Removed lockfile dependency.
  • Added fasteners dependency.
maestral - Maestral v1.0.2

Published by samschott over 4 years ago

This release fixes bugs in the command line interface.

Fixed:

  • Fixes a crash of the CLI when an update is available due to incorrect formatting of the
    update message.
  • Fixes an error when listing the contents of an empty directory with maestral ls.
maestral - Maestral v1.0.0

Published by samschott over 4 years ago

This is the first stable release of Maestral. There have been numerous bug fixes to error handling and platform integration as well as a few bug fixes to syncing itself. There are also a few outward facing changes: Pausing Maestral now cancels all pending sync jobs instead of waiting for them to complete. The macOS GUI switches from Qt to using a native Cocoa interface and the macOS app bundle finally includes a full command line interface which can be installed from the settings window.

Added:

  • Command line tools are now bundled with the macOS app bundle and can be installed from the settings window.
  • Added support for config names with spaces.
  • Switch from Qt to a native Cocoa GUI on macOS. This reduces the size of the app bundle from 50 MB to 20 MB.
  • Expanded test suite to include sync tests.

Changed:

  • Added '.dropbox' and '.dropbox.cache' to always excluded paths.
  • Pausing sync now cancels all pending uploads and downloads.
  • Quicker detection of connection problems.
  • Faster sync of local deletions.
  • The GUI now always launches a separate daemon process instead of an in-process daemon.
  • Temporary files during a download are now stored inside the Dropbox directory at '.maestral.cache'. This guarantees that temporary files always reside on the same partition as the Dropbox folder itself.
  • System tray icons are no longer installed in the platform theme in Linux. This is part of a workaround for a Qt issue on Linux desktops which causes unnecessarily large pixmap transfers over dBus when HiDPI support is enabled. Manually installed icons will still be respected.
  • Switch from implicit grant to PKCE OAuth2 flow.
  • Added public API to link a Dropbox account: Maestral.get_auth_url and Maestral.link. Frontends no longer need to import maestral.oauth.
  • Moved all command line dialogs from the main API to the CLI module.
  • Bumped watchdog requirement to >= 10.0.0 for more consistent error handling.
  • Added explicit jeepny dependency for Linux. This is a dependency of keyring but we use it by itself as well.
  • Improved the reliability of ignoring file system events caused by Maestral itself.

Fixed:

  • Fixes an issue where a dropped internet connection during startup could result in continuous retries until the connection is finally established.
  • Fixes an issue where downloads of newly included folders would not resume after being interrupted.
  • Fixes an issue which could lead to false conflicting copies of folders in some cases.
  • Fixes the handling of inofify limit and permission errors when starting a file system watch.
  • Fixes handling of errors from too long file names.
  • Handle errors due to file names which are not allowed on the local file system.
  • Fixes handling of some uncaught insufficient disk space errors.
  • Fixes incorrect autostart entries on macOS.
  • Fixes a crash when running Maestral as a systemd service without python-systemd installed.
  • Fixes an issue when checking for updates if the list of releases from Github includes dev releases.
  • Fixes an issue where only remote changes would be listed in 'Recent changes' in the GUI.
  • Fixes the alignment of comboboxes in the Qt GUI on macOS.
  • Fixes a crash on macOS when no notification center is available, for instance in a headless session or on Github test runners.
  • Fixes a crash on Linux when the command line tool notify-send is not available.
  • Fixes an issue where sync errors would have incomplete path information.
  • Resolves an issue where indexing a large Dropbox folder with > 100,000 items would continuously timeout and restart in some cases.

Removed:

  • Removed migration code for versions < 0.6.3. If you want to update to v1.0.0, please make sure to upgrade to at least version 0.6.3 first or unlink your Dropbox before updating to v1.0.0.
  • Removed u-msgpack dependency.
maestral - Maestral v0.6.4

Published by samschott over 4 years ago

The release provides bug fixes and minor improvements to the command line and graphical user interfaces. Importantly, it fixes an issue where some files could accidentally become un-indexed, resulting in incorrect conflict resolution.

Added:

  • Config option to set the keyring backend. This defaults to 'automatic' but can be used to specify a preferred backend such as keyrings.backends.kwallet.DBusKeyring. You will need to migrate your credentials manually to the new keyring if you change this setting.
  • Added a --verbose flag to maestral start and maestral restart commands to print log output to stdout.
  • Added an API documentation for developers, available on Read the Docs.

Changed:

  • During initial CLI setup, give the option to sync the entire Dropbox without paginating through individual folders to exclude.
  • Limit the number of notifications to keep in the notification center. This will only work for some desktop environments.
  • Fall back to plain text credential storage if neither Gnome Keyring, KWallet or any other storage implementing the Secret Service API can be found. A warning is shown when plain text storage is used.
  • Settings and setup windows are no longer always kept on top in Linux.
  • maestral start --foreground no longer prints log messages to stdout by default.

Fixed:

  • Properly handle errors when moving files, for instance for sync conflicts.
  • Fixes an issue where some files could accidentally become un-indexed, resulting in incorrect conflict resolution.
  • Fixes an issue with macOS app bundles where the migration of configuration files was omitted after an update. This would result in a failure to start the daemon.
  • Correctly specify the required version of six to work around an upstream issue in Dropbox.
  • Fixes an issue where stdout would end up in the systemd journal in addition to the structured log messages.
  • Fixed a bug where XDG_DATA_HOME was ignored.
maestral - Maestral v0.6.3

Published by samschott over 4 years ago

This release fixes a critical error introduced when updating to v9.5 of the Dropbox Python SDK which prevented any remote changes from being downloaded.

Changed:

  • Show release notes from all releases since last update in update dialog.
  • Use our own method instead of the psuitl package to determine the CPU usage. This eliminates the psuitl dependency which can be difficult to install on some systems.

Fixed:

  • Fixes an issue with downloads failing because Dropbox Metadata is longer hashable from v9.5 of the Dropbox Python SDK.
  • Fixed a StopIteration exception on startup when the location of the maestral CLI script cannot be found in the package metadata.
  • Fixes an error when restarting the daemon with the "foreground" option.
  • Fixed incorrect button labels in the setup dialog when choosing whether to replace or keep an old Dropbox folder. The labels "Replace" and "Cancel" where switched.
  • Fixes a bug where the option "Unlink & Quit" in the "Revoked Access" error dialog would unlink but not quit Maestral.
maestral - Maestral v0.6.2

Published by samschott over 4 years ago

This release enables excluding individual files from syncing and fixes an issue which led to continuously retrying failed downloads. It also contains significant performance improvements to indexing, reduces the CPU usage when syncing a large number of files and introduces weekly re-indexing.

This release also introduces support for an ".mignore" file with the same syntax as gitignore. This feature is considered 'alpha' and may change in the future. Feedback is welcome.

Added:

  • Support excluding files from sync. This uses the same 'selective sync' interface as excluding folders. Excluded files will be removed from the local Dropbox folder.
  • Introduces an ".mignore" file to specify files that Maestral should ignore. The ".mignore" file must be saved in the local Dropbox folder. When excluding files or folders with selective sync (maestral exclude), they will be removed from the local folder and kept in the cloud only. The ".mignore" file enables the reverse: files or folders which exist locally will not be uploaded to Dropbox. It uses the same syntax as gitignore files and, similar to gitignore, files which are already tracked by Maestral will not be affected. More details are given in the Wiki.
  • Added a config option "max_cpu_percent" to adjust the target maximum CPU usage per CPU core. This defaults to 20%, i.e., 80% total for a quad core CPU. Maestral will aim to remain below that percentage but this is not guaranteed.

Changed:

  • Replaced the excluded_files and excluded_folders settings from the config file with a unified excluded_items setting. Entries from excluded_folders will be migrated to the excluded_items setting.
  • Renamed methods which exclude / include folders to exclude_item etc.
  • Speed up creation of local folders.
  • When trying to create a file or folder with the same path as an item excluded by selective sync, the new item is now renamed by appending "selective sync conflict" instead of raising a sync issue. This is closer the behaviour of the official client.
  • Significant performance improvements to indexing and file event processing. Indexing a remote Dropbox with 20,000 to 30,000 files and comparing it a local folder now takes ~ 5 min, depending on on the average file size.
  • Introduced periodic reindexing every week. This has been made possible by the above performance improvements.

Fixed:

  • Don't immediately retry when a download fails. Instead, save failed downloads and retry only on pause / resume or restart.
  • Fixes missing cursor and resulting unexpected ValidationError during sync startup.
  • Wait until all sync activity has stopped before moving the Dropbox folder. This avoids errors when trying to convert local to dropbox paths and vice versa during the move.
  • Fixes an issue which would prevent some conflicting copies created by Dropbox from being downloaded.
  • Correctly handle when a local item is renamed to an always excluded file name such as ".DS_STORE": the item is now deleted from Dropbox.
  • Fixes an issue where sharing an existing folder from the Dropbox website would result in the folder being deleted locally. This is because Dropbox actually removes the shared folder from the user's Dropbox and then re-mounts it as a shared drive / file system. We handle this correctly now by leaving the local folder alone or deleting and re-downloading it, depending on the time elapsed between removal and re-mounting.
  • Improves conflict resolution when a folder has been been replaced with a file or vice versa and both the local and remote item have un-synced changes.
  • Fixes an issue where maestral stop would block until all pending syncs have completed. This could potentially take a very long time for large downloads. Instead, any interrupted downloads will be restarted on next launch.