Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
pr:mlib [2010/12/26 18:14] martok |
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]]) | (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 62: | Zeile 68: | ||
* FlatDB Key-Value-Store, Dateien indiziert über (Name, Pfad, ÄnderungsDatum, ErstellDatum, Größe, InhaltsHash) | * FlatDB Key-Value-Store, Dateien indiziert über (Name, Pfad, ÄnderungsDatum, ErstellDatum, Größe, InhaltsHash) | ||
* wäre auch wiedererkennbar, wenn extern verändert (closest match) | * 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> | + | * <code>{"file":{"name": "abc.jpg","path":"foo\\bar\\baz","mdate":"1234567890","cdate":"1234567000","size":"555123","sha1":"abcdef12abcdef12abcdef12abcdef12"}}</code> |
==== Organisationsstruktur ==== | ==== Organisationsstruktur ==== | ||
- | * Bibliothek (enthält auch Voreinstellungen) //library.json// | + | * Archivgruppe |
- | * Programmeinstellungen (unabhängig von Daten) //config.json// | + | * Bibliothek (enthält auch Voreinstellungen) [[.:mlib:library.json]] |
- | * Datenbank (FlatDB-Ordner, Name aus library.json) | + | * Datenbank (FlatDB-Ordner) |
+ | * Dokumente: [[.:mlib:Metadaten]] | ||
+ | * Bibliothek ... | ||
==== Klassen ==== | ==== Klassen ==== | ||
+ | * Application | ||
+ | * Interface zur Hauptanwendung (Logger etc) | ||
* MetadataExtractor | * MetadataExtractor | ||
* Bekommt Datei, Füllt SuperObject | * Bekommt Datei, Füllt SuperObject | ||
Zeile 77: | Zeile 87: | ||
* //Beispiele//: ExifViewer, VideoThumbnailSetter, Geotagger | * //Beispiele//: ExifViewer, VideoThumbnailSetter, Geotagger | ||
* Viewer | * Viewer | ||
- | * Bekommt Datei und ein Handle, Malt ein Bild, erstellt Video-Player | + | * Bekommt Datei, erzeugt daraus einen Renderer passend zum Datentyp |
- | * //Beispiele//: ImageViewer, VideoPlayer | + | * RendererStill |
- | Global immer nur ein Objekt, dessen Methoden aufgerufen werden (also SideEffect-frei sein müssen). | + | * 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. | Alle Klassen sind auch extern ladbar, aber schon an Delphi gebunden. Keine besondere CallingConvention also. | ||
- | In Main: Initializatzion-> RegisterClass(TImplementor.Create) -> wird auf Interfaces geprüft und in passende Listen einsortiert. | + | |
+ | 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) | 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. |