Fix koreader importing
This commit is contained in:
@ -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,
|
||||
)
|
||||
)
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user