Actually fix the TSV timezone issue

This commit is contained in:
2023-05-31 23:08:03 -04:00
parent bcf2b9d1ea
commit 0bf4d28482
3 changed files with 25 additions and 5 deletions

View File

@ -0,0 +1,12 @@
from datetime import datetime
import pytz
from django.contrib.auth import get_user_model
from vrobbler.apps.scrobbles.utils import timestamp_user_tz_to_utc
def test_timestamp_user_tz_to_utc():
timestamp = timestamp_user_tz_to_utc(
1685561082, pytz.timezone("US/Eastern")
)
assert timestamp == datetime(2023, 5, 31, 23, 24, 42, tzinfo=pytz.utc)

View File

@ -13,6 +13,8 @@ from music.utils import (
from scrobbles.constants import AsTsvColumn
from scrobbles.models import Scrobble
from vrobbler.apps.scrobbles.utils import timestamp_user_tz_to_utc
logger = logging.getLogger(__name__)
@ -65,9 +67,9 @@ def process_audioscrobbler_tsv_file(file_path, user_id, user_tz=None):
)
continue
timestamp = datetime.utcfromtimestamp(
int(row[AsTsvColumn["TIMESTAMP"].value])
).replace(tzinfo=user_tz)
timestamp = timestamp_user_tz_to_utc(
int(row[AsTsvColumn["TIMESTAMP"].value]), user_tz
)
new_scrobble = Scrobble(
user_id=user_id,

View File

@ -1,10 +1,10 @@
import logging
from datetime import timedelta
from datetime import datetime, timedelta, tzinfo
from urllib.parse import unquote
import pytz
from dateutil.parser import ParserError, parse
from django.apps import apps
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models
from django.utils import timezone
@ -17,6 +17,12 @@ logger = logging.getLogger(__name__)
User = get_user_model()
def timestamp_user_tz_to_utc(timestamp: int, user_tz: tzinfo) -> datetime:
return user_tz.localize(datetime.utcfromtimestamp(timestamp)).astimezone(
pytz.utc
)
def convert_to_seconds(run_time: str) -> int:
"""Jellyfin sends run time as 00:00:00 string. We want the run time to
actually be in seconds so we'll convert it"