Expand description
A device joining your other devices through your Nextcloud’s own sign-in
(docs/database.md, “Joining through your Nextcloud’s sign-in”): nothing to
type but the passphrase, no sync app needed. Offered by the Porch’s card
on a device that does not share yet (“Join your other devices”) and in
Settings ▸ Your folder and sharing (qml/JoinPanel.qml), on a phone and
on a computer alike.
- Signed in (
sign_in): the server’s sign-in page opens in the browser (sioul_sync::loginflow; Murena’s, or another Nextcloud by its address); the app password it gives goes to the keyring at once (loginflow::keep), never to a file nor a log. - The folder found there (
remote::seek): Documents/Sioul, Sioul, or a folder in Documents; proposed, or a place you type; none found, every place looked at: you may start sharing there, as before; the look incomplete (a slow or failing server): look again, or type its place, never a new sharing offered. - Joined (
join): the passphrase typed once, checked against the seal (twice for a new sharing); Sioul keeps its own copy of the folder in step with that login (remote::begin_signed_in); a first exchange runs at once and brings the shared settings, accounts and hours. A sharing started there instead is said as such, never as joined. - The contacts and calendars (
bind_agenda), once the first exchange brought everything (complete_since), else at a later one (agenda_later): an account of yours on that server (its address’s origin) with that login, come with the settings or here already, is used, given the homes found there and the app password when it has none and it opens it there; else one is made, its homes found on that server alone. - Said (
Stand): who this device shares with now, what came, and what still needs a sign-in here; on a phone, whether it replaces another phone (replacing).
Cancel stops it at any step before the join: an app password already given
is given back to the server (loginflow::revoke) and forgotten here.
Structs§
- Asked 🔒
- The phones asked about already, by id, whatever the answer: never asked
again. This device’s own (
share/replacing.toml), never shared. - Pending 🔒
- The contacts and calendars left for a later exchange, the first one not
having brought everything: what to decide them with, this device’s own
(
share/agenda-pending.toml), never shared, never a secret (the app password stays in the keyring,loginflow::kept). - Replacing 🔒
- A phone this one may replace, asked once (
replacing): its id, and the question in words. - Running 🔒
RUNNINGlet go when its thread ends, however it ends (a panic too): the next sign-in is never refused for one that is over.- Stand 🔒
- Where a sign-in and its joining stand, for the window (
status).
Enums§
- Agenda 🔒
- What becomes of the contacts and calendars of the server signed in to.
- Bound 🔒
- What became of the contacts and calendars of the server signed in to (
bind_agenda).
Constants§
- ASK_
AFTER 🔒 - How long another phone says nothing, as this device sees it, before this
one asks whether it replaces it (
to_ask): a day, as a computer offers “Forget it now” (health::FORGET_NOW_AFTER). A phone in use goes silent for hours at times (no network, switched off, Android deferring its steps), and a Yes about one would leave the doses without its word (the review of the join, M1); judged by this device’s sight of its entry and its own last word, the later, never by its clock alone.
Statics§
- GRANT 🔒
- The sign-in’s grant, between the sign-in and the join: in memory only (zeroed when dropped), its app password in the keyring besides.
- PAGE 🔒
- The page of the sign-in under way, to open again: its address holds the sign-in’s own key, never logged.
- RUNNING 🔒
- A sign-in, or a join, running: one at a time.
- STAND 🔒
- STOP 🔒
- Cancel pressed.
Functions§
- account_
host 🔒 - A server’s name as an account says it: its
host, else its address’s. - account_
label 🔒 - An account, as the join’s lines name it: its address, or its contacts and calendars’ server.
- add_
device 🔒 - What a new device needs, in a few lines, for Settings ▸ Your folder and
sharing ▸ “Add a device” on a computer that shares: where to find the
join on it; the server to sign in to and the folder’s place there, when
the folder is known on a Nextcloud (
found: its name and the place); else the same folder, carried by a sync app; and the passphrase, the one you chose, never shown. - agenda_
for 🔒 - The decision, from your accounts as they are after the first exchange (those another device brought among them): the server as the sign-in named it, the sign-in’s login, its user as the homes name it, and where its homes are.
- agenda_
id 🔒 - The id the sharing’s state names for the account of that server and
login: yours when there is one, else the one it would be made under.
A name only: the folder is kept with the sign-in’s own login (
State::user). - agenda_
later 🔒 - After an exchange of the window’s: the contacts and calendars left for
later (
defer_agenda) decided once a whole look and an exchange went through, with the app password the keyring keeps; said in the status line. Nothing while none is left. Off the window’s thread. - asked 🔒
- asked_
path 🔒 - bind_
agenda 🔒 - The contacts and calendars of the server signed in to, once the first exchange brought your accounts: yours used, given the homes found there when it has none here (its first sync then never looks for them elsewhere with the app password: L1) and the app password when it has none here and opens it there; else one made and synced. None when nothing could be found there.
- cancel 🔒
- Cancel: the sign-in stops where it is; an app password given already is given back to its server and forgotten here. Nothing joined is undone.
- client 🔒
- What Sioul says it is on the server’s sign-in page and in its list of devices and sessions: “Sioul (Android)”.
- complete_
since 🔒 - Whether a whole look through the server went through since
since(Unix seconds), every other device’s records, entries and claims brought into this device’s copy, nothing left there to bring, and an exchange read them since: then the settings and the accounts your other devices share are all here, and the contacts and calendars may be decided (M2). - decoded 🔒
- A path’s part percent-decoded (“jane%40example.org” → “jane@example.org”).
- decoded_
path 🔒 - A folder’s place among a server’s files, decoded part by part (“Documents/Mes%20dossiers” → “Documents/Mes dossiers”).
- defer_
agenda 🔒 - device_
label 🔒 - A device as the join’s lines name it: a computer by its name, a phone by its model.
- done 🔒
- The result read, or a failed sign-in left: nothing said any more.
- give_
back 🔒 - An app password not used after all: given back to its server, forgotten here.
- grant 🔒
- join 🔒
- Joins the sharing through
placeon the server signed in to, with the passphrase (typed once, checked against the folder’s seal; twice,again, for a new sharing there), off the window’s thread; then a first exchange at once, the contacts and calendars of that server, and what came, said. The grant is kept while the passphrase is wrong, for another try. - joined 🔒
- The join itself, on its thread: what it said, and what still needs a sign-in here.
- latest_
of 🔒 - The latest time an entry says, by its device’s clock.
- let_go 🔒
- Sharing stopped where it was joined through the server’s sign-in
(
State::user): its app password forgotten here, and given back to the server unless one of your accounts here uses the same (its contacts and calendars,bind_agenda). Off the window’s thread. - line_of 🔒
- A binding’s line, said with the rest: “use this sign-in” only where they do (the review of the join, L4); none for an account that keeps its own password, and none for one that needs one (its line under “Still to sign in”).
- listed 🔒
- Words joined as a list: “a, b and c”.
- look_
again 🔒 - “Look again”, the look having found nothing it could trust (
unchecked) or not the place you expected: the server looked through again with the sign-in held, off the window’s thread. - looked 🔒
- What the look found, said (
Stand): places found, proposed; none found, every place looked at, a new sharing may start there; the look incomplete, or not possible at all (a slow server, a failing listing): “could not look”, look again or type a place, never a new sharing offered where the folder may be (the review of the join, M3). - matching 🔒
- Your contacts-and-calendars account for that server and login, if there
is one (switched off ones too): its address on the server’s origin
(
on_server: scheme, host and port, never the host’s name alone, which Accounts keeps without its port), with the same login (case aside) or the same user in its address (user_of). Google’s are never. - moment 🔒
- A moment, said shortly: “14:05” today, “Fri 2 Oct” before.
- new_id 🔒
- The id a new account for that server would take: “murena-agenda”, as
Accounts names one (
<server's first name>-agenda), free among yours. - on_
server 🔒 - Whether an account’s address is on
server’s origin (scheme, host and port), so that the sign-in’s app password may go to it: an account without an address, or one whose host is the server’s but whose address points elsewhere, never (the review of the join, L2). - open_
again 🔒 - The sign-in’s page opened again in the browser (closed by mistake).
- pending_
path 🔒 - refusal_
words 🔒 - Why a sign-in did not go, in words.
- replace 🔒
- The answer: yes, this phone’s entry says it replaces that one (sealed,
for every device:
devices::Entry::replaces), forgotten here at once, and an exchange tells the others; no, a second phone, nothing changes. Asked once either way. Nothing of the other phone is deleted. - replacing 🔒
- “Does this phone replace GS290, silent since …?”, asked once on a phone that shares while another phone shares too (the owner’s, 16 October 2026: the old phone dead, its battery gone, never to say Stop sharing). None elsewhere, and once answered.
- said_
joined 🔒 - What the join brought, in sentences: who this device shares with now;
the settings, the accounts and the hours that came (
changed: the settings’ file changed with the first exchange). - set 🔒
- sign_in 🔒
- Signs in to
typed(“murena”, or another Nextcloud’s address), off the window’s thread: its page opened in the browser (open_url), the poll asked until you signed in there, Cancel or twenty minutes; then the sharing folder looked for there.join_changedsays each step. - stand 🔒
- state_
complete 🔒 complete_since’s reading of the state: Sioul keeping the folder itself, a whole step gone through at or aftersince, no error said since, nothing too large left on the server.- status 🔒
- Where things stand, as JSON (
Stand). - still_
to_ 🔒sign_ in - The accounts that came, or were here, and need a sign-in on this device: their passwords never travel. One line each, saying where.
- to_ask 🔒
- Of the other phones in the folder, the one to ask about, if any: on a
phone sharing, one that has not stopped sharing, nor said anything for
ASK_AFTERas this device sees it (quiet_since: the later of when this device saw its entry change and its own last word; none known: not asked), nor been asked about (Asked), nor been replaced or forgotten here; the one heard of last. - told 🔒
- The window told: it reads
statusagain. - user_of 🔒
- The user of a Nextcloud’s address, as its paths name it
(
…/remote.php/dav/calendars/<user>/,…/addressbooks/users/<user>/,…/principals/users/<user>/,…/files/<user>/), decoded.