Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
8ed89f5
Vibe coded the gui updates...and it seems to look nice at least
MitchellThompkins Feb 10, 2026
fe2c7ea
Vibe coded gui, and changed default folder to something more sensible
MitchellThompkins Feb 14, 2026
dd6ab7c
lint
MitchellThompkins Feb 14, 2026
105c30e
lint
MitchellThompkins Feb 14, 2026
87eb6b4
update gui
MitchellThompkins Feb 14, 2026
42f4eed
resized window
MitchellThompkins Feb 14, 2026
4396416
looks better
MitchellThompkins Feb 14, 2026
b7943d9
log file is now copyable
MitchellThompkins Feb 14, 2026
ea32942
resize window
MitchellThompkins Feb 14, 2026
f10d785
image update
MitchellThompkins Feb 14, 2026
a55a6bd
lint
MitchellThompkins Feb 14, 2026
c7cbdf7
update readme
MitchellThompkins Feb 14, 2026
9ece3af
fix failing unit tests on ubuntu
MitchellThompkins Feb 14, 2026
bd72bb0
Revert "fix failing unit tests on ubuntu"
MitchellThompkins Feb 14, 2026
0967847
Merge branch 'main' into new-gui
MitchellThompkins Feb 15, 2026
fec8b9f
I do not expect this to do much
MitchellThompkins Feb 15, 2026
48c97e6
enforce sizing
MitchellThompkins Feb 15, 2026
c4367d8
version update
MitchellThompkins Feb 15, 2026
5651344
use more agressive dir creation
MitchellThompkins Feb 15, 2026
9c4fbb8
Minor version rev. Stop building app. Update readme.
MitchellThompkins Feb 15, 2026
96d0e96
vibe coding windows support
MitchellThompkins Feb 15, 2026
558e0ef
lint
MitchellThompkins Feb 15, 2026
7127726
try to fix unit tests on windows
MitchellThompkins Feb 15, 2026
33d2ee6
I'm not sure this matters...
MitchellThompkins Feb 15, 2026
e8e3211
lint
MitchellThompkins Feb 15, 2026
fcfb984
try to get tests to pass on windows
MitchellThompkins Feb 15, 2026
504b3c2
add note for windows folks
MitchellThompkins Feb 15, 2026
263a556
remove python-rclone dep
MitchellThompkins Feb 15, 2026
ebd206c
lint
MitchellThompkins Feb 15, 2026
c12e7be
lint
MitchellThompkins Feb 15, 2026
ac759aa
remove gui support
MitchellThompkins Feb 15, 2026
33bbfdc
Merge branch 'update-python-rclone-dep' into new-gui
MitchellThompkins Feb 15, 2026
3fa2994
added back in gui flag
MitchellThompkins Feb 15, 2026
2cdb0fb
lint
MitchellThompkins Feb 15, 2026
42ee573
minor gui update
MitchellThompkins Feb 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ exclude =
dist/
.git/
.venv/
build/
24 changes: 0 additions & 24 deletions .github/workflows/build_app.yml

This file was deleted.

