Posts Tagged ‘Bildliste’

Das Dilemma mit der Sortierung

Dienstag, Februar 11th, 2014

Ich habe mit fast jedem Blogeintrag hier eine neue Version vom BVASystem veröffentlicht. Heute möchte ich den Blog allerdings nutzen, um aufzuzeigen was für ein immenser Aufwand an einer Kleinigkeit hängen kann. Diese Kleinigkeit ist die Sortierung der Bildliste.

Ist-Zustand

Aktuell können 4 unterschiedliche Sortierungsreihenfolgen ausgewählt werden: Bildtitel aufsteigend und absteigend und Aufnahmedatum aufsteigend und absteigend. Bei Bildlisten aus der Datenbank funktionieren diese auch so wie gewünscht. Wird dagegen die Bildliste durch die Auswahl eines Verzeichnisses erstellt, so funktioniert die Sortierung nach dem Aufnahmedatum nicht. Der Grund dafür liegt in den nebenläufigen Prozessen des BVASystems.

Die Bildlisten werden generell losgelöst von der Programmoberfläche eingelesen, damit die Oberfläche  während des Einlesevorgangs weiterhin bedienbar bleibt. Bei der Auswahl eines Verzeichnisses dauert dieser Einlesevorgang recht lange, da jedes Bild geöffnet werden muss, um das Thumbnail und die Metadaten auszulesen. Daher habe ich den Einleseprozess in mehrere Stufen geteilt. Im ersten Schritt wird nur bestimmt, welche Dateien sich im gewählten Verzeichnis befinden. Im zweiten Schritt werden die Metainformationen ausgelesen und im dritten Schritt wird das notwendige Thumbnail erstellt. Nun ist es so, das die Sortierung bereits nach dem ersten Schritt durchgeführt wird, da die Bildliste nach diesem Schritt bereits in der Oberfläche angezeigt wird. Allerdings ist hier das Aufnahmedatum der Fotos noch nicht bekannt. Diese wird erst zusammen mit den Metadaten im zweiten Schritt ausgelesen.

Ausweg

Prinzipiell bieten sich 2 Lösungswege an. Der einfachere Weg ist es sicher, die Bildliste erst anzuzeigen nachdem die Metadaten aller Fotos ausgelesen wurden. Dies würde allerdings dazu führen, das das Programm deutlich langsamer wird. Also werde ich den komplizierteren Weg wählen müssen und einen Mechanismus schaffen, der die Sortierung sofort aktualisiert, sofern sich ein Aufnahmedatum geändert hat.

Was muss dafür alles angepasst werden?

Der wichtigste Punkt ist sicherlich, das die Bildliste nun unabhängig von der gewählten Sortierung gespeichert wird. Zusätzlich muss eine Indexliste erstellen werden, die die gewählte Sortierung repräsentiert. Alle Funktionen, über die Zugriff auf ein Listenelement erfolgt, müssen folglich angepasst werden. Wenn beispielsweise das dritte Element der Liste benötigt wird, muss in der Indexliste nachgeschaut werden, an welcher Position in der unsortierten Bildliste sich die gewünschten Daten befinden.

Damit die Indexliste bei einer Änderung des Aufnahmedatums oder Bildtitels angepasst werden kann, muss das Listenelement die Bildliste über Änderungen informieren. Sofern sich dadurch Positionen innerhalb der Bildliste verschieben, muss diese wiederum die Komponenten zur Anzeige informieren. Diese müssen nämlich ebenfalls aktualisiert werden. Zu guter letzt muss ebenfalls der Cache angepasst werden, der die Thumbnails verwaltet.

Insgesamt müssen für die geänderte Sortierung fast alle Kern-Komponenten des BVASystems modifiziert werden. Das folgende Bild soll die Zusammenhänge verdeutlichen.

Schaubild zur Listensortierung

Schaubild zur Listensortierung

Ausblick

Ich habe für die Änderungen die jetzt bevorstehen, keine weiteren Zwischenversionen der Bildverwaltung geplant. Eine halbfertige Umsetzung, wo Teile der Bildlistenanzeige nicht funktionieren, würde euch nichts bringen. Aktuell bin ich gerade dabei, die Lösung des Sortierungsdilemmas vorzubereiten. Wenn diese Vorbereitung abgeschlossen ist, werde ich nochmals eine  Programmversion veröffentlichen. Anschließend werde ich einige Zeit brauchen um alle Änderungen umzusetzen. Damit die ganze Frickelei nicht ohne neue Funktion bleibt, werde ich im Zuge dessen als drittes Sortierungskriterium die Filterungsübereinstimmung einführen. Dazu später allerdings mehr …