• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Projektidee] KISS Ebook Bibliothek / Dokument Schnellstarter

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
Hallo,

also ich habe foglendes Problem - ich hab tonnenweise PDF Dateien bzw. Ebooks, die auch zu einem großen Teil nicht ordentlich benannt sind. (Warum auch immer!)
Ich habe daher auf alternativeTo und auch über Google nach Alternativen gesucht, die es ermöglichen sollen Ebooks zumindest zu katalogisieren.

Das was dabei ins Auge fällt - Calibre.

Nun, Calibre mag ein tolles Stück Software sein, aber es ist furchtbar überladen, es hat zu viele Features und Abhängigkeiten und es ist einfach mal (bei mir) 200 MB plus Zusatzpakete groß.

Was ich brauche oder suche (wenn es das gibt, unterbrecht mich bitte!):
Eine Software in der ich PDFs (zu 90%, und mal Mobi oder ePub) hineinziehen kann (Drag und Drop, Verzeichniss einlesen), und der Titel wird ausgelesen und mir in einer filterbaren Liste zu Verfügung gestellt.
Als zweite Variante, es gibt viele Ebook Reader - die auch zum Beispiel Speichern wo man eine PDF verlassen hat bzw. Dokumentenbetrachter oder wie es sich schimpft.

Was mir vorschwebt, nicht diese zu ersetzen, sondern dem Programm zu sagen, welche andere Software mit dem Parameter des Ebook Dateinames geöffnet werden soll.

In meine Fall wäre das also: "evince /home/mein/Pfad/zu/einenmEbook.pdf"

Mehr muß gar nicht gemacht werden - wo ich anfage zu lesen oder wo ich aufgehört habe, speichert Evince selbst, wie auch der Gnome Viewer und bestimmte auch andere Reader!

Ich stelle aber fest, das gibt es einfach nicht!
Warum? :unknown:

Und jetzt wäre meine Frage, gibt es Leidensgenossen und andere die sich so etwas vorstellen könnten? Ist ein Nutzen für so ein Tool vorhanden?

Es gibt diverse Bibliotheken die PDFs verarbeiten, frage daher auch mal an jene die nicht programmieren wollen/können - aber sich mit Linux auskennen:
Welche Bibliotheken / Programmiersprache würdet ihr einsetzen wollen, welche Lib ist überall installierbar auf verschiedenen Distributionen, so fern der Quelltext vorliegt.
Unter C wäre vielleicht libhpdf ein Kandidat, für Python2/3 gebe es bestimmt auch welche die man verwenden könnte oder andere Packages, oder auch Java.

Also kurz:
Welche Libs gibt es "überall" ?
Reichen PDFs oder sollen auch ePub/Mobi/chm unterstützt werden?
Für jedes Format ein andere Programm (evince/xchm, fbreader...) einstellbar?
Welche Programmiersprache?

Hätte jemand Interesse so etwas (gemeinsam) zu erstellen? Ich hätte schon Bedarf und könnte auch diverse Formate testen. Könnte aber auch anbieten selbst tätig zu werden.

Auch zum Nutzen:
Im Grunde muss noch eine Entscheidung rein ob a) der Dateiname ausgewäht / dargestellt werden soll, bereinigt von Minus, Unterstrich und Punkt (ohne Format)), oder ob ein versuchter (ermittelter) Titel aus einer PDF gezogen werden soll? Oder man dies umschalten kann/beim hinzufügen in die Kartei auswählen kann. Natürlich wäre es auch möglich selbst einen Namen für ein Ebook vorzugeben, wenn schon, denn schon :D

Aber mehr auch nicht!

Als Datenbank für die Suche könnte man vielleicht SQLite oder ähnliches nehmen, oder auch einfache eine Textdatei. Wäre meine Idee.

Was meint ihr, tolle Idee? Hättet ihr Lust so etwas zu entwickeln? Welche Sprache(n) für Komponenten um Titel auszulesen, verschiedene Formate PDF/ePub/Mobil/Kindle?/.../CHM?


-----------

Nachtrag:

