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