Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung Nächste Überarbeitung Beide Seiten, nächste Überarbeitung | ||
pr:mlib [2010/11/02 17:34] martok dbase propsal |
pr:mlib [2011/04/02 23:55] martok |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Medienbibliothek/allgemeine Planung ====== | ====== Medienbibliothek/allgemeine Planung ====== | ||
(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]]) | ||
+ | |||
+ | Bilder: [[pr:mlib:Bilder|Bilderseite]] | ||
===== Features ===== | ===== Features ===== | ||
Zeile 42: | Zeile 44: | ||
* 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 ===== | ||
- | * Flatfiles, 1 pro Datei (Shareaza) | + | * FlatDB Key-Value-Store, Dateien indiziert über (Name, Pfad, ÄnderungsDatum, ErstellDatum, Größe, InhaltsHash) |
- | * Key-Value-Store, Dateien indizier ü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) | ||
- | * Datenbankdatei (Achtung, siehe Datensicherheit!) | + | * <code>{"file":{"name": "abc.jpg","path":"foo\\bar\\baz","mdate":"1234567890","cdate":"1234567000","size":"555123","sha1":"abcdef12abcdef12abcdef12abcdef12"}}</code> |
- | ==== dBase via Halcyon ==== | + | |
- | FILEID = [0-9a-z]{8} | + | |
- | Strings: immer UTF8 schreiben und beim lesen zurückkonvertieren, um Codepage-Probleme zu umgehen | + | |
- | Tabelle //Files//: | + | ==== Organisationsstruktur ==== |
- | * FILEID | + | * Archivgruppe |
- | * Dateiname | + | * Bibliothek (enthält auch Voreinstellungen) [[.:mlib:library.json]] |
- | * Pfad | + | * Datenbank (FlatDB-Ordner) |
- | * Größe | + | * Dokumente: [[.:mlib:Metadaten]] |
- | * Datum | + | * Bibliothek ... |
- | Tabelle //Attribs//: | + | ==== Klassen ==== |
- | * FILEID | + | * Application |
- | * attrName | + | * Interface zur Hauptanwendung (Logger etc) |
- | * attrValue | + | * 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 und ein Handle, Malt ein Bild, erstellt Video-Player | ||
+ | * //Beispiele//: ImageViewer, VideoPlayer | ||
+ | Global immer nur ein Objekt, dessen Methoden aufgerufen werden (also SideEffect-frei sein müssen). | ||
+ | Alle Klassen sind auch extern ladbar, aber schon an Delphi gebunden. Keine besondere CallingConvention also. | ||
- | Tabelle //ExtAttribs//: | + | In Main: Initializatzion-> RegisterClass(TImplementor.Create) |
- | * FILEID | + | |
- | * attrName | + | |
- | * BLOB | + | |
- | Wie speichert man ein... | + | Extern: DLL-Load-> DLL.Register(@RegisterFunction), DLL ruft RegisterFunction mit Instanzen von dem was sie hat auf. (BPL, nur besser) |
- | * Tag? \\ Tabelle Attribs, attrName="tag", attrValue=<tagname> \\ ggf mehrere Zeilen (einfach nur Append) | + | |
- | * Exif-Datum? \\ Tabelle Attribs, attrName="exifdate", attrValue=<unixdate> \\ eine Zeile (Locate+Edit || Append) | + | |
- | * Thumbnail? \\ Tabelle ExtAttribs, attrName="thumbnail", attrValue=kleines JPEG (BLOBS haben kein Charset, also problemlos!) | + | |
+ | RegisterClass prüft, ob IMLibModule implementiert wird; Ruft IMLibModule.Init auf und übergibt IMLibApplication. |