Screenshots (die neusten zuerst), finden sich hier:
https://www.picflash.org/gallery.php?id=9RGDIIE7K8

Die aktuelle Version ist auf Gihub, mit einigen Hinweisen und Tips zur Nutzung:
https://github.com/jrie/kisslib
 
Zuletzt bearbeitet:

obedi

NGBler

Registriert
17 Juli 2013
Beiträge
432
Ort
DD
Kann mangels Linux und Coding Kentnissen selbst leider nichts beitragen. Finde die Idee aber gut (und ausbaufähig* :p). Wäre daher sicher auch ein dankender user, aber nur wenn es auch unter WIN läuft -> Java?!
Zur DB: auch auf die Gefahr hin, dass es total daneben ist, bei den Kollegen auf Arbeit war kürzlich das Elasticsearch Project im Gespräch, vielleicht eine Option?
- https://www.elastic.co/guide/index.html
- http://joelabrahamsson.com/elasticsearch-101/

* meine Ansprüche gehen in eine etwas andere Richtung, der gemeinsamme Nenner sind aber auch die "tonnenweise PDF Dateien bzw. Ebooks".
Mir schwebt daher schon seit längerem eine Lösung vor, welche diese alle 'scannt' und mit deren Hilfe sich alles eindeutig katalogisieren lässt und zwar anhand der orignal file namen, metadaten, prüfsummen und wenn nicht schon vorhanden ähnlich wie bei Calibre das Daten Abrufen von Amazon & Co. die ISBN Nummern z.B. von der www.dnb.de Dann habe ich es auf die Doubletten abgesehen, welche sich anhand der verfügbaren Infos im Anschluss leicht rausfiltern lassen sollten. Schön wäre es schon wenn eine möglichst große Bandbreite unterstütz würde, mind. PDF und Ebup. Übrigens in der Win-Welt ist WhereIsIt bisher mein Mittel der Wahl um Bücher wiederzufinden, die gerade nicht am Rechner "angestöpselt" sind oder in größeren Archiven zusammengefasst sind.

Gruß
obedi
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #3
@obedi

Erst einmal danke für deinen Input und Feedback :) - also ich will nicht zwingend einen Datenbank aufbauen die "alle Fälle" abdeckt.
Es soll KISS sein - also "Keep It Simple and Stupid", also auch keine Volltextsuche in dem Ebook oder ähnliches.

Also nur ein Programm, in dem man Ebooks hineinziehen kann, welches diese auflistet mit ihrem Dateinamen bzw. und oder ermitteltem Titel und dann schnell mit einem anderen PDF (oder Format X Programm) starten kann, welches frei einstellbar ist, und laden lässt. Also ein Schnellstarter mit Auflistungsfunktion.

Hier könnte man überlegen ob man zum Beispiel auch für ein Ebook eine Kategorie bzw. eher noch Tags - also "Belletristik, Buch zu Film", "Coding, Algorithmen, Algorithmus" festlegen kann, die dann auch filterbar sind.

Aber mehr soll es nicht tun.
Meine Gedanke wäre, es ist kein Ebook Reader - diese machen das was sie tun gut und speichern (oft) wo man aufgehört hat zu lesen und starten dort wieder.

Eine Verknüpfung mit Datenbanken, nun ja, wenn die ISBN in einer Datei steht und man diese ermitteln kann, könnte man sich so etwas überlegen. Aber das ist schon fast wieder zu viel des Guten bzw. es ist zuviel des Guten. Jedenfalls eine Onlineanbindung.
Duplikate von Büchern, könnte und würde man am Titel in der Datei (nicht Dateinamen!) vielleicht schon erkennen und filtern können - wenn man natürlich hier noch eine ISBN - wenn das in einer PDF oder ePub/Mobi gespeichert wird, einlesen kann, wäre das okay.

Eine Löschfunktion würde ich gar nicht in das Programm einbauen, aber die Option den Pfad zu öffnen bzw. das Verzeichniss, in der das Ebook gespeichert ist und dann kann man ja überlegen ob man dieses "selbst" löschen will oder nicht.

Ob man sowas auch für Windows machen kann, das müsste man überlegen :)
Erst einmal ist es ja nur für Linux angedacht.

