Files
test/spiffy_theme_backend/controllers/pwa.py
2023-07-14 09:21:21 +08:00

98 lines
3.7 KiB
Python

# -*- coding: utf-8 -*-
# See LICENSE file for full copyright and licensing details.
# Developed by Bizople Solutions Pvt. Ltd.
import json
from odoo import http
from odoo.http import request
class PwaMain(http.Controller):
def get_asset_urls(self, asset_xml_id):
qweb = request.env['ir.qweb'].sudo()
assets = qweb._get_asset_nodes(asset_xml_id, {}, True, True)
urls = []
for asset in assets:
if asset[0] == 'link':
urls.append(asset[1]['href'])
if asset[0] == 'script':
urls.append(asset[1]['src'])
return urls
@http.route('/service_worker.js', type='http', auth="public", sitemap=False)
def service_worker(self):
qweb = request.env['ir.qweb'].sudo()
company_id = request.env.company.id
lang_code = request.env.lang
current_lang = request.env['res.lang']._lang_get(lang_code)
mimetype = 'text/javascript;charset=utf-8'
content = qweb._render('spiffy_theme_backend.service_worker', {
'company_id': company_id,
})
return request.make_response(content, [('Content-Type', mimetype)])
@http.route('/pwa/enabled', type='json', auth="public")
def enabled_pwa(self):
company_id = request.env.company
if company_id.enable_pwa:
return company_id.enable_pwa
else:
return False
@http.route('/pwa/offline', type='http', auth="public")
def pwa_offline(self, **kw):
return request.render('spiffy_theme_backend.pwa_offline_page',)
@http.route('/spiffy_theme_backend/<int:company_id>/manifest.json', type='http', auth="public")
def manifest(self, company_id=None):
company = request.env['res.company'].search(
[('id', '=', company_id)]) if company_id else request.env.company
pwashortlist = []
app_name_pwa = company.app_name_pwa
short_name_pwa = company.short_name_pwa
description_pwa = company.description_pwa
background_color_pwa = company.background_color_pwa
theme_color_pwa = company.theme_color_pwa
start_url_pwa = company.start_url_pwa
image_192_pwa = "/web/image/res.company/%s/image_192_pwa/192x192" % (
company.id)
image_512_pwa = "/web/image/res.company/%s/image_512_pwa/512x512" % (
company.id)
pwa_content = {
"name": app_name_pwa,
"short_name": short_name_pwa,
"icons": [{
"sizes": "192x192",
"src": image_192_pwa,
"type": "image/png"
}, {
"sizes": "512x512",
"src": image_512_pwa,
"type": "image/png"
}],
"start_url": start_url_pwa,
"display": "standalone",
"scope": "/",
"background_color": background_color_pwa,
"theme_color": theme_color_pwa,
}
if company.pwa_shortcuts_ids:
for pwashorts in company.pwa_shortcuts_ids:
dict = {
"name": pwashorts.name,
"short_name": pwashorts.short_name,
"description": pwashorts.description,
"url": pwashorts.url,
"icons": [{"src": "/web/image/res.company/%s/image_192_shortcut" % (
company.id), "sizes": "192x192"}],
}
pwashortlist.append(dict)
pwa_content.update({
"shortcuts": pwashortlist
})
return request.make_response(
data=json.dumps(pwa_content),
headers=[('Content-Type', 'application/json')]
)