mountlet 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. mountlet-0.2.2/CHANGELOG.md +68 -0
  2. {mountlet-0.2.0/src/mountlet.egg-info → mountlet-0.2.2}/PKG-INFO +56 -31
  3. {mountlet-0.2.0 → mountlet-0.2.2}/README.md +55 -30
  4. {mountlet-0.2.0 → mountlet-0.2.2}/SECURITY.md +5 -4
  5. {mountlet-0.2.0 → mountlet-0.2.2}/docs/README.md +24 -0
  6. {mountlet-0.2.0 → mountlet-0.2.2}/docs/RELEASE.md +2 -1
  7. {mountlet-0.2.0 → mountlet-0.2.2}/examples/rclone.conf.sample +3 -0
  8. {mountlet-0.2.0 → mountlet-0.2.2}/pyproject.toml +4 -1
  9. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/__init__.py +1 -1
  10. mountlet-0.2.2/src/mountlet/assets/icon.png +0 -0
  11. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/config_tools/setup_wizard.py +0 -2
  12. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/core.py +266 -21
  13. mountlet-0.2.2/src/mountlet/rclone_wizard.py +294 -0
  14. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/settings.py +133 -1
  15. mountlet-0.2.2/src/mountlet/tray.py +4771 -0
  16. {mountlet-0.2.0 → mountlet-0.2.2/src/mountlet.egg-info}/PKG-INFO +56 -31
  17. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet.egg-info/SOURCES.txt +3 -0
  18. {mountlet-0.2.0 → mountlet-0.2.2}/tests/test_cli.py +1 -1
  19. mountlet-0.2.2/tests/test_core.py +507 -0
  20. mountlet-0.2.2/tests/test_rclone_wizard.py +213 -0
  21. {mountlet-0.2.0 → mountlet-0.2.2}/tests/test_settings.py +88 -0
  22. mountlet-0.2.2/tests/test_tray.py +2092 -0
  23. mountlet-0.2.0/CHANGELOG.md +0 -30
  24. mountlet-0.2.0/src/mountlet/tray.py +0 -732
  25. mountlet-0.2.0/tests/test_core.py +0 -163
  26. mountlet-0.2.0/tests/test_tray.py +0 -579
  27. {mountlet-0.2.0 → mountlet-0.2.2}/LICENSE +0 -0
  28. {mountlet-0.2.0 → mountlet-0.2.2}/MANIFEST.in +0 -0
  29. {mountlet-0.2.0 → mountlet-0.2.2}/setup.cfg +0 -0
  30. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/cli.py +0 -0
  31. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/config_tools/export_config.py +0 -0
  32. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/config_tools/import_config.py +0 -0
  33. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/config_tools/path_config.py +0 -0
  34. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/config_tools/reconnect_config.py +0 -0
  35. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/config_tools/shared.py +0 -0
  36. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/config_tools/verify_config.py +0 -0
  37. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet/tui.py +0 -0
  38. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet.egg-info/dependency_links.txt +0 -0
  39. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet.egg-info/entry_points.txt +0 -0
  40. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet.egg-info/requires.txt +0 -0
  41. {mountlet-0.2.0 → mountlet-0.2.2}/src/mountlet.egg-info/top_level.txt +0 -0
  42. {mountlet-0.2.0 → mountlet-0.2.2}/tests/test_config_tools.py +0 -0
  43. {mountlet-0.2.0 → mountlet-0.2.2}/tests/test_setup_wizard.py +0 -0
  44. {mountlet-0.2.0 → mountlet-0.2.2}/tests/test_tui.py +0 -0
