from Components.config import config
class LocationsAndTags(Source):
- LOCATIONS = 0
- TAGS = 1
+ CURRLOCATION = 0
+ LOCATIONS = 1
+ TAGS = 2
def __init__(self, session, func):
self.func = func
self.result = False,"one two three four unknown command"
def handleCommand(self, cmd):
- if self.func is self.LOCATIONS:
- self.result = True,self.getLocations()
+ if self.func is self.CURRLOCATION:
+ self.result = [self.getCurrentLocation()]
+ elif self.func is self.LOCATIONS:
+ self.result = self.getLocations()
elif self.func is self.TAGS:
- self.result = True,self.getTags()
+ self.result = self.getTags()
else:
- self.result = False,"unknown command"
+ self.result = False
+
+ def getCurrentLocation(self):
+ return config.movielist.last_videodir.value
def getLocations(self):
- return " ".join(config.movielist.videodirs.value)
+ return config.movielist.videodirs.value
def getTags(self):
try:
file.close()
except IOError, ioe:
tags = []
- return " ".join(tags)
+ return tags
def getText(self):
- self.handleCommand("")
+ self.handleCommand(None)
print self.result
- (result,text) = self.result
- xml = "<e2simplexmlresult>\n"
- if result:
- xml += "<e2state>True</e2state>\n"
- else:
- xml += "<e2state>False</e2state>\n"
- xml += "<e2statetext>%s</e2statetext>\n" % text
- xml += "</e2simplexmlresult>\n"
+ lst = self.result
+ xml = "<e2simplexmllist>\n"
+ if self.result:
+ for ele in self.result:
+ xml += "<e2simplexmlitem>%s</e2simplexmlitem>\n"%ele
+ xml += "</e2simplexmllist>\n"
return xml
text = property(getText)
Source.__init__(self)
self.func = func
self.session = session
+ self.tagfilter = []
self.root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + resolveFilename(SCOPE_HDD))
self.movielist = movielist #MovieList(self.root)
self.movielist.load(self.root, None)
self.cmd = cmd
if self.func is self.DEL:
self.result = self.delMovie(cmd)
-
-
+ elif self.func is self.LIST:
+ self.root = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + cmd['dirname'])
+ self.tagfilter = cmd['tag'] and [cmd['tag']] or []
def delMovie(self, param):
# print "[WebComponents.delMovie] %s" %param
def command(self):
- #self.movielist.reload(root=self.root)
+ self.movielist.reload(root=self.root,filter_tags = self.tagfilter)
list=[]
for (serviceref, info, begin, unknown) in self.movielist.list:
filename = "/"+"/".join(serviceref.toString().split("/")[1:])
movie.append(filename)
movie.append(os_stat(filename)[6])
- if info.getInfoString(serviceref, iServiceInformation.sTags).lower().find(self.cmd.lower())>=0:
- """ add movie only to list, if a givven tag is applied to the movie """
+ tag = self.cmd['tag'].lower()
+ if not tag or info.getInfoString(serviceref, iServiceInformation.sTags).lower().find(tag)>=0:
+ """ add movie only to list, if a given tag is applied to the movie """
list.append(movie)
return list
repeated = int(param.get('repeated') or 0)
- if param.has_key('begin'):
- begin = int(float(param['begin']))
- if time() <= begin:
- pass
- elif time() > int(begin) and repeated == 0:
- begin = time()
- else:
- return False, "Illegal Parameter value for Parameter begin : '%s'" %begin
- else:
+ if not param.has_key('begin'):
return False, "Missing Parameter: begin"
-
- if param.has_key('end'):
- end = int(float(param['end']))
- else:
+ begin = int(float(param['begin']))
+
+ if not param.has_key('end'):
return False, "Missing Parameter: end"
+ end = int(float(param['end']))
+ tm = time()
+ if tm <= begin:
+ pass
+ elif tm > begin and tm < end and repeated == 0:
+ begin = time()
+ elif repeated == 0:
+ return False, "Illegal Parameter value for Parameter begin : '%s'" %begin
+
if param.has_key('name'):
name = param['name']
else:
if item.eit is not None:
event = self.epgcache.lookupEvent(['EX',("%s" % item.service_ref ,2,item.eit)])
- if event[0][0] is not None:
+ if event and event[0][0] is not None:
timer.append(event[0][0])
else:
timer.append("N/A")
timePlusTwo = end
t = {}
- t["day"]=strftime("%d", localtime(timeNow))
- t["month"]=strftime("%m", localtime(timeNow))
- t["year"]=strftime("%Y", localtime(timeNow))
+ t["sday"]=t["day"]=strftime("%d", localtime(timeNow))
+ t["smonth"]=t["month"]=strftime("%m", localtime(timeNow))
+ t["syear"]=t["year"]=strftime("%Y", localtime(timeNow))
t["smin"]=strftime("%M", localtime(timeNow))
t["shour"]=strftime("%H", localtime(timeNow))
t["emin"]=strftime("%M", localtime(timePlusTwo))
key = ""
for i in param:
p = str(i)
- if p != "sRef":
+ if p != "sRef" and param[p] != None:
key = p
if key == "smin" or key == "emin" :
elif key == "shour" or key == "ehour":
start = 1
end = 24
- elif key == "day":
+ elif key == "day" or key == "sday":
start = 1
end = 31
- elif key == "month":
+ elif key == "month" or key == "smonth":
start = 1
end = 12
else:
return returnList
- def serviceList(self,param):
- print "serviceList: ",param
- sRef = str(param["sRef"])
- bouquet = str(param["bouquet"])
- returnList = []
- sRefFound = 0
-
- if bouquet == '':
- bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet'
+ def serviceListOne(self, bouquet, selref):
ref = eServiceReference(bouquet)
self.servicelist = ServiceList(ref, command_func = self.getServiceList, validate_commands=False)
self.servicelist.setRoot(ref)
+ returnList = []
for (ref2, name) in self.servicelist.getServicesAsList():
print "ref2: (",ref2, ") name: (",name,")"
returnListPart = []
returnListPart.append(name)
returnListPart.append(ref2)
- if ref2 == str(sRef):
+ if ref2 == str(selref):
returnListPart.append("selected")
- sRefFound = 1
+ self.sRefFound = 1
else:
returnListPart.append("")
returnList.append(returnListPart)
+ return returnList
- if sRefFound == 0 and sRef != '':
+ def serviceList(self,param):
+ print "serviceList: ",param
+ sRef = str(param["sRef"])
+ bouquet = str(param["bouquet"])
+ self.sRefFound = 0
+
+ if bouquet == '':
+ returnList = []
+ bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'
+ ref = eServiceReference(bouquet)
+ self.servicelist = ServiceList(ref, command_func = self.getServiceList, validate_commands=False)
+ self.servicelist.setRoot(ref)
+ for (ref2, name) in self.servicelist.getServicesAsList():
+ part = self.serviceListOne(ref2, sRef)
+ if part:
+ returnList = returnList + [["-- "+name+" --", "<"+name+">", ""]] + part
+ bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet'
+ ref = eServiceReference(bouquet)
+ self.servicelist = ServiceList(ref, command_func = self.getServiceList, validate_commands=False)
+ self.servicelist.setRoot(ref)
+ for (ref2, name) in self.servicelist.getServicesAsList():
+ part = self.serviceListOne(ref2, sRef)
+ if part:
+ returnList = returnList + [["-- "+name+" --", "<"+name+">", ""]] + part
+ else:
+ returnList = self.serviceListOne(bouquet, sRef)
+
+ if self.sRefFound == 0 and sRef != '':
returnListPart = ["Inserted", sRef, "selected"]
- returnList.append(returnListPart)
+ returnList = [returnListPart] + returnList
#print returnList
return returnList
var url_updates= "/web/updates.html";
-var url_movielist= "/web/movielist"; // plus tag as string
+var url_movielist= "/web/movielist"; // plus dirname,tag
var url_about= "/web/about";
var url_parentcontrol= "/web/parentcontrollist";
-var url_moviedelete= "/web/moviedelete"; // plus serviceref,eventid
+var url_moviedelete= "/web/moviedelete"; // plus serviceref
var url_mediaplayerlist= "/web/mediaplayerlist?types=audio&path="; // plus full qualified path
var url_mediaplayerplay= "/web/mediaplayerplay?file="; // plus file-serviceref
var url_timerdelete= "/web/timerdelete"; // plus serviceref,begin,end
var url_timerlistwrite="/web/timerlistwrite?write=saveWriteNow";
-var url_getLocations="/web/getlocations";
-var url_getTags="/web/gettags";
+var url_getcurrlocation="/web/getcurrlocation";
+var url_getlocations="/web/getlocations";
+var url_gettags="/web/gettags";
var url_message = "/web/message"; // plus text,type,timeout
var url_messageanswer = "/web/messageanswer?getanswer=now";
{ "url": "tpl/tplMediaPlayer.htm" },
{ "url": "tpl/tplMovieList.htm" },
{ "url": "tpl/tplNavBoxControl.htm" },
+ { "url": "tpl/tplNavMovies.htm" },
{ "url": "tpl/tplNavRadio.htm" },
{ "url": "tpl/tplNavTimer.htm" },
{ "url": "tpl/tplNavTv.htm" },
try{
this.tags = xml.getElementsByTagName('e2tags').item(0).firstChild.data;
} catch (e) {
- this.tags = "no tags"; // no whitespaces... tags will be splittet later
+ this.tags = " "; // no whitespaces... tags will be splittet later
}
try{
this.filename = xml.getElementsByTagName('e2filename').item(0).firstChild.data;
}
// END SimpleXMLResult
+// START SimpleXMLList
+function SimpleXMLList(xml){
+ // parsing values from xml-element
+ debug('[SimpleXMLList] init: '+xml);
+ try{
+ this.xmlitems = xml.getElementsByTagName("e2simplexmllist").item(0).getElementsByTagName("e2simplexmlitem");
+ debug("[SimpleXMLList] count: " + xml.getElementsByTagName("e2simplexmllist").length);
+ } catch (e) {
+ debug("[SimpleXMLList] parsing e2simplexmllist"+e);
+ }
+ this.getList = function(){
+ var lst = [];
+ for(var i=0;i<this.xmlitems.length;i++){
+ lst.push(this.xmlitems.item(i).firstChild.data);
+ }
+ return lst;
+ };
+}
+// END SimpleXMLList
+
//START class Settings
function Settings(xml){
// parsing values from xml-element
days = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su'];
-function addTimerFormChangeType() {
- selected = ($('tvradio').checked === true) ? addTimerEditFormArray.TVList: addTimerEditFormArray.RadioList;
-
- for (i = $('channel').options.length; i !== 0; i--) {
- $('channel').options[i - 1] = null;
+// Channel menu consists of:
+// 1. The currently selected channel, unless it is contained in 2.
+// 2. The currently selected bouquet
+// 3. The TV bouquets and the Radio bouquets
+function addTimerFormPrepareChannelMenu() {
+ result = {};
+ tvblist = addTimerEditFormArray.TVList;
+ radioblist = addTimerEditFormArray.RadioList;
+ currbouquet = addTimerEditFormArray.currBouquetName;
+ currblist = addTimerEditFormArray.currBouquetList;
+
+ var found = false;
+ for (element in currblist) {
+ if (addTimerEditFormArray.channel == element) {
+ found = true;
+ break;
+ }
}
-
- i = -1;
- for(element in selected) {
- if(element != "extend") {
- i++;
- $('channel').options[i] = new Option(selected[element]);
- $('channel').options[i].value = element;
+ if (!found) {
+ result[addTimerEditFormArray.channel] = addTimerEditFormArray.channelName;
+ }
+ if (currbouquet) {
+ result["<Currbouquet>"] = "-- "+currbouquet+" --";
+ for (element in currblist) {
+ result[element] = currblist[element];
}
}
+ result["<Bouquets>"] = "-- Bouquets --";
+ for (element in tvblist) {
+ result[element] = tvblist[element];
+ }
+ for (element in radioblist) {
+ result[element] = radioblist[element];
+ }
+ return result;
}
-function addTimerFormChangeLocation(newloc) {
-
+function addTimerFormChangeChannel(newchannel) {
+ tvblist = addTimerEditFormArray.TVList;
+ radioblist = addTimerEditFormArray.RadioList;
+ if (newchannel == "<Currbouquet>" || newchannel == "<Bouquets>") {
+ // reset selection to last valid channel
+ for (i=0; i<$('channel').options.length; i++) {
+ if ($('channel').options[i].value == addTimerEditFormArray.channel) {
+ $('channel').options[i].selected = true;
+ break;
+ }
+ }
+ return;
+ }
+ found = false;
+ for(element in tvblist) {
+ if (element == newchannel) {
+ found = true;
+ addTimerEditFormArray.currBouquetName = tvblist[element];
+ addTimerEditFormArray.currBouquetList = {};
+ break;
+ }
+ }
+ if (!found) {
+ for(element in radioblist) {
+ if (element == newchannel) {
+ found = true;
+ addTimerEditFormArray.currBouquetName = radioblist[element];
+ addTimerEditFormArray.currBouquetList = {};
+ break;
+ }
+ }
+ }
+ if (found) {
+ // bouquet selected, update menu
+ servicereftoloadepgnow = newchannel;
+ if(typeof(loadedChannellist[servicereftoloadepgnow]) == "undefined") {
+ doRequest(url_getServices+servicereftoloadepgnow, incomingAddTimerFormChangeChannel, true);
+ } else {
+ incomingAddTimerFormChangeChannel();
+ }
+ } else {
+ // real channel selected, update channel and channelName
+ addTimerEditFormArray.channel = newchannel;
+ for (i=0; i<$('channel').options.length; i++) {
+ if ($('channel').options[i].value == newchannel) {
+ addTimerEditFormArray.channelName = $('channel').options[i].text;
+ break;
+ }
+ }
+ }
+}
+
+function incomingAddTimerFormChangeChannel(request) {
+ var services = null;
+ if(typeof(loadedChannellist[servicereftoloadepgnow]) != "undefined"){
+ services = loadedChannellist[servicereftoloadepgnow];
+ } else if(request.readyState == 4) {
+ services = new ServiceList(getXML(request)).getArray();
+ loadedChannellist[servicereftoloadepgnow] = services;
+ }
+ if(services !== null) {
+ debug("[incomingAddTimerFormChangeChannel] Got "+services.length+" Services");
+ for(var i = 0; i < services.length ; i++) {
+ reference = services[i];
+ addTimerEditFormArray.currBouquetList[reference.getServiceReference()] = reference.getServiceName();
+ }
+ }
+
+ lst = addTimerFormPrepareChannelMenu();
+
+ for (i = $('channel').options.length; i !== 0; i--) {
+ $('channel').options[i - 1] = null;
+ }
+ for(element in lst) {
+ $('channel').options[i] = new Option(lst[element]);
+ $('channel').options[i].value = element;
+ if (element == addTimerEditFormArray.channel) {
+ $('channel').options[i].selected = true;
+ }
+ i++;
+ }
}
function addTimerFormPrepareTagsMenu(currtags) {
result = {};
- resultsuff = {};
+ resultsuff = {};
taglist = addTimerEditFormArray.tagsList;
- if (currtags == "") {
- i = 0;
- result[""] = "<None>";
- for (i = 0; i < taglist.length; i++) {
- result[taglist[i]] = taglist[i];
- }
- } else {
- result[currtags] = currtags;
- tags = currtags.split(" ");
- for (i = 0; i < taglist.length; i++) {
- var res = "";
- var found = false;
- for (j=0; j<tags.length; j++) {
- if (tags[j] != taglist[i]) {
- res += " "+tags[j];
+ if (currtags == "") {
+ i = 0;
+ result[""] = "<None>";
+ for (i = 0; i < taglist.length; i++) {
+ result[taglist[i]] = taglist[i];
+ }
+ } else {
+ result[currtags] = currtags;
+ tags = currtags.split(" ");
+ for (i = 0; i < taglist.length; i++) {
+ var res = "";
+ var found = false;
+ for (j=0; j<tags.length; j++) {
+ if (tags[j] != taglist[i]) {
+ res += " "+tags[j];
} else {
- found = true;
- }
- }
- if (!found) {
- res += " "+taglist[i];
- }
- if (res.length > 0) {
- res = res.substring(1,res.length);
- }
- if (found) {
- resultsuff[res] = "- "+taglist[i];
- } else {
- result[res] = "+ "+taglist[i];
- }
- }
- if (tags.length > 1) {
- for (ele in resultsuff) {
- result[ele] = resultsuff[ele];
- }
- }
- result[""] = "<None>";
- }
- return result;
+ found = true;
+ }
+ }
+ if (!found) {
+ res += " "+taglist[i];
+ }
+ if (res.length > 0) {
+ res = res.substring(1,res.length);
+ }
+ if (found) {
+ resultsuff[res] = "- "+taglist[i];
+ } else {
+ result[res] = "+ "+taglist[i];
+ }
+ }
+ if (tags.length > 1) {
+ for (ele in resultsuff) {
+ result[ele] = resultsuff[ele];
+ }
+ }
+ result[""] = "<None>";
+ }
+ return result;
}
function addTimerFormChangeTags(newtags) {
$('tags').options[i - 1] = null;
}
- for(element in lst) {
- $('tags').options[i] = new Option(lst[element]);
- $('tags').options[i].value = element;
- i++;
- }
+ for(element in lst) {
+ $('tags').options[i] = new Option(lst[element]);
+ $('tags').options[i].value = element;
+ i++;
+ }
}
}
}
-
function incomingTimerAddResult(request){
debug("[incomingTimerAddResult] called");
if(request.readyState == 4){
}else{
notify(result.getStateText(), result.getState());
}
- }
+ }
}
-
function loadTimerList(){
doRequest(url_timerlist, incomingTimerList, false);
}
}
}
-
function repeatedReadable(num) {
num = Number(num);
if(num === 0) {
}
var retVal = "";
- var Repeated = [];
+ var Repeated = {};
Repeated["Mo-Su"] =127;
Repeated["Mo-Fr"] = 31;
Repeated["Su"] = 64;
for(rep in Repeated) {
if(rep.toString() != 'extend') {
var check = Number(Repeated[rep]);
- if(check <= num) {
+ if(!(~num & check)) {
num -= check;
if(retVal === '') {
retVal += rep.toString();
return retVal;
}
-
function delTimer(sRef, begin, end, servicename, title, description, readyFunction){
debug("[delTimer] sRef("+sRef+"),begin("+begin+"),end("+end+"),servicename("+servicename+"),title("+title+"),description("+description+")");
var result = confirm(
return false;
}
-
function incomingTimerDelResult(request){
debug("[incomingTimerDelResult] called");
if(request.readyState == 4){
}
}
-
function loadTimerFormNow() {
var now = new Date();
addTimerEditFormArray.year = now.getFullYear();
addTimerEditFormArray.justplay = "0";
addTimerEditFormArray.channel = "";
addTimerEditFormArray.channelName = "";
- addTimerEditFormArray.channelSort = "tv";
addTimerEditFormArray.name = "";
addTimerEditFormArray.description = "";
addTimerEditFormArray.dirname = "";
addTimerEditFormArray.beginOld = 0;
addTimerEditFormArray.endOld = 0;
-
+ addTimerEditFormArray.eventID = 0;
debug("[loadTimerFormNow] done");
loadTimerFormTags();
}
-
function loadTimerEditForm(justplay, begin, end, repeated, channel, channelName, name, description, dirname, tags, afterEvent, deleteOldOnSave, eit) {
debug('[loadTimerEditForm] justplay: ' + justplay + ',begin: ' + begin + ',end: ' + end + ',repeated: ' + repeated + ',channel: ' + channel + ',name: ' + name +',description: ' + description +',dirname: ' + dirname +',tags: ' + tags + ',afterEvent: ' + afterEvent + ',deleteOldOnSave: ' + deleteOldOnSave);
var start = new Date(Number(begin)*1000);
addTimerEditFormArray.emin = stopp.getMinutes();
addTimerEditFormArray.justplay = String(justplay);
- addTimerEditFormArray.channel = decodeURIComponent(String(channel));
+ addTimerEditFormArray.channel = String(channel);
addTimerEditFormArray.channelName = String(channelName);
- addTimerEditFormArray.channelSort = "";
addTimerEditFormArray.name = String(name);
addTimerEditFormArray.description = String(description);
addTimerEditFormArray.dirname = String(dirname);
}
function loadTimerFormTags() {
- doRequest(url_getTags, incomingTimerFormTags, false);
+ doRequest(url_gettags, incomingTimerFormTags, false);
}
function incomingTimerFormTags(request){
debug("[incomingTimerFormTags] called");
if(request.readyState == 4){
- var result = new SimpleXMLResult(getXML(request));
- addTimerEditFormArray.tagsList = (typeof(result.getStateText()) != 'undefined' ? result.getStateText().split(" ") : []);
+ var result = new SimpleXMLList(getXML(request));
+ addTimerEditFormArray.tagsList = result.getList();
loadTimerFormLocations();
}
}
function loadTimerFormLocations() {
- doRequest(url_getLocations, incomingTimerFormLocations, false);
+ doRequest(url_getlocations, incomingTimerFormLocations, false);
}
function incomingTimerFormLocations(request){
debug("[incomingTimerFormLocations] called");
if(request.readyState == 4){
- var result = new SimpleXMLResult(getXML(request));
- addTimerEditFormArray.locationsList = (typeof(result.getStateText()) != 'undefined' ? result.getStateText().split(" ") : ["/hdd/movie"]);
+ var result = new SimpleXMLList(getXML(request));
+ addTimerEditFormArray.locationsList = result.getList();
+ if (addTimerEditFormArray.locationsList.length == 0) {
+ addTimerEditFormArray.locationsList = ["/hdd/movie"];
+ }
loadTimerFormChannels();
}
}
-
// startin to load for TV
function loadTimerFormChannels() {
if(addTimerEditFormArray.TVListFilled === 1 && addTimerEditFormArray.RadioListFilled === 1) {
} else if(addTimerEditFormArray.TVListFilled === 1 && addTimerEditFormArray.RadioListFilled === 0) {
addTimerListFormatTV();
} else {
- var favorites = '1%3A7%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3AFROM%20BOUQUET%20%22userbouquet.favourites.tv%22%20ORDER%20BY%20bouquet';
- doRequest(url_getServices+favorites, addTimerListFormatTV, false);
+ doRequest(url_getServices+encodeURIComponent(bouquetsTv), addTimerListFormatTV, false);
}
}
-
function addTimerListFormatTV(request) {
if(addTimerEditFormArray.RadioListFilled === 0) {
if(request.readyState == 4){
var tv = {};
for ( var i = 0; i < services.length ; i++){
var reference = services[i];
- tv[reference.servicereference] = reference.servicename;
+ tv[reference.getServiceReference()] = reference.getServiceName();
}
addTimerEditFormArray.TVListFilled = 1;
addTimerEditFormArray.TVList = tv;
if(addTimerEditFormArray.RadioListFilled == 1) {
loadTimerForm();
} else {
- var favorites = '1%3A7%3A1%3A0%3A0%3A0%3A0%3A0%3A0%3A0%3AFROM%20BOUQUET%20%22userbouquet.favourites.radio%22%20ORDER%20BY%20bouquet';
- doRequest(url_getServices+favorites, addTimerListFormatRadio, false);
+ doRequest(url_getServices+encodeURIComponent(bouquetsRadio), addTimerListFormatRadio, false);
}
}
-
function addTimerListFormatRadio(request) {
if(request.readyState == 4){
var services = new ServiceList(getXML(request)).getArray();
var radio = {};
for ( var i = 0; i < services.length ; i++){
var reference = services[i];
- radio[reference.servicereference] = reference.servicename;
+ radio[reference.getServiceReference()] = reference.getServiceName();
}
addTimerEditFormArray.RadioListFilled = 1;
addTimerEditFormArray.RadioList = radio;
}
+ addTimerEditFormArray.currBouquetName = "";
+ addTimerEditFormArray.currBouquetList = {};
loadTimerForm();
}
-
function loadTimerForm(){
var Action = {};
Action["0"] = "Record";
Action["1"] = "Zap";
- var Repeated = [];
+ var Repeated = {};
Repeated["1"] = "mo";
Repeated["2"] = "tu";
Repeated["4"] = "we";
addTimerEditFormArray.description = (typeof(addTimerEditFormArray.description) != 'undefined') ? addTimerEditFormArray.description : '';
addTimerEditFormArray.description = (addTimerEditFormArray.description === '') ? ' ' : addTimerEditFormArray.description;
- var channelObject = addTimerEditFormArray.TVList;
- if( addTimerEditFormArray.channelSort === 'tv') {
- // already set
- } else if( addTimerEditFormArray.channelSort === 'radio') {
- channelObject = addTimerEditFormArray.RadioList;
- } else {
- var found = 0;
- for( element in addTimerEditFormArray.TVList) {
- if( element == addTimerEditFormArray.channel) {
- found = 1;
- break;
- }
- }
- if(found === 0) {
- for( element in addTimerEditFormArray.RadioList) {
- if( element == addTimerEditFormArray.channel) {
- channelObject = addTimerEditFormArray.RadioList;
- found = 1;
- break;
- }
- }
- }
- if(found === 0) {
- addTimerEditFormArray.TVList[addTimerEditFormArray.channel] = addTimerEditFormArray.channelName;
- }
- }
-
- var dashString = "------";
-
- channelObject[dashString] = "- Bouquets -";
-
- var listeNeu = new ServiceList(getXML(doRequestMemory[url_getServices+encodeURIComponent(bouquetsTv)])).getArray();
- if(addTimerEditFormArray.channelSort == "radio") {
- listeNeu = new ServiceList(getXML(doRequestMemory[url_getServices+encodeURIComponent(bouquetsRadio)])).getArray();
- }
-
- for (i = 1; i < listeNeu.length; i++) {
- element = listeNeu[i];
- channelObject[String(dashString+i)] = "---";
- channelObject[element.getServiceReference()] = element.getServiceName();
- }
+ var channelObject = addTimerFormPrepareChannelMenu(addTimerEditFormArray.TVList, addTimerEditFormArray.RadioList);
var locationsObject = {};
for (i = 0; i < addTimerEditFormArray.locationsList.length; i++) {
str = addTimerEditFormArray.locationsList[i];
locationsObject[str] = str;
- }
+ }
var tagsObject = addTimerFormPrepareTagsMenu(addTimerEditFormArray.tags);
var listerHtml = RND(tplAddTimerForm, namespace);
$('BodyContent').innerHTML = listerHtml;
*/
-
- // Empty some stuff, but keep others to have the performance
- var tmp1 = addTimerEditFormArray.RadioList;
- var tmp2 = addTimerEditFormArray.TVList;
- var tmp3 = addTimerEditFormArray.locationsList;
- var tmp4 = addTimerEditFormArray.tagsList;
- addTimerEditFormArray = [];
- addTimerEditFormArray.deleteOldOnSave = 0;
- addTimerEditFormArray.RadioList = tmp1;
- addTimerEditFormArray.TVList = tmp2;
- addTimerEditFormArray.locationsList = tmp3;
- addTimerEditFormArray.tagsList = tmp4;
- addTimerEditFormArray.TVListFilled = 1;
- addTimerEditFormArray.RadioListFilled = 1;
}
-
function createOptions(start, end, number) {
var namespace =[];
return namespace;
}
-
function createOptionList(object, selected) {
var namespace = Array();
var i = 0;
-
- for(var element in object) {
+ for(var element in object) {
var txt = String(object[element]);
var sel = " ";
return namespace;
}
-
function createOptionListRepeated(Repeated, repeated) {
num = Number(repeated);
-
+
list = [1, 2, 4, 8, 16, 32, 64, 31, 127];
namespace = [];
-
+ checked = [];
+
+ for(var i = 0; i < list.length; i++) {
+ checked[i] = " ";
+ if (!(~num & list[list.length-1-i])) {
+ num -= list[list.length-1-i];
+ checked[i] = "checked";
+ }
+ }
for(var i = 0; i < list.length; i++) {
txt = String(Repeated[String(list[i])]);
if( String(Repeated[String(list[i])]) == "mf") {
} else {
txt = txt.substr(0,1).toUpperCase() + txt.substr(1,1);
}
- checked = " ";
- if (!(~num & list[i])) {
- checked = "checked";
- }
namespace[i] = { 'id': Repeated[String(list[i])],
'name': Repeated[String(list[i])],
'value': list[i],
'txt': txt,
- 'checked': checked
+ 'checked': checked[list.length-1-i]
};
}
return namespace;
}
-
function sendAddTimer() {
debug("[sendAddTimer]" + "parentChannel:" +$('channel').value);
end += 86400;
}
- repeated = 0;
- if( $('ms').checked ) {
- repeated = 127;
- } else if($('mf').checked) {
- repeated = 31;
- if($('sa').checked) {
- repeated += ownLazyNumber($('sa').value);
- }
- if($('su').checked) {
- repeated += ownLazyNumber($('su').value);
- }
- } else {
- check = ['mo', 'tu', 'we', 'th', 'fr'];
- for(i = 0; i < check.length; i++) {
- if($(check[i]).checked) {
- repeated += Number($(check[i]).value);
- }
- }
- }
-
descriptionClean = ($('descr').value == " " || $('descr').value == "N/A") ? "" : $('descr').value;
nameClean = ($('name').value == " " || $('name').value == "N/A") ? "" : $('name').value;
dirname = $('dirname').value;
tags = $('tags').value;
+
repeated = 0;
if($('ms').checked) {
repeated = ownLazyNumber($('ms').value);
var updateBouquetItemsPoller = '';
var updateCurrentPoller = setInterval(updateItems, 7500);
+var currentLocation = "/hdd/movie";
+var locationsList = [];
+var tagsList = [];
var boxtype = "";
// Movies
+function initMovieList(){
+ // get videodirs, last_videodir, and all tags
+ doRequest(url_getcurrlocation, initMovieList1, false);
+}
+
+function initMovieList1(request){
+ if(request.readyState == 4){
+ result = new SimpleXMLList(getXML(request));
+ currentLocation = result.getList()[0];
+ doRequest(url_getlocations, initMovieList2, false);
+ }
+}
+
+function initMovieList2(request){
+ if(request.readyState == 4){
+ result = new SimpleXMLList(getXML(request));
+ locationsList = result.getList();
+ if (locationsList.length == 0) {
+ locationsList = ["/hdd/movie"];
+ }
+ doRequest(url_gettags, initMovieList3, false);
+ }
+}
+
+function initMovieList3(request){
+ if(request.readyState == 4){
+ result = new SimpleXMLList(getXML(request));
+ tagsList = result.getList();
+ }
+}
+
+function createOptionList2(lst, selected) {
+ var namespace = Array();
+ var i = 0;
+ found = false;
+ for (i=0; i<lst.length; i++) {
+ if (lst[i] == selected) {
+ found = true;
+ }
+ }
+ if (!found) {
+ lst = [selected].concat(lst);
+ }
+ for (i=0; i<lst.length; i++) {
+ namespace[i] = {
+ 'value': lst[i],
+ 'txt': lst[i],
+ 'selected': (lst[i] == selected ? "selected" : " ")};
+ }
+
+ return namespace;
+}
+
+function loadMovieNav(){
+ // fill in menus
+ var namespace = {
+ dirname: createOptionList2(locationsList, currentLocation),
+ tags: createOptionList2(tagsList, "")
+ };
+ data = namespace;
+ processTpl('tplNavMovies', data, 'navContent');
+}
+
function incomingMovieList(request){
if(request.readyState == 4){
}
}
-
-function loadMovieList(tag){
+function loadMovieList(loc, tag){
+ if(typeof(loc) == 'undefined'){
+ loc = currentLocation;
+ }
if(typeof(tag) == 'undefined'){
tag = '';
}
- debug("[loadMovieList] Loading movies with tag '"+tag+"'");
- doRequest(url_movielist+tag, incomingMovieList, false);
+ debug("[loadMovieList] Loading movies in location '"+loc+"' with tag '"+tag+"'");
+ doRequest(url_movielist+"?dirname="+loc+"&tag="+tag, incomingMovieList, false);
}
var result = new SimpleXMLResult(getXML(request));
if(result.getState()){
notify(result.getStateText(), result.getState());
- loadMovieList('');
+ loadMovieList();
}else{
notify(result.getStateText(), result.getState());
}
* @param title - The title to set for the navigation
*/
function reloadNav(template, title){
- setAjaxLoad('navContent');
- processTpl(template, null, 'navContent');
- setNavHd(title);
+ setAjaxLoad('navContent');
+ processTpl(template, null, 'navContent');
+ setNavHd(title);
+}
+
+function reloadNavDynamic(fnc, title){
+ setAjaxLoad('navContent');
+ setNavHd(title);
+ fnc();
}
function getBouquetsTv(){
break;
case "Movies":
+ //The Navigation
+ reloadNavDynamic(loadMovieNav, 'Movies');
+
+ //The Movie list
loadContentDynamic(loadMovieList, 'Movies');
break;
initChannelList();
initVolumePanel();
+ initMovieList();
updateItems();
}
<td class="${movie.cssclass}" >
<table class="sListItem">
<tr>
- <td style="width: 740px;">
+ <td style="width: 640px;">
<div class="sListSName">
<a href="#" id="${movie.servicereference}" onclick="{ zap(this.id); }" class="sListSLink" title="Play ${movie.title}">
${movie.title} - ${movie.description} (${movie.servicename})
</a>
</div>
</td>
+ <td style="width: 100px;font-size: 12px;text-align: right;padding-right: 15px;">
+ ${movie.tags}
+ </td>
<td>
<a target="_blank" href="/web/ts.m3u?file=${movie.filelink}">
<img src="/web-data/img/screen.png" title="Stream ${movie.title}" border="0">
--- /dev/null
+
+<table id="navTimer" class="navTable">
+ <tr>
+ <td>Movie Location:</td>
+ </tr>
+ <tr>
+ <td>
+ <select id="dirname" name="dirname" size="1" onchange="javascript:loadMovieList($('dirname').options[$('dirname').selectedIndex].value,$('tags').options[$('tags').selectedIndex].value)">
+ {for d in dirname}
+ <option value="${d.value}" ${d.selected}>${d.txt}</option>
+ {/for}
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td>Tag Filter:</td>
+ </tr>
+ <tr>
+ <td>
+ <select id="tags" name="tags" size="1" onchange="javascript:loadMovieList($('dirname').options[$('dirname').selectedIndex].value,$('tags').options[$('tags').selectedIndex].value)">
+ {for t in tags}
+ <option value="${t.value}" ${t.selected}>${t.txt}</option>
+ {/for}
+ </select>
+ </td>
+ </tr>
+</table>
+
</tr>
<tr>
<td colspan="3"> </td>
- <td colspan="3">Note: For recurring events date is not required.</td>
+ <td colspan="3" style="font-size: 12px;">Note: For recurring events date is not required.</td>
</tr>
<tr>
<td colspan="3">Date:</td>
</tr>
<tr>
<td colspan="3"> </td>
- <td colspan="3">Note: For one-time events the "days" field doesn't have to be specified.</td>
+ <td colspan="3" style="font-size: 12px;">Note: For one-time events the "days" field doesn't have to be specified.</td>
</tr>
<tr>
<td colspan="3">Days:</td>
</tr>
<tr>
<td colspan="3">Channel:</td>
- <td>
- <p><input type="radio" id="tvradio" name="tvradio" value="tv" checked onchange="javascript:addTimerFormChangeType();">TV</p>
- <p><input type="radio" name="tvradio" value="radio" onchange="javascript:addTimerFormChangeType();">Radio</p>
- <td>
- <p>Channel:</p>
- <select name="channel" id="channel" size="1" onchange="javascript:timerFormExtendChannellist($('channel').options[$('channel').selectedIndex].value)">
+ <td colspan="3">
+ <select name="channel" id="channel" size="1" onchange="javascript:addTimerFormChangeChannel($('channel').options[$('channel').selectedIndex].value)">
{for c in channel}
<option value="${c.value}" ${c.selected}>${c.txt}</option>
{/for}
<tr>
<td colspan="3">Location:</td>
<td colspan="3">
- <select id="dirname" name="dirname" size="1" onchange="javascript:addTimerFormChangeLocation($('dirname').options[$('dirname').selectedIndex].value)">
+ <select id="dirname" name="dirname" size="1">
{for d in dirname}
<option value="${d.value}" ${d.selected}>${d.txt}</option>
{/for}
--- /dev/null
+<e2:screen name="LocationsAndTagsWebScreen"><?xml version="1.0" encoding="UTF-8"?>
+ <e2:element source="CurrentLocation">
+ <e2:convert type="web:TextToHTML" />
+ </e2:element>
+</e2:screen>
\ No newline at end of file
<body>
<table width='100%'>
- <e2:element source="MovieList" id="tag"><e2:convert type="web:ListFiller" >
+ <e2:element source="MovieList" id="dirname,tag"><e2:convert type="web:ListFiller" >
<tr>
<td class="pageHeader"><e2:item name="Title" filter="xml"/></td>
</tr>
<e2:screen name="MovieWebScreen"><e2:element source="localip" macro="ipadress" />#EXTM3U
#EXTVLCOPT--http-reconnect=true
-<e2:element source="MovieList" id="tag">
+<e2:element source="MovieList" id="dirname,tag">
<e2:convert type="web:ListFiller" >#EXTINF:-1,<e2:item name="ServiceName"/>: <e2:item name="Title" filter="xml"/>
http://<e2:item macro="ipadress" filter="xml" /><e2:item name="Filename" filter="urlencode"/>
</e2:convert><e2:convert type="web:TextToHTML" /></e2:element>
<link>http://<e2:element source="localip" filter="xml" /></link>
<description>Eine automatische Liste aller Enigma2 Aufnahmen</description>
<generator>Enigma2 WebInterface </generator>
- <e2:element source="MovieList" id="tag"><e2:convert type="web:ListFiller" >
+ <e2:element source="MovieList" id="dirname,tag"><e2:convert type="web:ListFiller" >
<item>
<title><e2:item name="Title" filter="xml"/></title>
<description>Kanal: <e2:item name="ServiceName" filter="xml"/>\n
<e2:screen name="MovieWebScreen"><?xml version="1.0" encoding="UTF-8"?>
-<e2movielist><e2:element source="MovieList" id="tag"><e2:convert type="web:ListFiller" >
+<e2movielist><e2:element source="MovieList" id="dirname,tag"><e2:convert type="web:ListFiller" >
<e2movie>
<e2servicereference><e2:item name="ServiceReference" filter="xml"/></e2servicereference>
<e2title><e2:item name="Title" filter="xml"/></e2title>
</tr><tr>
<td colspan="3">Date:</td><td colspan="3">
<select name="year" size="1">
- <e2:element source="WAPFillOptionListYear" id="year,sRef,begin"><e2:convert type="web:ListFiller" >
+ <e2:element source="WAPFillOptionListYear" id="year,sRef,begin,syear"><e2:convert type="web:ListFiller" >
<option value="<e2:item name="Value"/>" <e2:item name="Selected"/>><e2:item name="Name"/></option>
</e2:convert>
<e2:convert type="web:TextToHTML"/></e2:element>
</select>.
<select name="month">
- <e2:element source="WAPFillOptionListMonth" id="month,sRef,begin"><e2:convert type="web:ListFiller" >
+ <e2:element source="WAPFillOptionListMonth" id="month,sRef,begin,smonth"><e2:convert type="web:ListFiller" >
<option value="<e2:item name="Value"/>" <e2:item name="Selected"/>><e2:item name="Name"/></option>
</e2:convert>
<e2:convert type="web:TextToHTML"/></e2:element>
</select>.
<select name="day">
- <e2:element source="WAPFillOptionListDay" id="day,sRef,begin"><e2:convert type="web:ListFiller" >
+ <e2:element source="WAPFillOptionListDay" id="day,sRef,begin,sday"><e2:convert type="web:ListFiller" >
<option value="<e2:item name="Value"/>" <e2:item name="Selected"/>><e2:item name="Name"/></option>
</e2:convert>
<e2:convert type="web:TextToHTML"/></e2:element>
<e2:convert type="web:TextToHTML"/></e2:element>
</td>
</tr><tr>
- <td colspan="3">Channel:</td>
- <td><p><input type="radio" name="tvradio" value="tv"/>TV</p>
- <p><input type="radio" name="tvradio" value="radio"/>Radio</p></td>
- <td><p>Channel:</p>
+ <td colspan="3">Channel:</td><td colspan="3">
<select name="sRef">
<e2:element source="WAPServiceList" id="sRef,bouquet"><e2:convert type="web:ListFiller" >
<option value="<e2:item name="Value"/>" <e2:item name="Selected"/>><e2:item name="Name"/></option>
class LocationsAndTagsWebScreen(WebScreen):
def __init__(self, session, request):
WebScreen.__init__(self, session, request)
+ self["CurrentLocation"] = LocationsAndTags(session,LocationsAndTags.CURRLOCATION)
self["Locations"] = LocationsAndTags(session,LocationsAndTags.LOCATIONS)
self["Tags"] = LocationsAndTags(session,LocationsAndTags.TAGS)