Remember an added address book when the server will not
"You are not allowed to modify this address book." That is Stalwart's answer to a sharee subscribing to a book shared read-only, and it is a fair one: `isSubscribed` lives on the collection rather than on the reader, so adding one is a write to the *owner's* account. The identical write on a shared calendar is accepted. The difference is the server's. So the flag is still asked for first -- a preference the server holds is one every client agrees about -- and when it is refused the answer goes in the reader's own synced settings instead, as `addedShares`, keyed by account and collection. Either record counts as added, and the rule has a test of its own because three components ask the question and they must not drift apart. Two things about how this hid. The refusal arrives as a *successful* response with the id in `notUpdated`, so the version that ignored it saw nothing wrong and the button simply did nothing -- fixed a commit ago, and it is what turned "the + does nothing in Firefox" into a sentence from the server. And it cannot be seen from the owner's account at all, where the write succeeds: it took two browsers signed in as two accounts to find, which is why it survived every check made from one. The mock refuses the same write for the same reason. One that accepted it would have gone on agreeing with the belief that shipped. Verified against it: adding the shared book is refused by the server, recorded in settings, and the book moves to "Shared with me" with its contacts reaching the To field; removing undoes all three; and it survives a full page reload, which is the point of putting it where the settings live rather than in this tab.
This commit is contained in:
@@ -33,6 +33,21 @@ export interface Settings {
|
||||
showAvatars: boolean;
|
||||
pageSize: number;
|
||||
markReadDelay: number; // seconds; -1 = never auto
|
||||
/**
|
||||
* Shared calendars and address books the reader has added, as
|
||||
* `accountId:collectionId`.
|
||||
*
|
||||
* JMAP keeps this on the collection itself, in `isSubscribed`, and that is
|
||||
* still tried first -- a preference the server holds is one every client
|
||||
* sees. But subscribing writes to the *owner's* account, and Stalwart 0.16.19
|
||||
* refuses that for an address book shared read-only: "You are not allowed to
|
||||
* modify this address book." It accepts the same write on a shared calendar,
|
||||
* which is the inconsistency this list exists to paper over.
|
||||
*
|
||||
* So where the server will not remember, ihasmail does, in the settings that
|
||||
* already follow the reader between devices.
|
||||
*/
|
||||
addedShares: string[];
|
||||
imagePolicy: ImagePolicy;
|
||||
/** Let messages follow the app's light/dark theme instead of always sitting on white. */
|
||||
themeMessageBody: boolean;
|
||||
@@ -128,6 +143,7 @@ export const DEFAULT_SETTINGS: Settings = {
|
||||
showAvatars: true,
|
||||
pageSize: 50,
|
||||
markReadDelay: 0,
|
||||
addedShares: [],
|
||||
imagePolicy: "ask",
|
||||
themeMessageBody: false,
|
||||
undoSendSeconds: 8,
|
||||
|
||||
Reference in New Issue
Block a user