Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
pr:mlib [2010/09/02 19:12] martok angelegt |
pr:mlib [2011/10/29 20:16] martok [Medienbibliothek] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Medienbibliothek/allgemeine Planung ====== | + | ====== Medienbibliothek ====== |
+ | (Original-Thread [[http://branch.delphi-forum.de/topic_MedienIndizierungsSoftware_101096.html|im DF]]) | ||
+ | |||
+ | [[pr:mlib:Bilder|Bilderseite]] | ||
+ | |||
+ | [[pr:mlib:HowTo|Wie mache ich... / Dokumentation]] | ||
+ | |||
+ | [[pr:mlib:Todo|To-Do Liste]] | ||
===== Features ===== | ===== 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 | ||
+ | * Standardisierte offene Dateiformate | ||
+ | * XML/JSON | ||
+ | * UTF-8 | ||
+ | * JPEG (Grafikstandard in PDF-A, daher garantiert) | ||
+ | * PNG (ODF, ist das ein Archivstandard??) | ||
+ | * Extensive Dokumentation UND/ODER Code-Distribution (Interpretierte Sprachen) | ||
+ | * Ausführbarkeit | ||
+ | * Cross-Platform | ||
+ | * ggf emulierbare Umgebung | ||
+ | * möglichst wenige proprietäre Abhängigkeiten | ||
+ | * Win32/Wine | ||
+ | * Python? | ||
+ | * XULRunner mit Hacks damit er portable wird (JS und XUL sind standardisiert) | ||
+ | * Self-Contained | ||
+ | * nicht nur portabel, sondern sollte alles enthalten was man braucht | ||
+ | | ||
===== GUI ===== | ===== 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 | ||
+ | * Exif neu lesen | ||
+ | * Thumbnails neu generieren | ||
+ | * mehreren Dateien ein Tag geben | ||
+ | |||
+ | ==== Views ==== | ||
+ | * Listentypen | ||
+ | * Liste ("besseres dir") | ||
+ | * Miniaturen | ||
+ | * Miniaturen mit Details | ||
+ | * Galerie (Miniaturen als Coverflow oben/links) | ||
+ | * Einzelansicht (voriges/nächstes links/rechts klein) | ||
+ | * Fenster | ||
+ | * Suchergebnisse | ||
+ | * Verzeichnis (Tree + Liste) | ||
+ | * Verzeichnis durchsuchen/aktualisieren | ||
+ | * Merge neuer/vorhandener Daten, basierend auf "file"-Tupel | ||
+ | * Detailansicht | ||
+ | * Tabs mit Daten, ähnlich ACDSee 5 | ||
+ | * Kann gedockt sein oder als Extrafenster | ||
+ | |||
===== Tech Details/Implementationsideen ===== | ===== Tech Details/Implementationsideen ===== | ||
+ | * FlatDB Key-Value-Store, Dateien indiziert über (Name, Pfad, ÄnderungsDatum, ErstellDatum, Größe, InhaltsHash) | ||
+ | * wäre auch wiedererkennbar, wenn extern verändert (closest match) | ||
+ | * <code>{"file":{"name": "abc.jpg","path":"foo\\bar\\baz","mdate":"1234567890","cdate":"1234567000","size":"555123","sha1":"abcdef12abcdef12abcdef12abcdef12"}}</code> | ||
+ | |||
+ | ==== Organisationsstruktur ==== | ||
+ | * Archivgruppe | ||
+ | * Bibliothek (enthält auch Voreinstellungen) [[.:mlib:library.json]] | ||
+ | * Datenbank (FlatDB-Ordner) | ||
+ | * Dokumente: [[.:mlib:Metadaten]] | ||
+ | * Bibliothek ... | ||
+ | |||
+ | ==== Klassen ==== | ||
+ | * Application | ||
+ | * Interface zur Hauptanwendung (Logger etc) | ||
+ | * MetadataExtractor | ||
+ | * Bekommt Datei, Füllt SuperObject | ||
+ | * //Beispiele//: ExifReader, Thumbnail, VideoThumbnail, Geotagger | ||
+ | * MetadataViewer | ||
+ | * Zeigt einen Tab in Detailansicht an | ||
+ | * //Beispiele//: ExifViewer, VideoThumbnailSetter, Geotagger | ||
+ | * Viewer | ||
+ | * Bekommt Datei, erzeugt daraus einen Renderer passend zum Datentyp | ||
+ | * RendererStill | ||
+ | * Stellt Bildausschnitte auf einem Canvas dar (ImageViewer) | ||
+ | * RendererOther | ||
+ | * bekommt ein WindowHandle, kann darauf passende Controls erstellen (VideoPlayer) | ||
+ | |||
+ | 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. |