Rein vom Programmieren müsste man sich dann vielleicht auf eine Framework einigen (wenn Interesse da ist) das unter Windows wie auch Linux gleich aussieht - und dann kommen wieder die großen "Frameworks" mit Ihren zig Tonnen an Daten die man für eine 80 kb Anwendung benötigt um überhaupt die Benutzeroberfläche darstellen lassen zu können.

Unter Linux könnte man zum Beispiel GTK verwenden, unter Windows, Qt oder wxWidgets oder oder.... aber davon wollte ich eigentlich weg.
Dann programmiere (ich mir) lieber selbst die Logik für eine Tabelle. ;)

Ich meine man braucht vielleicht gar nicht viel, eine Liste mit den Feldern/Spalten die man ein und ausblenden kann, wie zum Beispiel:
"Titel", "Tags" und optional "Dateiname", "URL zu Code/Publisherseite"

Und eine "Seite" auf der man dann die Anwendungen angeben kann, die das Ebook einlesen/starten sollen als Parameter. Also "acrobat meinePDF.pdf seite=12"

Ob das auch unter Windows mit XYZ klappt, muß man testen.


Aber das sind nur meine spontanen Ideen dazu.
Nur ein Feature überfrachtetes Programm soll es dann nicht werden.

Man könnte überlegen, ob man eventuell mit Angeben kann bzw. Abspeichern an welcher Seite man aufgehört hat (wenn es der jeweilige PDF Reader nicht von selbst unterstützt) aber zum Beispiel möglich wäre Parameter zu übergeben, also zum Beispiel zu sagen auf welcher Seite ich das Ebook öffnen will.
Aber das wäre schon wieder sehr speziell und wird vielleicht auch gar nicht von allen Programmen unterstützt

Hier könnte man aber mit einer "Maske" arbeiten, also mit einer Parameterliste die dann den Wert "akutelle Seite" an das Startprogramm wie
"acrobat seite=%p" mittels %p übergibt und so startet oder wenn nicht definiert oder null, keinen Parameter übergibt und sich auf den Ebook-Reader der Wahl verlässt.
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #4
Ich hab mich heute mal an das Problem gesetzt und mal versucht nachzuvollziehen in wie weit man Daten aus einer PDF ziehen kann.
Im Grunde ist das eigentlich ganz einfach.

Allerdings sind die Resultate mit manchen Testdaten etwas sehr unzufriedenstellend:

Kurzfassung, Author + Titel + URI(s) auslesen funktioniert überall, so fern vorhanden.
Problem, ich habe noch keine Information darüber wo und wann die Metadaten auftreten, ich weiß nur in welchem Format sie auftreten. Und zum Teil gibt es wirren Ergebnisse die man theoretisch filtern müsste bzw. auswählen lassen sollte....

Testausgabe mit drei Ebooks, andere hatten die geforderten Daten überhaupt nicht enthalten...

[src=text]KISSLib$ ./kl

Title(C++ Today: The Beast Is Back)
URI(http:/conferences.oreilly.com)/S/URI
URI(http:/radar.oreilly.com)/S/URI
URI(http:/webcasts.oreilly.com)/S/URI
URI(http:/oreilly.com/programming/newsletter)/S/URI
Author(Jon Kalb & Gasper Azman)
Title(C++ Today: The Beast Is Back)
7 attributes read from "c++-today.pdf"

#-----------------------------------------------------------------------------------------------------------------------


Title(Computer Graphics, C Version \(2nd Ed.\))
Title(Contents)
Title(Function Index)
Title(Subject Index)
Title(Bibliography)
Title(AppA Mathematics for Computer Graphics)
Title(A.1 Coordinate Reference Frames)
Title(A.9 Numerical Methods)
Title(Ch16 Computer Animation)
Title(16.1 Design of Animation Sequences)
Title(Exercises)
Title(Ch15 Color Models & Color Applications)
Title(15.1 Properties of Light)
Title(Exercises)
Title(Ch14 Illustration Models & Surface-Rendering Methods)
Title(14.1 Light Sources)
Title(Exercises)
[....]
Title(A.3 Basis Vectors & the Metric Tensor)
Title(A.2 Points & Vectors)
Title(Computer Graphics, C Version \(2nd Ed.\))
217 attributes read from "Computer Graphics - C Version, 2nd Edition.pdf"


#-----------------------------------------------------------------------------------------------------------------------

URI(../../default0.htm)
URI(../../default1.htm)
URI(../../permissions)
URI(mailto:***.com)
URI(../../region)
URI(../../default2.htm)
URI(../../default3.htm)
URI(../../default2.htm)
URI(../../default2.htm)
[.....]
URI(javascript:moveTo\('ch21fig02'\);)
URI(javascript:moveTo\('ch21table01'\);)
URI(javascript:moveTo\('ch21table01'\);)
URI(javascript:moveTo\('ch21fig03'\);)
URI(../../default30.htm)
URI(../../ch22lev1sec1#ch22lev1sec1)
URI(../../ch22lev1sec2#ch22lev1sec2)
URI(../../ch22lev1sec3#ch22lev1sec3)
399 attributes read from "Game Coding Complete 3e - McShaffry - Course Tech (2009).pdf"
[/src]


Jetzt könnte man soweit gehen, wenn keine Attribute eingelesen werden können, wird für den Titel ein Vorschlag aus dem Dateinamen ermittelt bzw. leer gelassen...

Es gibt noch andere Attribute aber ich habe mich darauf beschränkt nach Title, Author, URI(s) in der PDF zu suchen.
Das geht auch soweit ohne eine extra Bibliothek. ;)

Aber wie gesagt, man könnte sich jetzt durch Spezifikation welzen um genau nachempfinden zu können an welchen Offsets die genauen Metadaten für das Dokument vorhanden sind. Aktuell wird auch der Body durchsucht.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #5
So, die Grundzüge sind gelegt, im Grunde fehlt nur noch eine GUI. :)

Hatte anfangs gedacht das wäre alles sehr kompliziert... aber im Grunde sehr easy.
Etwas Fremdcode wurde für das Auslesen der ePub benutzt in Form von libzip, alles andere ist nativ.

Und hier mal eine Testausgabe:
[src=text]
KISSLib$ ./kisslib Algorithms_in_a_Nutshell_Second_Edition.mobi
Title(Algorithms_in_a_Nutshell_2E)
1 attribute(s) read from "Algorithms_in_a_Nutshell_Second_Edition.mobi"

KISSLib$ ./kisslib Algorithms_in_a_Nutshell_Second_Edition.epub
Title(Algorithms in a Nutshell, 2E)
1 attribute(s) read from "Algorithms_in_a_Nutshell_Second_Edition.epub"

KISSLib$ ./kisslib Algorithms_in_a_Nutshell_Second_Edition.pdf
Author(George Heineman, Gary Pollice, and Stanley Selkow)
CreationDate(D:20160309212657Z)
Creator(AH CSS Formatter V6.2 MR4 for Linux64 : 6.2.6.18551 \(2014
ModDate(D:20160309173459-05'00')
Producer(Antenna House PDF Output Library 6.2.609 \(Linux64\))
Title(Algorithms in a Nutshell, 2E)
6 attribute(s) read from "Algorithms_in_a_Nutshell_Second_Edition.pdf"[/src]

Die PDF Metadaten sind noch am umfangreichsten gewesen, aber ich habe mich jetzt auf diese hier gestützt:
- Author
- Creator
- Producer
- CreationDate
- ModDate
- Subject
- Title

Liste von https://www.safaribooksonline.com/library/view/pdf-explained/9781449321581/ch04.html

URIs werden nicht mehr ausgelesen da dies nicht wirklich zielführend ist, ließe sich aber schnell wieder hineinbringen.
Ich habe auch schon eine Art Filterung gemacht das nur "http", "mailto" und "ftp" ausgelesen werden, der ganze andere Rest wird ignoriert.
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #6
Heute ist noch CHM als unterstütztes Format hinzugekommen.

Als GUI Toolkit teste ich gerade GTK+ 3 und folgend schon ein erster Screenshot damit - hat mich schon ein paar Stunden gekostet das soweit zum laufen zu bekommen, und halt die GTK3 Doku wälzen und das Prinzip nachzuvollziehen wie die Lib arbeitet.



Der Name ist natürlich nicht in Stein gemeißelt, ich könnte mir auch "KISS Ebook" vorstellen - aber falls jemand dazu kreativ sein will, irgendwas mit "KISS"... ;)

Ich wollte ursprünglich mit Glade das Interface bauen und war auch schon gut dabei, aber aus irgend einem Grund schmeißt es mich (natürlich ohne zu speichern) aus der Xfce Sitzung...
Aber komischerweise nur, wenn ich Glade irgendwie gebrauche und dann auch immer ziemlich zufällig... nun ja, daher wirds wohl erst einmal eine Variante ohne Glade werden.

Was auf dem Screenshot noch fehlt, es würde ein Menü um einzelnen PDFs hinzuzufügen, Ordner einlesen zu lassen und natürlich auch (einzelne Einträge) aus der Liste zu entfernen.
Zusätzlich wäre natürlich das entfernen mit Tastendruck auf "Entfernen" geplant.
Was auf jeden Fall auch geplant ist, Drag & Drop von Dateien und Ordner, die im Grunde die Handhabung über das Menü reduzieren sollen, welches eigentlich nur dafür da ist um schön auszusehen. Bin gerade unschlüssig ob das vor oder nach dem Menü kommt, mal sehen wie schwer oder einfach Drag & Drop zu implementieren ist. ;)

Dazu auch noch das Sortieren der Spalten, nach Format/Autor/Titel - wobei das jetzt nicht die erste Priorität ist und ich auch noch nicht so die richtige Idee habe wie schwer oder einfach das sortieren umzusetzen ist, wenn jetzt auch sowas wie UTF-8 kommt, vielleicht nach dem "Char" Wert....
Abrunden will ich das ganze auch noch über ein Suchfeld, welches die Spalten durchsucht und auf diese Treffer reduziert, das sollte relativ einfach werden - wenn das Suchfeld erst mal irgendwie logisch integriert und verknüpft ist.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #7
Gestern bin ich noch ein Stück weitergekommen... und habe den PDF Support etwas verbessert und Drag & Drop implementiert.
Per Drag&Drop können jetzt Dateien (gerade nur PDFs) hinzugefügt werden, diese werden dabei auch ausgelesen und Titel und Author dargestellt (auch wenn andere Metadaten erfasst werden).
So wird jetzt die "startxRef" als Punkt genommen, bis zu dem Titel, Author, CreationDate und andere Parameter ausgelesen werden, was alles etwas beschleunigt hat.

Außerdem gibt es jetzt Scrollbars für den Inhalt. Ein Beispiel seht ihr hier beigefügt.



Für das Auslesen von circa. 88 Dateien, gemischte Formate von denen nur PDFs gelesen werden, die 632 MB umfassen (insgesamt 760 MB mit Dateien wie .chm), braucht mein System circa:
[src=text]real 1m30,621s
user 0m21,868s
sys 0m30,040s[/src]

Also circa 1 Minute 30 Sekunden für das Einlesen der MB Daten,

Um die Interaktivität zu erhöhen, wäre auch Threading ganz interessant, also zumindest das man die Leseroutine so aufbaut, das GTK weiterlaufen kann.
Aktuell stottert das Interface beim hinzufügen der Einträge, was etwas komisch wirkt, auch wenn nichts abstürzt, es reagiert halt nur nicht direkt, es aktualisiert sich aber periodisch.
 
Zuletzt bearbeitet:

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Gestern bin ich noch ein Stück weitergekommen...

Du machst wirklich gute Fortschritte. Dann ist das Programm ja bereits bald fertig. Soll das etwas von Richtung von OpenSource gehen oder möchtest du das Tool schreiben und dann so belassen?
Es könnte halt ganz spannend sein, was eventuelle Entdecker deines Git-Repositories an Verbesserungen und Optimierungen vorschlagen könnten.
Bleibt natürlich vollkommen dir überlassen.

Für das Auslesen von circa. 88 Dateien, gemischte Formate von denen nur PDFs gelesen werden, die 632 MB umfassen (insgesamt 760 MB mit Dateien wie .chm), braucht mein System circa:
[src=text]real 1m30,621s
user 0m21,868s
sys 0m30,040s[/src]

Also circa 1 Minute 30 Sekunden für das Einlesen der MB Daten

Das ist doch erstmal gar nicht so schlecht. Klar könnte man das etwas beschleunigen, doch wenn man sich mal sowas wie PDF24 anschaut oder so, das ja auch mehrere PDFs einlesen kann, dann ist das vollkommen in Ordnung.
Auch die stockende Oberfläche ist bei einem abgespeckten Tool verkraftbar. Allerdings wäre etwas wie "x von x Dateien verarbeitet" oder so bestimmt ganz schön. Dann sieht man wenigstens, dass es nicht abgeschmiert ist.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #9
Es wird definitiv eine Open Source Lösung werden und der Code wird, so bald ich denke das man die Software soweit nutzen kann, wie ich es mir vorstelle - auch auf Github gestellt.

Aber aktuell fehlen noch diverse Features und Interface um die Software überhaupt so wie angedacht nutzen zu können, von daher habe ich schon deshalb noch nichts veröffentlicht. Und der GTK3 Teil ist vermutlich auch noch nicht perfekt - ist dass erste mal das ich damit etwas entwickele. ;)

Eine Art Fortschrittsbalken bzw. Hinweis in einer Statusleiste werde ich definitiv einbauen, ist wirklich sinnvoll.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #10
Und wieder ein Update:

Aktuell hinzugekommen sind:
- ein Hauptmenü
Einmal das klassische "Quit" unter "Main" und dann die Dialoge um Dateien einlesen und dann (einen) Ordner einzulesen unter "Operations", hier muß ich noch schauen in wie weit GTK es erlaubt nur Ordner oder nur Dateien auszuwählen. Die Leseroutine für Drag und Drop ignoriert Ordner aktuell auch noch, zumal muß ich noch schauen wie ich an eine Dateiliste von Ordnern/Verzeichnissen komme und ob man diese Rekursiv einlesen lässt, gut wäre wenn ja. Da gibt es aber bestimmt etwas in GNU C Extensions, hoffe ich mal, um an eine Dateiliste zu kommen.

Eventuell kann man hier aber noch so vorgehen das generell alles eingelesen wird und keine Unterscheidung zwischen Dateien/Ordnern gemacht wird, speziell auch im Drag und Drop Modus.

- eine Statusleiste
Zeigt den Status beim einlesen an und welche Datei aktuell gelesen wird und den Stand wie viele Dateien eingelesen sind.

- ein Fortschrittsbalken
Zeigt den Fortschritt des Einlesens an, wie gewünscht

