You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.3 KiB

9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
  1. import datetime
  2. from odoo import api, exceptions, fields, models, tools
  3. from odoo.tools.translate import _
  4. class FetchMailServer(models.Model):
  5. _inherit = "fetchmail.server"
  6. _name = "fetchmail.server"
  7. _last_updated = None
  8. run_time = fields.Datetime(string="Launch time")
  9. def _run_time(self):
  10. if not self._last_updated:
  11. self._last_updated = tools.datetime.now()
  12. src_tstamp_str = self._last_updated.strftime(
  13. tools.misc.DEFAULT_SERVER_DATETIME_FORMAT
  14. )
  15. src_format = tools.misc.DEFAULT_SERVER_DATETIME_FORMAT
  16. dst_format = tools.misc.DEFAULT_SERVER_DATETIME_FORMAT
  17. dst_tz_name = self._context.get("tz") or self.env.user.tz
  18. _now = tools.misc.server_to_local_timestamp(
  19. src_tstamp_str, src_format, dst_format, dst_tz_name
  20. )
  21. return _now
  22. @api.model
  23. def _fetch_mails(self):
  24. if self._context.get("run_fetchmail_manually"):
  25. # if interval less than 5 seconds
  26. if self._last_updated and (
  27. datetime.datetime.now() - self._last_updated
  28. ) < datetime.timedelta(0, 5):
  29. raise exceptions.Warning(
  30. _("Error"), _("Task can be started no earlier than 5 seconds.")
  31. )
  32. super(FetchMailServer, self)._fetch_mails()
  33. res = (
  34. self.env["fetchmail.server"]
  35. .sudo()
  36. .with_context(tz=self.env.user.tz)
  37. .search([("state", "=", "done")])
  38. )
  39. if res:
  40. res[0].run_time = self._run_time()
  41. class FetchMailImmediately(models.AbstractModel):
  42. _name = "fetch_mail.imm"
  43. @api.model
  44. def get_last_update_time(self):
  45. res = (
  46. self.env["fetchmail.server"]
  47. .sudo()
  48. .with_context(tz=self.env.user.tz)
  49. .search([("state", "=", "done")])
  50. )
  51. array = [r.run_time for r in res]
  52. if array:
  53. return array[0]
  54. else:
  55. return None
  56. @api.model
  57. def run_fetchmail_manually(self):
  58. fetchmail_task = self.env.ref("fetchmail.ir_cron_mail_gateway_action")
  59. fetchmail_model = self.env["fetchmail.server"].sudo()
  60. fetchmail_task._try_lock()
  61. fetchmail_model.with_context(run_fetchmail_manually=True)._fetch_mails()