[iOS] Downloaded ebooks do not sync progress back to server when connected #818

Open
opened 2026-04-24 23:39:11 +02:00 by adam · 4 comments
Owner

Originally created by @dathbe on GitHub (Jan 2, 2024).

Steps to reproduce

  1. Download book (tested with epub) to iOS device.
  2. disconnect from internet
  3. Read
  4. Reconnect to internet
  5. Progress is not synced to other devices.

Expected behaviour

Whenever device is connected to the internet, it should sync progress for downloaded books back to the server. Conflicts can be resolved by either preferring the furthest-read position (S his seems right to me, but maybe I’m missing a common use case) or by last read date.

If the current behavior is intended behavior, I’d request an enhancement of a button in the menu next to “delete local item” that does “sync progress to server”.

Actual behaviour

When a book (tested with epub) is downloaded, progress is saved for that device, but does not seem to sync back to the server. When connected to the internet and the downloaded book is opened, the server-synced progress page loads for a half second and then it jumps to the local-synced progress page. But that local progress does not seem to sync back to the server and other devices until the “delete local item” is used.

it’s possible this is expected behavior, but I would think syncing automatically to the furthest progress point would be useful. At a minimum, a button to “sync progress to server” would be a welcome enhancement.

Environment data

Audiobookshelf Version:
2.7.1 Docker

  • Android App?
  • [x ] iOS App?

Android Issue

Android version:

Device model:

Stock or customized system:

iOS Issue

iOS Version:
IPadOS 16.6

iPhone model:
iPad 6th Gen

Originally created by @dathbe on GitHub (Jan 2, 2024). ### Steps to reproduce 1. Download book (tested with epub) to iOS device. 2. disconnect from internet 3. Read 4. Reconnect to internet 5. Progress is not synced to other devices. ### Expected behaviour Whenever device is connected to the internet, it should sync progress for downloaded books back to the server. Conflicts can be resolved by either preferring the furthest-read position (S his seems right to me, but maybe I’m missing a common use case) or by last read date. If the current behavior is intended behavior, I’d request an enhancement of a button in the menu next to “delete local item” that does “sync progress to server”. ### Actual behaviour When a book (tested with epub) is downloaded, progress is saved for that device, but does not seem to sync back to the server. When connected to the internet and the downloaded book is opened, the server-synced progress page loads for a half second and then it jumps to the local-synced progress page. But that local progress does not seem to sync back to the server and other devices until the “delete local item” is used. it’s possible this is expected behavior, but I would think syncing automatically to the furthest progress point would be useful. At a minimum, a button to “sync progress to server” would be a welcome enhancement. ### Environment data Audiobookshelf Version: 2.7.1 Docker - [ ] Android App? - [x ] iOS App? #### Android Issue Android version: Device model: Stock or customized system: #### iOS Issue iOS Version: IPadOS 16.6 iPhone model: iPad 6th Gen
adam added the bugiOS labels 2026-04-24 23:39:11 +02:00
Author
Owner

@outatime88 commented on GitHub (Jan 21, 2024):

Same experience is present on Android app, I repeated the steps except replacing internet with home wifi where my server is located.

@outatime88 commented on GitHub (Jan 21, 2024): Same experience is present on Android app, I repeated the steps except replacing internet with home wifi where my server is located.
Author
Owner

@nichwall commented on GitHub (Jan 21, 2024):

To be clear, you are not connected to the server while reading the downloaded ebook?

Does the syncing work properly when reading the downloaded ebook while connected to the server?

Is there an audiobook on the same library item?

@nichwall commented on GitHub (Jan 21, 2024): To be clear, you are not connected to the server while reading the downloaded ebook? Does the syncing work properly when reading the downloaded ebook while connected to the server? Is there an audiobook on the same library item?
Author
Owner

@dathbe commented on GitHub (Jan 21, 2024):

I've done a bit of testing, and the issue seems inconsistent. I can't find a specific pattern. It does seem to sometimes happen when both devices (iPad with book downloaded and iPhone with book not downloaded) remain connected to the internet/server the whole time. Mostly what I'm seeing in that situation is that the device with the download will grab the current progress when opening the book, but the device without the download will not. Which is particularly weird because when I check the webapp, the progress does seem to be updated by the app with the download. So I'm not sure why the other device isn't pulling that information.

If I hard close and restart the app on the iPhone (no download), the progress will update.

Something even stranger is happening when I disconnect the iPad. I disconnected, read a chapter, then reconnected. The progress did not update on the iPhone or webapp. When I closed and relaunched teh iPad app, the book opened 1 1/2 chapters earlier. I have no idea where that came from.

I think some further testing would be needed to figure out exactly what the pattern is, but I have some suggestions for trying to eliminate the problem altogether:

  1. App should attempt to sync current progress of the current book to the server any time a book is closed (I see some action when I close books, so this may already be implemented).
  2. App should attempt to sync current progress of the current book from the server any time a book is opened (this does not seem to be happening).
  3. App should sync global progress from the server any time the app is opened, even if the app has been sitting in memory in the background.
  4. App should sync global progress to the server any time the app is closed (this may be hard to implement because "close" could mean switch app, return to home screen, or hard close, depending on the situation).
  5. There should be a pull-to-refresh implemented so those of us who are paranoid or know we've been doing some weird multi-device or online/offline stuff can make sure progress is synced. See #590 .
  6. A sync button could be added to the top to do the same thing for those who don't know to pull to refresh.

