maestral/CHANGELOG.md
2019-12-10 13:32:11 +00:00

28 KiB

v0.4.5-dev

Fixed:

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

v0.4.4

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.

v0.4.3

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.

v0.4.2

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.

v0.4.1

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 -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 bug in converting Dropbox DeleteErrors due to 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 https://github.com/jaraco/keyring/issues/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 modified" notifications.

v0.4.0

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.

v0.3.2

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 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 40be316b49) 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.

Removed:

  • No longer install a script "maestral-gui". Use "maestral gui" instead.

v0.3.1 (2019-08-14)

Fixed:

v0.3.0 (2019-08-14)

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 detailed list of changes is:

Added:

  • Maestral can now be started as a daemon from the command line. A new command group maestral daemon has been introduced to manage this.
  • Added support for custom Dropbox folder names. The folder name must be set with the command line scripts.
  • Added a new command group maestral config to manage multiple Maestral configurations for different Dropbox accounts.
  • Added a new command line option --config-name or -c to select the configuration file to use.
  • Improved grouping and naming of command line scripts.
  • Added a "relink" dialog which is shown when Maestral's Dropbox access has expired or has been revoked by the user.
  • Improved logic to detect system tray color and set icons accordingly. This is mostly for KDE which, unlike Gnome, does not handle automatically adapting its tray icon colours.

Changed:

  • Animated setup dialog.
  • Redesigned the settings window to show more prominent account information.
  • Improved command line and GUI flows for setting or moving the Dropbox folder location.
  • Moved to an Implicit Grant OAuth2 flow. This does not require an app secret to be stored in the client source code. Maestral will therefore no longer require the user to get their own API keys or to use the precompiled oauth binaries hosted on PyPI.
  • Improved the user massages given by command line scripts.
  • Improved status messages given in RebuildIndexDialog.
  • Unified and improved the creation of QThreads by the GUI to perform background tasks. This fixes an issue with occasional segfaults RebuildIndexDialog and improves the reliability of the UI.
  • Started to work on providing a top-level API in Maestral for all functionality that is required by the UI. There should be no need to interact with Monitor or UpDownSync directly for high-level functionality.

Fixed:

  • Fixed a crash on startup if the Meastral's Dropbox access has expired or has been revoked.
  • Fixed handling of ListFolder errors. Those will only occur when the user gives an incorrect folder name to list and will (hopefully) never be caused my Maestral itself.

v0.2.6 (2019-08-08)

This release fixes a critical bug which would cause Maestral to get stuck after the initial sync. This does not affect users who have already performed the initial sync with a previous version of Maestral.

Added:

  • Added a context menu entry to the "Sync issues" window to show a file on dropbox.com.

Changed:

  • Move logs to '$XDG_CACHE_HOME/maestral' on Linux and '~/Library/Logs/maestral' on macOS.
  • Reduce the number of Dropbox API calls during initial sync.

Fixed:

  • Fixed a bug which would cause Maestral to get stuck after the initial download.
  • Fixes an issue in macOS where modal dialogs in the settings window would sometimes appear behind the window instead of in front of it.

v0.2.5 (2019-08-07)

This release fixes several sync issues which could occur when the internet connection is lost during a sync. It also notifies the user if Maestral's access to their Dropbox has been revoked.

Added:

  • Handle expired or invalidated Dropbox access.
  • Ask the user before overriding an existing folder in the setup dialog.
  • Added status updates for large file uploads (e.g., "Uploading 10/545MB...").

Changed:

  • Significant speedup of initial indexing. Excluded folders or subfolders will no longer be indexed.
  • Save config files in the systems default location: '$XDG_CONFIG_HOME/maestral' or '.config/maestral' in Linux and '~/Library/Application Support/maestral' on macOS.

Fixed:

  • Fixed a false "Dropbox folder cannot be found" message which would appear when quitting and restarting Maestral during the first sync. Now, the initial download is quietly resumed when relaunching Maestral.
  • Fixed an issue where an interrupted upload would not resume without restarting Maestral.
  • Fixed an issue where file changes while "offline" would sometimes not be synced to Dropbox when a connection is reestablished.
  • Fixed an issue where errors from requests would inadvertently get caught instead of being raised.

v0.2.4 (2019-08-05)

This version mainly improves the appearance and responsiveness of the GUI specifically on Linux platforms with a Gnome desktop. It also introduces a dialog to handle a deleted or moved Dropbox folder.

Added:

  • Added a "Select all" option when choosing which folders to sync.
  • Handle deleted or moved Dropbox folder in setup dialog.
  • Handle deleted or moved Dropbox folder while Maestral is running.

Changed:

  • Improved performance of the GUI on some Gnome systems in case of many rapid status changes.
  • Show system tray icon already during the setup dialog.

Fixed:

  • Fixed size of the system tray icon in Gnome desktops with high-DPI scaling.
  • Fixed a bug which would result in an error dialog being shown for "normal" sync errors such as an invalid file name.
  • Fixed missing line-breaks in the traceback shown by the error dialog.
  • Updated console scripts to reflect changes in MaestralMonitor and MaestralApiClient.

v0.2.3 (2019-07-22)

This release mainly fixes crashes of the setup dialog and contains tweaks to the UI.

Changed:

  • Launch into setup dialog if no Dropbox authentication token can be found in keychain.
  • Only log messages of level ERROR or higher to file.
  • Show account email in the system tray menu above space usage.
  • Unified the code for error dialogs and added an app icon to all dialogs.

Fixed:

  • Fixed a bug which could could result in the user being asked to re-authenticate when no Dropbox folder is detected on startup.
  • Fixed a bug which could cause Maestral to crash during the setup dialog, immediately after user authentication.

