↩︎ Powrót do strony głównej

Konfiguracja synchronizacji postępu czytania, notatek i podkreśleń

Miesiąc temu, w nocy z soboty na niedzielę nie mogłem zasnąć, więc usiadłem do kompa, żeby dokończyć konfigurowanie mojej infrastruktury czytelniczej. Do pełnego zadowolenia brakowało mi synchronizacji postępu czytania oraz notatek i podkreśleń.

Na pierwszy ogień poszła synchronizacja postępu czytania. KOReader ma do tego dedykowaną aplikację, gotową do łatwego postawienia dzięki użyciu Dockera. Ze względu na to, że korzystam z hostingu współdzielonego ta opcja nie wchodziła jednak w grę. Dyskwalifikowało to nie tylko oficjalną aplikację, lecz także drugą, którą znalazłem. Szczęśliwie okazało się, że niedawno temu ktoś napotkał podobny problem i zaimplementował API synchronizacji w prostym projekcie php, pozbawionym żadnych zewnętrznych zależności. Jego postawienie i konfiguracja zajęły około kwadransa. Cały proces obejmował utworzenie i zabezpieczenie domeny (Let’s Encrypt), upload aplikacji na serwer i zarejestrowanie nowego użytkownika (już z poziomu przeglądarki). Po tym zablokowałem opcję rejestracji oraz upewniłem się, że katalog z bazą SQLite nie jest osiągalny z poziomu przeglądarki. Okazało się, że był osiągalny. Aby temu zapobiec wystarczyło w katalogu z bazą utworzyć plik .htaccess z następującą zawartością:

<IfVersion < 2.4>
    Deny from all
</IfVersion>
<IfVersion >= 2.4>
    Require all denied
</IfVersion>

Powyższe dwa bloki warunkowe robią to samo, tylko dla różnych wersji Apache: odmawiają dostępu do plików poprzez zwrócenie kodu 403 (Forbidden). Po upenieniu się, że aplikacja jest zabezpieczona przyszła pora na skonfigurowanie synchronizacji na moim Kindlu. Aby to zrobić należało otworzyć jakąkolwiek książkę (konfiguraji nie da się wykonać z poziomu ekranu głównego KOReadera), a następnie stuknąć w górną część ekranu, ikonę klucza i śrubokręta oraz wybrać “Synchronizacja postępu”. Następnie klikamy w “Niestandardowy serwer synchronizacji” i wpisujemy nazwę naszej domeny. Potem przechodzimy do “Zaloguj/zarejestruj”, gdzie wpisujemy login i hasło użytkownika, którego utworzyliśmy wcześniej na naszej nowo utworzonej stronie. Dodatkowo zaznaczamy “Automatycznie synchronizuj dokumenty”, żeby nie musieć robić tego ręcznie. Istotna uwaga - jeśli mamy na urządzeniu już rozpoczęte książki to postęp ich czytania nie zostanie zsynchronizowany dopóty, dopóki nie zaczniemy jej ponownie czytać lub zrobimy tego ręcznie wchodząć w każdą z nich i klikając Ustawienia > Synchronizacja postępu > Zapisz teraz postępy z tego urządzenia. To wszystko, synchronizacja powinna już działać. Na ten moment jedynym maknamentem phpkoreadersync jest język interfejsu webowego (niderlandzki). Nie jest to jednak istotna wada z dwóch powodów: po pierwsze, w zasadzie po pierwszej konfiguracji nie będziemy już korzystać z webowego interfejsu; po drugie, pomijając możliwości automatycznego tłumaczenia stron (czy to przez przeglądarkę czy pluginy do niej) interfejs jest tak oczywisty, że nie potrzeba znać języka, żeby go obsłużyć.

