From dfc1365fa305b8698879455d4bde607407cb30d0 Mon Sep 17 00:00:00 2001 From: Colin Powell Date: Fri, 26 Jan 2024 23:44:52 -0500 Subject: [PATCH] Fix koreader importing --- vrobbler/apps/books/koreader.py | 25 +++++++++++++++------- vrobbler/apps/books/tests/conftest.py | 11 +++++++++- vrobbler/apps/books/tests/test_koreader.py | 11 +++++++--- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/vrobbler/apps/books/koreader.py b/vrobbler/apps/books/koreader.py index 725e8f5..8315fe9 100644 --- a/vrobbler/apps/books/koreader.py +++ b/vrobbler/apps/books/koreader.py @@ -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, ) ) diff --git a/vrobbler/apps/books/tests/conftest.py b/vrobbler/apps/books/tests/conftest.py index 1e7fce2..8e47f34 100644 --- a/vrobbler/apps/books/tests/conftest.py +++ b/vrobbler/apps/books/tests/conftest.py @@ -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") diff --git a/vrobbler/apps/books/tests/test_koreader.py b/vrobbler/apps/books/tests/test_koreader.py index 004edae..2cfcd61 100644 --- a/vrobbler/apps/books/tests/test_koreader.py +++ b/vrobbler/apps/books/tests/test_koreader.py @@ -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