Nachtrag:
- ein Dateiwähler
Der auch bereits einträgt (letzter Screenshot), der neben allen Unterstützen Formaten auch nur pdf, epub, mobi und chm anzeigen kann. Das hinzufügen über das Menü funktioniert damit auch schon. :)


Aktuell funktioniert es so, nur getestet mit der PDF Routine da das Format am aufwendigsten einzulesen ist, alle 4096 Bytes wird die GTK Mainloop aufgerufen. Das hat zur Folge dass das Fenster auch während des Lesens von der Festplatte und Auswerten "verwendet" werden kann.
Ich hatte hier verschiedene Ansätze probiert, aber der Tick alle 4096 Bytes scheint am besten zu sein, da hier auch die Leseroutine nicht mit Mainloop Calls für das Interface und Neuzeichnen und Co überlastet wird, was tierisch langsam gewesen ist.

Und hier ein paar Screenshots...

Startansicht und Willkommens-Nachricht:



Einlesefortschritt und Anzeige der aktuellen Datei in der Statusleiste:



Fertiges Auslesen und Informationen wie viele Dateien eingelesen worden sind und "Operations" Menü:
Hier ist noch geplannt auch anzuzeigen ob es Fehler gegeben hat (wie viele) und ob Dateien nicht gelesen werden konnten. Eventuell wäre es auch interessant an eine Art Log Fenster zu schalten, welche Dateien nicht eingelesen werden konnten.




