Browse Source
Merge branch '9.0' of /home/iii/addons-yelizariev/../mail_check_immediately into 9.0
pull/2/head
Merge branch '9.0' of /home/iii/addons-yelizariev/../mail_check_immediately into 9.0
pull/2/head
Ildar Nasyrov
9 years ago
12 changed files with 236 additions and 0 deletions
-
4mail_check_immediately/README.rst
-
2mail_check_immediately/__init__.py
-
18mail_check_immediately/__openerp__.py
-
9mail_check_immediately/doc/changelog.rst
-
67mail_check_immediately/models.py
-
BINmail_check_immediately/static/description/icon.png
-
47mail_check_immediately/static/description/index.html
-
BINmail_check_immediately/static/description/issue.png
-
BINmail_check_immediately/static/description/screenshot.png
-
55mail_check_immediately/static/src/js/main.js
-
25mail_check_immediately/static/src/xml/main.xml
-
9mail_check_immediately/views.xml
@ -0,0 +1,4 @@ |
|||
Check mail immediately |
|||
====================== |
|||
|
|||
Description: https://apps.odoo.com/apps/modules/8.0/mail_check_immediately/ |
@ -0,0 +1,2 @@ |
|||
# -*- coding: utf-8 -*- |
|||
import models |
@ -0,0 +1,18 @@ |
|||
{ |
|||
'name' : 'Check mail immediately', |
|||
'version' : '1.0.1', |
|||
'author' : 'IT-Projects LLC, Ivan Yelizariev', |
|||
'license': 'LGPL-3', |
|||
'category' : 'Social Network', |
|||
'website' : 'https://twitter.com/yelizariev', |
|||
'price': 9.00, |
|||
'currency': 'EUR', |
|||
'depends' : ['base', 'web', 'fetchmail', 'mail'], |
|||
'data': [ |
|||
'views.xml', |
|||
], |
|||
'qweb': [ |
|||
"static/src/xml/main.xml", |
|||
], |
|||
'installable': False |
|||
} |
@ -0,0 +1,9 @@ |
|||
.. _changelog: |
|||
|
|||
Changelog |
|||
========= |
|||
|
|||
`1.0.1` |
|||
------- |
|||
|
|||
- FIX: incorrectly displayed last updated time when multiple threads (--workers) |
@ -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() |
After Width: 100 | Height: 100 | Size: 2.1 KiB |
@ -0,0 +1,47 @@ |
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2 class="oe_slogan">Check mail immediately</h2> |
|||
<h3 class="oe_slogan">Keep your inbox up to date</h3> |
|||
</div> |
|||
|
|||
<div class="oe_span12"> |
|||
<div class="oe_demo oe_picture oe_screenshot"> |
|||
<img src="screenshot.png?"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container oe_dark"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2>Protect your business</h2> |
|||
</div> |
|||
<div class="oe_span6"> |
|||
<p class="oe_mt32"> |
|||
<a href="https://github.com/odoo/odoo/issues/7464">Sometimes</a> odoo mail fetching system doesn't work for really long time. It could be a real problem, if you will not notice it on time. Until this issue is fixed, you can restart odoo every time when you see that last fetching time is more than 5 minutes. |
|||
</p> |
|||
</div> |
|||
|
|||
<div class="oe_span6"> |
|||
<div class="oe_picture"> |
|||
<img src="issue.png?3"/> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</section> |
|||
|
|||
<section class="oe_container"> |
|||
<div class="oe_row oe_spaced"> |
|||
<div class="oe_span12"> |
|||
<h2>Need our service?</h2> |
|||
<p class="oe_mt32">Contact us by <a href="mailto:it@it-projects.info">email</a> or fill out <a href="https://www.it-projects.info/page/website.contactus " target="_blank">request form</a></p> |
|||
<ul> |
|||
<li><a href="mailto:it@it-projects.info">it@it-projects.info <i class="fa fa-envelope-o"></i></a></li> |
|||
<li><a href="https://www.it-projects.info/page/website.contactus " target="_blank"> |
|||
https://www.it-projects.info/page/website.contactus <i class="fa fa-list-alt"></i></a></li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</section> |
After Width: 217 | Height: 140 | Size: 8.5 KiB |
After Width: 840 | Height: 447 | Size: 88 KiB |
@ -0,0 +1,55 @@ |
|||
openerp.mail_check_immediately = function(instance, local) { |
|||
|
|||
instance.mail.Wall.include({ |
|||
|
|||
init: function(){ |
|||
this._super.apply(this, arguments); |
|||
|
|||
var _this = this; |
|||
|
|||
this.imm_model = new instance.web.Model('fetch_mail.imm'); |
|||
this.events['click a.oe_fetch_new_mails'] = function(){ |
|||
_this.run_fetchmail_manually(); |
|||
} |
|||
}, |
|||
|
|||
start: function() { |
|||
var _this = this; |
|||
|
|||
|
|||
this._super(); |
|||
|
|||
this.get_last_fetched_time(); |
|||
|
|||
this.get_time_loop = setInterval(function(){ |
|||
_this.get_last_fetched_time() |
|||
}, 30000); |
|||
|
|||
}, |
|||
|
|||
run_fetchmail_manually: function(){ |
|||
var _this = this; |
|||
|
|||
this.imm_model.call('run_fetchmail_manually', {context: new instance.web.CompoundContext()}).then(function(){ |
|||
_this.get_last_fetched_time() |
|||
}) |
|||
}, |
|||
|
|||
get_last_fetched_time: function(){ |
|||
var _this = this; |
|||
this.imm_model.call('get_last_update_time', {context: new instance.web.CompoundContext()}).then(function(res){ |
|||
var value; |
|||
if (res) |
|||
value = $.timeago(res); |
|||
value = value || 'undefined'; |
|||
_this.$el.find('span.oe_view_manager_fetch_mail_imm_field').html(value); |
|||
}) |
|||
}, |
|||
|
|||
destroy: function(){ |
|||
clearInterval(this.get_time_loop); |
|||
this._super.apply(this, arguments); |
|||
} |
|||
|
|||
}); |
|||
}; |
@ -0,0 +1,25 @@ |
|||
<?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"> |
|||
<em> |
|||
<span>Mails fetched:</span> |
|||
<a href="#" class="oe_fetch_new_mails" title="Click to fetch mails now"> |
|||
<span class="oe_view_manager_fetch_mail_imm_field"></span> |
|||
</a> |
|||
</em> |
|||
</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> |
@ -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> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue