]> git.proxmox.com Git - pmg-gui.git/blame - js/PostfixMailQueue.js
use format_size renderer for size in deferred queue listing
[pmg-gui.git] / js / PostfixMailQueue.js
CommitLineData
ff735274 1/*global Proxmox*/
ccf06524
DM
2Ext.define('pmg-mailq', {
3 extend: 'Ext.data.Model',
4 fields: [
5 'queue_id', 'queue_name',
6 { type: 'date', dateFormat: 'timestamp', name: 'arrival_time'},
7 { type: 'integer', name: 'message_size'},
8 'sender', 'receiver', 'reason'
9 ],
10 idProperty: 'queue_id'
11});
12
13Ext.define('PMG.Postfix.MailQueue', {
14 extend: 'Ext.grid.GridPanel',
15 alias: 'widget.pmgPostfixMailQueue',
16
cd3d4213 17 nodename: undefined,
10f771b5 18
ccf06524
DM
19 filter: undefined,
20
10f771b5
DM
21 queuename: 'deferred',
22
34d0b6cc
DM
23 store: {
24 xclass: 'Ext.data.BufferedStore',
25 model: 'pmg-mailq',
26 remoteFilter: true,
27 pageSize: 2000
28 },
ccf06524
DM
29
30 controller: {
31
32 xclass: 'Ext.app.ViewController',
33
34 init: function(view) {
c17f9fe4
DC
35 if (view.nodename) {
36 view.setNodename(view.nodename);
37 }
df71aecf
DM
38
39 view.delayFilterTask = new Ext.util.DelayedTask(function() {
40 var filter = view.lookupReference('filter').getValue();
70b0bec4
DM
41
42 view.filter = filter;
43 view.updateProxy();
df71aecf
DM
44 });
45 },
46
47 onChangeFilter: function(f, v) {
48 var view = this.getView();
49 view.delayFilterTask.delay(500);
50 },
51
b8b05af7 52 onFlush: function(button, event, rec) {
53f18f14
DM
53 var view = this.getView();
54
53f18f14
DM
55 Proxmox.Utils.API2Request({
56 url: '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' +
57 view.queuename + '/' + rec.data.queue_id,
58 method: 'POST',
59 waitMsgTarget: view,
60 failure: function (response, opts) {
61 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
62 }
63 });
64
65 },
66
b8b05af7
DM
67 onRemove: function(button, event, rec) {
68 var view = this.getView();
69
70 Proxmox.Utils.API2Request({
71 url: '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' +
72 view.queuename + '/' + rec.data.queue_id,
73 method: 'DELETE',
74 waitMsgTarget: view,
75 success: function(response, opts) {
59542a9f 76 view.selModel.deselectAll();
b8b05af7
DM
77 view.store.load();
78 },
79 failure: function (response, opts) {
80 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
81 }
82 });
83 },
84
cd3d4213
DM
85 onHeaders: function(button, event, rec) {
86 var view = this.getView();
87
88 var url = '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' +
89 view.queuename + '/' + rec.data.queue_id;
90
91 var win = Ext.create('PMG.ViewMailHeaders', {
92 title: view.title + ' : ' + rec.data.queue_id,
771bd0b9 93 url: url
cd3d4213
DM
94 });
95 win.show();
96 },
97
df71aecf 98 control: {
55589b49
DM
99 '#': {
100 activate: function() {
101 this.view.updateProxy(); // reload
cd3d4213
DM
102 },
103 itemdblclick: function(grid, rec, item, index, event) {
104 this.onHeaders(grid, event, rec);
55589b49
DM
105 }
106 },
df71aecf
DM
107 'field[reference=filter]': {
108 change: 'onChangeFilter'
109 }
ccf06524
DM
110 }
111 },
112
df71aecf 113 tbar: [
cd3d4213
DM
114 {
115 xtype: 'proxmoxButton',
116 disabled: true,
117 text: gettext('Headers'),
118 handler: 'onHeaders'
119 },
53f18f14
DM
120 {
121 xtype: 'proxmoxButton',
122 disabled: true,
123 text: gettext('Flush'),
124 handler: 'onFlush'
125 },
b8b05af7
DM
126 {
127 xtype: 'proxmoxStdRemoveButton',
128 handler: 'onRemove'
129 },
df71aecf
DM
130 {
131 xtype: 'label',
132 html: gettext('Filter') + ':'
133 },
134 {
135 xtype: 'textfield',
136 width: 300,
137 reference: 'filter'
138 }
139 ],
140
ccf06524
DM
141 columns: [
142 {
143 header: gettext('Time'),
144 width: 150,
145 renderer: Ext.util.Format.dateRenderer("Y-m-d H:i:s"),
146 dataIndex: 'arrival_time'
147 },
148 {
84d84db1
SI
149 header: 'Size',
150 renderer: Proxmox.Utils.format_size,
ccf06524
DM
151 width: 80,
152 dataIndex: 'message_size'
153 },
154 {
155 header: gettext('Sender'),
156 width: 200,
157 dataIndex: 'sender'
158 },
159 {
160 header: gettext('Receiver'),
161 width: 200,
162 dataIndex: 'receiver'
163 },
164 {
165 header: gettext('Reason'),
166 flex: 1,
167 dataIndex: 'reason'
168 }
169 ],
170
df71aecf
DM
171 pendingLoad: false,
172
173 updateProxy: function() {
ccf06524
DM
174 var me = this;
175
c17f9fe4
DC
176 if (me.pendingLoad) {
177 return;
178 }
ccf06524 179
df71aecf 180 var proxy = {
ccf06524 181 type: 'proxmox',
34d0b6cc
DM
182 startParam: 'start',
183 limitParam: 'limit',
10f771b5 184 url: "/api2/json/nodes/" + me.nodename + "/postfix/queue/" + me.queuename
df71aecf
DM
185 };
186
187 var filter = me.filter;
188 var nodename = me.nodename;
10f771b5 189 var queuename = me.queuename;
df71aecf
DM
190
191 if (filter) { proxy.extraParams = { filter: filter }; }
192
193
194 me.store.setProxy(proxy);
195
196 me.pendingLoad = true;
197
198 me.store.load(function() {
199 me.pendingLoad = false;
10f771b5 200 if (me.nodename !== nodename || me.filter !== filter || me.queuename !== queuename) {
df71aecf
DM
201 setTimeout(function() {
202 me.updateProxy();
203 }, 100);
204 }
ccf06524 205 });
df71aecf
DM
206 },
207
208 setFilter: function(filter) {
70b0bec4 209 this.lookupReference('filter').setValue(filter);
df71aecf
DM
210 },
211
212 setNodename: function(nodename) {
213 var me = this;
214
215 me.nodename = nodename;
216
10f771b5
DM
217 me.updateProxy();
218 },
219
220 setQueueName: function(queuename) {
221 var me = this;
222
223 me.queuename = queuename;
224
df71aecf 225 me.updateProxy();
ccf06524
DM
226 }
227
228});