ColBuild: Sbírky na PRS-505

Kdybych měl jmenovat jednu věc, která mi na Sony Readeru opravdu vadí, tak to je jeho podpora-nepodpora pro adresáře: Reader sice správně najde všechny knihy, ať jsou rozházené po adresářích jak chtějí, ale potom je uživateli nabídne jen v plochém seznamu. Jaký je to problém ví každý, kdo má na čtečce víc než takových sto knih, případně víc než dvacet knih začínajících na jednu skupinu písmen - velmi to znepříjemňuje hledání konkrétní knihy. Sony Reader sice nabízí tzv. sbírky (collections - něco velmi podobného playlistu z hudebních přehrávačů), ale to je jen slabá náhrážka. Základní problém je v tom, že ačkoliv počet sbírek je teoreticky neomezený, praktickým maximem je tak dvacet, možná třicet kousků - potom už začne být vyhledávání sbírky natolik pracné, že to skoro nestojí za to. Bohužel, když nic lepšího není, musíme vzít zavděk i touto náhrážkou. Jediný problém je, jak ji vytvořit. Stejně jako v případě hromadných konverzí z HTML jsem se nespokojil se zjištěním, že to Calibre ani eBook Library neumí podle mých představ, a napsal jsem si vlastní prográmek založený na stejných principech jako H2LRF - práce z příkazové řádky a vytváření sbírek na co nejméně zmáčknutých kláves.

ColBuild

(Přeskočit návod)

Nástroj pro vytváření sbírek jsem nazval ColBuild a stejně jako H2LRF je to aplikace spouštěná z příkazové řádky. Její činnost ovládají jednak parametry na příkazové řádce, jednak dva definiční soubory - společný colbuild.ini a pro to které paměťové médium specifický soubor s libovolným jménem. Všechny tyto soubory jsou programem pouze čteny a mohou tedy být umístěny na médiu se zakázaným zápisem.

ColBuild.ini

Soubor colbuild.ini je standardní Windowsovský INI soubor obsahuje definici všech společných parametrů. Definice se nachází v sekci Config a mohou nabývat těchto hodnot:

Definice sbírky (playlist)

Definice sbírky má strukturu velmi podobnou standardnímu INI souboru - jeho sekce tvoří názvy playlistu, obsahem každé sekce je seznam souborů, které do toho playlistu patří (v pořadí, v jakém jsou v sekci zapsané). Tzn. playlist s obsahem:

[Pan prstenu]
Tolkien\Spolecenstvo_prstenu.pdf
Tolkien\Dve_veze.lrf
Tolkien\Navrat_krale.lrf
[Oblibene]
Tolkien\Dve_veze.pdf
Pratchett\Barva_kouzel.txt
cool.rtf

vytvoří dvě sbírky, jednu pojmenovanou Pan prstenu a druhou Oblibene. Pozor! V názvech souborů záleží na velikosti písmen a vřele nedoporučuji ani v názvech souborů ani názvech sbírek používat znaky s diakritikou.

Před definicí první sbírky mohou být vypsány libovolné z parametrů povolených v ColBuild.ini, které v tom případě budou použity přednostně. Sem patří právě ty parametry, u kterých jsem výše psal, že je lepší dávat je do playlistu.

Příkazový řádek

Příkazový řádek ColBuild opět do jisté míry duplikuje parametry z ColBuild.ini. Drtivou většinu z nich asi napíšete rovnou do colbuild.ini nebo do playlistu a na příkazové řádce zadáte parametr jediný - cestu k playlistu. Ale pokud se chcete obejít bez souboru playlistu, máte možnost. Povolené parametry jsou:

Reálný příklad

Reálný příklad. Calibre mám nainstalován v d:\progs\calibre. Knihy mám nahrané v interní paměti čtečky v adresáři books:

/books/Lynn Jonathan/JPM/01-jiste_pane_ministre_1.lrf
/books/Lynn Jonathan/JPM/02-jiste_pane_ministre_2.lrf
/books/Lynn Jonathan/JPM/03-jiste_pane_premiere_1.lrf
/books/Lynn Jonathan/JPM/04-jiste_pane_premiere_2.lrf
/books/Pratchett Terry/Zemeplocha/01-barva_kouzel.lrf
/books/Pratchett Terry/Zemeplocha/02-lehke_fantasticno.lrf

Chci vytvořit dvě sbírky (JPM a Zeměplocha). Soubor playlistu bude uložen v kořenovém adresáři interní paměti čtečky v souboru playlist.ini a celé vytváření playlistu chci mít na co nejméně kláves (tj. na dvě).

V zásadě mám dvě varianty, jak to udělat - jednu s playlistem a jednu bez něj.

Varianta se souborem playlistu

colbuild.ini:

[Config]
CalibrePath=D:\Progs\Calibre
GenerateMetadata=1
RefreshExisting=1
Recursive=1
FileNameRegExp=\.(lrf|pdf|txt|rtf|epub)$
TimeDelta=0

playlist.ini:

MemoryType=int
Cache=database\cache\media.xml
BooksPath=\books\
BooksBasePath=books/
[JPM]
Lynn Jonathan/JPM/01-jiste_pane_ministre_1.lrf
Lynn Jonathan/JPM/02-jiste_pane_ministre_2.lrf
Lynn Jonathan/JPM/03-jiste_pane_premiere_1.lrf
Lynn Jonathan/JPM/04-jiste_pane_premiere_2.lrf
[Zemeplocha]
Pratchett Terry/Zemeplocha/01-barva_kouzel.lrf
Pratchett Terry/Zemeplocha/02-lehke_fantasticno.lrf

Příkazový řádek:

colbuild.exe playlist.ini

Abych splnil požadavek "dvě klávesy", tak si pro tento příkazový řádek vytvořím dávkový (BAT) soubor např. c:\windows\c.bat:

@echo off
colbuild.exe playlist.ini

který pak budu spouštět prostě c [enter]

Variante bez souboru playlistu

colbuild.ini je přesně stejný jako v první variantě, playlist.ini nemám vůbec, zato mám složitější příkazový řádek:

colbuild.exe -int -c database\cache\media.xml -cr books/[^^/]+/([^^/]+)/[^^/]+\.lrf -crt $1

Ten si opět uložím do příslušného BAT souboru.

Vytváření sbírek bez souboru playlistu má ovšem několik drobných nevýhod:

  1. Jen obtížně lze jednu knihu zařadit do víc sbírek.

  2. Pokud mají být sbírky ve správném pořadí, musí jít jména souborů abecedně po sobě (proto ta čísla na začátku názvů souborů knih).

  3. Celý archív musí dodržovat stejnou strukturu.

  4. Musíte dokázat zformulovat příslušný regulární výraz a zapsat ho prostředky příkazového řádku (proto jsou ve druhé variantě zdvojená "mocnítka" ^^ - znak ^ má v příkazovém řádku Windows zvláštní význam a zápis to musí reflektovat..

Download

Program je určen a testován pro prostředí Windows a docela jistě nebude fungovat na jiném operačním systému bez úprav. Při přeložení FreePascalem doporučuju používat pouze první variantu se souborem playlistu, protože pod FPC bůhvíproč neproběhne seřazení souborů podle abecedy a sbírky tak nejspíš budou mít špatné pořadí knih, i kdyby jejich soubory byly pojmenovány správně. Samozřejmě jde opět o freeware pod podmínkou, že nebude prodáván a bude zachován odkaz na mě jakožto autora.

ColBuild v0.05 (13.4.2009, 591 KB)