File states
Every desktop integration asks the engine the same question over the status socket, so you can inspect it yourself and any file manager’s plugin reads exactly the same thing — one answer from the engine, rather than a status copied onto the file, where it would travel with it.
wusel ipc stat /Photos/Birdie.jpg
The values
| Value | Meaning |
|---|---|
|
No local copy yet; opening it fetches from the server (and caches). |
|
Opened before: a whole copy is in the LRU cache, but evictable. |
|
Kept offline on purpose (pinned, or under a pinned dir/root), and the copy is here. |
|
Pinned, but nothing is here yet: opening it still costs the network. |
|
Pinned, but the copy we keep is out of date: the server has moved on. |
|
Open with a local edit that has not been flushed yet. |
|
A flushed change on its way to the server — queued or in transfer. |
|
A flushed change whose upload failed for good. The bytes are safe locally; it will not retry on its own. |
uploading and sync-error take precedence over every other value, including
modified for a file that is still open.
Separately from the state, the answer says whether the entry is the root of a Team or Group folder.
A pin is a promise, and these three values report how it stands: kept, not yet
delivered, no longer current. The distinction is not academic — a directory pin
covers files the server grows afterwards, and an account-wide one covers
everything that will ever exist in it, so a pin routinely runs ahead of the
bytes. Drawing those as pinned tells someone about to board a train that a
file is on their disk when it is not.
Staleness is shown for pinned files only. For an ordinary cached file it just means the next read goes live, which is what a VFS does all day; a pin promises the file is there when the server is not, so an outdated copy is a promise half-kept and worth showing before someone opens it.
Beside it sits an explicit Update now action — in the context menu when a
pinned-stale or pinned-pending file is selected, and as wusel update <path>
on the command line. One action for both, because it is one repair: fetch what
the pin promised and the disk does not have, whether the copy here is outdated
or absent. It fetches in place: deliberately not "unpin, then pin again",
which would drop the eviction marker first, so a re-download that failed would
leave the file outdated and unprotected.
Whether the user has to ask at all is [sync] refresh_pinned — manual (emblem
only), ask (one notification when the backlog grows, naming the first file and
counting the rest) or auto (fetch by itself, but only over an unmetered
connection).
See the policy for what happens
when the connection’s cost cannot be established.
The engine guarantees this read is local and network-free, so a file manager may query it for every visible file. Directories report a value only when pinned.
The state describes where a file is, not what it is, so it is only
meaningful inside the mount — which is why it is asked of the engine rather
than stored on the file. A copy made outside ~/Wusel is an ordinary file and
carries nothing: there is no attribute to travel with it, and the socket answers
for paths under a mount it serves and no others.
|
The emblems on Linux
On Linux file managers every state gets a distinct, always-visible emblem — the OneDrive model, rather than marking only the exceptions. Current Adwaita has pruned its stock emblem set, so the Nautilus extension ships its own icons, installed into the hicolor theme:
| State | Emblem |
|---|---|
|
A cloud — lives on the server, not downloaded. |
|
A cloud with a check — downloaded now, but still evictable. |
|
A green check — kept offline, always available. |
|
A cloud with a green down-arrow — kept offline, still to be fetched. |
|
A green check with a warning — kept offline, but out of date. |
|
A white up-arrow on amber — a local edit not yet flushed. |
|
A white up-arrow over a baseline, on blue — on its way to the server. |
|
A white exclamation mark on red — the upload failed and needs attention. |
A Team or Group folder root additionally carries a blue emblem with two people, next to its state emblem.
The emblems on macOS
macOS mounts through Apple’s File Provider, and there the system draws the emblems, not Wusel. The always-visible scheme above does not apply: the Finder distinguishes only four cases, and one of them is no icon at all.
| Finder shows | Meaning |
|---|---|
A cloud with a down-arrow |
Not downloaded — online-only. Opening it fetches from the server. |
A filled checkmark badge |
Pinned “keep downloaded” — always available offline. |
A warning badge |
Pinned, but the kept copy is out of date (“Offline Copy Outdated”). |
No icon |
Downloaded and present on this Mac. Nothing is wrong. |
The last row is the one that surprises people, so it is worth stating plainly: a file with no icon is not broken and is not “missing its cloud symbol” — it means the file’s contents are already on this Mac. That happens as soon as you create the file here, open it, or the Finder reaches into it to build a thumbnail or let Spotlight index it. Apple shows the cloud only while a file is still dataless (no local bytes); once the bytes are here the icon disappears. Every File Provider works this way — iCloud Drive, OneDrive, Dropbox — and an app may not paint its own persistent overlay on a downloaded item, so Wusel cannot make macOS match the Linux scheme above. There is no Team or Group folder badge on macOS.
To send a file back to online-only — free the space and bring the cloud icon
back — right-click it and choose Remove Download. macOS also evicts on its
own when the disk runs low. The engine’s own view is always exact regardless of
what the Finder draws: wusel ipc stat "/OpenProject/…/file.pdf" reports the
values listed above (see Diagnose a problem).
The Finder actions
Right-clicking an item in the mount offers Wusel’s own actions, the same set the
Linux file-manager menu carries. macOS gives an extension no way to group them
under an app-named submenu, so they land in Finder’s shared Quick Actions and
each name is prefixed with Wusel: to tell them apart:
-
Make Available Offline / Remove Offline Availability — the pin toggle (
wusel pin/unpin). -
Update Now — fetch what a pin promised and the disk does not have (a
pinned-stale/pinned-pendingitem;wusel update). -
Open in Nextcloud / Open Folder in Nextcloud — open the item in the web interface, or its parent folder with the item highlighted.
-
Copy Internal Link — copy the item’s permanent Nextcloud link.
The menu offers only what fits the selection: Make Available Offline or Remove Offline Availability according to the item’s state, Update Now only where a kept copy is out of date or missing, the web actions for a single item, and Open Folder in Nextcloud only for a file. Because a File Provider extension is sandboxed away from the browser and the clipboard, the web actions are carried out by the Wusel agent, not the extension.