Colbuild

Je to něco přes dva roky, co jsem zde poprvé uvedl aplikaci ColBuild určenou pro automatizovatelné vytváření sbírek na čtečce Sony Reader PRS-505. Od té doby uběhla spousta času, častým používáním jsem odhalil slabá místa programu a nakonec v souvislosti s nákupem čtečky Sony Reader PRS-T1 zjistil, že celou aplikaci je třeba zásadně předělat, pokud ji chci i nadále používat. A tak jsem tady.

Původní motivace pro ColBuild byla, abych měl nástroj, který dokáže „na jedno kliknutí“ zasáhnout do databáze knih ve čtečce a vytvořit v ní struktury, které zařadí zvolené knížky do sbírek (kde sbírka je v kontextu čteček Sony vlastně „playlist pro knihy“ – seznam knížek, které patří k sobě a mají vůči sobě vzájemně nějaké určité pořadí).

Toto samozřejmě zůstalo i v nové přepracované verzi zachováno, současně jsem ale potřeboval vyřešit problémy, která původní verze měla. Co je tedy nového:

  • Podpora pro různé typy čteček: Zatímco původní ColBuild byl pevně vázán na PRS-505, nová verze je napsána tak, aby mohla v principu podporovat libovolnou čtečku, dokonce i čtečku, která nepodporuje sbírky (blíže v dalších bodech). Momentálně je tedy podporováno PRS-505 a PRS-T1, s tím, že přidat podporu pro další čtečku je v zásadě dost jednoduchá záležitost, pokud ovšem ta čtečka má rozumně otevřený a srozumitelný formát databáze knih (např. PRS-505 používá XML soubor, PRS-T1 používá databázi SQLite).

  • Podpora pro různá paměťová zařízení. Už u původního ColBuildu se jasně ukázalo, že je třeba rozlišovat interní paměť od paměťových karet, protože čtečka ke každému médiu přistupuje poněkud jinak. U PRS-T1 se to výrazně zlepšilo, ale pořád jsou určité rozdíly v obsluze.

  • Podpora pro různé formáty knih. Původní ColBuild fungoval tak, že na každou knížku spustil jednu z utilit balíku Calibre, která mu pro knížku sdělila základní metadata. To funguje i nadále, nově lze ale pro libovolný formát e-knih vytvořit speciální parser, který ta metadata získá přímo v programu. Prvním takto podporovaným formátem je EPUB, který se díky tomu načítá mnohem rychleji (spuštění ebook-convert.exe dost dlouho trvá) a načítá víc metadat, mimo jiné i obrázek knihy.

  • Určitě jste si všimli, že když do čtečky nahrajete spoustu knížek, tak po odpojení kabelu čtečka delší či kratší dobu pracuje, když nové knížky zařazuje do databáze. Z toho vychází myšlenka: Když už ColBuild upravuje databázi, nemohl by ji rovnou upravit tak, aby ten počítací krok odpadl? Ano, mohl, a to je další z nových funkcí programu – i pokud nechcete používat sbírky, pouhé spuštění ColBuildu po naplnění paměti čtečky zajistí, že se počáteční výpočet nových knížek podstatně zrychlí, protože ColBuild všechno připraví a čtečka si jen ověří, že to je správně.

  • Použití INI souboru pro uložení playlistu se ukázalo jako značně svazující, mimo jiné v souvislosti s různými kódováními národních znaků (OEM, ANSI, několik variant Unicode), s ukládáním řídících informací výpočtu nebo s možností skládat několik různých souborů do sebe. Nový ColBuild používá pro uložení sbírky XML dokument a výše uvedené nedostatky řeší.

Pokud jde o kód programu, došlo k jistému zhoršení v tom smyslu, že pro ColBuild jsou nyní vyžadovány Delphi 2009 (původní ColBuild fungoval i v Delphi 5), pozitivem je naopak sjednocení knihoven a sestavovacích skriptů s ostatními mými programy.

Soubor definice sbírek

Pro definici sbírek se nyní používá XML soubor, který vypadá zhruba následovně:

