summaryrefslogtreecommitdiff
path: root/backend/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/models.py')
-rw-r--r--backend/models.py62
1 files changed, 48 insertions, 14 deletions
diff --git a/backend/models.py b/backend/models.py
index d3964af..51efb82 100644
--- a/backend/models.py
+++ b/backend/models.py
@@ -5,15 +5,43 @@ from django.db import models
from django.contrib import auth
from django.contrib import admin
+class SJSettingsModel(models.Model):
+ """ ScannerJammer abstract settings model
+ """
+ settings = 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())
-class SJUserProfile(models.Model):
- """ ScannerJammer user model """
+ 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
+
+ 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
+ """
user = models.OneToOneField(auth.models.User)
nickname = models.CharField(max_length=32, blank=True)
score = models.IntegerField(default=0, blank=True)
access = models.IntegerField(default=0, blank=True)
bio = models.TextField(blank=True)
- settings = models.TextField(blank=True)
# Backward compatibility fields
username = models.CharField(max_length=32, blank=True) # see User.username
password = models.CharField(max_length=32, blank=True) # see User.password (store password hash)
@@ -28,13 +56,13 @@ class SJUserProfile(models.Model):
return "%s (%s)" % (self.username or self.user.username, self.nickname)
return "%s" % (self.username or self.user.username)
-class SJRoom(models.Model):
- """ ScannerJammer room model """
+class SJRoom(SJSettingsModel):
+ """ ScannerJammer room model
+ """
name = models.CharField(max_length=32)
date = models.DateField()
private = models.BooleanField(default=False)
tokbox = models.CharField(max_length=64)
- settings = models.TextField()
class Meta:
verbose_name = "SJ Room"
@@ -43,7 +71,8 @@ class SJRoom(models.Model):
return self.name
class SJSiteModel(models.Model):
- """ ScannerJammer site base model """
+ """ ScannerJammer abstract site base model
+ """
user = models.ForeignKey(auth.models.User)
room = models.ForeignKey(SJRoom)
date = models.DateField()
@@ -56,20 +85,22 @@ class SJSiteModel(models.Model):
return self.url
class SJBackground(SJSiteModel):
- """ ScannerJammer background model """
-
+ """ ScannerJammer background model
+ """
class Meta:
verbose_name = "SJ Background"
class SJURL(SJSiteModel):
- """ ScannerJammer url model """
+ """ ScannerJammer url model
+ """
likes = models.IntegerField(default=0)
class Meta:
verbose_name = "SJ URL"
class SJVideo(SJSiteModel):
- """ ScannerJammer video model """
+ """ ScannerJammer video model
+ """
title = models.CharField(max_length=100)
likes = models.IntegerField(default=0)
views = models.IntegerField(default=0)
@@ -80,14 +111,16 @@ class SJVideo(SJSiteModel):
verbose_name = "SJ Video"
class SJChat(SJSiteModel):
- """ ScannerJammer chat model """
+ """ ScannerJammer chat model
+ """
msg = models.TextField(verbose_name="Message")
class Meta:
verbose_name = "SJ Chat"
class SJLike(models.Model):
- """ ScannerJammer like model """
+ """ ScannerJammer like model
+ """
user = models.ForeignKey(auth.models.User)
video = models.ForeignKey(SJVideo)
url = models.ForeignKey(SJURL, verbose_name="URL")
@@ -97,7 +130,8 @@ class SJLike(models.Model):
verbose_name = "SJ Like"
class SJSearchLog(models.Model):
- """ SannerJammer search log """
+ """ SannerJammer search log
+ """
date = models.DateField()
query = models.CharField(max_length=255)
matches = models.IntegerField(default=0)