Und hier der neue Datei Auswahl Dialog:

 
Zuletzt bearbeitet:

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Habe ich es überlesen oder hast du es noch nicht erwähnt: Wie speicherst du eigentlich die verarbeiteten Informationen? Du speicherst ja vermutlich nur ein paar Meta-Daten wie den Namen, das Format, ... und den Dateipfad. Schreibst du das in eine csv mit gesondertem Trennzeichen oder in ein selbst erstelltes Dateiformat? Speicherst du das in einer SQL-Datenbank?
Oder bist du erstmal dabei zur Laufzeit alles zum Laufen zu kriegen und das Speichern und Laden der Daten kommt erst ganz zum Schluss?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #12
Hi Roin,

also was das Speichern betrifft, ich habe noch kein Dateiformat - bisher ist das alles immer mit neu einladen der Daten verbunden gewesen, daher habe ich mir über das Format noch keine Gedanken gemacht - liegt aber auch daran das ich nicht weiß was ich wie einfach ansprechen kann. Für den Reimport der Daten wäre wohl eine CSV am besten, auch in andere Anwendungen - wenn man den will.

Ich brauche zu jeder Datei sowieso den Pfad, den Titel, den/die Autor/en und das Format und den Listenindex?

Auch mit dem sortieren wäre es vielleicht eine Vereinfachung eine Datenbank zu nutzen, aber soweit bin ich noch nicht.
Hast du konkrete Idee wie man das umsetzen könnte? - Ich wäre ganz Ohr :)
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Für den Reimport der Daten wäre wohl eine CSV am besten, auch in andere Anwendungen
An sich schon. Allerdings müsste man dann dabei das Trennzeichen verändern. Immerhin können im Titel zum Beispiel Komma und Simikolon Vorkommen. Aber um das entsprechende Zeichen auszuwählen, kann man ja erstmal nachgucken, welche Zeichen in einem Dateipfad denn gesperrt werden. Vielleicht findet man ja eines, dass in normalen Titeln ebenfalls eigentlich nicht verwendet wird.

Ich brauche zu jeder Datei sowieso den Pfad, den Titel, den/die Autor/en und das Format und den Listenindex?
Wieso solltest du den Listenindex benötigen? Ich würde eher noch sowas wie "eingelesen am" oder sowas hinzufügen. Aber der Listenindex ist ja an sich erstmal total irrelevant.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #14
Das hier ist doch gut: ";"

Das kommt auch mit Sicherheit nicht im Dateinamen vor, wobei ich das nochmal recherchieren sollte. ;)

Naja, die Frage ist ja, soll bei jedem Auslesen der Datei die Liste von oben nach unten abgearbeitet werden, oder würde man die Einträge der Liste an einer Position "einfügen" wollen.

Logisch wäre ja, das die Liste immer 1 zu 1 den Stand hat, den auch die entgültige Liste in der Anzeige besitzt.
Heißt aber, wenn ich ein Element zwei Positionen nach oben "verschieben" (wenn gewollt und geplannt) - das die ganze Datei mit Infos aktualisiert werden muß.
Dabei möchte ich jedoch nur den Index umschreiben, den diese Datei in der Liste hat.

Weißt du jetzt was ich meine? ;)
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Das hier ist doch gut: ";"
Eine CSV benötigt zwei Trennzeichen. Eins zum Trennen der Datensätze und eins zum Trennen der einzelnen Felder. Meistens sind das dann entweder "," und NEWLINE oder "," und ";".
Da müsste man sich das einfach mal überlegen. Das lässt sich an sich ja auch ganz schnell anpassen.


Logisch wäre ja, das die Liste immer 1 zu 1 den Stand hat, den auch die entgültige Liste in der Anzeige besitzt.
Heißt aber, wenn ich ein Element zwei Positionen nach oben "verschieben" (wenn gewollt und geplannt) - das die ganze Datei mit Infos aktualisiert werden muß.
Dabei möchte ich jedoch nur den Index umschreiben, den diese Datei in der Liste hat.

