chore: update version to 1.6.2

This commit is contained in:
Linus Rath
2026-05-06 20:07:36 +02:00
parent 91cf125a5d
commit 178922323d
30 changed files with 89 additions and 43 deletions
+1 -1
View File
@@ -543,7 +543,7 @@ export default function LoginPage() {
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
// Server-list entries always win `allowCustomJmapEndpoint` is only honored
// Server-list entries always win - `allowCustomJmapEndpoint` is only honored
// when the admin hasn't configured a server list.
const effectiveServerUrl = selectedServer?.url
|| (allowCustomJmapEndpoint ? jmapEndpoint : serverUrl);
+3 -3
View File
@@ -740,7 +740,7 @@ export default function Home() {
// System-notification click handler. The push SW navigates the user back
// here with `?email=<id>` (specific email it built the toast from) or
// `?openLatestUnread=1` (generic "New mail" toast happens when the
// `?openLatestUnread=1` (generic "New mail" toast - happens when the
// preview API failed). We resolve those params once after the inbox has
// finished loading and open the right message, then strip the params so a
// refresh doesn't re-open it.
@@ -1610,7 +1610,7 @@ export default function Home() {
const originalEmailId = selectedEmail.id;
// RFC 5322 §3.6.4 threading keep the conversation stitched together (#234).
// RFC 5322 §3.6.4 threading - keep the conversation stitched together (#234).
const threading = computeReplyThreadingHeaders({
messageId: selectedEmail.messageId,
references: selectedEmail.references,
@@ -1674,7 +1674,7 @@ export default function Home() {
}
// Show the list stub immediately so subject/sender render without
// waiting for the body fetch avoids the loading flicker.
// waiting for the body fetch - avoids the loading flicker.
const listEmail = emails.find(e => e.id === email.id);
if (listEmail) {
selectEmail(listEmail);
+2 -2
View File
@@ -491,7 +491,7 @@ export default function SettingsPage() {
// For plugin-setting sub-results, ask the plugins tab to expand the
// matching card so the field becomes part of the DOM. Dispatched here
// (not in the click handler) because PluginsSettings only mounts after
// the tab switches, and its listener registers in its own useEffect
// the tab switches, and its listener registers in its own useEffect -
// child effects run before parent effects, so by the time we get here
// the listener is guaranteed to be in place.
if (pendingHighlight.pluginId) {
@@ -534,7 +534,7 @@ export default function SettingsPage() {
// First attempt next frame so the freshly-mounted tab content is in DOM.
const raf = window.requestAnimationFrame(tryHighlight);
// Do NOT reset pendingHighlight here that would retrigger this effect
// Do NOT reset pendingHighlight here - that would retrigger this effect
// and the cleanup below would strip the class right after we added it.
return () => {
cancelled = true;
+1 -1
View File
@@ -1,6 +1,6 @@
import { redirect } from 'next/navigation';
// Inline panel handles plugin config now see _tabs/plugin-config-panel.tsx.
// Inline panel handles plugin config now - see _tabs/plugin-config-panel.tsx.
// Old deep links land on the plugins tab; the user clicks the gear again.
export default function Page() {
redirect('/admin?tab=plugins');
+1 -1
View File
@@ -43,7 +43,7 @@ export async function GET() {
/**
* POST /api/admin/version
* { action: 'check-now' } force a fresh upstream fetch.
* { action: 'check-now' } - force a fresh upstream fetch.
*/
export async function POST(req: NextRequest) {
try {
+1 -1
View File
@@ -44,7 +44,7 @@ export async function POST(request: NextRequest) {
// caller cannot point this route at internal hosts. We accept the global
// `jmapServerUrl` and any entry from `jmapServers`. When neither matches,
// we fall back to the request URL only if `allowCustomJmapEndpoint` is on
// and even then the URL must resolve to a public address.
// - and even then the URL must resolve to a public address.
await configManager.ensureLoaded();
const configuredServerUrl =
configManager.get<string>('jmapServerUrl', '') ||
+1 -1
View File
@@ -91,7 +91,7 @@ export async function POST(request: NextRequest) {
// Pin the upstream URL to a configured JMAP server. The list of allowed
// servers is `jmapServerUrl` plus any entry from `jmapServers`. Only when
// no server is configured (and the deployment explicitly allows custom
// JMAP endpoints) do we fall back to the user-supplied URL and even then
// JMAP endpoints) do we fall back to the user-supplied URL - and even then
// it must resolve to a public address.
await configManager.ensureLoaded();
const configuredServerUrl =
+1 -1
View File
@@ -163,7 +163,7 @@ export async function GET(request: NextRequest) {
},
});
} catch (error) {
// `fetch failed` from undici is too generic to debug the real reason
// `fetch failed` from undici is too generic to debug - the real reason
// (ENOTFOUND, ECONNREFUSED, TLS error, …) is on `error.cause`.
const err = error as Error & { cause?: { code?: string; message?: string } };
logger.error('push preview failed', {