diff --git a/__init__.py b/__init__.py index 7e84bba..2ea1b3c 100644 --- a/__init__.py +++ b/__init__.py @@ -16,11 +16,8 @@ default_theme = 'default' class ThemeSettings(object): def __init__(self): - from .models import Setting - s = Setting.objects.filter(id=1).first() - if s is None: - s = Setting(id=1) - s.save() + from .models import GetSettings + s = GetSettings() for attr_name in model_to_dict(s): attr = getattr(s, attr_name) if attr_name == 'page_theme' and attr == 'default': diff --git a/models.py b/models.py index 6375a4f..2a87ac0 100644 --- a/models.py +++ b/models.py @@ -3,6 +3,25 @@ from . import available_themes, default_theme from PIL import Image +def GetSettings(): + s = Setting.objects.filter(id=1).first() + if s is None: + s = Setting(id=1) + s.save() + return s + + +def SettingExist(data): + s = GetSettings() + if data['page_theme'] == s.page_theme and data['page_title'] == s.page_title and data['page_image'] == s.page_image.name: + if s.page_image.name: + return data['page_image_data'] == s.page_image.open().read().hex() + else: + return True + else: + return False + + class Setting(models.Model): page_image = models.ImageField( upload_to='theme', @@ -24,6 +43,36 @@ class Setting(models.Model): img.thumbnail(output_size) img.save(self.page_image.path) + def export_data(self): + rv = {} + rv['page_image'] = self.page_image.name + rv['page_image_data'] = self.page_image.open().read().hex() + rv['page_theme'] = self.page_theme + rv['page_title'] = self.page_title + return rv + + def import_data(self, data): + self.page_title = data['page_title'] + self.page_theme = data['page_theme'] + self.page_image.name = data['page_image'] + if self.page_image.name: + with self.page_image.open('wb') as pi: + pi.write(bytes.fromhex(data['page_image_data'])) + self.save() + + +def BottomBarExist(data): + name = data.get('name', '') + icon_name = data.get('icon_name', '') + icon_data = data.get('icon_data') + url = data.get('url', '') + left = data.get('left') + sequence_number = data.get('sequence_number') + for bb_entry in BottomBar.objects.filter(name=name, icon=icon_name, url=url, left=left, sequence_number=sequence_number): + if icon_name == '' or icon_data == bb_entry.icon.open().read().hex(): + return True + return False + class BottomBar(models.Model): name = models.CharField(max_length=64, blank=True) @@ -40,3 +89,27 @@ class BottomBar(models.Model): output_size = (int(img.width * 40 / img.height), 40) img.thumbnail(output_size) img.save(self.icon.path) + + def export_data(self): + rv = {} + rv['name'] = self.name + rv['icon_name'] = self.icon.name + if self.icon.name != '': + rv['icon_data'] = self.icon.open().read().hex() + else: + rv['icon_data'] = None + rv['url'] = self.url + rv['left'] = self.left + rv['sequence_number'] = self.sequence_number + return rv + + def import_data(self, data): + self.name = data['name'] + self.icon.name = data['icon_name'] + if self.icon.name: + with self.icon.open('wb') as ih: + ih.write(bytes.fromhex(data['icon_data'])) + self.url = data['url'] + self.left = data['left'] + self.sequence_number = data['sequence_number'] + self.save()