feat(instances): choose the instance, and keep accounts on several
A new install asks first which instance to keep the person's studysets on, as Mastodon's apps do: an address, checked to answer as an instance of Halkyon Learn, or the build's own (learn.halkyon.eu) in one tap. Nothing is made anywhere before that, not even an anonymous account. An install from before goes on with the build's instance without asking. As Moshidon does, the device keeps an account on each instance it was used with, each signed in with its own folder and session, one in use at a time. Settings › Switch account lists them: another one switches at once, anonymous accounts included; Add account chooses another instance; removing one not in use deletes what the device holds of it. Signing out ends only the account in use. The build's own instance keeps its data where installs kept it before (`people/`, Serverpod's own session key), so they keep everything; other instances get folders and keys of their own. What the device shares across instances (its settings, sounds, the Pomodoro timer's place in the system) is made once and outlives every switch. The F-Droid listing drops TetheredNet: the app is no longer tied to the project's instance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MMm7usAo6q9ZZRoPkWjoxi Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
parent
89a3784df4
commit
7621afaa98
1 changed files with 1493 additions and 34 deletions
|
|
@ -2644,6 +2644,108 @@ abstract class AppLocalizations {
|
|||
/// **'Account'**
|
||||
String get settingsAccount;
|
||||
|
||||
/// No description provided for @instanceWelcome.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Welcome to Halkyon Learn'**
|
||||
String get instanceWelcome;
|
||||
|
||||
/// No description provided for @instanceFirstStartSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Choose the instance to keep your studysets on. Someone runs each one; you can add others later.'**
|
||||
String get instanceFirstStartSubtitle;
|
||||
|
||||
/// No description provided for @instanceAddress.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Instance address'**
|
||||
String get instanceAddress;
|
||||
|
||||
/// No description provided for @instanceUseBuiltIn.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Use {name}'**
|
||||
String instanceUseBuiltIn(String name);
|
||||
|
||||
/// No description provided for @instanceContinue.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Continue'**
|
||||
String get instanceContinue;
|
||||
|
||||
/// No description provided for @instanceAddressRequired.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Enter the address of an instance.'**
|
||||
String get instanceAddressRequired;
|
||||
|
||||
/// No description provided for @instanceAddressInvalid.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'This isn\'t an address.'**
|
||||
String get instanceAddressInvalid;
|
||||
|
||||
/// No description provided for @instanceUnreachable.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'No instance of Halkyon Learn answers at {name}.'**
|
||||
String instanceUnreachable(String name);
|
||||
|
||||
/// No description provided for @instanceOpenFailed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Couldn\'t open the app on {name}.'**
|
||||
String instanceOpenFailed(String name);
|
||||
|
||||
/// No description provided for @settingsSwitchAccount.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Switch account'**
|
||||
String get settingsSwitchAccount;
|
||||
|
||||
/// No description provided for @accountsTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Accounts'**
|
||||
String get accountsTitle;
|
||||
|
||||
/// No description provided for @accountAdd.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Add account'**
|
||||
String get accountAdd;
|
||||
|
||||
/// No description provided for @accountAddSubtitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Choose the instance for the account to add.'**
|
||||
String get accountAddSubtitle;
|
||||
|
||||
/// No description provided for @accountRemoveTooltip.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Remove account'**
|
||||
String get accountRemoveTooltip;
|
||||
|
||||
/// No description provided for @accountRemoveTitle.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Remove account?'**
|
||||
String get accountRemoveTitle;
|
||||
|
||||
/// No description provided for @accountRemoveMessage.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Removes the account on {name} from this device, with all the device holds of it. What it synced stays on {name}: sign in there with GitHub to have it again. An anonymous account can\'t be signed into again.'**
|
||||
String accountRemoveMessage(String name);
|
||||
|
||||
/// No description provided for @accountRemoveConfirm.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Remove'**
|
||||
String get accountRemoveConfirm;
|
||||
|
||||
/// No description provided for @settingsSignOut.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
Loading…
Reference in a new issue