Oddzielnym tematem jest synchronizacji notatek i podkreśleń. Są one przechowywane w plikach sidecar (.sdr) przechowywanymi razem z książkami, których dotyczą. Jednym ze sposobów ich współdzielenia pomiędzy urządzeniami jest zwykła synchronizacja plików, którą KOReader wspiera domyślnie. Ustawia się ją klikając w Ustawienia > Dysk w chmurze. Naszym oczom powinna pokazać się strona ze skonfigurowanymi serwerami synchronizacji. W moim prypadku była ona pusta. Aby skonfigurować nowy dysk klikamy ikonę plusa, znajdującą się w lewym górnym rogu strony. Do wyboru mamy następujące opcje: Dropbox, FTP, WebDAV. Moim wyborem była ostatnia z nich, gdyż hostuję własną instancję Nextcloud, która wspiera tę formę synchronizacji, w związku z czym nie muszę stawiać żadnej dodatkowej usługi. W katalogu domowym mojej instacji utworzyłem nowy folder (“KOReader”), który będzie mi służył jako miejsce synchronizacji książek i związanych z nimi plików sidecar. Ponieważ mam w Nextcloudzie skonfigurowane uwierzytelnianie dwuskładnikowe, to aby być w stanie się połączyć musiałem wygenerować nowe hasło aplikacji w interfejsie Nextcloud przechodząc do Ustawienia > Bezpieczeństwo a następnie sekcji “Urządzenia i sesje”. Tam wpisujemy nazwę aplikacji (np. “KOReader WebDAV”) i klikamy “Utwórz nowe hasło aplikacji” po czym w nowym oknie pojawi się nazwa użytkownika oraz hasło, które gdzieś zapisujemy (najlepiej w menadżerze haseł), ponieważ będzie nam za chwilę (i w przyszłości) potrzebne. Mając nowe hasło aplikacji wracamy do KOReadera i wypełniamy pola formularza połączenia WebDAV:

  • nazwę serwera (np. “Nextcloud”),
  • adres WebDAV (znajdziemy je w naszej instancji Nextcloud - po przejściu do zakładki “Pliki” klikamy w lewym dolnym rogu na Ustawienia Plików i przechodzimy do sekcji “WebDAV”, gdzie znajdziemy sekcję “URL WebDAV” - a jeśli utworzyliśmy dedykowany katalog, z którego chcemy korzystać podczas synchronizacji to dodajemy jego nazwę na końcu, co w efekcie końcowym daje nam coś w rodzaju “https://mojainstancja.com/remote.php/dav/files/krystian/KOReader"),
  • nazwę użytkownika i hasło (które zapisaliśmy wcześniej) oraz
  • folder początkowy (ścieżka do katalogu, który oznaczyliśmy w naszym KOReaderze jako katalog domowy, w którym przechowujemy książki, w moim przypadku “/documents”)

a następnie klikamy “Zapisz”. Na liście powinien pojawić się nowy element. Niestety w moim przypadku po jego kliknięciu otrzymałem komunikat “Nie udało się pobrać listy folderów. Sprawdź konfigurację oraz połączenie sieciowe”. W pierwszej kolejności sprawdziłem czy jestem w stanie połączyć się z moim katalogiem przy wykorzystaniu powyższych danych z mojego laptopa. Dane okazały się poprawne. Dopiero po chwili zrozumiałem swój błąd - folder początkowy nie oznaczał miejsca na moim Kindlu, lecz wskazywał katalog początkowy WebDAV. Po zmianie wartości tego parametru na “/” połączenie przebiegło bez problemu i byłem w stanie zobaczyć wszystkie pliki z mojej instancji Nextcloud, znajdujące się w tym katalogu. Niestety okazało się, że pomyliłem się kolejny raz, i to całkiem solidnie. Opcja “Dysk sieciowy” pozawala na ni mniej, ni więcj połączenie z dyskiem sieciowym i zapisywanie plików z tego dysku na Kindlu. Nie istnieje opcja synchronizacji głównego katalogu w obie strony - w tym plików sidecar.

Doperio dalsza kwerenda tematu pozwoliła mi znaleźć właściwe rozwiązanie, i to takie, które obejmowało nie tylko synchronizację notatek i podkreśleń, lecz także postępu czytania. Rozwiązaniem tym okazał się projekt koshelf. Poza wymienionymi funkcjonalnościami dostarcza on również wiele innych, w tym przyjemny webowy interfejs. Co ważne, można go uruchomić na kilka różnych sposobów, w tym z pliku binarnego, co jest kluczowe z perspektywy korzystania z hostingu współdzielonego. Cały proces jest dobrze opisany w dokumentacji projektu. Elementem spinającym koshelf oraz urządzenie jest Syncthing, który należy skonfigurować na obu urządzeniach: na serwerze (z wykorzystaniem właściwej binarki) oraz KOReaderze (z wykorzystaniem pluginu koreader-syncthing). W związku z dostarczanymi funkcjonalnościami zdecydowałem się porzucić phpkoreadersync na rzecz koshelf, który dostarczał mi wszytkich potrzebnychmi funkcji na raz. Dokonałęm jeszcze jednej zmiany - zdecydowałem się umieścić Koshelf na swoim domowym serwerze, a nie na hostingu współdzielonym, co wymagało najpierw skonfigurowania reverse proxy (ale to temat na oddzielny wpis). Proces jego instalacji oraz skonfigurowania przebiegł bez problemów, podobnie jak w przypadku Syncthing. Po miesiącu korzystania mogę polecić to rozwiązanie - jak do tej pory jest niezawodne i spełnia moje potrzeby.