<collections>
	<file_prefix>!_books/Czech/</file_prefix>
	<collection>
		<name>Bílá vydra (Kutík)</name>
		<name_sort>BILA VYDRA (KUTIK)</name_sort>
		<file_prefix>Kutik Josef/</file_prefix>
		<files>
			<file>bila_vydra</file>
			<file>navrat_bile_vydry</file>
			<file>bila_vydra_na_stope</file>
			<file>bila_vydra_v_zaloze</file>
			<file>bila_vydra_na_vlci_stezce</file>
			<file>bila_vydra_u_bobri_hraze</file>
			<file>bila_vydra_na_hranici_lesu</file>
		</files>
	</collection>
	<collection>
		<name>Hrabě Monte Cristo (Dumas)</name>
		<name_sort>HRABE MONTE CRISTO (DUMAS)</name_sort>
		<file_prefix>Dumas Alexandre/</file_prefix>
		<all_files>hrabe_monte_cristo_</all_files>
	</collection>
	<include>soudce_ti.xml</include>
</collections>
  • Kořenový prvek seznamu sbírek je collections. Uvnitř collections se pak může vyskytovat libovolné množství prvků file_prefix, collection a include v libovolném pořadí, které se zpracovávají postupně, jak jsou nacházeny.

  • include umožňuje „odskočit“ si do jiného souboru sbírky, zpracovat ho a pak se zase vrátit do souboru původního. Já to používám tak, že mám knížky v angličtině a v češtině; sám je čtu v obou jazycích, do čteček rodičů ale nahrávám pouze české knížky. include mi umožní mít samostatné popisy sbírek pro české a anglické knížky, které posléze spojím v jednom souboru všechno.xml kódem:

    <collections>
    	<include>czech.xml</include>
    	<include>english.xml</include>
    </collections>

    Pozn.: Cesta uvnitř include je relativní vůči souboru, ze kterého je volána. Tzn. pokud budu mít v souboru C:\knihy\vsechno.xml uveden <include>ceske/seznam.xml</include, bude se vkládat soubor C:\knihy\ceske\seznam.xml (bez ohledu na to, co je aktuální pracovní adresář).

  • file_prefix určuje cestu, ve které se knížky nachází, abych ji nemusel pořád dokola vypisovat. Na začátku je prefix prázdný, každé výskyt file_prefix k němu připojí obsah elementu. Např. v XML dokumentu výše je file prefix na začátku prázdný, na druhém řádku se k němu přidá !_books/Czech/ a na šestém řádku ještě Kutik Josef/, takže knížky na řádcích 8-14 ve skutečnosti odkazují na !_books/Czech/Kutik Josef/bila_vydra apod.

    Lze také začít úplně nový prefix, bez ohledu na to, co v něm bylo dříve, pomocí atributu replace: <file_prefix replace="1">jiny/prefix/</file_prefix>.

  • collection popisuje jednu konkrétní sbírku. Vždy musí obsahovat name, které určuje název sbírky, a jeden z elementů files a all_files, ke kterým se dostanu dále. Volitelné je name_sort, podle kterého má čtečka sbírky řadit (pokud to umí – např. čtečky Sony PRS-T1 řazení umí, ale jen podle znaků anglické abecedy) a file_prefix, který funguje stejně, jako bylo uvedeno výše.

  • files určuje seznam souborů (elementů file), které se nacházejí ve sbírce. Před ně se vždy dopíše aktuální file_prefix, za ně se případně doplní přípona souboru knihy (protože knihu mohu mít v několika různých formátech, např. epub a txt, přičemž formát nemá vliv na pořadí ve sbírce. Proto je obecně lepší do definice sbírky příponu vůbec nepsat a nechat ColBuild, ať si s tím poradí.

  • all_files umožňuje zkrácené vytváření sbírek, které mají názvy souborů řazené abecedně, těch souborů je hodně a pořád přibývají, takže by vytváření plného seznamu pomocí files a spousty file bylo zbytečně pracné. Funguje to tak, že ColBuild najde všechny soubory, jejichž názvy začínají obsahem all_files, seřadí je podle abecedy a z tohoto seznamu vytvoří sbírku. V demonstračním souboru je to předvedeno na sérii Hrabě Monte Cristo, která má u mě na disku šest knížek s názvy hrabe_monte_cristo_1.epub, hrabe_monte_cristo_2.epubhrabe_monte_cristo_6.epub. Abych je nemusel všechny vypisovat (což by mi u Monte Crista až tak nevadilo, ale u sbírky povídek Johna Wyndhama, kde mám už teď 40 souborů a ještě zdaleka nejsem na konci, už docela ano), použil jsem <all_files>hrabe_monte_cristo_</all_files>, které to vyřídí za mě (a kdybych v adresáři Dumas Alexandre měl jenom Monte Crista, klidně bych mohl napsat i jenom <all_files></all_files> – „udělej mi sbírku ze všech knížek, které jsou v adresáři“).

Používání programu

ColBuild se používá z příkazové řádky, jak je u mě zvykem. Pokud ho zavoláte bez parametrů nebo s parametrem -? nebo -h, zobrazí nápovědu. Další parametry jsou uvedeny právě tam; zde vypisuji přehled těch, které jsou platné pro verzi 0.10:

  • -d název říká ColBuildu, že má vytvářet databázi pro zařízení název. Ve verzi 0.10 jsou podporována zařízení prs-505 (Sony Reader PRS-505), prs-t1 (Sony Reader PRS-T1) a prs-t1-h (PRS-T1 s hackem pro zobrazování posledně čtečných knih na hlavní obrazovce; toto rozlišení je potřeba pouze v případě, že vytváříte úplně novou databázi [tzn. když smažete starý soubor books.db a necháte ColBuild, ať vytvoří nový úplně z ničeho], při editaci staré databáze se to chová stejně jako obyčejné prs-t1).

  • -m typ určuje typ paměťového zařízení, pro které se má sbírka vytvářet. U čteček Sony je to podstatné, protože databáze vytvořená pro špatný typ paměťového média buď nefunguje vůbec, nebo sice funguje, ale nemá ty přínosy, které by mít měla (zrychlené první načtení atd.). Možné typy v současné době jsou int (interní paměť), sd (SD [Secure Digital] karta), ms (MS [Memory Stick Duo] karta).

  • -r adresář říká, ve kterém adresáři se mají hledat knihy. Standardně je zde aktuální pracovní adresář, což je vhodné v případě, že ColBuild spouštíte přímo z disku cílového paměťového média, v úvahu ale připadají i zápisy typu -r f:\ (pokud je interní paměť čtečky v počítači vidět jako disk F:).

  • -q resp. -q- zapne resp. vypne tichý režim, kdy je potlačena většina výpisů o průběhu v výpočtu. Může se hodit do dávkových souborů, jinak je asi k ničemu. Výchozí hodnota je -q- (normální režim).

  • -mu, -mc a -mn určují, jak se má pracovat s metadaty knih. Výchozí hodnotou je -mu, která pro každou podporovanou knihu vyhledá metadata a propíše je do databáze. -mc dělá totéž, ale jen pro knihy, které ještě v databázi nejsou, takže může značně urychlit výpočet v případě, že do čtečky přidáváte další knihy, ale už existujícím metadata neměníte. -mn vypíná práci s metadaty úplně, kromě knih, které ještě v databázi čtečky nebyly a přitom jsou součástí některé sbírky – u těchto knih se metadata nutně načíst musí, jinak by nefungovalo ani zařazování do sbírek. Výchozí hodnota je -mu (vytvářet metadata u všech knih).

  • -dc a -dc- říká, jestli se mají resp. nemají vytvářet „falešné“ náhledy knížek v případech, kdy ColBuild nedokáže najít obrázek obalu (momentálně umí ColBuild najít opravdový obal jen pro knihy ve formátu EPUB, a to ještě ne pro všechny). Falešné náhledy jsou dobré proto, že jinak u PRS-T1 zkouší čtečka vytvořit náhledy sama a dost jí to trvá. Výchozí hodnota je -dc (vytvářet falešné covery).

  • -c resp. -c- říká, jestli se mají resp. nemají vytvářet sbírky. -c- (nevytvářet sbírky) pro vás může být zajímavé, pokud se sbírkami nepracujete, ale chcete, aby ColBuild vyoplnil databázi a ušetřil tak práci čtečce.

  • V případě použití -c je dále nutné uvést jméno souboru, který popisuje sbírku, viz kapitola Soubor definice sbírek výše.

Pro programátory

Zdrojový kód programu je uložen v adresáři source. Pro kompilaci jsou vyžadovány Delphi 2009 nebo vyšší, připravena je dávka build.bat, která sestavení programu ze zdrojových kódů provede.

Pro práci programu jsou použity knihovny dalších autorů:

Download

  • ColBuild v0.10 (691 KB, 25.06.2012).
    Zdrojáky (2536 KB).
    Kompletně přepsáno, změny popsány v tomto článku.

Staré verze (0.09 a starší) určené jenom pro PRS-505 naleznete na stránce PRS-505: Sbírky.

Podobné příspěvky:

Leave a Reply

Themocracy iconWordPress Themes

css.php