Describe saved connections consistently

This commit is contained in:
vorotamoroz
2026-07-24 16:15:02 +00:00
parent 0e5475b7e3
commit 658ad6dfe4
6 changed files with 22 additions and 7 deletions
@@ -65,7 +65,7 @@ The special meaning would duplicate `activeConfigurationId`, make a user-visible
### Add profile naming and full list editing to onboarding
That would make the first-run path longer and duplicate the established Remote Databases interface. Automatic descriptive names and later renaming keep this change limited to data integrity and consistent selection.
That would make the first-run path longer and duplicate the established Saved connections interface. Automatic descriptive names and later renaming keep this change limited to data integrity and consistent selection.
### Replace the compatibility fields immediately
@@ -81,7 +81,7 @@ The real-Obsidian onboarding E2E owns the invitation, dialogue presentation, saf
## Consequences
- Manual onboarding and the Remote Databases pane share one Commonlib profile contract.
- Manual onboarding and the Saved connections list share one Commonlib profile contract.
- Existing profiles survive reconfiguration, and a newly configured connection becomes explicitly selectable.
- Modern imports retain user-assigned profile identity and names.
- Legacy Setup URIs continue to work through an isolated compatibility boundary.
+3 -3
View File
@@ -169,9 +169,9 @@ Show verbose log. Please enable when you report the logs
## 3. Remote Configuration
### 1. Remote Server
### 1. Connection settings
Self-hosted LiveSync supports multiple remote connection profiles under **Remote Server** -> **Remote Databases**. This allows you to save and switch between multiple databases or bucket configurations in a single vault.
Self-hosted LiveSync stores multiple remote connection profiles under **Connection settings** **Saved connections**. Each profile represents a CouchDB database, an Object Storage connection, or a P2P configuration, and several profiles can be kept in one Vault.
Each profile has an opaque identifier and a presentation name. The name does not need to be unique and is not used to select the profile. The main remote and the P2P remote are selected independently, so code and settings imports must preserve both selections rather than relying on a special identifier such as `default`.
@@ -185,7 +185,7 @@ Each profile has an opaque identifier and a presentation name. The name does not
Setting key: remoteType
The active remote server type. This is automatically projected to the legacy configuration when you activate a connection profile.
The active connection type. This is automatically projected to the legacy configuration when you activate a connection profile.
### 2. Notification
@@ -66,6 +66,8 @@ export const liveSyncProvisionalEnglishMessages = {
"This file has ${COUNT} unresolved versions. They will be reviewed one pair at a time.",
"Sync now": "Sync now",
"Apply pending changes now": "Apply pending changes now",
"Connection settings": "Connection settings",
"Saved connections": "Saved connections",
} as const;
export type LiveSyncProvisionalMessageKey = keyof typeof liveSyncProvisionalEnglishMessages;
+2
View File
@@ -30,6 +30,8 @@ describe("LiveSync-owned translation catalogue", () => {
it("uses LiveSync-owned provisional English without extending Commonlib's message contract", () => {
expect($msg("This file has unresolved conflicts.")).toBe("This file has unresolved conflicts.");
expect($msg("More actions for ${DEVICE}", { DEVICE: "phone" })).toBe("More actions for phone");
expect($msg("Connection settings")).toBe("Connection settings");
expect($msg("Saved connections")).toBe("Saved connections");
expect(
$msg("This file has ${COUNT} unresolved versions. They will be reviewed one pair at a time.", {
COUNT: "3",
@@ -133,8 +133,8 @@ export function paneRemoteConfig(
}
{
// TODO: very WIP. need to refactor the UI.
void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleRemoteServer"), () => {}).then((paneEl) => {
const actions = new Setting(paneEl).setName("Remote Databases");
void addPanel(paneEl, $msg("Connection settings"), () => {}).then((paneEl) => {
const actions = new Setting(paneEl).setName($msg("Saved connections"));
// actions.addButton((button) =>
// button
// .setButtonText("Change Remote and Setup")
+11
View File
@@ -214,6 +214,17 @@ async function verifyEffectiveSettings(): Promise<void> {
throw new Error("The Change Log still contains a compatibility or release-note acknowledgement control.");
}
await liveSyncSettings.locator('.sls-setting-menu-btn[title="Remote Configuration"]').click();
const connectionPanel = liveSyncSettings
.locator("h4.sls-setting-panel-title")
.filter({ hasText: "Connection settings" })
.locator("..");
await connectionPanel.waitFor({ state: "visible", timeout: uiTimeoutMs });
await connectionPanel.getByText("Saved connections", { exact: true }).waitFor({
state: "visible",
timeout: uiTimeoutMs,
});
await liveSyncSettings.locator('.sls-setting-menu-btn[title="Sync Settings"]').click();
const deletionPanel = liveSyncSettings
.locator("h4.sls-setting-panel-title")