|
@ -0,0 +1,67 @@ |
|
|
|
|
|
# -*- 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() |