@@ -0,0 +1,68 @@
1
+ # Changelog
2
+
3
+ ## 0.2.2 - 2026-06-19
4
+
5
+ - Added a guided new-remote wizard for major cloud providers, with browser and
6
+ token-based rclone authentication flows, provider-specific fields, official
7
+ setup links, connection validation, and cleanup of incomplete remotes.
8
+ - Added remote ordering controls, saved one-time sorting by registration time,
9
+ name, provider, and storage usage, and per-remote move buttons.
10
+ - Added provider-colored labels and browser shortcuts, compact mount controls,
11
+ dynamic window sizing, and responsive background mount, unmount, usage, and
12
+ folder-opening operations.
13
+ - Added frameless main and configuration windows, an in-window keep-above
14
+ control, and reliable current-desktop tray behavior on Plasma X11. Pinning and
15
+ desktop movement now use EWMH requests without remapping the Qt window.
16
+ - Added provider status colors in the new-remote wizard to distinguish locally
17
+ tested providers from untested setup paths without adding extra label text.
18
+ - Added a dedicated Koofr setup path using rclone's Koofr backend instead of
19
+ routing Koofr through WebDAV.
20
+ - Added provider-specific S3 setup hints and links for Cloudflare R2, MinIO,
21
+ Amazon S3, Wasabi, and other S3-compatible providers.
22
+ - Added post-registration and post-mount connection checks so failed setup does
23
+ not quietly leave unusable remotes in the app list.
24
+ - Improved remote naming, provider suffixes, credential reuse, OAuth port
25
+ handling, wizard cancellation, application shutdown, and child-window
26
+ lifecycle behavior.
27
+ - Documented locally tested providers and untested provider paths.
28
+
29
+ ## 0.2.1 - 2026-06-02
30
+
31
+ - Added a cropped transparent Mountlet icon for the tray and window.
32
+ - Improved tray-window behavior so left-click refocuses the existing window and first show positions it near the tray icon.
33
+ - Improved GUI quit handling by stopping refresh timers, hiding UI surfaces, and ignoring late background UI updates during shutdown.
34
+ - Reordered app and mount settings by likely everyday use.
35
+ - Renamed the per-remote mount path field to "Local folder name" to clarify that it changes the local mount folder, not the cloud remote.
36
+ - Improved advanced rclone controls with checkboxes and combo boxes for boolean and limited-choice fields.
37
+ - Added GUI menu options to open app, mount, rclone, and FUSE config files.
38
+
39
+ ## 0.2.0 - 2026-06-02
40
+
41
+ - Renamed the project, import package, installed command, and user config directory to Mountlet.
42
+ - Added an optional PySide6 desktop tray preview with mount, unmount, restart-mount, and open-folder actions.
43
+ - Split tray interactions between hover status, a left-click Mountlet window, and right-click app actions.
44
+ - Added compact remote strips with visual and numerical storage usage, mount toggles, and click-to-open behavior.
45
+ - Added separate GUI settings dialogs for app-level and per-remote Mountlet config fields, with raw file access for technical users.
46
+ - Added app-level and per-remote Mountlet config files.
47
+ - Open-folder actions can use current-desktop Dolphin windows on X11 when available, with fallback open strategies elsewhere.
48
+
49
+ ## 0.1.1 - 2026-05-31
50
+
51
+ - Improved setup guidance when `rclone` is not installed yet.
52
+ - Honored `RCLONE_CONFIG` consistently in setup and config helper commands.
53
+
54
+ ## 0.1.0 - 2026-05-31
55
+
56
+ Initial public CLI release.
57
+
58
+ - Single public command: `mountlet`.
59
+ - Fast readiness check before opening the menu.
60
+ - Guided setup flow with `mountlet setup`.
61
+ - Optional rclone connection flow with `mountlet setup --configure-rclone`.
62
+ - Interactive menu for mounting, unmounting, refreshing, and verifying remotes.
63
+ - Subcommands for setup, path inspection, verification, reconnect, import, and export.
64
+ - User-specific app directories for config, state, and cache.
65
+ - Import/export helpers for rclone configuration bundles.
66
+ - `--version` / `-V` version output.
67
+ - CI workflow for tests and package build.
68
+ - Exported bundles are documented as sensitive credential backups.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mountlet
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: CLI and tray tools for mounting rclone remotes
5
5
  Author: Eric Holt
6
6
  License-Expression: MIT
@@ -31,9 +31,9 @@ Dynamic: license-file
31
31
 
32
32
  # Mountlet
33
33
 
34
- Mountlet is a terminal app for mounting and unmounting `rclone`
35
- remotes from a simple menu. It uses your existing `rclone` configuration and
36
- does not store cloud credentials inside the application install directory.
34
+ Mountlet is a desktop tray and terminal tool for mounting and unmounting
35
+ `rclone` remotes. It uses your existing `rclone` configuration and does not
36
+ store cloud credentials inside the application install directory.
37
37
 
38
38
  ## How It Works
39
39
 
@@ -130,12 +130,52 @@ pipx inject mountlet PySide6
130
130
  The tray app uses the tray icon this way:
131
131
 
132
132
  - Hover shows a short mounted/unmounted summary.
