# -*- coding: utf-8 -*- # Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details. import os from flectra import api, fields, models class IrModuleModule(models.Model): _name = "ir.module.module" _inherit = _name image_ids = fields.One2many('ir.attachment', 'res_id', domain=[('res_model', '=', _name), ('mimetype', '=like', 'image/%')], string='Screenshots', readonly=True) @api.model def update_list(self): res = super(IrModuleModule, self).update_list() IrAttachment = self.env['ir.attachment'] existing_urls = IrAttachment.search_read([['res_model', '=', self._name], ['type', '=', 'url']], ['url']) existing_urls = [url_wrapped['url'] for url_wrapped in existing_urls] for app in self.search([]): terp = self.get_module_info(app.name) images = terp.get('images', []) for image in images: image_path = os.path.join(app.name, image) if image_path not in existing_urls: image_name = os.path.basename(image_path) IrAttachment.create({ 'type': 'url', 'name': image_name, 'datas_fname': image_name, 'url': image_path, 'res_model': self._name, 'res_id': app.id, }) return res @api.multi def button_choose_theme(self): theme_category = self.env.ref('base.module_category_theme', False) hidden_category = self.env.ref('base.module_category_hidden', False) theme_hidden_category = self.env.ref('base.module_category_theme_hidden', False) theme_category_id = theme_category.id if theme_category else 0 hidden_categories_ids = [hidden_category.id if hidden_category else 0, theme_hidden_category.id if theme_hidden_category else 0] self.search([ # Uninstall the theme(s) which is (are) installed ('state', '=', 'installed'), '|', ('category_id', 'not in', hidden_categories_ids), ('name', '=', 'theme_default'), '|', ('category_id', '=', theme_category_id), ('category_id.parent_id', '=', theme_category_id) ]).button_immediate_uninstall() next_action = self.button_immediate_install() # Then install the new chosen one if next_action.get('tag') == 'reload' and not next_action.get('params', {}).get('menu_id'): next_action = self.env.ref('website.action_website').read()[0] return next_action