2024-12-06 14:17:21 +00:00
|
|
|
import uuid
|
|
|
|
|
2017-06-23 21:00:42 +00:00
|
|
|
from django.db import models
|
2024-12-06 14:17:21 +00:00
|
|
|
from django.urls import reverse
|
2018-06-10 08:55:16 +00:00
|
|
|
from django.utils import timezone
|
2017-06-23 21:00:42 +00:00
|
|
|
|
2024-12-06 14:17:21 +00:00
|
|
|
from funkwhale_api.common import models as common_models
|
|
|
|
from funkwhale_api.federation import models as federation_models
|
|
|
|
from funkwhale_api.federation import utils as federation_utils
|
2017-06-23 21:00:42 +00:00
|
|
|
from funkwhale_api.music.models import Track
|
|
|
|
|
|
|
|
|
2024-12-06 14:17:21 +00:00
|
|
|
class ListeningQuerySet(models.QuerySet, common_models.LocalFromFidQuerySet):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class Listening(federation_models.FederationMixin):
|
|
|
|
uuid = models.UUIDField(default=uuid.uuid4, unique=True)
|
2018-06-09 13:36:16 +00:00
|
|
|
creation_date = models.DateTimeField(default=timezone.now, null=True, blank=True)
|
2017-12-15 23:36:06 +00:00
|
|
|
track = models.ForeignKey(
|
2018-06-09 13:36:16 +00:00
|
|
|
Track, related_name="listenings", on_delete=models.CASCADE
|
|
|
|
)
|
2024-12-06 14:17:21 +00:00
|
|
|
actor = models.ForeignKey(
|
|
|
|
"federation.Actor",
|
2017-12-15 23:36:06 +00:00
|
|
|
related_name="listenings",
|
2018-06-09 13:36:16 +00:00
|
|
|
on_delete=models.CASCADE,
|
2024-12-06 14:17:21 +00:00
|
|
|
null=False,
|
|
|
|
blank=False,
|
2018-06-09 13:36:16 +00:00
|
|
|
)
|
2017-06-23 21:00:42 +00:00
|
|
|
session_key = models.CharField(max_length=100, null=True, blank=True)
|
2023-12-13 15:31:26 +00:00
|
|
|
source = models.CharField(max_length=100, null=True, blank=True)
|
2024-12-06 14:17:21 +00:00
|
|
|
federation_namespace = "listenings"
|
|
|
|
objects = ListeningQuerySet.as_manager()
|
2017-06-23 21:00:42 +00:00
|
|
|
|
|
|
|
class Meta:
|
2018-06-09 13:36:16 +00:00
|
|
|
ordering = ("-creation_date",)
|
2017-06-23 21:00:42 +00:00
|
|
|
|
2018-03-01 22:41:51 +00:00
|
|
|
def get_activity_url(self):
|
2024-12-06 14:17:21 +00:00
|
|
|
return f"{self.actor.get_absolute_url()}/listenings/tracks/{self.pk}"
|
|
|
|
|
|
|
|
def get_absolute_url(self):
|
|
|
|
return f"/library/tracks/{self.track.pk}"
|
|
|
|
|
|
|
|
def get_federation_id(self):
|
|
|
|
if self.fid:
|
|
|
|
return self.fid
|
|
|
|
|
|
|
|
return federation_utils.full_url(
|
|
|
|
reverse(
|
|
|
|
f"federation:music:{self.federation_namespace}-detail",
|
|
|
|
kwargs={"uuid": self.uuid},
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
def save(self, **kwargs):
|
|
|
|
if not self.pk and not self.fid:
|
|
|
|
self.fid = self.get_federation_id()
|
|
|
|
|
|
|
|
return super().save(**kwargs)
|