diff --git a/src/webui/static/app/chconf.js b/src/webui/static/app/chconf.js
index cad62d7d..77a7bd86 100644
--- a/src/webui/static/app/chconf.js
+++ b/src/webui/static/app/chconf.js
@@ -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 'Not set';
- }
- 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 "Play"
- }
- }, {
- 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 'No tags';
- }
-
- 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 'Not set';
- }
- 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 'Not set';
- }
- 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)
{
diff --git a/src/webui/static/app/epg.js b/src/webui/static/app/epg.js
index 9fc74aa8..6c290805 100644
--- a/src/webui/static/app/epg.js
+++ b/src/webui/static/app/epg.js
@@ -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();
}
});