from django.contrib.auth.models import User from django.db import models class PodcastFeed(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='podcast_feeds') rss_url = models.URLField(max_length=1000) title = models.CharField(max_length=300) description = models.TextField(blank=True) artwork_url = models.URLField(max_length=1000, blank=True) author = models.CharField(max_length=300, blank=True) link = models.URLField(max_length=1000, blank=True) last_refreshed_at = models.DateTimeField(null=True, blank=True) added_at = models.DateTimeField(auto_now_add=True) auto_queue = models.BooleanField(default=False) class Meta: unique_together = ('user', 'rss_url') ordering = ['title'] def __str__(self): return self.title class PodcastEpisode(models.Model): feed = models.ForeignKey(PodcastFeed, on_delete=models.CASCADE, related_name='episodes') guid = models.CharField(max_length=1000) title = models.CharField(max_length=500) description = models.TextField(blank=True) audio_url = models.URLField(max_length=1000) duration_seconds = models.IntegerField(default=0) pub_date = models.DateTimeField(null=True, blank=True) episode_number = models.IntegerField(null=True, blank=True) season_number = models.IntegerField(null=True, blank=True) artwork_url = models.URLField(max_length=1000, blank=True) discovered_at = models.DateTimeField(auto_now_add=True) class Meta: unique_together = ('feed', 'guid') ordering = ['-pub_date'] def __str__(self): return self.title class EpisodeProgress(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='episode_progress') episode = models.ForeignKey(PodcastEpisode, on_delete=models.CASCADE, related_name='progress') position_seconds = models.IntegerField(default=0) played = models.BooleanField(default=False) dismissed = models.BooleanField(default=False) updated_at = models.DateTimeField(auto_now=True) class Meta: unique_together = ('user', 'episode') ordering = ['-updated_at'] def __str__(self): return f'{self.user} - {self.episode}' class PodcastQueue(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='podcast_queue') episode = models.ForeignKey(PodcastEpisode, on_delete=models.CASCADE, related_name='queued_by') position = models.PositiveIntegerField(default=0) added_at = models.DateTimeField(auto_now_add=True) class Meta: unique_together = ('user', 'episode') ordering = ['position'] def __str__(self): return f'{self.user} queue pos {self.position}: {self.episode}'