|
|
# -*- coding: utf-8 -*- import datetime
from openerp.tools.translate import _ from openerp import tools
from openerp import exceptions from openerp import models, fields, api
class FetchMailServer(models.Model): _inherit = 'fetchmail.server' _name = 'fetchmail.server'
_last_updated = None
run_time = fields.Datetime(string="Launch time")
def _run_time(self): if not self._last_updated: self._last_updated = tools.datetime.now()
src_tstamp_str = self._last_updated.strftime(tools.misc.DEFAULT_SERVER_DATETIME_FORMAT) src_format = tools.misc.DEFAULT_SERVER_DATETIME_FORMAT dst_format = tools.misc.DEFAULT_SERVER_DATETIME_FORMAT dst_tz_name = self._context.get('tz') or self.env.user.tz _now = tools.misc.server_to_local_timestamp(src_tstamp_str, src_format, dst_format, dst_tz_name)
return _now
@api.model def _fetch_mails(self):
if self._context.get('run_fetchmail_manually'): # if interval less than 5 seconds if self._last_updated and (datetime.datetime.now() - self._last_updated) < datetime.timedelta(0, 5): raise exceptions.Warning(_('Error'), _('Task can be started no earlier than 5 seconds.'))
super(FetchMailServer, self)._fetch_mails()
res = self.env['fetchmail.server'].sudo().with_context(tz=self.env.user.tz).search([('state', '=', 'done')]) if res: res[0].run_time = self._run_time()
class FetchMailImmediately(models.AbstractModel):
_name = 'fetch_mail.imm'
@api.model def get_last_update_time(self): res = self.env['fetchmail.server'].sudo().with_context(tz=self.env.user.tz).search([('state', '=', 'done')]) array = [r.run_time for r in res] if array: return array[0] else: return None
@api.model def run_fetchmail_manually(self):
fetchmail_task = self.env.ref('fetchmail.ir_cron_mail_gateway_action') fetchmail_task_id = fetchmail_task.id fetchmail_model = self.env['fetchmail.server'].sudo()
fetchmail_task._try_lock() fetchmail_model.with_context(run_fetchmail_manually=True)._fetch_mails()
|