This commit is contained in:
@ -18,6 +18,8 @@ from bricksets.models import BrickSet
|
||||
from charts.utils import build_charts
|
||||
from dataclass_wizard.errors import ParseError
|
||||
from django.conf import settings
|
||||
from scrobbles.constants import Visibility
|
||||
from scrobbles.sqids import encode_scrobble_share
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core.files import File
|
||||
from django.db import models
|
||||
@ -633,6 +635,18 @@ class ScrobbleQuerySet(models.QuerySet):
|
||||
)
|
||||
|
||||
|
||||
class ShareViewLog(TimeStampedModel):
|
||||
scrobble = models.ForeignKey(
|
||||
"Scrobble", on_delete=models.CASCADE, related_name="share_views"
|
||||
)
|
||||
ip_address = models.GenericIPAddressField(**BNULL)
|
||||
user_agent = models.TextField(**BNULL)
|
||||
referrer = models.URLField(max_length=2048, **BNULL)
|
||||
|
||||
def __str__(self):
|
||||
return f"View of {self.scrobble} at {self.created}"
|
||||
|
||||
|
||||
class Scrobble(TimeStampedModel):
|
||||
"""A scrobble tracks played media items by a user."""
|
||||
|
||||
@ -694,6 +708,14 @@ class Scrobble(TimeStampedModel):
|
||||
media_type = models.CharField(
|
||||
max_length=20, choices=MediaType.choices, default=MediaType.VIDEO
|
||||
)
|
||||
visibility = models.CharField(
|
||||
max_length=10,
|
||||
choices=Visibility.choices,
|
||||
default=Visibility.PRIVATE,
|
||||
db_index=True,
|
||||
)
|
||||
share_token_version = models.PositiveIntegerField(default=0)
|
||||
share_view_count = models.PositiveIntegerField(default=0)
|
||||
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.DO_NOTHING)
|
||||
|
||||
# Time keeping
|
||||
@ -875,6 +897,16 @@ class Scrobble(TimeStampedModel):
|
||||
self.save(update_fields=["uuid"])
|
||||
return reverse("scrobbles:detail", kwargs={"uuid": self.uuid})
|
||||
|
||||
def get_share_url(self):
|
||||
if self.visibility == Visibility.PRIVATE:
|
||||
return None
|
||||
sqid = encode_scrobble_share(self.id, self.share_token_version)
|
||||
return reverse("scrobbles:shared-detail", kwargs={"sqid": sqid})
|
||||
|
||||
def regenerate_share_token(self):
|
||||
self.share_token_version += 1
|
||||
self.save(update_fields=["share_token_version"])
|
||||
|
||||
def push_to_archivebox(self):
|
||||
pushable_media = hasattr(self.media_obj, "push_to_archivebox") and callable(
|
||||
self.media_obj.push_to_archivebox
|
||||
|
||||
Reference in New Issue
Block a user