Browse Source

Initial commit

pull/1/head
s0x90 9 years ago
commit
d79a1d85db
  1. 3
      __init__.py
  2. 15
      __openerp__.py
  3. 63
      models.py
  4. 44
      static/src/js/main.js
  5. 23
      static/src/xml/main.xml
  6. 9
      views.xml

3
__init__.py

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
import controllers
import models

15
__openerp__.py

@ -0,0 +1,15 @@
{
'name' : 'Check mail immediately',
'version' : '0.1',
'author' : 'Ivan Yelizariev',
'category' : 'Base',
'website' : 'https://yelizariev.github.io',
'depends' : ['base', 'web', 'fetchmail', 'mail'],
'data': [
'views.xml',
],
'qweb': [
"static/src/xml/main.xml",
],
'installable': True
}

63
models.py

@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
import psycopg2
from openerp.tools.safe_eval import safe_eval
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", compute='_run_time')
@classmethod
def _update_time(cls):
cls._last_updated = fields.Datetime.now()
@api.one
def _run_time(self):
self.run_time = self._last_updated
@api.model
def _fetch_mails(self):
super(FetchMailServer, self)._fetch_mails()
self._update_time()
class FetchMailImmediately(models.Model):
_name = 'fetch_mail.imm'
@api.model
def run_fetchmail_manually(self):
fetchmail_task = self.env['ir.cron'].search([['model', '=', 'fetchmail.server']])
fetchmail_task_id = fetchmail_task.id
fetchmail_model = self.env['fetchmail.server']
cr = self.env.cr
try:
# Try to grab an exclusive lock on the job row
# until the end of the transaction
cr.execute(
"""SELECT *
FROM ir_cron
WHERE id=%s
FOR UPDATE NOWAIT""",
(fetchmail_task_id,), log_exceptions=False)
# Got the lock on the job row, run its code
fetchmail_model._fetch_mails()
except psycopg2.OperationalError as e:
# User friendly error if the lock could not be claimed
if e.pgcode == '55P03':
raise orm.except_orm(
_('Error'),
_('Another process/thread is already busy '
'executing this job'))
raise

44
static/src/js/main.js

@ -0,0 +1,44 @@
openerp.mail_check_immediately = function(instance, local) {
instance.mail.Wall.include({
start: function() {
var _this = this;
this._super();
this.get_last_update_time();
this.get_time_loop()
},
events: {
'click a.oe_fetch_new_mails': function(){
this.get_fetchmail_obj();
}
},
get_fetchmail_obj: function(){
var model = new instance.web.Model('fetch_mail.imm');
var _this = this;
model.call('run_fetchmail_manually', {context: new instance.web.CompoundContext()}).then(function(){
_this.get_last_update_time()
})
},
get_last_update_time: function(){
var _this = this;
var fetchmail = new instance.web.Model('fetchmail.server');
fetchmail.query(['run_time']).all().then(function(res){
_this.$el.find('span.oe_view_manager_fetch_mail_imm_field').html(res[0].run_time);
})
},
get_time_loop: function(){
var _this = this;
setInterval(function(){
_this.get_last_update_time()
}, 30000)
}
});
};

23
static/src/xml/main.xml

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<templates>
<t t-name="fetch_mail_immediately.header">
<tr class="oe_header_row">
<td t-att-colspan="colspan or '3'">
<div class="oe_view_manager_fetch_mail_imm">
<span>Last</span>
<a href="#" class="oe_fetch_new_mails"
name="get_fetchmail_obj" type="object">update:</a>
<span class="oe_view_manager_fetch_mail_imm_field">N</span><span> min ago</span>
</div>
</td>
<td></td>
</tr>
</t>
<t t-extend="mail.wall">
<t t-jquery="tr.oe_header_row_top" t-operation="after">
<t t-call="fetch_mail_immediately.header">
<t t-set="colspan" t-value="2"/>
</t>
</t>
</t>
</templates>

9
views.xml

@ -0,0 +1,9 @@
<openerp>
<data>
<template id="assets_backend_inherited_check_mail" name="Check mail immediately bar" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script type="text/javascript" src="/mail_check_immediately/static/src/js/main.js"></script>
</xpath>
</template>
</data>
</openerp>
Loading…
Cancel
Save