mirror of https://gitlab.com/bashrc2/epicyon
170 lines
4.8 KiB
Python
170 lines
4.8 KiB
Python
__filename__ = "pwa.py"
|
|
__author__ = "Bob Mottram"
|
|
__license__ = "AGPL3+"
|
|
__version__ = "1.5.0"
|
|
__maintainer__ = "Bob Mottram"
|
|
__email__ = "bob@libreserver.org"
|
|
__status__ = "Production"
|
|
__module_group__ = "Web Interface"
|
|
|
|
import os
|
|
from utils import remove_html
|
|
|
|
|
|
def _get_variable_from_css(css_str: str, variable: str) -> str:
|
|
"""Gets a variable value from the css file text
|
|
"""
|
|
if '--' + variable + ':' not in css_str:
|
|
return None
|
|
value = css_str.split('--' + variable + ':')[1]
|
|
if ';' in value:
|
|
value = value.split(';')[0].strip()
|
|
value = remove_html(value)
|
|
if ' ' in value:
|
|
value = None
|
|
return value
|
|
|
|
|
|
def get_pwa_theme_colors(css_filename: str) -> (str, str):
|
|
"""Gets the theme/statusbar color for progressive web apps
|
|
"""
|
|
default_pwa_theme_color = 'apple-mobile-web-app-status-bar-style'
|
|
pwa_theme_color = default_pwa_theme_color
|
|
|
|
default_pwa_theme_background_color = 'black-translucent'
|
|
pwa_theme_background_color = default_pwa_theme_background_color
|
|
|
|
if not os.path.isfile(css_filename):
|
|
return pwa_theme_color, pwa_theme_background_color
|
|
|
|
css_str = ''
|
|
try:
|
|
with open(css_filename, 'r', encoding='utf-8') as fp_css:
|
|
css_str = fp_css.read()
|
|
except OSError:
|
|
print('EX: get_pwa_theme_colors unable to read ' + css_filename)
|
|
|
|
pwa_theme_color = \
|
|
_get_variable_from_css(css_str, 'pwa-theme-color')
|
|
if not pwa_theme_color:
|
|
pwa_theme_color = default_pwa_theme_color
|
|
|
|
pwa_theme_background_color = \
|
|
_get_variable_from_css(css_str, 'pwa-theme-background-color')
|
|
if not pwa_theme_background_color:
|
|
pwa_theme_background_color = default_pwa_theme_background_color
|
|
|
|
return pwa_theme_color, pwa_theme_background_color
|
|
|
|
|
|
def pwa_manifest(base_dir: str) -> {}:
|
|
"""Returns progressive web app manifest
|
|
"""
|
|
css_filename = base_dir + '/epicyon.css'
|
|
pwa_theme_color, pwa_theme_background_color = \
|
|
get_pwa_theme_colors(css_filename)
|
|
|
|
app1 = "https://f-droid.org/en/packages/eu.siacs.conversations"
|
|
app2 = "https://staging.f-droid.org/en/packages/im.vector.app"
|
|
app3 = \
|
|
"https://f-droid.org/en/packages/" + \
|
|
"com.stoutner.privacybrowser.standard"
|
|
return {
|
|
"name": "Epicyon",
|
|
"short_name": "Epicyon",
|
|
"start_url": "/index.html",
|
|
"display": "standalone",
|
|
"background_color": pwa_theme_background_color,
|
|
"theme_color": pwa_theme_color,
|
|
"orientation": "portrait-primary",
|
|
"categories": ["microblog", "fediverse", "activitypub"],
|
|
"screenshots": [
|
|
{
|
|
"src": "/mobile.jpg",
|
|
"sizes": "418x851",
|
|
"type": "image/jpeg"
|
|
},
|
|
{
|
|
"src": "/mobile_person.jpg",
|
|
"sizes": "429x860",
|
|
"type": "image/jpeg"
|
|
},
|
|
{
|
|
"src": "/mobile_search.jpg",
|
|
"sizes": "422x861",
|
|
"type": "image/jpeg"
|
|
}
|
|
],
|
|
"icons": [
|
|
{
|
|
"src": "/logo72.png",
|
|
"type": "image/png",
|
|
"sizes": "72x72"
|
|
},
|
|
{
|
|
"src": "/logo96.png",
|
|
"type": "image/png",
|
|
"sizes": "96x96"
|
|
},
|
|
{
|
|
"src": "/logo128.png",
|
|
"type": "image/png",
|
|
"sizes": "128x128"
|
|
},
|
|
{
|
|
"src": "/logo144.png",
|
|
"type": "image/png",
|
|
"sizes": "144x144"
|
|
},
|
|
{
|
|
"src": "/logo150.png",
|
|
"type": "image/png",
|
|
"sizes": "150x150"
|
|
},
|
|
{
|
|
"src": "/apple-touch-icon.png",
|
|
"type": "image/png",
|
|
"sizes": "180x180"
|
|
},
|
|
{
|
|
"src": "/logo192.png",
|
|
"type": "image/png",
|
|
"sizes": "192x192"
|
|
},
|
|
{
|
|
"src": "/logo256.png",
|
|
"type": "image/png",
|
|
"sizes": "256x256"
|
|
},
|
|
{
|
|
"src": "/logo512.png",
|
|
"type": "image/png",
|
|
"sizes": "512x512"
|
|
}
|
|
],
|
|
"related_applications": [
|
|
{
|
|
"platform": "fdroid",
|
|
"url": app1
|
|
},
|
|
{
|
|
"platform": "fdroid",
|
|
"url": app2
|
|
},
|
|
{
|
|
"platform": "fdroid",
|
|
"url": app3
|
|
}
|
|
],
|
|
"protocol_handlers": [
|
|
{
|
|
"protocol": "web+ap",
|
|
"url": "?target=%s"
|
|
},
|
|
{
|
|
"protocol": "web+epicyon",
|
|
"url": "?target=%s"
|
|
}
|
|
]
|
|
}
|