Plainva 0.5.1: ein Login, ein Ort für die Leisten, und ein Sync, der wieder ankommt
Bei 0.5.0 ging es um den Weg hinein — Notizen aus Notion, Evernote, Keep importieren. Es war der größte Release, den Plainva bisher hatte, und er hat die App leicht außer Atem zurückgelassen: viele Funktionen, die einzeln liefen und wenig voneinander wussten.
0.5.1 sind drei Tage, in denen ich genau das aufgeräumt habe.
Drei Zustimmungen für ein Konto
Etwas, das ich falsch gebaut habe und erst gemerkt habe, als jemand ein Microsoft-Konto richtig verbunden hat.
Plainva konnte Deine Dateien mit OneDrive synchronisieren, Deinen Outlook-Kalender lesen und Dein Outlook-Postfach lesen. Drei nützliche Dinge. Drei getrennte OAuth-Abläufe, drei Zustimmungsseiten im Browser, drei Refresh-Tokens — für ein Konto. Wolltest Du alle drei, fragte Microsoft Dich dreimal, ob Plainva in Deinem Namen handeln darf, und Plainva legte drei getrennte Antworten ab.
Das ist kein Sicherheitsmerkmal. Das bin ich, der jeden Dienst gebaut hat, als er ihn brauchte, und nie einen Schritt zurückgetreten ist.
Es gibt jetzt einen Token-Broker pro Cloud-Konto. Ein Microsoft-Konto stimmt einmal zu, mit der Vereinigung der benötigten Berechtigungen, und Dateien, Kalender und Mail beziehen ihre Tokens aus dieser einen Anmeldung. Der Broker ist zweckgebunden — ein Mail-Token kann nicht an den Datei-Sync gereicht werden — und er serialisiert die Erneuerungen, damit zwei Dienste, die im selben Moment erneuern, sich nicht gegenseitig den Token zerstören. Bei Google ist es dasselbe: eine Zustimmung deckt Dateien und Kalender ab.
Für App-Passwörter gilt derselbe Gedanke. Wenn Du das App-Passwort eines Nextcloud- oder Fastmail-Kontos wechselst, trägst Du es jetzt einmal unter „Zugangsdaten” ein, und jeder Dienst dieses Kontos übernimmt es.
Bestehende Konten werden zu nichts gezwungen. Sie bekommen ein Angebot — ein Login für alle Dienste — und wenn Du es ignorierst, läuft der bisherige Weg pro Dienst unverändert weiter.
Ein Ort für jede Leiste
Plainva hat vier Leisten: die Aktionsleiste ganz links, die beiden Seitenleisten und auf dem Telefon die Navigationsleiste. Mit der Zeit hat jede ihre eigene Art bekommen, konfiguriert zu werden — und zwei von ihnen hatten gar keine.
Sie teilen sich jetzt ein Modell und einen Einstellungsbereich. Jede Leiste ist eine Liste: sichtbar über der Linie, ausgeblendet darunter, ziehen zum Sortieren. Gespeichert wird pro Vault, mit Vererbung von einem globalen Standard — was mehr bedeutet, als es klingt, denn der Vault ist das Einzige, was zwischen Deinen Geräten reist.
In der Oberfläche selbst gibt es keine Zieh-Griffe. Du hältst einen Eintrag, und er hebt sich; ein Rechtsklick bietet dieselben Aktionen ohne Halten. Griffe leben in der Einstellungsliste, wo man bewusst ordnet, und halten sich aus den Flächen heraus, die Du den ganzen Tag benutzt.
Reiter lassen sich jetzt auch anheften. Angeheftete Reiter rücken nach vorn, tauschen ihr Kreuz gegen eine Nadel und überleben jedes „Alle schließen”.
Der Sync, der sich selbst geteilt hat
Das ist mein Lieblingsfehler dieses Releases — auf die Art, wie nur ein Fehler zum Liebling werden kann, den man am Ende versteht.
Mehrere Leute meldeten dasselbe: Einstellungen und Konten kommen auf dem zweiten Gerät nicht an. Passphrase eingegeben, Schalter an, es passiert nichts.
Der Profil-Sync schreibt eine Datei in Deinen Vault. Hast Du eine Sync-Passphrase gesetzt, schreibt er eine versiegelte (settings.enc), sonst schlichtes JSON (settings.json). Was ich nicht zu Ende gedacht hatte, ist der Zustand dazwischen: ein Gerät, das eine Passphrase hat, aber noch nicht entsperrt ist. Es kennt den Schlüssel nicht, also schrieb es die Klartext-Datei. Ein entsperrtes Gerät schrieb derweil die versiegelte — und räumte die Klartext-Datei weg, die es für veraltet hielt.
So lagen zwei Dateien nebeneinander im selben Ordner, jede von einem anderen Gerät geschrieben, keine las je die andere. Der Screenshot, den mir ein Nutzer schickte, zeigte beide, zwei Tage auseinander — und die Klartext-Datei war die neuere.
Ein gesperrtes Gerät wartet jetzt, statt eine zweite Wahrheit zu schreiben. Eine zurückgebliebene Klartext-Datei wird gelesen, zusammengeführt und danach entfernt — und das Einstellungs-Profil selbst merged pro Feld mit Grabsteinen, damit zwei Personen im selben Vault aufhören, sich gegenseitig die Einstellungen zu überschreiben. Persönliches — Konten, Lesezeichen, Leisten-Anordnungen — ist ganz aus dem geteilten Dokument ausgezogen und liegt jetzt pro Person.
Wenn Du die Sync-Passphrase nutzt: Gib sie nach diesem Update auf jedem Gerät einmal ein. Ein gesperrtes Gerät schreibt bewusst nicht mehr mit, und genau das hat dem Streit der zwei Dateien ein Ende gemacht.
Aufgaben, die wiederkommen
Eine Aufgabe kann jetzt eine Wiederholung tragen. Hakst Du sie ab, entsteht die nächste.
Ich habe hin und her überlegt, wo die Regel liegen soll, und mich für das Frontmatter der Aufgabe selbst entschieden statt für eine Datenbankspalte. Eine Wiederholung gehört zu dieser Aufgabe; als Spalte müsste sie in jeder Aufgaben-Datenbank existieren, die Du besitzt — ob Du Wiederholungen nutzt oder nicht. Die Monatsarithmetik klemmt ans Monatsende, 31. Januar plus ein Monat ist also der 28. Februar und nicht der 3. März. Sonst driftet eine monatliche Aufgabe über ein Jahrzehnt um ein volles Jahr.
Es gibt bewusst kein Serien-Objekt. Jede erzeugte Aufgabe ist eine gewöhnliche Notiz. Löschst Du sie, endet die Kette. Kein Dialog kann Dich darüber anlügen, was „Serie löschen” bedeutet — weil es keine Serie gibt.
Das Kalender-Symbol an der Aufgabenzeile macht etwas Verwandtes, aber Getrenntes: Es blockt Zeit für die Aufgabe als verknüpften Termin. Aufgaben sind in Plainva absichtlich taggenau, und ich wollte ihnen keine Uhrzeiten beibringen — also trägt der Termin die Zeit, und die Aufgabe zeigt weiter auf ihn.
Mail, auf beiden Seiten
Das Telefon hat einen vollwertigen Mail-Client bekommen: Postfach verbinden (Microsoft oder schlichtes IMAP/SMTP), lesen, schreiben, antworten, mehrere Nachrichten auf einmal bearbeiten, Anhänge speichern, im Ordner suchen, offline weiterlesen. Die IMAP- und SMTP-Umsetzung ist bewusst unsere eigene — mehr Arbeit als eine fertige Bibliothek, aber Code, den ich tatsächlich prüfen kann.
Der Desktop hat die fehlenden Stücke bekommen: eine Signatur je Postfach (beim Absenderwechsel getauscht, nicht gestapelt), Adressen im Absender-Menü statt Konten, und denselben Offline-Zwischenspeicher, den das Telefon nutzt.
Außerdem in diesem Release
- Die Seitenleisten-Sektion Datenbanken zeigt die geöffnete Notiz jetzt so, wie ihre Datenbank sie sieht: die Spalten der ersten Ansicht, bearbeitbar, mit Position („12 / 34”) und einem Schritt zum Nachbarn.
- F5 liest den Vault neu ein — und Ordner, die per Verknüpfung eingehängt sind, werden endlich mitgelesen. Sie konnten vorher nie indiziert werden, weshalb ein Neustart niemandem geholfen hat, der danach gefragt hat.
- Der Rechtsklick erreicht Zuletzt geöffnet und Lesezeichen über dem Dateibaum.
- iCloud-Erinnerungslisten erscheinen als Aufgabenlisten, statt sich als Kalender auszugeben, und ein gelöschter Ordner bleibt gelöscht, statt vom nächsten Voll-Listing still wieder angelegt zu werden. Beides kam aus einem langen Issue-Faden; danke, Jeff.
Weiterhin experimentell
Verschlüsselte Workspaces sind nicht unabhängig geprüft und weiterhin als experimentell gekennzeichnet. Daran hat dieser Release nichts geändert, und ich wiederhole es lieber, als es still aus den Release-Notes verschwinden zu lassen. Mach Backups.