Ich würde beim Einlesen der gespeicherten Infos diese einfach in ein Array schreiben und somit hast du ja automatisch einen Index erstellt.
Wenn du nun die Liste sortierst, speicherst du in einem dazugehörigen Array einfach die Indizes des Daten-Arrays in der Reihenfolge, wie die Liste angezeigt werden soll.
So musst du nicht ständig Indizes anpassen und hast dadurch deutlich weniger Schreibzugriffe, da die Sortierung etwas ist, das du nicht zwingend speichern musst.
Wenn du dann einen Datensatz löscht, könntest du durch den Index in deinem Daten-Array die entsprechende Zeile in der CSV löschen lassen. Die Indizes des Daten-Arrays würden sich dann ja automatisch neu durchnummerieren (Das macht doch C so, wenn du ein Element löscht, oder?). In dem Array, in dem die Sortierungs-Indizes stehen würden, würdest du dann den letzten Index löschen.

Wenn du natürlich einen Index mit in deiner CSV abspeichern möchtest, dann müsstest du dir beim Löschen auch keine Gedanken über neu-Nummerierung der Datensätze Gedanken machen. In einer SQL-Datenbank würde man ja vermutlich auch ein ID-Feld mit auto_increment verwenden.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #16
Du meinst, wenn du eine Linked List als Datenform hast? - Das sich das Element merkt, welches sein Nachbar ist bzw. das darauffolgende?
Im Grunde schon, ja.

Aber das hilft ja nicht dabei den kompletten Datensatz mit IDs zu versehen und niederzuschreiben welche ID welchen Nachbarn hat.

Und diese Liste müsste immer "komplett" aktualisiert werden, daher wäre schon eine Datenbank besser als ein reines Dateiformat.

Bzw. die IDs umzuschreiben oder zu löschen, in der DB, je nach Anwendungsfall.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Wenn du natürlich einen Index mit in deiner CSV abspeichern möchtest, dann müsstest du dir beim Löschen auch keine Gedanken über neu-Nummerierung der Datensätze Gedanken machen. In einer SQL-Datenbank würde man ja vermutlich auch ein ID-Feld mit auto_increment verwenden.

daher wäre schon eine Datenbank besser als ein reines Dateiformat.

Meine Rede :)

Du könntest natürlich auch eine Option anbieten, die aktuelle Liste als CSV zu exportieren, damit man diese in anderen Programmen weiterverwenden könnte. Das könntest du dir ja dann als "Bonus-Feature" in deine Aufgabenliste schreiben. Das ist kein notwendiges Feature aber bestimmt auch nicht schlecht und dadurch sollte das Tool auch nicht überladen werden und weiterhin ein KISS-Projekt bleiben.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #18
Naja, Exportieren könntest du schon, so bald du Zugriff auf die SQ(Lite) Datei bekommst.

Ich überlege mir das noch einmal und schaue zu dem mal, wie es sich Datenbanktechnisch am besten lösen lässt.
 

sia

gesperrt

Registriert
26 März 2015
Beiträge
5.931
Ort
FFM (NSFW)
Ich würde SQLite nutzen.

Stellst du das bald™ auf Github, damit wir uns den Code mal anschauen und andere Leute auch profitieren können?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #20
Guten Abend,

SQLite würde ich spontan auch nutzen wollen - aber ich muss schauen ob es eine C Bibliothek dafür gibt.

Der Code ist nun auf Github zu finden:
https://github.com/jrie/kisslib


Allerdings habe ich heute den Großteil der Zeit damit verbracht, den Import von Dateien und Verzeichnissen rekursiv zu implementieren und auch das CHM "Handling" etwas zu überarbeiten da dies noch fehlerbehaftet war, aktuell sieht es mit den "Testdaten" aber sehr gut aus und scheint ordentlich die Titel auszulesen.

Der Menüpunkt "Verzeichnisse zu importieren" ist nun doch weggefallen, dafür läuft alles nun über den Menüpunkt und Dialog "Import files and folders" - Screenshot siehe weiter oben.
 
Oben