133
- - Left-click shows each remote with mount, unmount, restart-mount, and open-folder actions.
134
- - Right-click shows app-level actions such as mount all, unmount all, update status, and quit.
133
+ - Left-click opens or closes the Mountlet window. If it is behind another
134
+ window, the first click brings it forward. On Plasma X11, opening it from a
135
+ different desktop moves it to the current desktop.
136
+ - Right-click shows app-level actions such as mount all, unmount all, update
137
+ status, app settings, raw app, mount, rclone, and FUSE config files, and
138
+ quit.
139
+
140
+ The Mountlet window provides:
141
+
142
+ - Compact remote strips with storage usage and mount-state toggles.
143
+ - Click-to-open folders, provider website shortcuts, and per-remote settings.
144
+ - A guided `+` flow for adding supported cloud remotes through rclone.
145
+ - Sorting by registration time, name, provider, total size, used space, or
146
+ remaining space, with manual move controls for final adjustments.
147
+ - A pin control that keeps the window above other windows without tying it to
148
+ one desktop.
135
149
 
136
150
  If your desktop session does not expose a system tray, use the terminal menu
137
151
  instead.
138
152
 
153
+ ## Provider Support
154
+
155
+ Mountlet uses `rclone` under the hood, so provider support depends on both
156
+ Mountlet's setup UI and rclone's backend behavior.
157
+
158
+ Locally tested with the current GUI flow and/or active local remotes:
159
+
160
+ - Google Drive
161
+ - Dropbox
162
+ - Microsoft OneDrive
163
+ - Box
164
+ - pCloud
165
+ - Cloudflare R2 through the S3-compatible wizard
166
+ - Koofr through rclone's dedicated Koofr backend
167
+
168
+ Available but not yet locally tested:
169
+
170
+ - Amazon S3
171
+ - MinIO and other S3-compatible providers
172
+ - Wasabi
173
+ - WebDAV providers such as Nextcloud, ownCloud, SharePoint, and Fastmail Files
174
+
175
+ In the setup window, tested options are shown in white and untested options in
176
+ yellow. Untested providers may work through rclone, but expect rough edges until
177
+ the wizard path is tested with a real account.
178
+
139
179
  ## Extra Commands
140
180
 
141
181
  These are useful for backup, troubleshooting, or moving to another computer:
@@ -186,31 +226,16 @@ export MOUNTLET_MOUNT_BASE=/path/to/mounts
186
226
 
187
227
  ### App Settings
188
228
 
189
- Use `config.toml` for app-wide behavior:
190
-
191
- ```toml
192
- [app]
193
- mount_base = ""
194
- auto_mount = false
195
- auto_mount_delay = 2.0
196
-
197
- [tray]
198
- open_folder_behavior = "current_desktop"
199
- focus_file_manager = true
200
- ```
201
-
202
- Use `mounts.toml` for per-remote behavior. Remote names must match the names in
203
- `rclone`.
229
+ In the tray app, use `Config` > `App settings` to edit app-wide behavior. Use
230
+ the gear button on a remote strip to edit only that mount. The settings
231
+ windows show the available fields with text boxes, checkboxes, and dropdowns,
232
+ then write `config.toml` and `mounts.toml` for you.
204
233
 
205
- ```toml
206
- [remotes."Work__Drive"]
207
- auto_mount = true
208
- mount_path = "~/cloud_mounts/drive/Work"
209
- mount_flags = "--read-only --dir-cache-time 10m"
210
- ```
234
+ Technical users can still open the raw text files from the app-level config
235
+ menu.
211
236
 
212
- Keep cloud account details in `rclone.conf`; use these files only for Mountlet
213
- behavior.
237
+ Keep cloud account details in `rclone.conf`; Mountlet settings only control
238
+ local app and mount behavior.
214
239
 
215
240
  ## Credentials
216
241
 
@@ -224,8 +249,8 @@ bundles as sensitive files.
224
249
 
225
250
  ## Status
226
251
 
227
- The current public target is Linux CLI use. The desktop tray is an early preview
228
- for the next product layer.
252
+ The current public target is Linux CLI and desktop tray use. The tray is still
253
+ early, but it is the main direction for the app.
229
254
 
