models.py 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. from django.contrib.auth import get_user_model
  2. from django.db import models
  3. from django_extensions.db.models import TimeStampedModel
  4. from videos.models import Video
  5. User = get_user_model()
  6. BNULL = {"blank": True, "null": True}
  7. class Scrobble(TimeStampedModel):
  8. video = models.ForeignKey(Video, on_delete=models.DO_NOTHING)
  9. user = models.ForeignKey(
  10. User, blank=True, null=True, on_delete=models.DO_NOTHING
  11. )
  12. timestamp = models.DateTimeField(**BNULL)
  13. playback_position_ticks = models.PositiveIntegerField(**BNULL)
  14. playback_position = models.CharField(max_length=8, **BNULL)
  15. is_paused = models.BooleanField(default=False)
  16. played_to_completion = models.BooleanField(default=False)
  17. source = models.CharField(max_length=255, **BNULL)
  18. source_id = models.TextField(**BNULL)
  19. in_progress = models.BooleanField(default=True)
  20. @property
  21. def percent_played(self) -> int:
  22. return int(
  23. (self.playback_position_ticks / self.video.run_time_ticks) * 100
  24. )
  25. def __str__(self):
  26. return f"Scrobble of {self.video} {self.timestamp.year}-{self.timestamp.month}"