]> git.0d.be Git - panikdb.git/commitdiff
add duration fields to episodes and schedules
authorFrédéric Péters <fpeters@0d.be>
Wed, 21 Aug 2013 15:01:17 +0000 (17:01 +0200)
committerFrédéric Péters <fpeters@0d.be>
Wed, 21 Aug 2013 15:01:17 +0000 (17:01 +0200)
panikdb/emissions/migrations/0007_auto__add_field_episode_duration__add_field_schedule_duration.py [new file with mode: 0644]
panikdb/emissions/models.py
panikdb/settings.py

diff --git a/panikdb/emissions/migrations/0007_auto__add_field_episode_duration__add_field_schedule_duration.py b/panikdb/emissions/migrations/0007_auto__add_field_episode_duration__add_field_schedule_duration.py
new file mode 100644 (file)
index 0000000..dd10dd9
--- /dev/null
@@ -0,0 +1,123 @@
+# -*- coding: utf-8 -*-
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        # Adding field 'Episode.duration'
+        db.add_column(u'emissions_episode', 'duration',
+                      self.gf('django.db.models.fields.IntegerField')(null=True, blank=True),
+                      keep_default=False)
+
+        # Adding field 'Schedule.duration'
+        db.add_column(u'emissions_schedule', 'duration',
+                      self.gf('django.db.models.fields.IntegerField')(null=True, blank=True),
+                      keep_default=False)
+
+
+    def backwards(self, orm):
+        # Deleting field 'Episode.duration'
+        db.delete_column(u'emissions_episode', 'duration')
+
+        # Deleting field 'Schedule.duration'
+        db.delete_column(u'emissions_schedule', 'duration')
+
+
+    models = {
+        u'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        u'emissions.category': {
+            'Meta': {'object_name': 'Category'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        u'emissions.diffusion': {
+            'Meta': {'object_name': 'Diffusion'},
+            'datetime': ('django.db.models.fields.DateTimeField', [], {}),
+            'episode': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['emissions.Episode']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
+        },
+        u'emissions.emission': {
+            'Meta': {'object_name': 'Emission'},
+            'archived': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'categories': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['emissions.Category']", 'symmetrical': 'False'}),
+            'description': ('ckeditor.fields.RichTextField', [], {'null': 'True', 'blank': 'True'}),
+            'duration': ('django.db.models.fields.IntegerField', [], {'default': '60'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '254', 'null': 'True', 'blank': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
+            'text': ('ckeditor.fields.RichTextField', [], {'null': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
+        },
+        u'emissions.episode': {
+            'Meta': {'object_name': 'Episode'},
+            'description': ('ckeditor.fields.RichTextField', [], {'null': 'True', 'blank': 'True'}),
+            'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'emission': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['emissions.Emission']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
+            'text': ('ckeditor.fields.RichTextField', [], {'null': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        u'emissions.newscategory': {
+            'Meta': {'object_name': 'NewsCategory'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        u'emissions.newsitem': {
+            'Meta': {'object_name': 'NewsItem'},
+            'category': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['emissions.NewsCategory']", 'null': 'True'}),
+            'datetime': ('django.db.models.fields.DateTimeField', [], {}),
+            'emission': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['emissions.Emission']", 'null': 'True'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '250', 'null': 'True', 'blank': 'True'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
+            'text': ('ckeditor.fields.RichTextField', [], {}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        u'emissions.schedule': {
+            'Meta': {'object_name': 'Schedule'},
+            'datetime': ('django.db.models.fields.DateTimeField', [], {}),
+            'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'emission': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['emissions.Emission']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'rerun': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'weeks': ('django.db.models.fields.IntegerField', [], {'default': '15'})
+        },
+        u'emissions.soundfile': {
+            'Meta': {'object_name': 'SoundFile'},
+            'episode': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['emissions.Episode']"}),
+            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '250'}),
+            'fragment': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'podcastable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        u'taggit.tag': {
+            'Meta': {'object_name': 'Tag'},
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'})
+        },
+        u'taggit.taggeditem': {
+            'Meta': {'object_name': 'TaggedItem'},
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'taggit_taggeditem_tagged_items'", 'to': u"orm['contenttypes.ContentType']"}),
+            u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
+            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "u'taggit_taggeditem_items'", 'to': u"orm['taggit.Tag']"})
+        }
+    }
+
+    complete_apps = ['emissions']
\ No newline at end of file
index a8698b0112efd96df2c0c678f7c3c7efb5da0fee..31a29907166fa6e50ee1f893521dbae738d20760 100644 (file)
@@ -76,6 +76,7 @@ class Schedule(models.Model):
     datetime = models.DateTimeField()
     weeks = models.IntegerField(default=15, choices=WEEK_CHOICES)
     rerun = models.BooleanField(default=False)
+    duration = models.IntegerField(null=True, blank=True)
 
     def get_weekday(self):
         weekday = self.datetime.weekday() + 7
@@ -109,6 +110,12 @@ class Schedule(models.Model):
             return '2e et 4e'
         return None
 
+    def get_duration(self):
+        if self.duration:
+            return self.duration
+        else:
+            return self.emission.duration
+
     def matches(self, dt):
         weekday = dt.weekday()
         if dt.hour < self.DAY_HOUR_START:
@@ -120,7 +127,7 @@ class Schedule(models.Model):
             if (self.weeks & (0b0001<<(week_no)) == 0):
                 return False
         if dt.time() >= self.datetime.time() and \
-                dt.time() <= (self.datetime + datetime.timedelta(minutes=self.emission.duration)).time():
+                dt.time() <= (self.datetime + datetime.timedelta(minutes=self.get_duration())).time():
             return True
         return False
 
@@ -141,6 +148,7 @@ class Episode(models.Model):
     description = RichTextField(null=True, blank=True)
     text = RichTextField(null=True)
     tags = TaggableManager(blank=True)
+    duration = models.IntegerField(null=True, blank=True)
 
     image = models.ImageField(upload_to=get_episode_image_path, max_length=250, null=True, blank=True)
 
@@ -154,6 +162,11 @@ class Episode(models.Model):
         if self.id is not None and self.image:
             maybe_resize(self.image.path)
 
+    def get_duration(self):
+        if self.duration:
+            return self.duration
+        else:
+            return self.emission.duration
 
     def get_absolute_url(self):
         return reverse('episode-view',
index 581cd037aeff1058c0cac966f0d1f209ba512680..6d64e8d46e10a850d9cc2cb0ed7f4cd26614fcac 100644 (file)
@@ -172,7 +172,7 @@ CKEDITOR_CONFIGS = {
 HAYSTACK_CONNECTIONS = {
     'default': {
         'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
-        'URL': 'http://127.0.0.1:8983/solr/panik'
+        'URL': 'http://127.0.0.1:8984/solr/panik'
     },
 }