diff --git a/docs/CLI.md b/docs/CLI.md index 81f9b2d..2720856 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -83,7 +83,7 @@ commands are for scripts and for cases where the mount is not available. | `pdfs sync limit [--up RATE] [--down RATE]` | Cap bandwidth, for example `500K` or `2M` per second. `0` removes a cap. Without options, prints the current caps. | | `pdfs sync queue` | List changes that have not reached Proton Drive yet. | | `pdfs sync issues` | List queued changes Proton Drive refused or that keep failing, and what to do. | -| `pdfs sync export ID DEST` | Save a copy of a queued upload's content. The upload stays queued. | +| `pdfs sync export ID DEST` | Save a copy of a queued upload's content. `DEST` may be a folder; an existing file is never overwritten. The upload stays queued. | | `pdfs sync discard ID [--yes]` | Drop a queued change and undo it here: a new file or folder goes, anything else goes back to what Proton Drive has. Content not exported first is lost. | | `pdfs sync retry [ID]` | Retry one queued operation, or every failed one. | | `pdfs sync restore [--device UID] [--yes]` | Re-attach this computer's backed-up folders to local folders and download them. `--device` restores another computer's folders. See [RECOVERY.md](RECOVERY.md). | diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index 8817875..20703d6 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -38,7 +38,7 @@ Inside `content/`: > not reached Proton Drive and exists nowhere else. Everything in these directories except the keyring is **decrypted**. See -[ARCHITECTURE.md §8](ARCHITECTURE.md#8-threat-model-what-this-client-writes-to-disk-in-plaintext). +[ARCHITECTURE.md §10](ARCHITECTURE.md#10-threat-model-what-this-client-writes-to-disk-in-plaintext). ## `config.json` @@ -190,13 +190,16 @@ Command-line flags win over the file: `--gtk`, `--dmenu`, `--fzf` and `--menu`. | `PDFS_LOCALEDIR` | app, tray, prompt | Load translations from another directory (development) | | `PDFS_STAND_IN_WIDGETS` | app | `1` uses the libadwaita 1.5 fallback widgets on newer systems (development) | -The acceptance suite has its own `PDFS_ACCEPTANCE_*` variables, listed in [TESTING.md](TESTING.md). +The tests have their own variables (`PDFS_ACCEPTANCE_*`, `PDFS_SIM_*`, `PDFS_MIGRATE_DB`), +listed in [TESTING.md](TESTING.md). ## The systemd service -`proton-drive.service` is a user unit. It restarts the service whenever it exits, restarts it when -it stops answering for two minutes (`WatchdogSec=120`), and caps its memory at 6 GiB. To change -the unit without editing the packaged file, use a drop-in: +`proton-drive.service` is a user unit started with your graphical session +(`WantedBy=graphical-session.target`). It restarts the service whenever it exits, restarts it +when it stops answering for two minutes (`WatchdogSec=120`), throttles it above 2 GiB of memory +(`MemoryHigh`) and stops it at 6 GiB (`MemoryMax`). To change the unit without editing the +packaged file, use a drop-in: ```bash systemctl --user edit proton-drive.service diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index f786d06..e733661 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -113,29 +113,41 @@ pdfs refresh Documents **"Permission denied" when writing** — the item is in a share where you are a viewer, or under `Shared with me/`, which is read-only as a folder. Check your role with `pdfs shared-with-me`. -**A program says "Operation not supported"** — Proton Drive cannot store symbolic links, hard -links, device files or FIFOs. The error is intentional. Use a synced folder for -projects that need them, or exclude those paths. +**`ln` or another program fails with "Operation not permitted"** — Proton Drive cannot store +symbolic links, hard links, device files or FIFOs, so creating one fails at once. The error is +intentional. Use a synced folder for projects that need them, or exclude those paths. ## Uploads and sync -**Something is stuck uploading** — list the queue and retry: +**A change shows here but not on other devices** — changes are recorded on this computer first +and sent from a queue. List what is still waiting, and what needs attention: ```bash pdfs sync queue +pdfs sync issues +``` + +The app shows the same on **Sync → Overview**. A change waits while the service is offline or +sync is paused (`pdfs status`), and backs off after a failure. To retry at once: + +```bash pdfs sync retry # every failed operation pdfs sync retry 42 # one operation ``` -The app shows the same list on **Sync → Overview**. An operation that keeps failing shows its -error there. A change Proton Drive will not take can be dropped instead, which undoes it here; -save a file's content first if you want to keep it: +A change Proton Drive refuses (storage full, access taken away, folder gone) is listed by +`pdfs sync issues` with what to do. It stays queued until you fix the cause or drop it. Dropping +it undoes it here; save a file's content first if you want to keep it: ```bash pdfs sync export 42 ~/Desktop/ pdfs sync discard 42 ``` +If you suspect the local-first behaviour of 3.0.0 itself, `"local_first": false` in `config.json` +makes the Proton Drive folder wait for Proton Drive again while online (see +[CONFIGURATION.md](CONFIGURATION.md#local_first)), and please report the problem. + **A file in a synced folder does not upload** — check that: - it is not matched by `.pdfsignore` or `ignore_patterns`; diff --git a/docs/USER_GUIDE.md b/docs/USER_GUIDE.md index 2d00d0d..7848828 100644 --- a/docs/USER_GUIDE.md +++ b/docs/USER_GUIDE.md @@ -7,6 +7,7 @@ How Proton Drive for Linux works and how to use it day to day. For installation - [My files](#my-files) - [Keeping files on this computer](#keeping-files-on-this-computer) - [Syncing local folders](#syncing-local-folders) +- [Changes waiting for Proton Drive](#changes-waiting-for-proton-drive) - [Conflicts](#conflicts) - [Pausing and limiting sync](#pausing-and-limiting-sync) - [Photos](#photos) @@ -33,7 +34,7 @@ the service to do things over a local socket: Your Drive, your file names and your photos are end-to-end encrypted by Proton. On this computer, the service must decrypt what it shows you, and it keeps a decrypted cache and index on disk. Use -full-disk or home-directory encryption. [ARCHITECTURE.md §8](ARCHITECTURE.md#8-threat-model-what-this-client-writes-to-disk-in-plaintext) +full-disk or home-directory encryption. [ARCHITECTURE.md §10](ARCHITECTURE.md#10-threat-model-what-this-client-writes-to-disk-in-plaintext) lists exactly what is stored. The app uses these words consistently, and so does this guide: @@ -54,9 +55,11 @@ downloads only when a program reads it: - **Reads fetch only what is needed.** A video player that seeks, or a tool that reads a file header, downloads only those parts. Media streams while it plays. -- **Writes are safe offline.** When a program closes a file it wrote, the service stores the new - content on disk and queues the upload. The queue survives network loss, restarts and crashes. - `pdfs sync queue` lists what has not reached Proton Drive yet. +- **Changes work at local speed.** Creating, renaming, moving and deleting files and folders + returns at once, online or offline. When a program closes a file it wrote, the new content is + stored on disk. Every change is queued and sent to Proton Drive in the background; the changes + to one file are sent in the order you made them. The queue survives network loss, restarts and + crashes. See [Changes waiting for Proton Drive](#changes-waiting-for-proton-drive). - **Recently read content is cached** on disk up to the cache size limit (5 GiB by default) and evicted oldest first. - **Items shared with you** appear under `Shared with me/` inside the Proton Drive folder. Shares @@ -143,6 +146,36 @@ places, and both apply: Rules are re-read on every pass. Ignoring never deletes anything: a file that becomes ignored is simply no longer tracked, and its copy on Proton Drive stays. +## Changes waiting for Proton Drive + +A change you made in the Proton Drive folder exists only on this computer until it reaches +Proton Drive. `pdfs status`, the tray and **Sync → Overview** count what is still waiting, and +`pdfs sync queue` lists it. + +Sometimes Proton Drive refuses a change: the storage is full, a share was taken away, the folder +is gone, the folder holds too many items, or Drive does not accept a name. The change then needs +your attention. It shows at once in **Sync → Overview**, in the tray, and in `pdfs sync issues`, +with what it means and what you can do. A file or folder with such a change carries a warning +badge in **Files**; hover it to see why. + +Nothing is deleted. The change stays queued and is retried. You can: + +- **Retry** it now, from the same list or with `pdfs sync retry`, for example after freeing space. +- **Export** a file's content to keep your version (`pdfs sync export `). +- **Discard** the change (`pdfs sync discard `). It is undone here and never sent: a new file + or folder goes away, anything else goes back to what Proton Drive has. Export first if you want + to keep the content. + +Two cases are not refused, and the activity log records both: + +- A new file or folder whose name is already taken on Proton Drive by something this computer had + not seen yet lands under a `(sync-conflict …)` name, as described below. +- A new file whose folder was deleted on another device meanwhile lands at the top of My files, + so its content is not lost. + +Before you shut down a computer for good, check that nothing is waiting: see +[RECOVERY.md](RECOVERY.md#lost-with-the-machine). + ## Conflicts When the same file changed on this computer and somewhere else since the last sync, neither side @@ -166,11 +199,6 @@ The version you do not keep goes to the Trash, so a wrong choice can be undone. reading files keeps working. `pdfs sync resume` continues. - **Limit bandwidth** under **Preferences → General → Network**, or with `pdfs sync limit --up 2M --down 10M`. `0` removes a limit. -- **Retry** a failed upload from **Sync → Overview**, or with `pdfs sync retry`. -- **Discard** a change Proton Drive refused from the same list, or with `pdfs sync discard`: it is - undone here and never sent. Export a file first to keep your version. -- A file or folder with a change Proton Drive refused carries a warning badge in **Files**; hover - it to see why. ## Photos