32 changes: 17 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,8 @@ decrypt, just in case something goes wrong!**
where `4567asd8fasdf67asdf` is the encrypted part, the filename must be
renamed to exclude the `path_to_encypted_file_` portion. Otherwise rclone will
complain about invalid encryption names.
* Windows is _not_ currently supported, although it probably would not take very
much work to get it there. I do not have ready access to a windows environment
on which to test.
* I'd love to make the GUI look more modern, but most solutions involve a style
which seems incompatible with
[tkinterdnd2](https://github.com/Eliav2/tkinterdnd2) which provides the drag
and drop feature.
* Windows is supported thanks to the cross-platform nature of Flet.
* The GUI has been modernized using [Flet](https://flet.dev/), providing a cleaner look and better cross-platform support.

## Installation
```
Expand All @@ -43,11 +38,11 @@ pip3 install rclone-decrypt

## Requirements
### General
* `rclone` must be installed and in `$PATH`
* `rclone` must be installed and available in your system's PATH.
* **Windows Users:** Download `rclone` from [rclone.org](https://rclone.org/downloads/) and extract it. Then, add the directory containing `rclone.exe` to your System Environment Variables (PATH).

### Python environment
* `Python >= 3.8.1`
* `Python-tk` must be installed if using the GUI
* `Python >= 3.10`

### Executable
**UNDER DEVELOPMENT** An OSX `.app` is generated but is currently untested.
Expand All @@ -68,19 +63,26 @@ Example usages:
If the python package is installed directly then the GUI can be invoked from the
command line, as shown below. Otherwise the packaged binary can be downloaded
and executed directly.
* Files can be dropped directly into the big white box.
* As files are dropped, if no output directory has been provided though the file
dialog, an output directory called 'out' will be created at the same directory
level as the last dropped file to be decrypted.
* A default location for `rclone.conf` is provided, others can be browsed for.
* Use the **Add Files** or **Add Folder** buttons to select items for decryption.
* Selected items will be listed in the main area. You can remove individual items using the "X" button.
* By default, decrypted files are saved to `~/Downloads/rclone-decrypted`.
* A default location for `rclone.conf` is provided automatically based on your OS, but you can browse for others.
```
rclone-decrypt --gui
```

#### Troubleshooting (Linux)
If you encounter an error like `libmpv.so.1: cannot open shared object file` on Linux (e.g., Ubuntu 24.04), you may need to install `libmpv2` and create a symlink:
```bash
sudo apt update && sudo apt install libmpv2
sudo ln -s /usr/lib/x86_64-linux-gnu/libmpv.so.2 /usr/lib/x86_64-linux-gnu/libmpv.so.1
```

![rclone_example](docs/imgs/rclone_gui.png)

## Development
```
python3 -m venv .venv
source .venv/bin/activate
poetry install
poetry run pytest
Expand Down
Binary file modified docs/imgs/rclone_gui.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1,587 changes: 1,507 additions & 80 deletions poetry.lock

Large diffs are not rendered by default.

7 changes: 3 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "rclone_decrypt"
version = "0.1.6"
version = "0.2.0"
description = "Wrapper around rclone to decrypt files encrypted with rclone"
authors = ["Mitchell Thompkins <mitchell.thompkins@gmail.com>"]
license = "MIT"
Expand All @@ -11,11 +11,10 @@ repository = "https://github.com/MitchellThompkins/rclone-decrypt"
readme = "README.md"

[tool.poetry.dependencies]
python = ">=3.10"
python = ">=3.10,<4.0"
click = "^8.1.3"
python-rclone = "^0.0.2"
python-statemachine = "^2.0.0"
tkinterdnd2 = "^0.3.0"
flet = "0.21.2"

[tool.poetry.group.dev.dependencies]
pytest = "^9.0.2"
Expand Down
2 changes: 1 addition & 1 deletion src/rclone_decrypt/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.1.6"
__version__ = "0.2.0"
36 changes: 20 additions & 16 deletions src/rclone_decrypt/cli.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import click

import rclone_decrypt.decrypt as decrypt
import rclone_decrypt.gui as GUI
import rclone_decrypt.gui as gui


help_str_config = f"""config file. default config file is:
Expand All @@ -15,30 +15,34 @@
"--config",
help=help_str_config,
default=decrypt.default_rclone_conf_dir,
required=True,
required=False,
)
@click.option("--files", help="dir or file to decrypt", default=None)
@click.option(
"--output_dir",
help=help_str_output,
default=decrypt.default_output_dir,
)
@click.option("--gui", help="start the GUI", is_flag=True, default=False)
@click.option(
"--gui_debug", help="print debug messages", is_flag=True, default=False
"--gui",
"use_gui",
is_flag=True,
help="Launch the GUI",
default=False,
)
def cli(config, files, output_dir, gui, gui_debug):
if gui is True:
GUI.start_gui(gui_debug)
else:
try:
if files is None:
raise ValueError("files cannot be None")
else:
decrypt.decrypt(files, config, output_dir)

except (ValueError, decrypt.RCloneExecutableError) as err:
decrypt.print_error(err)
def cli(config, files, output_dir, use_gui):
if use_gui:
gui.start_gui()
return

try:
if files is None:
raise ValueError("files cannot be None")
else:
decrypt.decrypt(files, config, output_dir)

except (ValueError, decrypt.RCloneExecutableError) as err:
decrypt.print_error(err)


if __name__ == "__main__":
Expand Down
Loading