webui: some fixes to get channel list back in the EPG tab

This commit is contained in:
Adam Sutton 2013-08-28 22:01:10 +01:00
parent ce08b84949
commit 4142ad4366
2 changed files with 10 additions and 440 deletions

View file

@ -25,449 +25,19 @@ tvheadend.channelrec = new Ext.data.Record.create(
[ 'name', 'chid', 'epggrabsrc', 'tags', 'ch_icon', 'epg_pre_start',
'epg_post_end', 'number' ]);
/*
tvheadend.channels = new Ext.data.JsonStore({
autoLoad : true,
root : 'entries',
fields : tvheadend.channelrec,
id : 'chid',
sortInfo : {
field : 'number',
direction : "ASC"
},
url : "channels",
baseParams : {
op : 'list'
}
url : 'api/channel/list',
root : 'entries',
fields : [ 'key', 'val' ],
id : 'key',
autoLoad : true
});
tvheadend.channels.setDefaultSort('val', 'ASC');
tvheadend.comet.on('channels', function(m) {
if (m.reload != null) tvheadend.channels.reload();
});
*/
/*
* Service mapping
*/
tvheadend.mapServices = function()
{
var panel = null;
var win = null;
/* Form fields */
var availCheck = new Ext.form.Checkbox({
name : 'check_availability',
fieldLabel : 'Check availability',
checked : false
});
var ftaCheck = new Ext.form.Checkbox({
name : 'encrypted',
fieldLabel : 'Include encrypted services',
checked : false,
// TODO: make dependent on CSA config
});
var mergeCheck = new Ext.form.Checkbox({
name : 'merge_same_name',
fieldLabel : 'Merge same name',
checked : false
});
var provtagCheck = new Ext.form.Checkbox({
name : 'provider_tags',
fieldLabel : 'Create provider tags',
checked : false
});
// TODO: provider list
items = [ availCheck, ftaCheck, mergeCheck, provtagCheck ];
/* Form */
var undoBtn = new Ext.Button({
text : 'Cancel',
handler : function () {
win.close();
}
});
var saveBtn = new Ext.Button({
text : 'Map',
tooltip : 'Begin mapping',
handler : function () {
panel.getForm().submit({
url : 'api/service/mapper/start',
waitMessage : 'Mapping services...'
});
}
});
panel = new Ext.FormPanel({
frame : true,
border : true,
bodyStyle : 'padding: 5px',
labelAlign : 'left',
labelWidth : 200,
autoWidth : true,
autoHeight : true,
defaultType : 'textfield',
buttonAlign : 'left',
items : items,
buttons : [ undoBtn, saveBtn ]
});
/* Create window */
win = new Ext.Window({
title : 'Map services',
layout : 'fit',
autoWidth : true,
autoHeight : true,
plain : true,
items : panel
});
win.show();
}
/**
*
*/
tvheadend.mergeChannel = function(chan) {
function doMerge() {
panel.getForm().submit({
url : 'mergechannel/' + chan.chid,
success : function() {
win.close();
}
});
}
var panel = new Ext.FormPanel({
frame : true,
border : true,
bodyStyle : 'padding:5px',
labelAlign : 'right',
labelWidth : 110,
defaultType : 'textfield',
items : [ new Ext.form.ComboBox({
store : tvheadend.channels,
fieldLabel : 'Target channel',
name : 'targetchannel',
hiddenName : 'targetID',
editable : false,
allowBlank : false,
triggerAction : 'all',
mode : 'remote',
displayField : 'name',
valueField : 'chid',
emptyText : 'Select a channel...'
}) ],
buttons : [ {
text : 'Merge',
handler : doMerge
} ]
});
win = new Ext.Window({
title : 'Merge channel ' + chan.name + ' into...',
layout : 'fit',
width : 500,
height : 120,
modal : true,
plain : true,
items : panel
});
win.show();
}
/**
*
*/
tvheadend.chconf = function() {
var fm = Ext.form;
var actions = new Ext.ux.grid.RowActions({
header : '',
dataIndex : 'actions',
width : 45,
actions : [ {
iconCls : 'merge',
qtip : 'Merge this channel with another channel',
cb : function(grid, record, action, row, col) {
tvheadend.mergeChannel(record.data);
}
} ]
});
var cm = new Ext.grid.ColumnModel([ {
header : "Number",
dataIndex : 'number',
sortable : true,
width : 50,
renderer : function(value, metadata, record, row, col, store) {
if (!value) {
return '<span class="tvh-grid-unset">Not set</span>';
}
else {
return value;
}
},
editor : new fm.NumberField({
minValue : 0,
maxValue : 9999
})
}, {
header : "Name",
dataIndex : 'name',
sortable: true,
width : 150,
editor : new fm.TextField({
allowBlank : false
})
}, {
header : "Play",
dataIndex : 'chid',
width : 50,
renderer : function(value, metadata, record, row, col, store) {
url = 'playlist/channelid/' + value
return "<a href=\"javascript:tvheadend.VLC('" + url + "')\">Play</a>"
}
}, {
header : "EPG Grab source",
dataIndex : 'epggrabsrc',
hiddenName : 'epggrabsrc',
width : 150,
editor : new Ext.ux.form.LovCombo({
loadingText : 'Loading...',
store : tvheadend.epggrabChannels,
allowBlank : true,
typeAhead : true,
minChars : 2,
lazyRender : true,
triggerAction : 'all',
mode : 'remote',
displayField : 'mod-name',
valueField : 'mod-id'
})
}, {
header : "Tags",
dataIndex : 'tags',
width : 300,
renderer : function(value, metadata, record, row, col, store) {
if (typeof value === 'undefined' || value.length < 1) {
return '<span class="tvh-grid-unset">No tags</span>';
}
ret = [];
tags = value.split(',');
for ( var i = 0; i < tags.length; i++) {
var tag = tvheadend.channelTags.getById(tags[i]);
if (typeof tag !== 'undefined') {
ret.push(tag.data.name);
}
}
return ret.join(', ');
},
editor : new Ext.ux.form.LovCombo({
store : tvheadend.channelTags,
mode : 'local',
valueField : 'identifier',
displayField : 'name'
})
}, {
header : "Icon (full URL)",
dataIndex : 'ch_icon',
width : 200,
editor : new fm.TextField()
}, {
header : "DVR Pre-Start",
dataIndex : 'epg_pre_start',
width : 100,
renderer : function(value, metadata, record, row, col, store) {
if (!value) {
return '<span class="tvh-grid-unset">Not set</span>';
}
else {
return value + ' min';
}
},
editor : new fm.NumberField({
minValue : 0,
maxValue : 1440
})
}, {
header : "DVR Post-End",
dataIndex : 'epg_post_end',
width : 100,
renderer : function(value, metadata, record, row, col, store) {
if (!value) {
return '<span class="tvh-grid-unset">Not set</span>';
}
else {
return value + ' min';
}
},
editor : new fm.NumberField({
minValue : 0,
maxValue : 1440
})
}, actions ]);
function delSelected() {
var selectedKeys = grid.selModel.selections.keys;
if (selectedKeys.length > 0) {
Ext.MessageBox.confirm('Message',
'Do you really want to delete selection?', deleteRecord);
}
else {
Ext.MessageBox.alert('Message',
'Please select at least one item to delete');
}
}
function addRecord() {
Ext.Ajax.request({
url : "channels",
params : {
op : "create"
},
failure : function(response, options) {
Ext.MessageBox.alert('Server Error', 'Unable to create new record');
},
success : function(response, options) {
var responseData = Ext.util.JSON.decode(response.responseText);
var p = new tvheadend.channelrec(responseData, responseData.id);
grid.stopEditing();
store.insert(0, p)
grid.startEditing(0, 0);
}
})
}
function deleteRecord(btn) {
if (btn == 'yes') {
var selectedKeys = grid.selModel.selections.keys;
Ext.Ajax.request({
url : "channels",
params : {
op : "delete",
entries : Ext.encode(selectedKeys)
},
failure : function(response, options) {
Ext.MessageBox.alert('Server Error', 'Unable to delete');
}
})
}
}
function saveChanges() {
var mr = tvheadend.channels.getModifiedRecords();
var out = new Array();
for ( var x = 0; x < mr.length; x++) {
v = mr[x].getChanges();
out[x] = v;
out[x].id = mr[x].id;
}
Ext.Ajax.request({
url : "channels",
params : {
op : "update",
entries : Ext.encode(out)
},
success : function(response, options) {
tvheadend.channels.commitChanges();
},
failure : function(response, options) {
Ext.MessageBox.alert('Message', response.statusText);
}
});
}
var selModel = new Ext.grid.RowSelectionModel({
singleSelect : false
});
var addBtn = new Ext.Toolbar.Button({
tooltop : 'Add a new channel',
iconCls : 'add',
text : 'Add channel',
handler : addRecord
});
var delBtn = new Ext.Toolbar.Button({
tooltip : 'Delete one or more selected channels',
iconCls : 'remove',
text : 'Delete selected',
handler : delSelected,
disabled : true
});
selModel.on('selectionchange', function(s) {
delBtn.setDisabled(s.getCount() == 0);
});
var saveBtn = new Ext.Toolbar.Button({
tooltip : 'Save any changes made (Changed cells have red borders).',
iconCls : 'save',
text : "Save changes",
handler : saveChanges,
disabled : true
});
var rejectBtn = new Ext.Toolbar.Button({
tooltip : 'Revert any changes made (Changed cells have red borders).',
iconCls : 'undo',
text : "Revert changes",
handler : function() {
tvheadend.channels.rejectChanges();
},
disabled : true
});
var mapButton = new Ext.Toolbar.Button({
tooltip : 'Map services to channels',
iconCls : '',
text : 'Map Services',
handler : tvheadend.mapServices,
disabled : false
});
var grid = new Ext.grid.EditorGridPanel({
stripeRows : true,
title : 'Channels',
iconCls : 'television',
store : tvheadend.channels,
plugins : [ actions ],
clicksToEdit : 2,
cm : cm,
viewConfig : {
forceFit : true
},
selModel : selModel,
tbar : [ addBtn, '-', delBtn, '-', saveBtn, rejectBtn, '-', mapButton, '->', {
text : 'Help',
handler : function() {
new tvheadend.help('Channels', 'config_channels.html');
}
} ]
});
tvheadend.channels.on('update', function(s, r, o) {
d = s.getModifiedRecords().length == 0
saveBtn.setDisabled(d);
rejectBtn.setDisabled(d);
});
tvheadend.channelTags.on('load', function(s, r, o) {
if (grid.rendered) grid.getView().refresh();
});
return grid;
}
tvheadend.channel_tab = function(panel)
{

View file

@ -343,7 +343,7 @@ tvheadend.epg = function() {
var epgFilterChannels = new Ext.form.ComboBox({
loadingText : 'Loading...',
width : 200,
displayField : 'name',
displayField : 'val',
store : tvheadend.channels,
mode : 'local',
editable : true,
@ -394,8 +394,8 @@ tvheadend.epg = function() {
}
epgFilterChannels.on('select', function(c, r) {
if (epgStore.baseParams.channel != r.data.name) {
epgStore.baseParams.channel = r.data.name;
if (epgStore.baseParams.channel != r.data.key) {
epgStore.baseParams.channel = r.data.key;
epgStore.reload();
}
});