Erste Alpha-Version
This commit is contained in:
committed by
Dr. Michael Kübler
parent
93feb97739
commit
223bf746ef
@@ -0,0 +1,54 @@
|
||||
MikeMail local archive, format 1
|
||||
|
||||
Location: Application Support/MikeMail/Archive inside the macOS app sandbox.
|
||||
Mail.sqlite is the SwiftData index, with a versioned schema/migration plan.
|
||||
Objects/<SHA-256>.eml contains immutable original RFC 5322/MIME bytes, including
|
||||
all attachments. Paths are relative and content-addressed; user attachment
|
||||
filenames are never used as filesystem paths. Identical messages share an object.
|
||||
format.json identifies the archive format.
|
||||
|
||||
Account settings, folder trees and recipient history are stored in the database.
|
||||
Existing UserDefaults settings migrate on first archive creation. Passwords stay
|
||||
in Keychain and are never included in snapshots. A restore to another Mac needs
|
||||
passwords entered again.
|
||||
|
||||
Refresh inventories all selectable folders and compares UIDVALIDITY/UID/FLAGS.
|
||||
Only missing message bodies download. Removed messages and old UID generations
|
||||
are hidden from the current folder but retained in the archive. New bodies are
|
||||
staged before a complete inventory is reconciled. Failed downloads can resume.
|
||||
Offline folder selection performs no network access. Server-side read flags are
|
||||
stored; this change does not add local read/delete/move editing operations.
|
||||
Initial synchronization downloads all messages, subject to the transport's 40 MB
|
||||
per-message limit; failed folders are reported and remain incomplete.
|
||||
|
||||
Future backup UI should call MailArchive.exportSnapshot(to:) after synchronization
|
||||
finishes, rather than copying the live SQLite file (which may have a WAL).
|
||||
The logical snapshot includes manifest.json with formatVersion, date, complete
|
||||
configuration, every message record (including hidden ones), and its EML objects.
|
||||
Export serializes with archive mutations, verifies SHA-256, writes a staging
|
||||
directory, then renames it. No absolute paths or credentials are exported.
|
||||
Unreferenced orphan objects from interrupted writes are not exported.
|
||||
|
||||
MailArchive.restoreSnapshot(from:to:) validates version, unique record IDs, file
|
||||
references and hashes, then reconstructs a NEW database. It refuses an existing
|
||||
destination. A future restore UI must first stage/validate, stop all sync and
|
||||
close the current archive, then switch archives while retaining the previous one
|
||||
for rollback. Do not replace an open SQLite store. Restore is local only and
|
||||
does not upload or delete server mail.
|
||||
|
||||
Backup/restore engine is implemented and tested; user-facing backup/restore
|
||||
buttons, scheduling, compression and encryption are intentionally not yet added.
|
||||
A backup contains only mail already downloaded, not inaccessible server mail.
|
||||
|
||||
App icon: generated using built-in image_gen, resized with macOS sips.
|
||||
Asset: MikeMail/Assets.xcassets/AppIcon.appiconset/MikeMail-1024.png
|
||||
Generation prompt:
|
||||
Use case: stylized-concept. Asset: production macOS application icon for MikeMail,
|
||||
square 1024x1024. Create a beautiful premium blue 3D mail app icon: a sculpted
|
||||
pearly white envelope with crisp folded triangular flap, softly rounded edges,
|
||||
hovering subtly above a rich cobalt-to-azure blue rounded-square tile, depth and
|
||||
bevel, restrained luminous cyan rim highlights, soft studio reflections and
|
||||
ambient occlusion. Straight-on view, balanced centered composition, clear simple
|
||||
silhouette readable at 16px. Blue tile occupies about 88% of canvas, transparent
|
||||
outside rounded tile with soft small shadow. No text, letters, badges, watermark,
|
||||
extra objects or presentation mockup. Actual standalone icon artwork.
|
||||
Reference in New Issue
Block a user