From e30a2e9058b1b73ad0ede9a69a8cb310c10cdd04 Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Thu, 12 May 2022 12:55:37 +0200 Subject: [PATCH] ui: content: fix various tree-checks from action handlers they all still used some odd side effects of the tree structure to decided what record type they operated on, just move them over to the new `ty` record. Signed-off-by: Thomas Lamprecht --- www/datastore/Content.js | 92 ++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 50 deletions(-) diff --git a/www/datastore/Content.js b/www/datastore/Content.js index a7870efc..3f63c24d 100644 --- a/www/datastore/Content.js +++ b/www/datastore/Content.js @@ -168,7 +168,7 @@ Ext.define('PBS.DataStoreContent', { map[`${group["backup-type"]}/${group["backup-id"]}`] = group.comment; } view.getRootNode().cascade(node => { - if (node.parentNode && node.parentNode.id === 'root') { + if (node.data.ty === 'group') { let group = `${node.data.backup_type}/${node.data.backup_id}`; node.set('comment', map[group], { dirty: false }); } @@ -393,15 +393,13 @@ Ext.define('PBS.DataStoreContent', { } }, - onChangeOwner: function(view, rI, cI, item, e, rec) { - view = this.getView(); + onChangeOwner: function(table, rI, cI, item, e, { data }) { + let view = this.getView(); - if (!rec || !rec.data || rec.parentNode.id !== 'root' || !view.datastore) { + if (data.ty !== 'group' || !view.datastore) { return; } - let data = rec.data; - let win = Ext.create('PBS.BackupGroupChangeOwner', { datastore: view.datastore, ns: view.namespace, @@ -410,19 +408,19 @@ Ext.define('PBS.DataStoreContent', { owner: data.owner, autoShow: true, }); + // FIXME: don't reload all, use the record and query only its info, then update it + // directly in the tree win.on('destroy', this.reload, this); }, - onPrune: function(view, rI, cI, item, e, rec) { + onPrune: function(table, rI, cI, item, e, rec) { let me = this; - view = me.getView(); + let view = me.getView(); - if (!(rec && rec.data)) return; + if (rec.data.ty !== 'group' || !view.datastore) { + return; + } let data = rec.data; - if (rec.parentNode.id !== 'root') return; - - if (!view.datastore) return; - Ext.create('PBS.DataStorePrune', { autoShow: true, datastore: view.datastore, @@ -430,6 +428,8 @@ Ext.define('PBS.DataStoreContent', { backup_type: data.backup_type, backup_id: data.backup_id, listeners: { + // FIXME: don't reload all, use the record and query only its info, then update + // it directly in the tree destroy: () => me.reload(), }, }); @@ -490,19 +490,16 @@ Ext.define('PBS.DataStoreContent', { }); }, - - onVerify: function(view, rI, cI, item, e, rec) { + onVerify: function(view, rI, cI, item, e, { data }) { let me = this; view = me.getView(); - if (!view.datastore) return; - - if (!(rec && rec.data)) return; - let data = rec.data; + if ((data.ty !== 'group' && data.ty !== 'dir') || !view.datastore) { + return; + } let params; - - if (rec.parentNode.id !== 'root') { + if (data.ty === 'dir') { params = { "backup-type": data["backup-type"], "backup-id": data["backup-id"], @@ -536,11 +533,10 @@ Ext.define('PBS.DataStoreContent', { }); }, - onNotesEdit: function(view, data, isGroup) { + onNotesEdit: function(view, data) { let me = this; - let url = `/admin/datastore/${view.datastore}/`; - url += isGroup ? 'group-notes' : 'notes'; + let isGroup = data.ty === 'group'; let params; if (isGroup) { @@ -560,7 +556,7 @@ Ext.define('PBS.DataStoreContent', { } Ext.create('PBS.window.NotesEdit', { - url: url, + url: `/admin/datastore/${view.datastore}/${isGroup ? 'group-notes' : 'notes'}`, autoShow: true, apiCallDone: () => me.reload(), // FIXME: do something more efficient? extraRequestParams: params, @@ -695,15 +691,14 @@ Ext.define('PBS.DataStoreContent', { }); }, - onForget: function(view, rI, cI, item, e, rec) { + onForget: function(table, rI, cI, item, e, { data }) { let me = this; - view = this.getView(); + let view = this.getView(); + if ((data.ty !== 'group' && data.ty !== 'dir') || !view.datastore) { + return; + } - if (!(rec && rec.data)) return; - let data = rec.data; - if (!view.datastore) return; - - if (rec.parentNode.id !== 'root') { + if (data.ty === 'dir') { me.forgetSnapshot(data); } else { me.forgetGroup(data); @@ -713,15 +708,14 @@ Ext.define('PBS.DataStoreContent', { downloadFile: function(tV, rI, cI, item, e, rec) { let me = this; let view = me.getView(); + if (rec.data.ty !== 'file') return; - if (!(rec && rec.data)) return; - let data = rec.parentNode.data; - + let snapshot = rec.parentNode.data; let file = rec.data.filename; let params = { - 'backup-id': data['backup-id'], - 'backup-type': data['backup-type'], - 'backup-time': (data['backup-time'].getTime()/1000).toFixed(0), + 'backup-id': snapshot['backup-id'], + 'backup-type': snapshot['backup-type'], + 'backup-time': (snapshot['backup-time'].getTime()/1000).toFixed(0), 'file-name': file, }; if (view.namespace && view.namespace !== '') { @@ -731,7 +725,6 @@ Ext.define('PBS.DataStoreContent', { let idx = file.lastIndexOf('.'); let filename = file.slice(0, idx); let atag = document.createElement('a'); - params['file-name'] = file; atag.download = filename; let url = new URL( `/api2/json/admin/datastore/${view.datastore}/download-decoded`, @@ -753,14 +746,13 @@ Ext.define('PBS.DataStoreContent', { me.nsChange(null, rec.data.ns); return; } + if (rec?.data?.ty !== 'file') return; + let snapshot = rec.parentNode.data; - if (!(rec && rec.data)) return; - let data = rec.parentNode.data; - - let id = data['backup-id']; - let time = data['backup-time']; - let type = data['backup-type']; - let timetext = PBS.Utils.render_datetime_utc(data["backup-time"]); + let id = snapshot['backup-id']; + let time = snapshot['backup-time']; + let type = snapshot['backup-type']; + let timetext = PBS.Utils.render_datetime_utc(snapshot["backup-time"]); let extraParams = { 'backup-id': id, 'backup-time': (time.getTime()/1000).toFixed(0), @@ -908,7 +900,7 @@ Ext.define('PBS.DataStoreContent', { } let view = tree.up(); let controller = view.controller; - controller.onNotesEdit(view, rec.data, rec.parentNode?.id === 'root'); + controller.onNotesEdit(view, rec.data); }); }, dblclick: function(tree, el, row, col, ev, rec) { @@ -918,7 +910,7 @@ Ext.define('PBS.DataStoreContent', { } let view = tree.up(); let controller = view.controller; - controller.onNotesEdit(view, rec.data, rec.parentNode?.id === 'root'); + controller.onNotesEdit(view, rec.data); }, }, }, @@ -1047,7 +1039,7 @@ Ext.define('PBS.DataStoreContent', { tip = "Key: " + PBS.Utils.renderKeyID(record.data.fingerprint); } let txt = (iconTxt + PBS.Utils.cryptText[v]) || Proxmox.Utils.unknownText; - if (record.parentNode.id === 'root' || tip === undefined) { + if (record.data.ty === 'group' || tip === undefined) { return txt; } else { return `${txt}`; @@ -1085,7 +1077,7 @@ Ext.define('PBS.DataStoreContent', { return record.data.leaf ? '' : i('question-circle-o warning', gettext('None')); } let tip, iconCls, txt; - if (record.parentNode.id === 'root') { + if (record.data.ty === 'group') { if (v.failed === 0) { if (v.none === 0) { if (v.outdated > 0) {