Yay!
Nachdem wir das Innenleben der Software fast komplett ausgetauscht haben ist endlich die Version 2.0 fertig geworden.
Was ein Akt.
Von dem was die Software ausmacht, ist wirklich kein Stein mehr so gelassen worden wie er war.
Jede operation wurde Asyncron gemacht, alles in ein Konzept von Aktionen gepresst (und das war manchmal nicht einfach) die gescheduled werden und (wenn es das Telefon erlaubt) sogar parallel ausgefĂŒhrt werden können.
Mein Hauptteil daran war das Datenmodell das den synchronen Zugriff auf das Dateisystem des Handies erlaubt - intern aber alle Operationen Asynchron abarbeitet.
Was gar nicht so einfach zu verkapseln war. (Dementsprechend sind die Unit Tests auch fast die noch mal halb so viel Code wie der eigentliche Code).
Das Design fĂŒr das ich mich letztendlich entschieden habe ist recht simpel: Jeder Dateisystem-Knoten kann einen von mehreren ZustĂ€nden haben:
- Out Of Date -> Der Zustand muss mit dem Handy abgeglichen werden
- "Up To Date" -> nichts zu tun, die aktuellen Daten sind da
- Update In Progress-> Die Daten werden gerade Aktualisiert oder ein anderer Job (Meist mit Progress-Anzeige) lÀuft mit Bezug auf diesen Knoten.
Jobs können zum Beispiel das Kopieren auf oder von dem Handy sein.
Dazu kommt dann natĂŒrlich noch etwas Intelligenz die diese Jobs automatisch anwirft wenn es Sinn macht (Verzeichnisse Aktualisieren wenn die GUI sie anzeigt) und unnötiges Kopieren vermeidet (Es gibt einen Cache auf der Festplatte - wird eine Datei einmal vom Handy Kopiert und dann nicht mehr VerĂ€ndert wird die Kopierte ab da fĂŒr Operationen verwendet.) Und nicht zu vergessen: Versionierte Backup und Restores gibt es natĂŒrlich auch noch.
Ach ja und Rasend Schnell sollte das natĂŒrlich auch sein.
War nicht leicht - aber jetzt lĂ€uft es rock-solid. Und ĂŒber die Implementierung erzĂ€hle ich spĂ€ter mal mehr.