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