[scrobbles] Fix calc of elapsed time
This commit is contained in:
@ -892,8 +892,9 @@ class Scrobble(TimeStampedModel):
|
|||||||
if self.played_to_completion:
|
if self.played_to_completion:
|
||||||
if self.playback_position_seconds:
|
if self.playback_position_seconds:
|
||||||
return self.playback_position_seconds
|
return self.playback_position_seconds
|
||||||
if self.media_obj.run_time_seconds:
|
if self.media_obj and self.media_obj.run_time_seconds:
|
||||||
return self.media_obj.run_time_seconds
|
return self.media_obj.run_time_seconds
|
||||||
|
|
||||||
return (timezone.now() - self.timestamp).seconds
|
return (timezone.now() - self.timestamp).seconds
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import hashlib
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
from typing import TYPE_CHECKING, Optional
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
|
|
||||||
@ -13,7 +14,10 @@ from django.utils import timezone
|
|||||||
from profiles.models import UserProfile
|
from profiles.models import UserProfile
|
||||||
from profiles.utils import now_user_timezone
|
from profiles.utils import now_user_timezone
|
||||||
from scrobbles.constants import LONG_PLAY_MEDIA
|
from scrobbles.constants import LONG_PLAY_MEDIA
|
||||||
from scrobbles.notifications import MoodNtfyNotification, ScrobbleNtfyNotification
|
from scrobbles.notifications import (
|
||||||
|
MoodNtfyNotification,
|
||||||
|
ScrobbleNtfyNotification,
|
||||||
|
)
|
||||||
from scrobbles.tasks import (
|
from scrobbles.tasks import (
|
||||||
process_koreader_import,
|
process_koreader_import,
|
||||||
process_lastfm_import,
|
process_lastfm_import,
|
||||||
@ -21,6 +25,9 @@ from scrobbles.tasks import (
|
|||||||
)
|
)
|
||||||
from webdav.client import get_webdav_client
|
from webdav.client import get_webdav_client
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from scrobbles.models import Scrobble
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
|
||||||
@ -345,3 +352,22 @@ def extract_domain(url):
|
|||||||
+ parsed_url.netloc.split(".")[-1]
|
+ parsed_url.netloc.split(".")[-1]
|
||||||
)
|
)
|
||||||
return domain
|
return domain
|
||||||
|
|
||||||
|
def fix_playback_position_seconds(*scrobbles: "Scrobble", commit=True) -> list["Scrobble"]:
|
||||||
|
updated_scrobbles = list()
|
||||||
|
for scrobble in scrobbles:
|
||||||
|
if not scrobble.media_obj:
|
||||||
|
logger.info(f"No media object found for scrobble {scrobble.id}, cannot update elapsed time")
|
||||||
|
continue
|
||||||
|
|
||||||
|
if scrobble.media_type == "Track" and scrobble.media_obj.run_time_seconds:
|
||||||
|
too_long = scrobble.playback_position_seconds > scrobble.media_obj.run_time_seconds
|
||||||
|
zero = scrobble.playback_position_seconds == 0
|
||||||
|
null = not scrobble.playback_position_seconds
|
||||||
|
if too_long or zero or null:
|
||||||
|
scrobble.playback_position_seconds = scrobble.media_obj.run_time_seconds
|
||||||
|
updated_scrobbles.append(scrobble)
|
||||||
|
if commit:
|
||||||
|
scrobble.save(update_fields=["playback_position_seconds"])
|
||||||
|
|
||||||
|
return updated_scrobbles
|
||||||
|
|||||||
Reference in New Issue
Block a user