Added
-
Server diagnostics. Settings → Sync now has a Diagnose button on each account, and a failed connection in the Add/Edit Calendar dialog offers to run it. Instead of one "this may be a CORS issue" catch-all, Calino probes the server check by check — is it reachable, does it allow cross-origin requests, are the credentials accepted, does it speak CalDAV, does it allow the methods and headers sync needs, can it list a collection, does it answer REPORT queries, is the ETag readable — and tells you exactly which header or method to add. There's a Copy report button for pasting into a bug report; it keeps your server's hostname and drops your username, password and proxy URL.
Two things worth knowing. Browsers deliberately hide a server's
Access-Control-Allow-*headers from JavaScript, so some verdicts are marked inferred: deduced from which requests survived rather than read off the wire. AddingDAV, Allowto your server'sAccess-Control-Expose-Headerslets Calino read those directly, and the Android app has no CORS layer at all, so everything there is observed. Separately, there's an opt-in write test that creates one temporary event and deletes it again — it's the only way to be certain the ETag comes back on writes, so it sits behind its own button.Diagnostics account for URLs that aren't a single calendar. Some servers redirect discovery past the CalDAV endpoint and on to their web interface — Radicale sends
/.well-known/caldavto/and then to/.web— so if the discovered address turns out not to speak DAV, Calino falls back to the address you entered rather than reporting the web page's refusal as a rejected password. And pointing diagnostics at a principal or home set rather than one calendar skips the write test with an explanation, instead of failing on a request that URL could never have accepted.
Changed
-
A plain-http server now says why it can't be reached. Calino is served over https, and browsers refuse to let an https page talk to an http one — so a DAV server on plain http inside a LAN failed with the same "couldn't reach the server" as one that was switched off. Diagnostics now names it, and says that the Android app isn't affected.
-
Clearer errors when adding a server. A failed connection used to show the underlying exception spliced into a sentence — "Connection failed: Failed to fetch. This may be a CORS issue" — which named CORS even when the real cause was a typo in the address or a server that wasn't running, and showed "Server returned status 401" rather than saying the password was refused. Both dialogs now explain the failure instead, and offer to run diagnostics. The first-run setup page had its own separate copy of the connection test, with no hints and no diagnostics; it now uses the same one as everything else.
-
The rest of the calendar actions explain their failures too. Syncing from the sidebar, renaming a calendar, changing its colour, deleting it, creating one on the server and subscribing to a webcal feed all used to put the underlying exception straight into the toast — most often a bare "Failed to fetch". They now say what went wrong, in the same words as everything else.
-
Clearer sync error messages. The inline error in Settings and the toast that accompanies it were written separately and had drifted apart, so the same failure could be described two different ways — and one branch could never fire at all. They now share one classifier. Timeouts, server-side 5xx errors, and "this changed on another device" conflicts previously fell through as raw technical text and now get their own explanation, and the CORS message points at the new diagnostics rather than only dumping a block of headers.
Fixed
-
A recurring task edited to a specific time no longer appears twice (#96, reported by @MaliciousPoro). Taking one occurrence of an all-day recurring task, switching its due date from "date only" to "date and time" and saving it as "this task only" left two rows on that day — one with the new time, one without. They were the same task, so editing either changed the timed one and deleting either removed both. A single occurrence that's been detached from its series is filed under the slot it replaces, and that slot belongs to the series, not to the edited copy; the edited copy was being filed under its own new time instead, so the original slot was never hidden. Saving as "this and following" or "all tasks" was unaffected.
-
Opening Calino always starts on the current month. The month you were last browsing was saved and restored, so a new tab could open on June because that's where the previous session left off. The view you were in still comes from your default-view setting; only the date is reset.
-
Contacts reached through a CORS proxy no longer lose track of where an entry lives. The same double-prefixed address fixed for calendars in 0.27.2 was still present on the contacts side.
Full Changelog: v0.27.2...v0.27.3