github cristianadrielbraun/gofer v0.22.0

3 hours ago

This release reworks how contacts are stored and synced, so every contact lives in one known place and changes, deletions included, reach the accounts they belong to. Gofer can now also be shown in Brazilian Portuguese, folders and tags can be put in any order, and moving between Mail, Contacts and Calendar is much faster.

Contacts: main location and Gofer Sync

Contacts now work on two ideas:

  • Main location. Every contact lives in exactly one place: Gofer Local or one of your accounts (on CardDAV and JMAP accounts, a specific address book). That's its main location, shown with the contact's details and picked when the contact is created. Edits are written there, even to an account, and a contact can no longer end up stored nowhere.
  • Gofer Sync. Optionally, a contact can be kept in more places. Gofer Sync adds extra locations, and with it on all of them are equal: a change made in Gofer or in any one of them is copied to the rest.

So the same person in two accounts is two separate contacts, unless Gofer Sync links them. Gofer no longer merges contacts by email address. Mail activity still belongs to the address and shows on every contact that has it, and compose suggestions list each address once.

What follows from that:

  • New contacts are made in a dialog and choose their main location. A contact can be moved to another place (it's written there first, and the old one is deleted only once that worked) or duplicated there as an independent contact.
  • Trash deletes for real. Moving a contact to the Trash deletes its copies on its accounts, after a warning that names them, and Restore writes it back. Restore to… brings it back somewhere else, which becomes its new main location.
  • Deleted outside Gofer. With Gofer Sync off, a contact deleted on its account goes to Gofer's Trash. With Gofer Sync on, it waits in To resolve instead: its sync pauses, it's marked with a warning icon, and you choose to delete it everywhere or keep it without the place that deleted it (picking a new main location if that was it). To resolve has a count in the sidebar, a filter, and a notification like new mail.
  • Gmail and Outlook contact syncs now fetch only what changed, deletions included, like CardDAV and JMAP. JMAP contacts refresh as soon as the server pushes a change.
  • The contacts list updates live wherever contacts change: an edit in another tab, an import, the Trash or any provider's sync.
  • The vCard import stores its contacts in one place, can add Gofer Sync places, shows its progress, and only asks about contacts already in that place. Imported contacts are written to the chosen account. (#87)
  • Contacts can be written to iCloud address books, which refused every write before.
  • Right-click (or ⋯) on an address book or account in the contacts sidebar: new contact or import there, export, sync now, look for address books the server has that Gofer doesn't sync, and stop syncing one (removing its contacts from Gofer or copying them to Gofer Local).

Contacts list

  • Contacts get mail's card layout editor and table columns: name, organization, job title, email, phone, main location, dates, notes, message count and Gofer Sync status, on one or two lines, with icon slots. The avatar can go on either side.
  • Contacts are selected as in the mail list: checkboxes on the rows, Ctrl/Cmd+click, Shift+click and long press. The selection bar has Edit, Move, Duplicate, Email, Export and Trash, folding into a ⋮ menu as room runs out.
  • New Created and Edited dates, as card fields, table columns and a Created sort. New mail no longer moves contacts up the Updated order.
  • Mail counts are exact. They were added to on every re-sync and could be thousands of times too high; they now count each message once and drop when mail is deleted.
  • Filters are multi-select, and the Main location filter and sidebar items list contacts by their main location.
  • Opening another contact keeps its header in place and only loads the body.

Brazilian Portuguese

  • Gofer can now be shown in Brazilian Portuguese, thanks to @altendorfme (#85). It's in Settings › Regional and the pre-sign-in language picker.

Mail and folders

  • Folders and tags can be put in any order by dragging them in the sidebar, special folders and Gmail labels included, and with handles in an account's Folders dialog and in Settings › Unified folders. The order is kept by Gofer for each user and syncs don't change it.
  • With unified folders off or the unified Inbox hidden, Mail opens the first folder in the sidebar instead of the hidden Inbox.
  • A tag in the sidebar lists its mail in every folder of its account, or every account for a unified tag, instead of only the open folder. (#91)
  • Searching another scope than This folder turns the list into results in place, as a typed search does, instead of reloading the mail pane.
  • Replies and forwards keep the original message's images. Remote images in a quote are included when that message's remote content was loaded; otherwise a bar above the editor offers to include them. (#88)
  • IMAP folders whose parent the server doesn't list, such as "INBOX.Projects.Clients" without "INBOX.Projects", are nested under it instead of shown at the top under their full name. (#90)

Calendar

  • Google and Outlook calendars with an event that ends when it starts synced no further. These events are now kept, and can be created and edited on every calendar type. (#89)

Faster navigation

  • Moving between Mail, Contacts and Calendar is faster and snappier. A section you've already opened comes back instantly, with no wait for the server, just as you left it: scroll position, selection and the open message or contact.
  • It stays up to date while you're elsewhere. New mail and contact changes are fetched in the background, so they're already there when you come back.
  • Switching between the Cards and Table views in Contacts is instant too.

Express

  • Contacts get the Express look of the mail list: raised toolbar, blue title bar with the count, highlighted open card.
  • Rows select and deselect at once instead of fading over a fifth of a second.
  • The search's scope and help buttons are raised push buttons like Filters.
  • Small text stays sharp on systems with Wine's Tahoma installed.

Fixes and polish

  • With managed sign-in, JMAP push and Outlook webhooks did nothing, as they couldn't reach the users' own stores. They now work.
  • htmx no longer copies the whole page into the browser's storage on every address change, which filled it after a few.
  • Selected table rows no longer shift their columns by a pixel or two.
  • Account and location pills on cards follow the theme's corner radius.
  • The compose bar for left-out remote images is a single line, and the sidebar's Compose button sits closer to the tabs.

Upgrade notes

  • ⚠️ This release upgrades the database (schemas 137 to 140). You can't go back to an older release afterwards, so back up your data directory first.
  • ⚠️ Contacts are no longer merged by email address. A contact held in several places without Gofer Sync becomes one contact per place, so you may see the same person more than once. Turn on Gofer Sync to link them, or delete the extra ones.
  • ⚠️ Moving a contact to the Trash now deletes it on its accounts too, and edits to a contact living on an account are written there even with Gofer Sync off.
  • Contacts left stored nowhere by the old vCard import get Gofer Local as their main location. They aren't written to an account on their own; use Move to… to put them there.
  • The first start can take a while on large databases while contacts are given a home, split and recounted. Progress is logged as "storage: schema 13x/140 …".
  • Contact mail counts drop to their real numbers.
  • The first Gmail or Outlook contacts sync after upgrading reads every contact again and can't see deletions made before it; later ones can. The same happens when a Google sync token expires after 7 days without a sync.

Gofer remains pre-1.0. I'm actively using and improving it, but please keep backups and test your setup before relying on it for anything critical.

Don't miss a new gofer release

NewReleases is sending notifications on new releases.