Fix koreader importing

This commit is contained in:
2024-01-26 23:44:52 -05:00
parent f22ef1a163
commit dfc1365fa3
3 changed files with 35 additions and 12 deletions

View File

@ -232,16 +232,24 @@ def build_scrobbles_from_book_map(
f"Book {koreader_book_id} - {page_number} {seconds_from_last_page} read seconds"
)
if should_create_scrobble:
first_page_in_scrobble = list(scrobble_page_data.keys())[0]
start_ts = int(
scrobble_page_data.get(first_page_in_scrobble).get(
"start_ts"
)
first_page = scrobble_page_data.get(
list(scrobble_page_data.keys())[0]
)
last_page = scrobble_page_data.get(
list(scrobble_page_data.keys())[-1]
)
start_ts = int(first_page.get("start_ts"))
end_ts = int(last_page.get("start_ts")) + int(
last_page.get("duration")
)
timestamp = datetime.fromtimestamp(start_ts).replace(
tzinfo=user.profile.tzinfo
)
# TODO Add a shim here temporarily to fix imports while we were in France
stop_timestamp = datetime.fromtimestamp(end_ts).replace(
tzinfo=user.profile.tzinfo
)
# Add a shim here temporarily to fix imports while we were in France
# if date is between 10/15 and 12/15, cast it to Europe/Central
if (
datetime(2023, 10, 15).replace(
@ -284,11 +292,12 @@ def build_scrobbles_from_book_map(
source="KOReader",
media_type=Scrobble.MediaType.BOOK,
timestamp=timestamp,
played_to_completion=True,
stop_timestamp=stop_timestamp,
playback_position_seconds=playback_position_seconds,
in_progress=False,
book_page_data=scrobble_page_data,
book_pages_read=page_number,
in_progress=False,
played_to_completion=True,
long_play_complete=False,
)
)

View File

@ -1,9 +1,13 @@
import hashlib
import pytest
import random
import pytest
from django.contrib.auth import get_user_model
from vrobbler.apps.books.koreader import KoReaderBookColumn
User = get_user_model()
ordinal = lambda n: "%d%s" % (
n,
"tsnrhtdd"[(n // 10 % 10 != 1) * (n % 10 < 4) * n % 10 :: 4],
@ -112,3 +116,8 @@ class KoReaderBookRows:
@pytest.fixture
def koreader_rows():
return KoReaderBookRows(book_count=1)
@pytest.fixture
def demo_user():
return User.objects.create(email="demo@example.com")

View File

@ -1,7 +1,12 @@
import pytest
from unittest import mock
from books.koreader import KoReaderBookColumn, build_book_map, build_page_data, build_scrobbles_from_book_map
from books.koreader import (
KoReaderBookColumn,
build_book_map,
build_page_data,
build_scrobbles_from_book_map,
)
@pytest.mark.django_db
@ -30,13 +35,13 @@ def test_load_page_data_to_map(get_mock, koreader_rows, valid_response):
@pytest.mark.django_db
@mock.patch("requests.get")
def test_build_scrobbles_from_pages(
get_mock, koreader_rows, valid_response
get_mock, koreader_rows, demo_user, valid_response
):
get_mock.return_value = valid_response
book_map = build_book_map(koreader_rows.BOOK_ROWS)
book_map = build_page_data(koreader_rows.PAGE_STATS_ROWS, book_map)
scrobbles = build_scrobbles_from_book_map(book_map)
scrobbles = build_scrobbles_from_book_map(book_map, demo_user)
# Corresponds to number of sessions per book ( 20 pages per session, 120 +/- 15 pages read )
expected_scrobbles = 6 * len(book_map.keys())
assert len(scrobbles) == expected_scrobbles