summaryrefslogtreecommitdiff
path: root/backend/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/models.py')
-rw-r--r--backend/models.py165
1 files changed, 77 insertions, 88 deletions
diff --git a/backend/models.py b/backend/models.py
index 6af8879..5a68429 100644
--- a/backend/models.py
+++ b/backend/models.py
@@ -5,35 +5,31 @@ from django.db import models
from django.contrib import auth
from django.contrib import admin
+import json
class SJSettingsModel(models.Model):
""" ScannerJammer abstract settings model
"""
- settings = models.TextField(blank=True)
+ settings_text = models.TextField(blank=True)
class Meta:
abstract = True
- def freeze_settings(self, settings_dict):
- """ Serialize settings dictionary into settings text field
- """
- self.settings = '\n'.join('%s\t%s' % (str(key), str(value)) for key, value in settings_dict.iteritems())
+ @property
+ def settings(self):
+ if not self.settings_text:
+ return dict()
+ return json.loads(self.settings_text, parse_float=True, parse_int=True)
- def thaw_settings(self):
- """ Deserialize settings text field into settings dictionary
- """
- settings_dict = {}
- if self.settings:
- for line in self.settings.split('\n'):
- row = line.split('\t')
- if len(row) == 2:
- settings_dict[row[0]] = row[1]
- return settings_dict
+ @settings.setter
+ def settings(self, settings):
+ if isinstance(settings, dict):
+ self.settings_text = json.dumps(settings)
+
+ @settings.deleter
+ def settings(self):
+ self.settings_text = '{}'
- def merge_settings(self, settings_dict):
- """ Merge current setting with settings dictionary
- """
- self.freeze_settings(self.thaw_settings().update(settings_dict))
class SJUserProfile(SJSettingsModel):
""" ScannerJammer user model
@@ -57,100 +53,93 @@ class SJUserProfile(SJSettingsModel):
return "%s (%s)" % (self.username or self.user.username, self.nickname)
return "%s" % (self.username or self.user.username)
-class SJRoom(SJSettingsModel):
- """ ScannerJammer room model
- """
- name = models.CharField(max_length=32)
- date = models.DateTimeField()
- private = models.BooleanField(default=False)
- tokbox = models.CharField(max_length=64)
-
- class Meta:
- verbose_name = "SJ Room"
-
- def __unicode__(self):
- return self.name
+class SJUserProfileAdmin(admin.ModelAdmin):
+ list_display = (
+ 'user',
+ 'nickname',
+ 'score',
+ 'access',
+ 'bio',
+ 'joindate',
+ 'seendate',
+ )
-class SJSiteModel(models.Model):
- """ ScannerJammer abstract site base model
+class SJUserActivity(models.Model):
+ """ ScannerJammer abstract user activity model
"""
user = models.ForeignKey(auth.models.User)
- room = models.ForeignKey(SJRoom)
- date = models.DateTimeField()
- url = models.URLField(blank=True, verbose_name="URL")
+ datetime = models.DateTimeField(blank=True)
class Meta:
abstract = True
- def __unicode__(self):
- return self.url
-class SJBackground(SJSiteModel):
- """ ScannerJammer background model
+class SJRoom(SJUserActivity, SJSettingsModel):
+ """ ScannerJammer room model
"""
+ name = models.CharField(max_length=32)
+ private = models.BooleanField(default=False)
+
class Meta:
- verbose_name = "SJ Background"
+ verbose_name = "SJ Room"
-class SJURL(SJSiteModel):
- """ ScannerJammer url model
- """
- likes = models.IntegerField(default=0)
+ def __unicode__(self):
+ return self.name
- class Meta:
- verbose_name = "SJ URL"
+class SJRoomAdmin(admin.ModelAdmin):
+ list_display = (
+ 'name',
+ 'private',
+ 'user',
+ 'datetime',
+ )
-class SJVideo(SJSiteModel):
- """ ScannerJammer video model
+class SJContent(SJUserActivity, SJSettingsModel):
+ """ ScannerJammer model to encapsulate site content
"""
- title = models.CharField(max_length=100)
- likes = models.IntegerField(default=0)
- views = models.IntegerField(default=0)
- removed = models.BooleanField(default=False)
- thumbnail = models.CharField(max_length=64)
+ CONTENT_TYPE = (
+ (u'url', u'URL'),
+ (u'html', u'HTML'),
+ (u'text', u'Plane Text'),
+ (u'image', u'Image'),
+ (u'video', u'Video'),
+ (u'audio', u'Audio'),
+ (u'background', u'Background'),
+ )
+
+ room = models.ForeignKey(SJRoom)
+ content_type = models.CharField(max_length=32, choices=CONTENT_TYPE)
class Meta:
- verbose_name = "SJ Video"
+ verbose_name = "SJ Content"
def __unicode__(self):
- return self.title
+ return '%s\'s %s' % (self.user, self.content_type)
-class SJChat(SJSiteModel):
- """ ScannerJammer chat model
- """
- msg = models.TextField(verbose_name="Message")
- class Meta:
- verbose_name = "SJ Chat"
+class SJContentAdmin(admin.ModelAdmin):
+ list_display = (
+ 'room',
+ 'content_type',
+ 'settings_text',
+ )
-class SJLike(models.Model):
+class SJLike(SJUserActivity):
""" ScannerJammer like model
"""
- user = models.ForeignKey(auth.models.User)
- video = models.ForeignKey(SJVideo)
- url = models.ForeignKey(SJURL, verbose_name="URL")
- date = models.DateTimeField()
+ content = models.ForeignKey(SJContent)
class Meta:
verbose_name = "SJ Like"
-class SJSearchLog(models.Model):
- """ SannerJammer search log
- """
- date = models.DateTimeField()
- query = models.CharField(max_length=255)
- matches = models.IntegerField(default=0)
-
- class Meta:
- verbose_name = "SJ Search Log"
-
- def __unicode__(self):
- return '%s "%s" matched %d' % (self.date, self.query, self.matches)
+class SJLikeAdmin(admin.ModelAdmin):
+ list_display = (
+ 'user',
+ 'datetime',
+ 'content',
+ )
-admin.site.register(SJUserProfile)
-admin.site.register(SJRoom)
-admin.site.register(SJBackground)
-admin.site.register(SJURL)
-admin.site.register(SJVideo)
-admin.site.register(SJChat)
-admin.site.register(SJLike)
-admin.site.register(SJSearchLog)
+admin.site.register(SJUserProfile, SJUserProfileAdmin)
+admin.site.register(SJRoom, SJRoomAdmin)
+admin.site.register(SJContent, SJContentAdmin)
+admin.site.register(SJLike, SJLikeAdmin)