diff --git a/vrobbler/apps/scrobbles/admin.py b/vrobbler/apps/scrobbles/admin.py index d3e4374..1d88a01 100644 --- a/vrobbler/apps/scrobbles/admin.py +++ b/vrobbler/apps/scrobbles/admin.py @@ -1,4 +1,5 @@ from django.contrib import admin + from scrobbles.models import ( AudioScrobblerTSVImport, ChartRecord, @@ -110,8 +111,5 @@ class ScrobbleAdmin(admin.ModelAdmin): def media_name(self, obj): return obj.media_obj - def media_type(self, obj): - return obj.media_obj.__class__.__name__ - def playback_percent(self, obj): return obj.percent_played diff --git a/vrobbler/apps/scrobbles/migrations/0037_scrobble_media_type.py b/vrobbler/apps/scrobbles/migrations/0037_scrobble_media_type.py new file mode 100644 index 0000000..e385d24 --- /dev/null +++ b/vrobbler/apps/scrobbles/migrations/0037_scrobble_media_type.py @@ -0,0 +1,29 @@ +# Generated by Django 4.1.7 on 2023-04-09 04:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("scrobbles", "0036_scrobble_stop_timestamp"), + ] + + operations = [ + migrations.AddField( + model_name="scrobble", + name="media_type", + field=models.CharField( + choices=[ + ("Video", "Video"), + ("Track", "Track"), + ("PodcastEpisode", "Podcast episode"), + ("SportEvent", "Sport event"), + ("Book", "Book"), + ("VideoGame", "Video game"), + ], + default="Video", + max_length=14, + ), + ), + ] diff --git a/vrobbler/apps/scrobbles/models.py b/vrobbler/apps/scrobbles/models.py index 1ce4168..2033591 100644 --- a/vrobbler/apps/scrobbles/models.py +++ b/vrobbler/apps/scrobbles/models.py @@ -411,6 +411,16 @@ class ChartRecord(TimeStampedModel): class Scrobble(TimeStampedModel): """A scrobble tracks played media items by a user.""" + class MediaType(models.TextChoices): + """Enum mapping a media model type to a string""" + + VIDEO = "Video", "Video" + TRACK = "Track", "Track" + PODCAST_EPISODE = "PodcastEpisode", "Podcast episode" + SPORT_EVENT = "SportEvent", "Sport event" + BOOK = "Book", "Book" + VIDEO_GAME = "VideoGame", "Video game" + uuid = models.UUIDField(editable=False, **BNULL) video = models.ForeignKey(Video, on_delete=models.DO_NOTHING, **BNULL) track = models.ForeignKey(Track, on_delete=models.DO_NOTHING, **BNULL) @@ -424,6 +434,9 @@ class Scrobble(TimeStampedModel): video_game = models.ForeignKey( VideoGame, on_delete=models.DO_NOTHING, **BNULL ) + media_type = models.CharField( + max_length=14, choices=MediaType.choices, default=MediaType.VIDEO + ) user = models.ForeignKey( User, blank=True, null=True, on_delete=models.DO_NOTHING ) @@ -457,6 +470,8 @@ class Scrobble(TimeStampedModel): if not self.uuid: self.uuid = uuid4() + self.media_type = self.MediaType(self.media_obj.__class__.__name__) + return super(Scrobble, self).save(*args, **kwargs) @property