v0.2.2 (2019-07-19)

Added:

  • Added support for file and folder names with two or more periods.
  • Temporary autosave files that are created by macOS are now detected by their extension and excluded from syncing.
  • More fine-grained errors, subclassed from MaestralApiError.
  • Log all events of level INFO and higher to a rotating file in '~/.maestral/logs'. The log folder size will never exceed 6 MB.

Changed:

  • Better handling when Dropbox resets a cursor: retry any files_list_folder calls and prompt the user to rebuild the index on files_list_folder_longpoll calls.
  • Prepare for G-suite Dropbox integration: G-suite files such as Google docs and sheets will not be downloadable but can only be exported. Maestral will ignore such files.
  • Moved deprecated API calls to v2.
  • Better handling of OSErrors on download.
  • Tweaks to logo.

Fixed:

  • Fixed a bug which would prevent some error dialogs from being shown to the user.
  • Fixed a bug which would cause the setup dialog to crash after linking to Dropbox.

v0.2.1 (2019-07-18)

Changed:

  • Reload all file and folder icons when the system appearance changes: the system may provide different icons (e.g., darker folder icons in "dark mode" on macOS Mojave).
  • Improved notification centre alerts in macOS: when installed as a bundled app, notifications are now properly sent from the Maestral itself, showing the Maestral icon, instead of through apple script.
  • Improved layout of the "Rebuild index" dialog.

Fixed:

  • Fixes a bug which would prevent Meastral from starting on login: the correct startup script is now called.

v0.2.0 (2019-07-17)

Major changes

Added:

  • Proper handling of sync errors. Dropbox API errors are converted to a more informative MaestralApiError and a log of sync errors is kept. This log is cleared as sync errors are resolved. Errors are now handled as follows: - Individual file sync errors are indicated by the system tray icon changing. The can listed by the user through the GUI. - Unexpected errors or major errors which prevent Maestral from functioning (e.g., a corrupted index) trigger an error dialog.

  • Introduced a new panel "View Sync Issues..." to show an overview of sync issues and their cause (invalid file name, insufficient space on Dropbox, etc...)

  • Added a new function to rebuild Maestral's file index which is accessible through the GUI.

  • Added "Recently Changed Files" submenu to the system tray menu. "Recently Changed Files" shows entries for the 30 last-changed files (synced folders only) and navigates to the respective file in the default file manager when an entry is clicked.

Changed:

  • Refactored sync code: Collected all sync functionality in a the new class monitor.UpDownSync. MaestralClient now only handles access to the Dropbox API itself but is no longer concerned with version tracking, etc. MaestralClient no longer catches Dropbox API errors but raises them, augmented with useful information, as MaestralApiError.
  • Moved storage of user authentication tokens from a text file to the system keyring. As a result, authentication tokens will be encrypted on the hard drive and only decrypted when the user logs in. On some systems, this may cause problems in headless mode, when the Gnome keyring is not loaded. The keyring documentation provides help for such cases.

Minor changes

Added:

  • Added progress messages for uploads and downloads, e.g., "Downloading 3/98...". These are output as info messages and shown in the status field of the system tray menu.
  • When unlinking your Dropbox account through the GUI, Maestral is restarted to enter the setup dialog.
  • Refinements for dark interface themes such as Dark Mode in macOS Mojave

Changed:

  • Use native system icons instead of macOS icons to represent files and folders.
  • Some programs save file changes by deleting the old file and creating a new file. This is now correctly combined to a single FileModified event.
  • Some programs create temporary files when saving changes. Those temporary files are deleted again after the save is completed. Those FileCreated and FileDeleted events, which occur in quick succession, are now ignored by Maestral.
  • The following file names have been added to the exclusion list:
    • Files that start with "~$" or ".~"
    • Files that start with "~" and end with ".tmp"
  • Cleaned up some of the config module code: removed Spyder specific functions and obsolete Python 2 compatibility.
  • Adapted code to correctly load resources in case Maestral is packaged as a macOS app bundle.

Fixed:

  • Fixed a bug which may result in a removed folder not being deleted locally if it contains subfolders.
  • Fixed a bug which may result in file modifications not being uploaded, depending on how the changes were saved by the program which was used to edit the file.
  • Fixed a bug which would incorrectly list top level files as folders in the "Exclude folders" dialog.
  • Truncate entries in the "Recently Changed Files" menu if their width exceeds 200 pixels.
  • Fixed a bug which would cause Maestral to crash when clicking "Choose folders to sync..." while Maestral cannot connect to Dropbox servers.

v0.1.2 (2019-06-25)

Added:

  • Added new command line option 'autostart' to automatically start Maestral on login.

Changed:

  • Limit notifications to remote changes only and only notify for changes in folders that currently being synced, unless more than 100 files have changed.
  • Detect colour of system tray and invert icon colour automatically if not on macOS.
  • Shut down immediately and kill threads instead of waiting for timeout.
  • Improve appearance of Settings window in GTK 3 style.

Fixed:

  • Fixed a bug which would cause uploads to fail if they are split into multiple chunks.
  • Fixed a bug that would prevent Maestral from quitting if the setup dialog is aborted.
  • Fixed a bug that would cause Maestral to crash during the setup dialog when switching multiple times between the "Select Folders to Sync" and "Select Dropbox location" panels.
  • Do not upload files that have identical content on Dropbox. Previously: files were always uploaded and conflict checking was left to do by the Dropbox server.

v0.1.1 (2019-06-23)

Fixed:

  • Fixes an issue which would prevent newly created empty folders from being synced.
  • Remove references to conda in startup script.