From b107668452a9d7dc67630bb9909775e41a2f9c92 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 26 May 2020 21:17:16 +0100 Subject: [PATCH] Update theme after adding custom font --- daemon.py | 4 +++- theme.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 63 insertions(+), 7 deletions(-) diff --git a/daemon.py b/daemon.py index ac65ac323..3d368f87b 100644 --- a/daemon.py +++ b/daemon.py @@ -15,7 +15,6 @@ from functools import partial # for saving images from hashlib import sha256 from hashlib import sha1 -from shutil import copyfile from session import createSession from webfinger import parseHandle from webfinger import webfingerMeta @@ -170,6 +169,7 @@ from cache import storePersonInCache from cache import getPersonFromCache from httpsig import verifyPostHeaders from theme import setTheme +from theme import getTheme from schedule import runPostSchedule from schedule import runPostScheduleWatchdog from schedule import removeScheduledPosts @@ -5470,6 +5470,8 @@ class PubServer(BaseHTTPRequestHandler): postImageFilename = filename.replace('.temp', '') if mType == 'customFont': os.rename(filename, postImageFilename) + setTheme(self.server.baseDir, + getTheme(self.server.baseDir)) print('profile POST ' + mType + ' image or font filename ' + postImageFilename) else: diff --git a/theme.py b/theme.py index f24567508..1da7a7664 100644 --- a/theme.py +++ b/theme.py @@ -22,6 +22,18 @@ def setThemeInConfig(baseDir: str, name: str) -> bool: return saveJson(configJson, configFilename) +def getTheme(baseDir: str) -> str: + configFilename = baseDir + '/config.json' + if not os.path.isfile(configFilename): + return 'default' + configJson = loadJson(configFilename, 0) + if not configJson: + return 'default' + if configJson.get('theme'): + return configJson['theme'] + return 'default' + + def removeTheme(baseDir: str): themeFiles = ('epicyon.css', 'login.css', 'follow.css', 'suspended.css', 'calendar.css', 'blog.css') @@ -89,6 +101,46 @@ def setThemeFromDict(baseDir: str, name: str, themeParams: {}): cssfile.write(css) +def setCustomFont(baseDir: str): + """Uses a dictionary to set a theme + """ + customFontExt = None + customFontType = None + fontExtension = { + 'woff': 'woff', + 'woff2': 'woff2', + 'otf': 'opentype', + 'ttf': 'truetype' + } + for ext, extType in fontExtension.items(): + filename = baseDir + '/fonts/custom.' + ext + if os.path.isfile(filename): + customFontExt = ext + customFontType = extType + if not customFontExt: + return + + themeFiles = ('epicyon.css', 'login.css', 'follow.css', + 'suspended.css', 'calendar.css', 'blog.css') + for filename in themeFiles: + templateFilename = baseDir + '/epicyon-' + filename + if filename == 'epicyon.css': + templateFilename = baseDir + '/epicyon-profile.css' + if not os.path.isfile(templateFilename): + continue + with open(templateFilename, 'r') as cssfile: + css = cssfile.read() + css = \ + setCSSparam(css, "*src", + "url('./fonts/custom." + + customFontExt + + "') format('" + + customFontType + "')") + filename = baseDir + '/' + filename + with open(filename, 'w') as cssfile: + cssfile.write(css) + + def setThemeHighVis(baseDir: str): themeParams = { "font-size-header": "22px", @@ -209,19 +261,21 @@ def setThemeLight(baseDir: str): def setTheme(baseDir: str, name: str) -> bool: + result = False if name == 'default': setThemeDefault(baseDir) - return True + result = True elif name == 'purple': setThemePurple(baseDir) - return True + result = True elif name == 'light': setThemeLight(baseDir) - return True + result = True elif name == 'hacker': setThemeHacker(baseDir) - return True + result = True elif name == 'highvis': setThemeHighVis(baseDir) - return True - return False + result = True + setCustomFont(baseDir) + return result