@bobfrankston/rmfmail 1.2.322 → 1.2.323

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.commitmsg CHANGED
@@ -1,27 +1,17 @@
1
- Trust a sender via the relay that signs for it ("groundnews.email via amazonses.com")
1
+ New event: the calendar picker is always there, and lists every calendar you can write to
2
2
 
3
- Bob 2026-09-10, Ground News: "another valid site. How do I approve it?"
4
- The banner read "This claims to be a sender you trust, but nothing proves
5
- it is"groundnews.email is on his list, but Ground News sends through
6
- Amazon SES, the message is signed only as amazonses.com, and the domain
7
- publishes no DMARC record, so the sender can never be proved and the list
8
- was ignored, correctly, with no way forward. Trusting amazonses.com as an
9
- intermediary was not offered (no Sender: header) and would be too broad.
3
+ Bob 2026-09-11: "the add appointment box should give me a choice of
4
+ calendars." v1.2.318 hid the picker whenever Google reported fewer than
5
+ two writable calendars and his four are one owned calendar plus two
6
+ holiday feeds and a shared one, so the row never appeared and read as a
7
+ missing feature.
10
8
 
11
- New allowlist.jsonc `trustedSendersVia`: "‹sender domain› via ‹relay
12
- domain›" pairs. An entry counts only when the From domain matches AND the
13
- named relay's DKIM signature verified at the receiving server a relay
14
- like SES lets a customer send only From identities it has verified, so
15
- the pair is evidence a forger's own relay account cannot supply, and a
16
- message without the relay's signature matches nothing. Never silences
17
- forgery evidence. The trusted-but-unproved caution now names the relay
18
- that signed and the action; the banner offers "Trust ‹sender› via
19
- ‹relay›". trustSenderOrDomain type "via", TRUST_LIST_KEYS carries the
20
- key for desktop and Android; getAllowlist returns it.
21
-
22
- Tests: Ground News headers; pair silences only with that relay's
23
- signature (not unsigned, not another relay, not another From through the
24
- same relay); a phishing listing stays red. Verified on the live message:
25
- caution with the offer before, silent after. mailx-types 0.1.97,
26
- mailx-settings 0.1.89, mailx-store 0.1.124, mailx-service 0.1.38,
27
- mailx-store-web 0.1.117.
9
+ The row is now always shown. With one writable calendar the dropdown is
10
+ disabled and its tooltip says that this is the only calendar Google lets
11
+ you add events to, that the others are read-only, and where to change
12
+ that (Google Calendar, then Refresh). getCalendars returns EVERY
13
+ calendar with `selected` as a flag instead of a filter: the sidebar
14
+ still lists the selected ones, but a calendar the reader owns and has
15
+ unticked in Google is still one a new event can go to. The daemon logs
16
+ each calendar's role and selection at enumeration so "why only one" can
17
+ be answered from the log. mailx-types 0.1.98, mailx-service 0.1.39.
@@ -68,3 +68,4 @@ tests/trust.test.ts, .commitmsg, TODO.md C165, root version 1.2.311. Then rebuil
68
68
  - v1.2.321: signature block uses a 3cm <hr> instead of '-- ' (compose.ts sigBlock).
69
69
  - Bob confirmed 2026-09-10: 'quill worked' (v1.2.320 placeCaretAfterLink).
70
70
  - v1.2.322: trustedSendersVia ('sender via relay' pairs) — Ground News via amazonses.com. Banner offers 'Trust ‹sender› via ‹relay›' on the trusted-but-unproved caution; counts only when the relay DKIM-signed. 45/45 trust tests.
71
+ - v1.2.323: New event picker always shown (disabled + explanatory tooltip when only one writable calendar); getCalendars returns all calendars with selected flag; daemon logs roles.
@@ -6791,7 +6791,7 @@ async function renderCalendarList() {
6791
6791
  if (list.length === 0) {
6792
6792
  host.innerHTML = "";
6793
6793
  } else {
6794
- const sorted = [...list].sort((a, b) => (a.primary ? 0 : 1) - (b.primary ? 0 : 1) || a.name.localeCompare(b.name));
6794
+ const sorted = list.filter((c) => c.selected !== false).sort((a, b) => (a.primary ? 0 : 1) - (b.primary ? 0 : 1) || a.name.localeCompare(b.name));
6795
6795
  host.innerHTML = sorted.map((c) => `<label class="cal-side-cal-row" title="${escapeHtml6(c.name)} \u2014 untick to hide its events in this list. Which calendars are listed is set in Google Calendar: the ones selected there appear; use Refresh after changing it.">
6796
6796
  <input type="checkbox" class="cal-side-cal-check" data-cal-id="${escapeHtml6(c.id)}" ${hiddenCalendars.has(c.id) ? "" : "checked"}>
6797
6797
  ${calIconHtml(c)}
@@ -7245,7 +7245,11 @@ function openNewEventDialog() {
7245
7245
  opt.selected = true;
7246
7246
  calSelect.append(opt);
7247
7247
  }
7248
- calRow.hidden = writable.length < 2;
7248
+ calRow.hidden = false;
7249
+ calSelect.disabled = writable.length < 2;
7250
+ if (writable.length < 2) {
7251
+ calRow.title = writable.length ? `${writable[0].name} is the only calendar Google says you can add events to. The others are read-only (holidays, or shared without edit rights). To add or share a calendar, do that in Google Calendar and press Refresh.` : "Google reported no calendar you can add events to.";
7252
+ }
7249
7253
  };
7250
7254
  if (calendarList.length)
7251
7255
  fillCalendars(calendarList);