pmg-gui/js/PostfixMailQueue.js
Thomas Lamprecht ff23b1b37b renderer: s/format_size/render_size/
format_size is the "lower" level helper and is not fit (anymore) to
be set as renderer directly, as its parameter signature may clash
with the extra, different ones, that renderers get passed.

For example, the useSI param always gets evaluated as true due to
the metaData "truthy" value that calls to a renderer get passed along
most of the time.

Use the render_size instead, a wrapper which only passes along value
to format_size.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2022-11-07 13:16:51 +01:00

233 lines
4.6 KiB
JavaScript

Ext.define('pmg-mailq', {
extend: 'Ext.data.Model',
fields: [
'queue_id', 'queue_name',
{ type: 'date', dateFormat: 'timestamp', name: 'arrival_time' },
{ type: 'integer', name: 'message_size' },
'sender', 'receiver', 'reason',
],
idProperty: 'queue_id',
});
Ext.define('PMG.Postfix.MailQueue', {
extend: 'Ext.grid.GridPanel',
alias: 'widget.pmgPostfixMailQueue',
nodename: undefined,
filter: undefined,
queuename: 'deferred',
store: {
xclass: 'Ext.data.BufferedStore',
model: 'pmg-mailq',
remoteFilter: true,
remoteSort: true,
sorters: 'arrival_time',
pageSize: 2000,
},
controller: {
xclass: 'Ext.app.ViewController',
init: function(view) {
if (view.nodename) {
view.setNodename(view.nodename);
}
view.delayFilterTask = new Ext.util.DelayedTask(function() {
var filter = view.lookupReference('filter').getValue();
view.filter = filter;
view.updateProxy();
});
},
onChangeFilter: function(f, v) {
var view = this.getView();
view.delayFilterTask.delay(500);
},
onFlush: function(button, event, rec) {
var view = this.getView();
Proxmox.Utils.API2Request({
url: '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' +
view.queuename + '/' + rec.data.queue_id,
method: 'POST',
waitMsgTarget: view,
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
},
});
},
onRemove: function(button, event, rec) {
var view = this.getView();
Proxmox.Utils.API2Request({
url: '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' +
view.queuename + '/' + rec.data.queue_id,
method: 'DELETE',
waitMsgTarget: view,
success: function(response, opts) {
view.selModel.deselectAll();
view.store.load();
},
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
},
});
},
onHeaders: function(button, event, rec) {
var view = this.getView();
var url = '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' +
view.queuename + '/' + rec.data.queue_id;
var win = Ext.create('PMG.ViewMailHeaders', {
title: view.title + ' : ' + rec.data.queue_id,
url: url,
});
win.show();
},
control: {
'#': {
activate: function() {
this.view.updateProxy(); // reload
},
itemdblclick: function(grid, rec, item, index, event) {
this.onHeaders(grid, event, rec);
},
},
'field[reference=filter]': {
change: 'onChangeFilter',
},
},
},
tbar: [
{
xtype: 'proxmoxButton',
disabled: true,
text: gettext('Headers'),
handler: 'onHeaders',
},
{
xtype: 'proxmoxButton',
disabled: true,
text: gettext('Flush'),
handler: 'onFlush',
},
{
xtype: 'proxmoxStdRemoveButton',
handler: 'onRemove',
},
{
xtype: 'label',
html: gettext('Filter') + ':',
},
{
xtype: 'textfield',
width: 300,
reference: 'filter',
},
],
columns: [
{
header: gettext('Time'),
flex: 2,
renderer: Ext.util.Format.dateRenderer("Y-m-d H:i:s"),
dataIndex: 'arrival_time',
},
{
header: 'Size',
renderer: Proxmox.Utils.render_size,
flex: 1,
dataIndex: 'message_size',
},
{
header: gettext('Sender'),
flex: 2,
dataIndex: 'sender',
},
{
header: gettext('Receiver'),
flex: 2,
dataIndex: 'receiver',
},
{
header: gettext('Reason'),
flex: 8,
dataIndex: 'reason',
},
],
pendingLoad: false,
updateProxy: function() {
let me = this;
if (me.pendingLoad) {
return;
}
let proxy = {
type: 'proxmox',
startParam: 'start',
limitParam: 'limit',
sortParam: 'sortfield',
directionParam: 'sortdir',
simpleSortMode: true,
url: "/api2/json/nodes/" + me.nodename + "/postfix/queue/" + me.queuename,
};
let filter = me.filter;
if (filter) {
proxy.extraParams = { filter: filter };
}
me.store.setProxy(proxy);
let nodename = me.nodename;
let queuename = me.queuename;
me.pendingLoad = true;
me.store.load(function() {
me.pendingLoad = false;
if (me.nodename !== nodename || me.filter !== filter || me.queuename !== queuename) {
setTimeout(function() {
me.updateProxy();
}, 100);
}
});
},
setFilter: function(filter) {
this.lookupReference('filter').setValue(filter);
},
setNodename: function(nodename) {
let me = this;
if (nodename === me.nodename) {
return; // nothing to do
}
me.nodename = nodename;
me.updateProxy();
},
setQueueName: function(queuename) {
var me = this;
me.queuename = queuename;
me.updateProxy();
},
});