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) {
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);
}
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: {
selectionchange: 'showInfo',
load: 'reload',
},
- 'grid[reference=pbsremotegrid]': {
+ 'grid[reference=snapshotsGrid]': {
itemdblclick: 'restoreSnapshot',
},
},
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'),
},
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'],
gettext("Backup snapshots on '{0}'"),
'{remote}',
),
+ hidden: '{!selected}',
},
columns: [
{
{
text: 'Size',
dataIndex: 'size',
- renderer: Proxmox.Utils.format_size,
+ renderer: Proxmox.Utils.render_size,
flex: 1,
},
{