Benutzer-Werkzeuge

Webseiten-Werkzeuge


pr:mlib

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
pr:mlib [2010/10/17 23:30]
martok
pr:mlib [2011/10/29 20:16] (aktuell)
martok [Medienbibliothek]
Zeile 1: Zeile 1:
-====== Medienbibliothek/allgemeine Planung ​======+====== Medienbibliothek ======
 (Original-Thread [[http://​branch.delphi-forum.de/​topic_MedienIndizierungsSoftware_101096.html|im DF]]) (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 =====
Zeile 14: Zeile 20:
   * Automatischer Import, Tagging (EXIF auslesen)   * Automatischer Import, Tagging (EXIF auslesen)
   * Thumbnails für Video selber auswählbar,​ also "nimm Frame 42 als TN"   * 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...   * Bedienbares UI. Meine Erfahrung ist ja, dass die besten Programme immer das schlimmste UI haben...
Zeile 22: Zeile 48:
     * Thumbnails neu generieren     * Thumbnails neu generieren
     * mehreren Dateien ein Tag geben     * 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.
pr/mlib.1287351006.txt.gz · Zuletzt geändert: 2010/10/17 23:30 von martok