mirror of
https://github.com/DigitalDevices/octonet.git
synced 2023-10-10 13:36:52 +02:00
e65fb9aaab
Added features to TransponderList.json Allow to define sort order for channels Allow overwrite channel title,group,pids Define custom groups (i.e. favourites) Removed client side sorting from browsertv.html Reworked creating ChannelList.json from legacy database to allow serveside sorting.
453 lines
13 KiB
HTML
453 lines
13 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>OctopusNet</title>
|
|
<link rel="stylesheet" type="text/css" href="/style.css">
|
|
<script type="text/javascript" src="/menu.js"></script>
|
|
<!-- Add included scripts here -->
|
|
<script type="text/javascript" src="/systeminfo.lua"></script>
|
|
<script type="text/javascript">Octoserve = false;</script>
|
|
<script type="text/javascript" src="/octoserve/serverinfo.js"></script>
|
|
|
|
<!-- Add page scripts here -->
|
|
<script type="text/javascript">
|
|
|
|
var VLCPluginValid = false;
|
|
var VLCPlugin;
|
|
var RTSPLink = false;
|
|
|
|
if( browserType == "Netscape" )
|
|
{
|
|
if( browserPlatform == "ipad" )
|
|
{
|
|
RTSPLink = true;
|
|
}
|
|
else
|
|
{
|
|
for(var i = 0; i < navigator.plugins.length; i++ )
|
|
{
|
|
var t = navigator.plugins[i].name + " " + navigator.plugins[i].version;
|
|
|
|
if( navigator.plugins[i].name == "VLC Web Plugin" )
|
|
{
|
|
VLCPlugin = navigator.plugins[i];
|
|
if( browserPlatform == "win" )
|
|
{
|
|
if( navigator.plugins[i].version >= "2.0.6.0" ) VLCPluginValid = true;
|
|
}
|
|
else if( browserPlatform == "linux" )
|
|
{
|
|
VLCPluginValid = true;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
var CurTracks = new Array();
|
|
|
|
var SelectedSource = 0;
|
|
var SelectedChannel = 0;
|
|
var SourceList = new Array();
|
|
|
|
function PlayEvent()
|
|
{
|
|
// var vlc = document.getElementById("vlcplayer");
|
|
// var vlc = getVLC("vlcplayer");
|
|
var vlc = vlcplayer;
|
|
var options = new Array();
|
|
var t = "rtsp://"+host+"/"+this.PlayRequest;
|
|
vlc.playlist.clear();
|
|
var id = vlc.playlist.add(t, this.PlayName, options);
|
|
vlc.playlist.playItem(id);
|
|
CurTracks = this.PlayTracks;
|
|
|
|
document.getElementById("nowplaying").firstChild.nodeValue = this.PlayName;
|
|
document.getElementById("ac0").disabled = CurTracks.length < 1;
|
|
document.getElementById("ac1").disabled = CurTracks.length < 2;
|
|
document.getElementById("ac2").disabled = CurTracks.length < 3;
|
|
document.getElementById("ac3").disabled = CurTracks.length < 4;
|
|
}
|
|
|
|
function SetAudioChannel(ac)
|
|
{
|
|
var vlc = vlcplayer;
|
|
if( ac < CurTracks.length ) vlc.audio.track = CurTracks[ac];
|
|
}
|
|
|
|
function MuteAudio()
|
|
{
|
|
var vlc = vlcplayer;
|
|
vlc.audio.mute = !vlc.audio.mute;
|
|
}
|
|
|
|
|
|
function AddRow(table,name,request,tracks)
|
|
{
|
|
var row = document.createElement("tr");
|
|
|
|
var col = document.createElement("td");
|
|
var txt = document.createTextNode(name);
|
|
col.appendChild(txt);
|
|
row.appendChild(col);
|
|
|
|
col = document.createElement("td");
|
|
if( RTSPLink )
|
|
{
|
|
var t = "rtsp://"+host+"/"+request;
|
|
var a = document.createElement("a");
|
|
a.setAttribute("href",t);
|
|
a.appendChild(document.createTextNode("Play"));
|
|
col.appendChild(a);
|
|
}
|
|
else
|
|
{
|
|
var form = document.createElement("form");
|
|
form.setAttribute("action", "");
|
|
|
|
var field = document.createElement("input");
|
|
field.setAttribute("type", "button");
|
|
field.setAttribute("value", "Play");
|
|
//field.setAttribute("onclick", "Play("+name+","+request+")");
|
|
//field.onclick = "Play("+name+","+request+")";
|
|
field.PlayName = name;
|
|
field.PlayRequest = request;
|
|
field.PlayTracks = tracks;
|
|
field.addEventListener("click",PlayEvent);
|
|
form.appendChild(field);
|
|
|
|
col.appendChild(form);
|
|
}
|
|
row.appendChild(col);
|
|
|
|
table.appendChild(row);
|
|
}
|
|
|
|
// function TitleCompare(a,b)
|
|
// {
|
|
// if( a.Title.toUpperCase() < b.Title.toUpperCase() ) return -1;
|
|
// if( a.Title.toUpperCase() > b.Title.toUpperCase() ) return 1;
|
|
// return 0;
|
|
// }
|
|
|
|
var xmlhttp = new XMLHttpRequest();
|
|
var url = "/channellist.lua?select=json";
|
|
|
|
xmlhttp.onreadystatechange=function()
|
|
{
|
|
if (xmlhttp.readyState == 4 )
|
|
{
|
|
if( xmlhttp.status == 200 )
|
|
myFunction(xmlhttp.responseText);
|
|
}
|
|
}
|
|
|
|
var hasCable = false;
|
|
var hasSat = false;
|
|
var hasTer = false;
|
|
var LastSourceName = "";
|
|
var LastChannelName = "";
|
|
|
|
function myFunction(response) {
|
|
var ChannelList = JSON.parse(response);
|
|
|
|
var LastSource = 0;
|
|
var Index = 0;
|
|
|
|
if(typeof(Storage) !== "undefined")
|
|
{
|
|
try
|
|
{
|
|
LastSourceName = localStorage.getItem("LastSourceName");
|
|
LastChannelName = localStorage.getItem("LastChannelName");
|
|
if( !LastSourceName ) LastSourceName = "";
|
|
if( !LastChannelName ) LastChannelName = "";
|
|
}
|
|
catch(e)
|
|
{
|
|
}
|
|
}
|
|
|
|
document.Source.Select.length = 0;
|
|
for(var i = 0; i < ChannelList.GroupList.length; i++)
|
|
{
|
|
var newChannelList = new Array();
|
|
for(var j = 0; j < ChannelList.GroupList[i].ChannelList.length; j++ )
|
|
{
|
|
if( ( hasSat && ChannelList.GroupList[i].ChannelList[j].Request.indexOf("dvbs") > 0 ) ||
|
|
( hasCable && ChannelList.GroupList[i].ChannelList[j].Request.indexOf("dvbc") > 0 ) ||
|
|
( hasTer && ChannelList.GroupList[i].ChannelList[j].Request.indexOf("dvbt") > 0 ) )
|
|
{
|
|
newChannelList.push(ChannelList.GroupList[i].ChannelList[j]);
|
|
}
|
|
|
|
}
|
|
if( newChannelList.length > 0 )
|
|
{
|
|
SourceList[Index] = new Object();
|
|
SourceList[Index].ChannelList = newChannelList;
|
|
SourceList[Index].Title = ChannelList.GroupList[i].Title;
|
|
document.Source.Select.options[Index] = new Option(SourceList[Index].Title,Index, false, true);
|
|
|
|
if( LastSourceName.length > 0 )
|
|
{
|
|
if( LastSourceName == SourceList[Index].Title ) LastSource = Index;
|
|
}
|
|
Index = Index + 1;
|
|
}
|
|
}
|
|
// for(var i = 0; i < SourceList.length; i++ )
|
|
// {
|
|
// SourceList[i].ChannelList.sort(TitleCompare);
|
|
// }
|
|
document.Source.Select.selectedIndex = LastSource;
|
|
SetSource(LastSource);
|
|
}
|
|
|
|
function OnLoad()
|
|
{
|
|
|
|
if( !RTSPLink )
|
|
{
|
|
document.getElementById("Play").style.display = "none";
|
|
}
|
|
if( VLCPluginValid || RTSPLink )
|
|
{
|
|
for(var i = 0; i < Octoserve.TunerList.length; i++ )
|
|
{
|
|
if( Octoserve.TunerList[i] )
|
|
{
|
|
if( Octoserve.TunerList[i].Desc.indexOf("C/T") >= 0 ) hasCable = true;
|
|
if( Octoserve.TunerList[i].Desc.indexOf("C/C2") >= 0 ) hasCable = true;
|
|
if( Octoserve.TunerList[i].Desc.indexOf("S/S2") >= 0 ) hasSat = true;
|
|
}
|
|
}
|
|
// TODO: differentiate between dvbc and dvbt
|
|
hasTer = hasCable;
|
|
|
|
xmlhttp.open("GET", url, true);
|
|
xmlhttp.send();
|
|
|
|
}
|
|
else
|
|
{
|
|
document.getElementById("channeltable").style.display = "none";
|
|
}
|
|
}
|
|
|
|
function CreatePlugin()
|
|
{
|
|
document.getElementById("ControlPlugin").style.display = "none";
|
|
if( browserType == "Netscape" )
|
|
{
|
|
if( RTSPLink )
|
|
{
|
|
document.write('NOTE: Requires VLC App or similar with RTSP support');
|
|
return;
|
|
}
|
|
else if( VLCPlugin && !VLCPluginValid )
|
|
{
|
|
document.write("Invalid VLC Plugin found: "+ VLCPlugin.version + "<br/>" + browserPlatform + "<br/>");
|
|
document.write('Check for new Version on <a href="http://www.videolan.org">VLC Mediaplayer</a>');
|
|
return;
|
|
}
|
|
|
|
if( VLCPluginValid )
|
|
{
|
|
document.getElementById("ControlPlugin").style.display = "block";
|
|
document.write('<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org" width="640" height="480" id="vlcplayer">');
|
|
document.write('</embed>');
|
|
}
|
|
else
|
|
{
|
|
if ( browserPlatform == "win" || browserPlatform == "linux" )
|
|
{
|
|
document.write('Install <a href="http://www.videolan.org">VLC Mediaplayer</a> for in Browser TV');
|
|
}
|
|
}
|
|
}
|
|
else if (browserType == "MSIE" )
|
|
{
|
|
document.write('Install <a href="http://www.mozilla.org">Firefox</a> and <a href="http://www.videolan.org">VLC Mediaplayer</a> for in Browser TV: ');
|
|
return;
|
|
}
|
|
}
|
|
|
|
function SetSource(SourceIndex)
|
|
{
|
|
SelectedSource = SourceIndex;
|
|
if( SourceList[SourceIndex].Title != LastSourceName )
|
|
{
|
|
LastSourceName = SourceList[SourceIndex].Title;
|
|
LastChannelName = "";
|
|
if(typeof(Storage) !== "undefined")
|
|
{
|
|
try
|
|
{
|
|
localStorage.setItem("LastSourceName",LastSourceName);
|
|
}
|
|
catch(e)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
document.Channel.Select.length = 0;
|
|
var i = -1;
|
|
for( j = 0; j < SourceList[SourceIndex].ChannelList.length; j++ )
|
|
{
|
|
document.Channel.Select.options[j] = new Option(SourceList[SourceIndex].ChannelList[j].Title,j, false, true);
|
|
if( i < 0 )
|
|
{
|
|
if( LastChannelName.length > 0 )
|
|
{
|
|
if( SourceList[SourceIndex].ChannelList[j].Title == LastChannelName ) i = j;
|
|
}
|
|
else
|
|
{
|
|
if( SourceList[SourceIndex].ChannelList[j].Title.toUpperCase() >= "DAS ERSTE" ) i = j;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
if( i < 0 ) i = 0;
|
|
document.Channel.Select.selectedIndex = i;
|
|
SetChannel(i);
|
|
}
|
|
|
|
function SetChannel(ChannelIndex)
|
|
{
|
|
SelectedChannel = ChannelIndex;
|
|
if( SourceList[SelectedSource].ChannelList[ChannelIndex].Title != LastChannelName )
|
|
{
|
|
LastChannelName = SourceList[SelectedSource].ChannelList[ChannelIndex].Title;
|
|
if(typeof(Storage) !== "undefined")
|
|
{
|
|
try
|
|
{
|
|
localStorage.setItem("LastChannelName",LastChannelName);
|
|
}
|
|
catch(e)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
var a = document.getElementById("Play");
|
|
if( RTSPLink )
|
|
{
|
|
var t = "rtsp://"+host+"/"+SourceList[SelectedSource].ChannelList[ChannelIndex].Request;
|
|
a.href = t;
|
|
}
|
|
else
|
|
{
|
|
var t = "rtsp://"+host+"/"+SourceList[SelectedSource].ChannelList[ChannelIndex].Request;
|
|
var vlc = vlcplayer;
|
|
var options = new Array();
|
|
vlc.playlist.clear();
|
|
var id = vlc.playlist.add(t, SourceList[SelectedSource].ChannelList[ChannelIndex].Title, options);
|
|
vlc.playlist.playItem(id);
|
|
CurTracks = SourceList[SelectedSource].ChannelList[ChannelIndex].Tracks;
|
|
|
|
document.getElementById("nowplaying").firstChild.nodeValue = SourceList[SelectedSource].ChannelList[ChannelIndex].Title;
|
|
document.getElementById("ac0").disabled = CurTracks.length < 1;
|
|
document.getElementById("ac1").disabled = CurTracks.length < 2;
|
|
document.getElementById("ac2").disabled = CurTracks.length < 3;
|
|
document.getElementById("ac3").disabled = CurTracks.length < 4;
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
</head>
|
|
|
|
|
|
<body onload="OnLoad()">
|
|
|
|
|
|
<table class="maintable" align="center">
|
|
<colgroup>
|
|
<col width="182px"/>
|
|
<col width="728px"/>
|
|
</colgroup>
|
|
<tr><td class="maintd" colspan="2">
|
|
<a href="http://www.digitaldevices.de"><img src="/BannerDD.jpg" alt="DD" width="910" height="130" /></a>
|
|
</td></tr>
|
|
<tr><td class="maintd" colspan="2"> </td></tr>
|
|
<tr>
|
|
<td class="maintd"><script type="text/javascript">CreateMenu();</script></td>
|
|
<td class="content">
|
|
<div>
|
|
<!-- Begin Content -->
|
|
<table cellpadding="2px" align="center">
|
|
<tr><td>
|
|
<div id="ControlPlugin">
|
|
<table width="100%">
|
|
<tr>
|
|
<td><div align="left" id="nowplaying"> </div></td>
|
|
<td><div align="right">
|
|
<form action="">
|
|
Audio:
|
|
<input id="ac0" type="Button" Value="1" onclick="SetAudioChannel(0)"/>
|
|
<input id="ac1" type="Button" Value="2" onclick="SetAudioChannel(1)"/>
|
|
<input id="ac2" type="Button" Value="3" onclick="SetAudioChannel(2)"/>
|
|
<input id="ac3" type="Button" Value="4" onclick="SetAudioChannel(3)"/>
|
|
<input type="Button" Value="Mute" onclick="MuteAudio()"/>
|
|
</form>
|
|
</div></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</td></tr>
|
|
|
|
|
|
<tr><td>
|
|
<script type="text/javascript">CreatePlugin();</script></td>
|
|
</td></tr>
|
|
<tr><td>
|
|
<div id="channeltable">
|
|
<table cellpadding="2px" align="center">
|
|
<tr>
|
|
<td>Source</td>
|
|
<td>
|
|
<form name="Source" action="">
|
|
<select name="Select" size="1" style="width: 300px" onchange="SetSource(document.Source.Select.selectedIndex)" >
|
|
</select>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>Channel</td>
|
|
<td>
|
|
<form name="Channel" action="">
|
|
<select name="Select" size="1" style="width: 300px" onchange="SetChannel(document.Channel.Select.selectedIndex)">
|
|
</select>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
</td></tr>
|
|
<tr><td>
|
|
<div id="playlink" align="center" >
|
|
<a id="Play" href="">Play</a>
|
|
</div>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<!-- End Content -->
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr><td colspan="2"> </td></tr>
|
|
</table>
|
|
|
|
</body>
|
|
</html>
|