View Single Post
Old 07-28-2025, 09:50 AM   #17
Erlend
Enthusiast
Erlend began at the beginning.
 
Erlend's Avatar
 
Posts: 30
Karma: 10
Join Date: Mar 2019
Location: Norway
Device: Onyx Boox Poke 3 with JetReader
Quote:
Originally Posted by ne0rmatrix View Post
Are you using the OPDS feed on the content server? or are you scraping the mobile/desktop version?
Neither, kinda. I'm using the JSON API that the Content server uses to render the web client. Basically the same as the OPDS feed (based on a quick look), but probably not as well documented.


Quote:
Originally Posted by ne0rmatrix View Post
How do you do the syncing data?
JetReader can sync read status and ratings back to Calibre. This is done through the same API as above (so basically "emulating" a user in the Content server web interface).

Synchronization of user data, such as reading progress, statistics and bookmarks, is done in two different ways.

1. File-based: it is possible to sync using Dropbox or WebDav. In these cases, I use a JSON format that stores the data I want to sync to the external storage, and reads the same data from other devices (each device store their data in a separate folder). Then each device must read the data from the other devices, and merge it with the local data. Reading files through these services is usually a bit slow, so I store some metadata in separate files, that are used to check which of the other files I must check/download. Since each device merges data from the other devices, all data will eventually be duplicated on each device, but given proper IDs and date stamps, it is possible to avoid merging in data more than once. When something is deleted on one device, that ID must be marked as deleted, and stored somewhere, so that other devices can also delete it, instead of merging it back in. It's a bit messy, but it works. This could work with any file-based service, such as Google Drive or OneDrive as well.

2. Server-based: if the user chooses to sync via my server at jetreader.net, data is stored in an SQL database. Syncing is much quicker, and the merging algorithm is much easier, but as you say, that obviously requires server infrastructure, and the related costs for that.

Quote:
Originally Posted by ne0rmatrix View Post
BTW your app looks beautiful. 100 percent better than what mine looks like! I am more of an SDK developer than anything else. I like creating apps for myself that meet my own needs. Yours has a ton of features too. Most of them I have zero interest in. Hence why I tend to make my own things. But I can appreciate what you have done.
Thank you! My goal was also to make an app that meets my own needs, but I always keep in mind what could be interesting for others as well. Once I'm ready to launch it properly, I guess we'll see if I understood "others" well enough. I'm also considering making this open source, but I got scared by some other reading app (can't remember which one right now) that said they had to go closed source because so many Chinese knock-offs kept appearing. Perhaps I'll open it up later.

Quote:
Originally Posted by ne0rmatrix View Post
I can almost guarantee if we were to compare performance your app would beat the pants off of mine.
Thanks again! I try to make it as efficient as possible.
Erlend is offline   Reply With Quote