230
255
  See the [changelog](https://github.com/eric-holt/mountlet/blob/main/CHANGELOG.md)
231
256
  for version history.
@@ -1,8 +1,8 @@
1
1
  # Mountlet
2
2
 
3
- Mountlet is a terminal app for mounting and unmounting `rclone`
4
- remotes from a simple menu. It uses your existing `rclone` configuration and
5
- does not store cloud credentials inside the application install directory.
3
+ Mountlet is a desktop tray and terminal tool for mounting and unmounting
4
+ `rclone` remotes. It uses your existing `rclone` configuration and does not
5
+ store cloud credentials inside the application install directory.
6
6
 
7
7
  ## How It Works
8
8
 
@@ -99,12 +99,52 @@ pipx inject mountlet PySide6
99
99
  The tray app uses the tray icon this way:
100
100
 
101
101
  - Hover shows a short mounted/unmounted summary.
102
- - Left-click shows each remote with mount, unmount, restart-mount, and open-folder actions.
103
- - Right-click shows app-level actions such as mount all, unmount all, update status, and quit.
102
+ - Left-click opens or closes the Mountlet window. If it is behind another
103
+ window, the first click brings it forward. On Plasma X11, opening it from a
104
+ different desktop moves it to the current desktop.
105
+ - Right-click shows app-level actions such as mount all, unmount all, update
106
+ status, app settings, raw app, mount, rclone, and FUSE config files, and
107
+ quit.
108
+
109
+ The Mountlet window provides:
110
+
111
+ - Compact remote strips with storage usage and mount-state toggles.
112
+ - Click-to-open folders, provider website shortcuts, and per-remote settings.
113
+ - A guided `+` flow for adding supported cloud remotes through rclone.
114
+ - Sorting by registration time, name, provider, total size, used space, or
115
+ remaining space, with manual move controls for final adjustments.
116
+ - A pin control that keeps the window above other windows without tying it to
117
+ one desktop.
104
118
 
105
119
  If your desktop session does not expose a system tray, use the terminal menu
106
120
  instead.
107
121
 
122
+ ## Provider Support
123
+
124
+ Mountlet uses `rclone` under the hood, so provider support depends on both
125
+ Mountlet's setup UI and rclone's backend behavior.
126
+
127
+ Locally tested with the current GUI flow and/or active local remotes:
128
+
129
+ - Google Drive
130
+ - Dropbox
131
+ - Microsoft OneDrive
132
+ - Box
133
+ - pCloud
134
+ - Cloudflare R2 through the S3-compatible wizard
135
+ - Koofr through rclone's dedicated Koofr backend
136
+
137
+ Available but not yet locally tested:
138
+
139
+ - Amazon S3
140
+ - MinIO and other S3-compatible providers
141
+ - Wasabi
142
+ - WebDAV providers such as Nextcloud, ownCloud, SharePoint, and Fastmail Files
143
+
144
+ In the setup window, tested options are shown in white and untested options in
145
+ yellow. Untested providers may work through rclone, but expect rough edges until
146
+ the wizard path is tested with a real account.
147
+
108
148
  ## Extra Commands
109
149
 
110
150
  These are useful for backup, troubleshooting, or moving to another computer:
@@ -155,31 +195,16 @@ export MOUNTLET_MOUNT_BASE=/path/to/mounts
155
195
 
156
196
  ### App Settings
157
197
 
158
- Use `config.toml` for app-wide behavior:
159
-
160
- ```toml
161
- [app]
162
- mount_base = ""
163
- auto_mount = false
164
- auto_mount_delay = 2.0
165
-
166
- [tray]
167
- open_folder_behavior = "current_desktop"
168
- focus_file_manager = true
169
- ```
170
-
171
- Use `mounts.toml` for per-remote behavior. Remote names must match the names in
172
- `rclone`.
198
+ In the tray app, use `Config` > `App settings` to edit app-wide behavior. Use
199
+ the gear button on a remote strip to edit only that mount. The settings
200
+ windows show the available fields with text boxes, checkboxes, and dropdowns,
201
+ then write `config.toml` and `mounts.toml` for you.
173
202
 
174
- ```toml
175
- [remotes."Work__Drive"]
176
- auto_mount = true
177
- mount_path = "~/cloud_mounts/drive/Work"
178
- mount_flags = "--read-only --dir-cache-time 10m"
179
- ```
203
+ Technical users can still open the raw text files from the app-level config
204
+ menu.
180
205
 
181
- Keep cloud account details in `rclone.conf`; use these files only for Mountlet
182
- behavior.
206
+ Keep cloud account details in `rclone.conf`; Mountlet settings only control
207
+ local app and mount behavior.
183
208
 
184
209
  ## Credentials
185
210
 
@@ -193,8 +218,8 @@ bundles as sensitive files.
193
218
 
194
219
  ## Status
195
220
 
196
- The current public target is Linux CLI use. The desktop tray is an early preview
197
- for the next product layer.
221
+ The current public target is Linux CLI and desktop tray use. The tray is still
222
+ early, but it is the main direction for the app.
198
223
 
199
224
  See the [changelog](https://github.com/eric-holt/mountlet/blob/main/CHANGELOG.md)
200
225
  for version history.
@@ -6,9 +6,9 @@ remote paths that identify private infrastructure.
6
6
 
7
7
  ## Reporting Issues
8
8
 
9
- This repository does not have a public security contact configured yet. Before
10
- public release, enable GitHub private vulnerability reporting or add a dedicated
11
- security contact.
9
+ GitHub private vulnerability reporting is enabled for this repository. Use the
10
+ repository's private vulnerability reporting flow for security issues so they
11
+ can be reviewed before public disclosure.
12
12
 
13
13
  ## Handling Local Secrets
14
14
 
@@ -23,4 +23,5 @@ security contact.
23
23
 
24
24
  ## Supported Versions
25
25
 
26
- No public stable version is supported yet.
26
+ Mountlet is still pre-1.0. Security fixes are intended for the latest public
27
+ 0.2.x release line.
@@ -51,9 +51,33 @@ ignored by git and must not be part of the installed-user workflow.
51
51
  - Build a wheel and install it in a clean virtual environment.
52
52
  - Test on a fresh Ubuntu installation with `rclone` and `fuse3`.
53
53
  - Verify import/export flows with non-sensitive sample configs.
54
+ - Update the provider support table in the root README after checking real
55
+ setup paths.
54
56
  - Confirm the built wheel and source distribution do not include local secrets.
55
57
  - Follow [RELEASE.md](RELEASE.md) when merging `wip` to `main`, tagging, and publishing.
56
58
 
59
+ ## Provider Test Status
60
+
61
+ The 0.2.2 release documents provider status based on local remotes in
62
+ `~/.config/rclone/rclone.conf` and recent GUI setup work.
63
+
64
+ Locally tested:
65
+
66
+ - Google Drive
67
+ - Dropbox
68
+ - Microsoft OneDrive
69
+ - Box
70
+ - pCloud
71
+ - Cloudflare R2
72
+ - Koofr
73
+
74
+ Available but untested:
75
+
76
+ - Amazon S3
77
+ - MinIO and other S3-compatible storage
78
+ - Wasabi
79
+ - WebDAV providers including Nextcloud, ownCloud, SharePoint, and Fastmail Files
80
+
57
81
  ## Release Strategy
58
82
 
59
83
  - Keep the CLI/TUI core MIT licensed.
@@ -17,7 +17,7 @@ Create release branches only if a maintained older line needs fixes while
17
17
  Run these from `wip` first:
18
18
 
19
19
  ```bash
20
- VERSION=0.2.0
20
+ VERSION=0.2.2
21
21
  python -m unittest discover -s tests
22
22
  python -m compileall -q src tests
23
23
  python -m pip wheel . -w /tmp/mountlet-release --no-deps --no-build-isolation
@@ -26,6 +26,7 @@ python -m pip wheel . -w /tmp/mountlet-release --no-deps --no-build-isolation
26
26
  Confirm:
27
27
 
28
28
  - `README.md` describes the user flow.
29
+ - `README.md` documents the tested and untested provider setup paths.
29
30
  - `CHANGELOG.md` has a section for the version being released.
30
31
  - `pyproject.toml` and `src/mountlet/__init__.py` have the same version.
31
32
  - `SECURITY.md` has an active security reporting path or GitHub private vulnerability reporting is enabled.
@@ -5,3 +5,6 @@
5
5
  # client_id = your-client-id.apps.googleusercontent.com
6
6
  # client_secret = your-client-secret
7
7
  # token = {"access_token":"..."}
8
+ #
9
+ # Provider setup paths marked tested in the Mountlet UI are based on local
10
+ # maintainer testing. Do not use this file for real credentials.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mountlet"
7
- version = "0.2.0"
7
+ version = "0.2.2"
8
8
  description = "CLI and tray tools for mounting rclone remotes"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -47,6 +47,9 @@ mountlet = "mountlet.cli:main"
47
47
  [tool.setuptools.packages.find]
48
48
  where = ["src"]
49
49
 
50
+ [tool.setuptools.package-data]
51
+ mountlet = ["assets/*.png"]
52
+
50
53
  [tool.ruff]
51
54
  line-length = 120
52
55
  target-version = "py310"
@@ -1,5 +1,5 @@
1
1
  """Mountlet package."""
2
2
 
3
- __version__ = "0.2.0"
3
+ __version__ = "0.2.2"
4
4
 
5
5
  __all__ = ["__version__"]
@@ -3,7 +3,6 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import argparse
6
- import os
7
6
  import platform
8
7
  import shutil
9
8
  import subprocess
@@ -14,7 +13,6 @@ from .. import core
14
13
  from ..settings import ensure_default_config_files
15
14
  from .shared import (
16
15
  app_cache_dir,
17
- app_config_dir,
18
16
  app_config_file,
19
17
  app_mounts_file,
20
18
  app_state_dir,