mirror of
https://gitlab.com/brutaldon/brutaldon.git
synced 2024-06-01 17:21:09 +00:00
0b93eb78f4
No need to list the preference fields three times in three places in the code. A class decorator ought to be able to sleuth them out from the model itself. Should make it easier to add new preferences.
95 lines
3.3 KiB
Python
95 lines
3.3 KiB
Python
from django.db import models
|
|
from django.conf import settings
|
|
from django.utils.translation import gettext as _
|
|
from pytz import common_timezones
|
|
|
|
timezones = [(tz, tz) for tz in common_timezones]
|
|
|
|
|
|
class Client(models.Model):
|
|
name = models.CharField(default="brutaldon", max_length=80)
|
|
api_base_id = models.URLField(default="https://mastodon.social")
|
|
version = models.CharField(default="1.0", max_length=80)
|
|
client_id = models.CharField(null=True, blank=True, max_length=2048)
|
|
client_secret = models.CharField(null=True, blank=True, max_length=2048)
|
|
|
|
def __str__(self):
|
|
return self.name + ": " + self.api_base_id
|
|
|
|
|
|
class Theme(models.Model):
|
|
name = models.CharField(max_length=80, unique=True)
|
|
prefix = models.CharField(max_length=40, null=True, default="default")
|
|
main_css = models.CharField(
|
|
max_length=1024, blank=True, null=True, default="css/fullbrutalism.css"
|
|
)
|
|
tweaks_css = models.CharField(max_length=1024, blank=True, null=True)
|
|
is_brutalist = models.BooleanField(default=False)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
def set_fields(klass):
|
|
fields = {}
|
|
for n in dir(klass):
|
|
assert n != "_fields"
|
|
v = getattr(klass, n)
|
|
if isinstance(v, models.Field):
|
|
fields.add(n)
|
|
setattr(klass, '_fields', fields)
|
|
return klass
|
|
|
|
@set_fields
|
|
class Preference(models.Model):
|
|
theme = models.ForeignKey(Theme, models.CASCADE, null=False, default=1)
|
|
filter_replies = models.BooleanField(default=False)
|
|
filter_boosts = models.BooleanField(default=False)
|
|
timezone = models.CharField(
|
|
max_length=80, blank=True, null=True, choices=timezones, default="UTC"
|
|
)
|
|
no_javascript = models.BooleanField(
|
|
default=False,
|
|
help_text=_(
|
|
"""Disable all JavaScript. Overrides all other JavaScript options."""
|
|
),
|
|
)
|
|
notifications = models.BooleanField(
|
|
default=True, help_text=_("""Display live notifications in header.""")
|
|
)
|
|
click_to_load = models.BooleanField(
|
|
default=False,
|
|
help_text=_(
|
|
"""Click to load more toots in the same page, rather than using pagination."""
|
|
),
|
|
)
|
|
lightbox = models.BooleanField(
|
|
default=False, help_text=_("""Use a JavaScript lightbox to display media.""")
|
|
)
|
|
poll_frequency = models.IntegerField(
|
|
default=300,
|
|
help_text=_(
|
|
"""Number of seconds to wait between checking notifications. Default: 300"""
|
|
),
|
|
)
|
|
filter_notifications = models.BooleanField(
|
|
default=False,
|
|
help_text=_("""Exclude boosts and favs from your notifications."""),
|
|
)
|
|
bundle_notifications = models.BooleanField(
|
|
default=False,
|
|
help_text=_(
|
|
"""Collapse together boosts or likes of the same toot in the notifications page."""
|
|
),
|
|
)
|
|
|
|
|
|
class Account(models.Model):
|
|
username = models.EmailField(unique=True)
|
|
email = models.EmailField(null=True, blank=True)
|
|
django_user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, null=True)
|
|
access_token = models.CharField(null=True, blank=True, max_length=2048)
|
|
client = models.ForeignKey(Client, models.SET_NULL, null=True)
|
|
preferences = models.ForeignKey(Preference, models.SET_NULL, null=True)
|
|
note_seen = models.CharField(null=True, blank=True, max_length=128)
|