Medienbibliothek
Features
Portablel (ohne Installation; Daten an frei wählbarer Speicherstelle; Relative Pfadangaben(!))
Win32 / W2k+
Verwalten von Video UND Foto in einem Programm (idealerweise aber nicht zwingend auch andere Dateien, z.B. Textdateien oder so)
Tags (Bonus: Funktion um dann „Ähnliche Dateien“ zu finden)
Kategorien
Alben
Verständnis von Pfaden (und dann auch Browsen danach)
Umfangreiche Suche, im Idealfall so dass man jede beliebige Information filtern kann
Notizfunktion zu Alben, Dateisystemobjekten
Automatischer Import, Tagging (EXIF auslesen)
Thumbnails für Video selber auswählbar, also „nimm Frame 42 als TN“
Multi-User fähig: gleichzeitig von mehren Rechnern/Prozessen zugreifen
Systemanforderungen
Lebensdauer des Archivs: 10 aktiv, min. 20 Jahre passiv (=lesbar)
Datensicherheit
Ausführbarkeit
Self-Contained
GUI
Bedienbares UI. Meine Erfahrung ist ja, dass die besten Programme immer das schlimmste UI haben…
Thumbnail-View von allem, also auch Suchergebnissen
Operationen auch auf mehreren Dateien gleichzeitig
Views
Listentypen
Fenster
Detailansicht
Tech Details/Implementationsideen
FlatDB Key-Value-Store, Dateien indiziert über (Name, Pfad, ÄnderungsDatum, ErstellDatum, Größe, InhaltsHash)
Organisationsstruktur
Klassen
Application
MetadataExtractor
Bekommt Datei, Füllt SuperObject
Beispiele: ExifReader, Thumbnail, VideoThumbnail, Geotagger
MetadataViewer
Zeigt einen Tab in Detailansicht an
Beispiele: ExifViewer, VideoThumbnailSetter, Geotagger
Viewer
Global ist ein Plugin immer nur ein Objekt, dessen Methoden aufgerufen werden (also SideEffect-frei sein müssen). Es können aber beliebig viele Schnittstellen implementiert werden (Pflicht: IMediaLibraryModule)
Alle Klassen sind auch extern ladbar, aber schon an Delphi gebunden. Keine besondere CallingConvention also.
In Main: Initializatzion→ RegisterClass(TImplementor.Create)
Extern: DLL-Load→ DLL.Register(@RegisterFunction), DLL ruft RegisterFunction mit Instanzen von dem was sie hat auf. (BPL, nur besser)
RegisterClass prüft, ob IMediaLibraryModule implementiert wird; Ruft IMediaLibraryModule.Init auf und übergibt IMediaLibraryApplication.