The above should reduce the number of sync conflicts, but will not completely eliminate them. There should be some clear, well-considered rules about how conflicts in sync progress are resolved, for example in the following situations:

a) book opened and read on device A while offline. Book is opened and user flips back a number of pages on device B. Both then try to sync to the server. (I would suggest the last timestamp should control.)
b) book opened and read on device A while offline. Book is opened and then closed without any page turns on device B [or, for audiobooks, only listening for a few seconds because you realize it's not in the right place]. (I would suggest that the opening on B should be ignored)
c) book opened and read on device A while offline. Book opened, page flip backward, page flip forward, closed on same page it started. (I would suggest B should still be ignored).
d) book opened and read on device A while offline. Book is opened and read on device B. (I would suggest timestamp should control, but I could also make the case for furthest read position)
e) I'm sure there are other scenarios.

Anyway, this is an amazing app, I just hope I'm offering some suggestions to consider to make it even better.

@dathbe commented on GitHub (Jan 21, 2024): I've done a bit of testing, and the issue seems inconsistent. I can't find a specific pattern. It does seem to sometimes happen when both devices (iPad with book downloaded and iPhone with book not downloaded) remain connected to the internet/server the whole time. Mostly what I'm seeing in that situation is that the device with the download will grab the current progress when opening the book, but the device without the download will not. Which is particularly weird because when I check the webapp, the progress does seem to be updated by the app with the download. So I'm not sure why the other device isn't pulling that information. If I hard close and restart the app on the iPhone (no download), the progress will update. Something even stranger is happening when I disconnect the iPad. I disconnected, read a chapter, then reconnected. The progress did not update on the iPhone or webapp. When I closed and relaunched teh iPad app, the book opened 1 1/2 chapters earlier. I have no idea where that came from. I think some further testing would be needed to figure out exactly what the pattern is, but I have some suggestions for trying to eliminate the problem altogether: 1) App should attempt to sync current progress of the current book to the server any time a book is closed (I see some action when I close books, so this may already be implemented). 2) App should attempt to sync current progress of the current book from the server any time a book is opened (this does not seem to be happening). 3) App should sync global progress from the server any time the app is opened, even if the app has been sitting in memory in the background. 4) App should sync global progress to the server any time the app is closed (this may be hard to implement because "close" could mean switch app, return to home screen, or hard close, depending on the situation). 5) There should be a pull-to-refresh implemented so those of us who are paranoid or know we've been doing some weird multi-device or online/offline stuff can make sure progress is synced. See #590 . 6) A sync button could be added to the top to do the same thing for those who don't know to pull to refresh. The above should reduce the number of sync conflicts, but will not completely eliminate them. There should be some clear, well-considered rules about how conflicts in sync progress are resolved, for example in the following situations: a) book opened and read on device A while offline. Book is opened and user flips back a number of pages on device B. Both then try to sync to the server. (I would suggest the last timestamp should control.) b) book opened and read on device A while offline. Book is opened and then closed without any page turns on device B [or, for audiobooks, only listening for a few seconds because you realize it's not in the right place]. (I would suggest that the opening on B should be ignored) c) book opened and read on device A while offline. Book opened, page flip backward, page flip forward, closed on same page it started. (I would suggest B should still be ignored). d) book opened and read on device A while offline. Book is opened and read on device B. (I would suggest timestamp should control, but I could also make the case for furthest read position) e) I'm sure there are other scenarios. Anyway, this is an amazing app, I just hope I'm offering some suggestions to consider to make it even better.
Author
Owner

@Dasnap commented on GitHub (Jul 7, 2025):

I would just like to add that I've noticed similar issues with downloaded audiobook progress.

I use an Android phone and an Android tablet, with the audiobooks downloaded. This audiobook also has an epub attached.

  1. If I listen on one device, the book history tells me that progress has synced to the server (that little green cloud appears).
  2. I go to the other device, allow the server connection to finish, and look at the audiobook.
  3. The percentage progress implies that the progress has synced to the device, as the number increases.
  4. I play the audiobook, and it instead resumes from the point that I was previously listening on that device.
@Dasnap commented on GitHub (Jul 7, 2025): I would just like to add that I've noticed similar issues with downloaded audiobook progress. I use an Android phone and an Android tablet, with the audiobooks downloaded. This audiobook also has an epub attached. 1. If I listen on one device, the book history tells me that progress has synced to the server (that little green cloud appears). 2. I go to the other device, allow the server connection to finish, and look at the audiobook. 3. The **percentage progress** implies that the progress has synced to the device, as the number increases. 4. I play the audiobook, and it instead resumes from the point that I was previously listening on that device.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf-app#818