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.6.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"
 | |
|             }
 | |
|         ]
 | |
|     }
 |