[books] Fix resume reading link and page calc
This commit is contained in:
@ -593,6 +593,17 @@ class Scrobble(TimeStampedModel):
|
||||
self.stop_timestamp - self.timestamp
|
||||
).seconds
|
||||
|
||||
if (
|
||||
self.log
|
||||
and isinstance(self.log, dict)
|
||||
and self.log.get("page_start") is not None
|
||||
and self.log.get("page_end") is not None
|
||||
and "pages_read" not in self.log
|
||||
):
|
||||
self.log["pages_read"] = (
|
||||
self.log["page_end"] - self.log["page_start"] + 1
|
||||
)
|
||||
|
||||
return super(Scrobble, self).save(*args, **kwargs)
|
||||
|
||||
def get_absolute_url(self):
|
||||
@ -1452,38 +1463,38 @@ class Scrobble(TimeStampedModel):
|
||||
return False
|
||||
|
||||
def calculate_reading_stats(self, commit=True):
|
||||
# --- Sort safely by numeric page_number ---
|
||||
def safe_page_number(entry):
|
||||
try:
|
||||
return int(getattr("page_number", entry), 0)
|
||||
except (ValueError, TypeError):
|
||||
return float("inf") # push invalid entries to the end
|
||||
|
||||
page_data = self.log.get("page_data")
|
||||
|
||||
if not page_data:
|
||||
logger.warning("No page data found to calculate")
|
||||
return
|
||||
if page_data:
|
||||
# --- Sort safely by numeric page_number ---
|
||||
def safe_page_number(entry):
|
||||
try:
|
||||
return int(getattr("page_number", entry), 0)
|
||||
except (ValueError, TypeError):
|
||||
return float("inf")
|
||||
|
||||
if isinstance(page_data, dict):
|
||||
logger.warning("Page data is dict, migrate koreader data")
|
||||
return
|
||||
if isinstance(page_data, dict):
|
||||
logger.warning("Page data is dict, migrate koreader data")
|
||||
return
|
||||
|
||||
page_data.sort(key=safe_page_number)
|
||||
page_data.sort(key=safe_page_number)
|
||||
|
||||
# --- Extract valid numeric page numbers ---
|
||||
valid_pages = []
|
||||
for page in page_data:
|
||||
try:
|
||||
valid_pages.append(int(page["page_number"]))
|
||||
except (ValueError, TypeError):
|
||||
continue
|
||||
valid_pages = []
|
||||
for page in page_data:
|
||||
try:
|
||||
valid_pages.append(int(page["page_number"]))
|
||||
except (ValueError, TypeError):
|
||||
continue
|
||||
|
||||
# --- Compute stats ---
|
||||
if valid_pages:
|
||||
self.log["page_start"] = min(valid_pages)
|
||||
self.log["page_end"] = max(valid_pages)
|
||||
self.log["pages_read"] = len(set(valid_pages))
|
||||
if valid_pages:
|
||||
self.log["page_start"] = min(valid_pages)
|
||||
self.log["page_end"] = max(valid_pages)
|
||||
self.log["pages_read"] = len(set(valid_pages))
|
||||
else:
|
||||
page_start = self.log.get("page_start")
|
||||
page_end = self.log.get("page_end")
|
||||
if page_start is not None and page_end is not None:
|
||||
self.log["pages_read"] = page_end - page_start + 1
|
||||
|
||||
if commit:
|
||||
self.save(update_fields=["log"])
|
||||
if commit and "pages_read" in self.log:
|
||||
self.save(update_fields=["log"])
|
||||
|
||||
Reference in New Issue
Block a user