]> git.proxmox.com Git - pmg-gui.git/blobdiff - js/PBSSnapshotView.js
mail proxy: tls destinations: consitent add/edit/remove button
[pmg-gui.git] / js / PBSSnapshotView.js
index 630777a4868eb1f11c2bcbcd01c36ab38bbf4d14..95272204aa8691d12399b5e332a839f76783369c 100644 (file)
@@ -16,32 +16,19 @@ Ext.define('PMG.PBSConfig', {
 
        restoreSnapshot: function(button) {
            let me = this;
-           let view = me.lookup('pbsremotegrid');
+           let view = me.lookup('snapshotsGrid');
            let record = view.getSelection()[0];
            me.callRestore(view, record);
        },
 
        runBackup: function(button) {
            let me = this;
-           let view = me.lookup('pbsremotegrid');
+           let view = me.lookup('snapshotsGrid');
            let remote = me.getViewModel().get('remote');
-           Proxmox.Utils.API2Request({
+           Ext.create('PMG.BackupWindow', {
                url: `/nodes/${Proxmox.NodeName}/pbs/${remote}/snapshot`,
-               method: 'POST',
-               waitMsgTarget: view,
-               failure: function(response, opts) {
-                   Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-               },
-               success: function(response, opts) {
-                   let upid = response.result.data;
-
-                   let win = Ext.create('Proxmox.window.TaskViewer', {
-                       upid: upid,
-                   });
-                   win.show();
-                   me.mon(win, 'close', function() { view.getStore().load(); });
-               },
-           });
+               taskDone: () => view.getStore().load(),
+           }).show();
        },
 
        reload: function(grid) {
@@ -59,11 +46,17 @@ Ext.define('PMG.PBSConfig', {
                viewModel.set('remote', remote);
 
                // set grid stores and load them
-               let remstore = me.lookup('pbsremotegrid').getStore();
+               let remstore = me.lookup('snapshotsGrid').getStore();
                remstore
                    .getProxy()
                    .setUrl(`/api2/json/nodes/${Proxmox.NodeName}/pbs/${remote}/snapshot`);
                remstore.load();
+
+               let scheduleStore = me.lookup('schedulegrid').rstore;
+               scheduleStore
+                   .getProxy()
+                   .setUrl(`/api2/json/nodes/${Proxmox.NodeName}/pbs/${remote}/timer`);
+               scheduleStore.load();
            } else {
                viewModel.set('selected', false);
            }
@@ -77,9 +70,19 @@ Ext.define('PMG.PBSConfig', {
        init: function(view) {
            let me = this;
            me.lookup('grid').relayEvents(view, ['activate']);
-           let pbsremotegrid = me.lookup('pbsremotegrid');
 
-           Proxmox.Utils.monStoreErrors(pbsremotegrid, pbsremotegrid.getStore(), true);
+           let remoteGrid = me.lookup('grid');
+           view.mon(remoteGrid.store, 'load', function(store, r, success, o) {
+               if (success) {
+                   remoteGrid.getSelectionModel().select(0);
+               }
+           });
+
+           let snapshotGrid = me.lookup('snapshotsGrid');
+           let schedulegrid = me.lookup('schedulegrid');
+
+           Proxmox.Utils.monStoreErrors(snapshotGrid, snapshotGrid.getStore(), true);
+           Proxmox.Utils.monStoreErrors(schedulegrid, schedulegrid.getStore(), true);
        },
 
        control: {
@@ -87,7 +90,7 @@ Ext.define('PMG.PBSConfig', {
                selectionchange: 'showInfo',
                load: 'reload',
            },
-           'grid[reference=pbsremotegrid]': {
+           'grid[reference=snapshotsGrid]': {
                itemdblclick: 'restoreSnapshot',
            },
        },
@@ -104,25 +107,100 @@ Ext.define('PMG.PBSConfig', {
 
     items: [
        {
-           region: 'center',
-           reference: 'grid',
            xtype: 'pmgPBSConfigGrid',
+           reference: 'grid',
+           title: gettext('Remote'),
+           hidden: false,
+           region: 'center',
+           minHeight: 130,
            border: false,
        },
        {
-           xtype: 'grid',
+           xtype: 'proxmoxObjectGrid',
            region: 'south',
-           reference: 'pbsremotegrid',
+           reference: 'schedulegrid',
+           title: gettext('Schedule'),
+           height: 155,
+           border: false,
            hidden: true,
-           height: '70%',
+           emptyText: gettext('No schedule setup.'),
+           tbar: [
+               {
+                   text: gettext('Set Schedule'),
+                   handler: function() {
+                       let me = this;
+                       let remote = me.lookupViewModel().get('remote');
+                       let win = Ext.createWidget('pmgPBSScheduleEdit', {
+                           remote: remote,
+                           autoShow: true,
+                       });
+                       win.on('destroy', () => me.up('grid').rstore.load());
+                   },
+               },
+               {
+                   xtype: 'proxmoxStdRemoveButton',
+                   baseurl: `/nodes/${Proxmox.NodeName}/pbs/`,
+                   callback: function() {
+                       this.up('grid').rstore.load();
+                   },
+                   text: gettext('Remove Schedule'),
+                   selModel: false,
+                   confirmMsg: function(_rec) {
+                       let me = this;
+                       let remote = me.lookupViewModel().get('remote');
+                       return Ext.String.format(
+                           gettext('Are you sure you want to remove the schedule for {0}'),
+                           `'${remote}'`,
+                       );
+                   },
+                   getUrl: function(_rec) {
+                       let remote = this.lookupViewModel().get('remote');
+                       return `${this.baseurl}/${remote}/timer`;
+                   },
+               },
+               '->',
+               {
+                   text: gettext('Reload'),
+                   iconCls: 'fa fa-refresh',
+                   handler: function() {
+                       this.up('grid').rstore.load();
+                   },
+               },
+           ],
+           bind: {
+               title: Ext.String.format(gettext("Schedule on '{0}'"), '{remote}'),
+               hidden: '{!selected}',
+           },
+           url: '/', // hack, obj. grid is a bit dumb..
+           rows: {
+               schedule: {
+                   text: gettext('Schedule'),
+                   required: true,
+                   defaultValue: gettext('None'),
+               },
+               delay: {
+                   text: gettext('Delay'),
+               },
+               'next-run': {
+                   text: gettext('Next Run'),
+               },
+           },
+       },
+       {
+           xtype: 'grid',
+           region: 'south',
+           reference: 'snapshotsGrid',
+           height: '50%',
            border: false,
            split: true,
+           hidden: true,
            emptyText: gettext('No backups on remote'),
            tbar: [
                {
-                   text: gettext('Backup'),
+                   text: gettext('Backup Now'),
                    handler: 'runBackup',
                },
+               '-',
                {
                    xtype: 'proxmoxButton',
                    text: gettext('Restore'),
@@ -149,6 +227,14 @@ Ext.define('PMG.PBSConfig', {
                    },
                    callback: 'reloadSnapshots',
                },
+               '->',
+               {
+                   text: gettext('Reload'),
+                   iconCls: 'fa fa-refresh',
+                   handler: function() {
+                       this.up('grid').store.load();
+                   },
+               },
            ],
            store: {
                fields: ['backup-id', 'backup-time', 'size', 'ctime', 'encrypted'],
@@ -165,6 +251,7 @@ Ext.define('PMG.PBSConfig', {
                    gettext("Backup snapshots on '{0}'"),
                    '{remote}',
                ),
+               hidden: '{!selected}',
            },
            columns: [
                {
@@ -180,7 +267,7 @@ Ext.define('PMG.PBSConfig', {
                {
                    text: 'Size',
                    dataIndex: 'size',
-                   renderer: Proxmox.Utils.format_size,
+                   renderer: Proxmox.Utils.render_size,
                    flex: 1,
                },
                {