list + ',owner,creator' : list) + ',retention,removal';
var duplicates = 0;
var buttonFcn = tvheadend.dvrButtonFcn;
+ var columnId = null;
var stopButton = {
name: 'stop',
},
callback: function(conf, e, store, select) {
duplicates ^= 1;
+ select.grid.colModel.setHidden(columnId, !duplicates);
+ select.grid.bottomToolbar.changePage(0);
this.setText(duplicates ? _('Hide duplicates') : _('Show duplicates'));
store.baseParams.duplicates = duplicates;
store.reload();
return false;
}
+ function viewready(grid) {
+ if(!grid.store.baseParams.duplicates){
+ columnId = grid.colModel.findColumnIndex('duplicate');
+ grid.colModel.setHidden(columnId, true);
+ }else{
+ var buttonIndex = grid.topToolbar.items.findIndex('text','Show duplicates');
+ grid.topToolbar.items.item(buttonIndex).setText(_('Hide duplicates'));
+ }
+ }
+
tvheadend.idnode_grid(panel, {
url: 'api/dvr/entry',
gridURL: 'api/dvr/entry/grid_upcoming',
],
tbar: [stopButton, abortButton, prevrecButton, dupButton],
selected: selected,
- beforeedit: beforeedit
+ beforeedit: beforeedit,
+ viewready: viewready
});
return panel;
}
};
+ var groupingButton = {
+ name: 'grouping',
+ builder: function() {
+ return new Ext.Toolbar.Button({
+ tooltip: _('When enabled, group the recordings by the selected column.'),
+ iconCls: 'grouping',
+ text: _('Enable grouping')
+ });
+ },
+ callback: function(conf, e, store, select) {
+ this.setText(store.groupField ? _('Enable grouping') : _('Disable grouping'));
+ if (!store.groupField){
+ select.grid.view.enableGrouping = true;
+ select.grid.store.groupBy(store.sortInfo.field);
+ select.grid.fireEvent('groupchange', select.grid, store.getGroupState());
+ select.grid.view.refresh();
+ }else{
+ store.clearGrouping();
+ select.grid.view.enableGrouping = false;
+ select.grid.fireEvent('groupchange', select.grid, null);
+ }
+ }
+ };
+
function selected(s, abuttons) {
var r = s.getSelections();
var b = r.length > 0 && r[0].data.filesize > 0;
abuttons.remove.setDisabled(!b);
}
+ function viewready(grid) {
+ var buttonIndex = grid.topToolbar.items.findIndex('text','Enable grouping');
+ grid.topToolbar.items.item(buttonIndex).setText(grid.store.groupField ? _('Disable grouping') : _('Enable grouping'));
+ }
+
tvheadend.idnode_grid(panel, {
url: 'api/dvr/entry',
gridURL: 'api/dvr/entry/grid_finished',
return tvheadend.playLink('play/dvrfile/' + r.id, title);
}
}],
- tbar: [removeButton, downloadButton, rerecordButton, moveButton],
- selected: selected
+ tbar: [removeButton, downloadButton, rerecordButton, moveButton, groupingButton],
+ selected: selected,
+ viewready: viewready
});
return panel;
},
sort: {
field: 'start_real',
- direction: 'ASC'
+ direction: 'DESC'
},
plugins: [actions],
lcol: [
},
sort: {
field: 'start_real',
- direction: 'ASC'
+ direction: 'DESC'
},
plugins: [actions],
lcol: [actions],
var event = null;
var auto = null;
var idnode = null;
+ var groupReader = null;
var update = function(o) {
if ((o.create || o.moveup || o.movedown || 'delete' in o) && auto.getValue()) {
var params = {};
if (conf.all) params['all'] = 1;
if (conf.extraParams) conf.extraParams(params);
- store = new Ext.data.JsonStore({
+
+ groupReader = new Ext.data.JsonReader({
+ totalProperty: 'total',
root: 'entries',
+ fields: fields,
+ idProperty: 'uuid'
+ });
+
+ store = new Ext.data.GroupingStore({
url: conf.gridURL || (conf.url + '/grid'),
baseParams: params,
autoLoad: true,
id: 'uuid',
- totalProperty: 'total',
- fields: fields,
- remoteSort: true,
+ remoteSort: true, // We lost multi sort at server side :-(, maybe perexg has a better idea
+ reader: groupReader,
+ remoteGroup: true,
+ groupField: conf.groupField ? conf.groupField : false,
+ groupDir: 'ASC',
+ groupOnSort: true,
+ /*multiSort: true,
+ multiSortInfo:{
+ sorters: [{field : 'disp_title', direction : 'ASC'},
+ conf.sort ? conf.sort : null],
+ direction: 'ASC'
+ },*/
pruneModifiedRecords: true,
sortInfo: conf.sort ? conf.sort : null
});
cm: model,
selModel: select,
plugins: plugins,
- viewConfig: {
- forceFit: true
- },
+ view: new Ext.grid.GroupingView({
+ forceFit: true,
+ startCollapsed: true,
+ showGroupName: false,
+ // custom grouping text template to display the number of recordings per group
+ groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Recordings" : "Recording"]})'
+ }),
keys: {
key: 'a',
ctrl: true,
grid.on('filterupdate', function() {
page.changePage(0);
});
+
if (conf.beforeedit)
- grid.on('beforeedit', conf.beforeedit);
+ grid.on('beforeedit', conf.beforeedit);
+
+ if (conf.viewready)
+ grid.on('viewready', conf.viewready);
+
grid.abuttons = abuttons;
dpanel.add(grid);