--- /dev/null
+from Components.Sources.Source import Source
+from Components.config import config
+
+class LocationsAndTags(Source):
+ LOCATIONS = 0
+ TAGS = 1
+
+ def __init__(self, session, func):
+ self.func = func
+ Source.__init__(self)
+ self.session = session
+ self.result = False,"one two three four unknown command"
+
+ def handleCommand(self, cmd):
+ if self.func is self.LOCATIONS:
+ self.result = True,self.getLocations()
+ elif self.func is self.TAGS:
+ self.result = True,self.getTags()
+ else:
+ self.result = False,"unknown command"
+
+ def getLocations(self):
+ return " ".join(config.movielist.videodirs.value)
+
+ def getTags(self):
+ try:
+ file = open("/etc/enigma2/movietags")
+ tags = [x.rstrip() for x in file.readlines()]
+ while "" in tags:
+ tags.remove("")
+ file.close()
+ except IOError, ioe:
+ tags = []
+ return " ".join(tags)
+
+ def getText(self):
+ self.handleCommand("")
+ 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"
+ return xml
+
+ text = property(getText)
http://dreambox/web/tvbrowser? +
To add something:
- &command=add&&syear={start_year}&smonth={start_month}&sday={start_day}&shour={start_hour}&smin={start_minute}&eyear={end_year}&emonth={end_month}&eday={end_day}&ehour={end_hour}&emin={end_minute}&sRef={urlencode(channel_name_external, "utf8")}&name={urlencode(title, "utf8")}&description={urlencode(title, "utf8")}&afterevent=0&eit=&disabled=0&justplay=0&repeated=0
+ &command=add&&year={year}&month={month}&day={day}&shour={start_hour}&smin={start_minute}&ehour={end_hour}&emin={end_minute}&sRef={urlencode(channel_name_external, "utf8")}&name={urlencode(title, "utf8")}&description={urlencode(descr, "utf8")}&dirname={dirname}&tags={urlencode("tag1 tag2...", "utf8")}&afterevent=0&eit=&disabled=0&justplay=0&repeated=0
to zap for some time:
- &command=add&&syear={start_year}&smonth={start_month}&sday={start_day}&shour={start_hour}&smin={start_minute}&eyear={end_year}&emonth={end_month}&eday={end_day}&ehour={end_hour}&emin={end_minute}&sRef={urlencode(channel_name_external, "utf8")}&name={urlencode(title, "utf8")}&description={urlencode(title, afterevent=0&eit=&disabled=0&justplay=1&repeated=0
+ &command=add&&year={year}&month={month}&day={day}&shour={start_hour}&smin={start_minute}&ehour={end_hour}&emin={end_minute}&sRef={urlencode(channel_name_external, "utf8")}&name={urlencode(title, "utf8")}&description={urlencode(descr, "utf8")}&dirname={dirname}&tags={urlencode("tag1 tag2...", "utf8")}&afterevent=0&eit=&disabled=0&justplay=1&repeated=0
to delete something:
- &command=del&&syear={start_year}&smonth={start_month}&sday={start_day}&shour={start_hour}&smin={start_minute}&eyear={end_year}&emonth={end_month}&eday={end_day}&ehour={end_hour}&emin={end_minute}&sRef={urlencode(channel_name_external, "utf8")}&name={urlencode(title, "utf8")}&description={urlencode(title, "utf8")}&afterevent=0&eit=&disabled=0&justplay=0&repeated=0
+ &command=del&&year={year}&month={month}&day={day}&shour={start_hour}&smin={start_minute}&ehour={end_hour}&emin={end_minute}&sRef={urlencode(channel_name_external, "utf8")}
"""
- listDate = ['syear','smonth','sday','shour','smin','eyear','emonth','eday','ehour','emin']
+ listDate = ['year','month','day','shour','smin','ehour','emin']
for element in listDate:
if param[element] is None:
return False,"%s missing"%element
else:
param[element] = int(param[element])
- param['begin'] = int( strftime("%s", localtime(mktime( (param['syear'], param['smonth'], param['sday'], param['shour'], param['smin'], 0, 0, 0, -1) ) ) ) )
- param['end'] = int( strftime("%s", localtime(mktime( (param['eyear'], param['emonth'], param['eday'], param['ehour'], param['emin'], 0, 0, 0, -1) ) ) ) )
-
+ param['begin'] = int(mktime( (param['year'], param['month'], param['day'], param['shour'], param['smin'], 0, 0, 0, -1) ) )
+ param['end'] = int(mktime( (param['year'], param['month'], param['day'], param['ehour'], param['emin'], 0, 0, 0, -1) ) )
+ if param['end'] < param['begin']:
+ param['end'] += 86400
for element in listDate:
del param[element]
if limitEvent:
return False, "No event found, started infinite recording"
- timer = RecordTimerEntry(serviceref, begin, end, name, description, eventid, False, False, 0)
+ location = config.movielist.last_videodir.value
+ timer = RecordTimerEntry(serviceref, begin, end, name, description, eventid, False, False, 0, dirname = location)
timer.dontSave = True
self.recordtimer.record(timer)
if ( param['afterevent'] == "0") or (param['afterevent'] == "1") or (param['afterevent'] == "2"):
afterEvent = int(param['afterevent'])
+ dirname = None
+ if param.has_key('dirname'):
+ dirname = param['dirname']
+
+ tags = None
+ if param.has_key('tags'):
+ tags = unescape(param['tags']).split(' ')
+
#Try to edit an existing Timer
if param.has_key('channelOld'):
print "ChannelOld: %s" %param['channelOld']
timer.justplay = justplay
timer.afterEvent = afterEvent
timer.repeated = repeated
+ timer.dirname = dirname
+ timer.tags = tags
#send the changed timer back to enigma2 and hope it's good
self.session.nav.RecordTimer.timeChanged(timer)
try:
#Create a new instance of recordtimerentry
- timer = RecordTimerEntry(service_ref, begin, end, name, description, 0, disabled, justplay, afterEvent)
+ timer = RecordTimerEntry(service_ref, begin, end, name, description, 0, disabled, justplay, afterEvent, dirname = dirname, tags = tags)
timer.repeated = repeated
#add the new timer
self.recordtimer.record(timer)
timer.append(item.eit)
timer.append(item.name)
timer.append(item.description)
- timer.append(item.dirname)
if item.disabled is True:
timer.append("1")
timer.append(item.afterEvent)
+ timer.append(item.dirname)
+ timer.append(" ".join(item.tags))
+
timer.append(item.log_entries)
try:
"EIT":2,
"Name":3,
"Description":4,
- "Directory":5,
- "Disabled":6,
- "TimeBegin":7,
- "TimeEnd":8,
- "Duration":9,
- "startPrepare":10,
- "justPlay":11,
- "afterEvent":12,
- "LogEntries":13,
- "Filename":14,
- "Backoff":15,
- "nextActivation":16,
- "firstTryPrepare":17,
- "State":18,
- "Repeated":19,
- "dontSave":20,
- "Cancled":21,
- "DescriptionExtended":22,
- "toggleDisabled":23,
- "toggleDisabledIMG":24,
- }
\ No newline at end of file
+ "Disabled":5,
+ "TimeBegin":6,
+ "TimeEnd":7,
+ "Duration":8,
+ "startPrepare":9,
+ "justPlay":10,
+ "afterEvent":11,
+ "Location":12,
+ "Tags":13,
+ "LogEntries":14,
+ "Filename":15,
+ "Backoff":16,
+ "nextActivation":17,
+ "firstTryPrepare":18,
+ "State":19,
+ "Repeated":20,
+ "dontSave":21,
+ "Cancled":22,
+ "DescriptionExtended":23,
+ "toggleDisabled":24,
+ "toggleDisabledIMG":25,
+ }
var url_timerlist= "/web/timerlist";
var url_recordnow= "/web/recordnow";
-var url_timeradd= "/web/timeradd"; // plus serviceref,begin,end,name,description,eit,disabled,justplay,afterevent
-var url_timerchange= "/web/timerchange"; // plus serviceref,begin,end,name,description,eit,disabled,justplay,afterevent
+var url_timeradd= "/web/timeradd"; // plus serviceref,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent
+var url_timerchange= "/web/timerchange"; // plus serviceref,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent
var url_timeraddbyeventid= "/web/timeraddbyeventid"; // plus serviceref,eventid
-var url_timerdelete= "/web/timerdelete"; // plus serviceref,bedin,end
+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_message = "/web/message"; // plus text,type,timeout
var url_messageanswer = "/web/messageanswer?getanswer=now";
this.afterevent = "0";
}
try{
+ this.dirname = xml.getElementsByTagName('e2dirname').item(0).firstChild.data;
+ } catch (e) {
+ this.dirname = "/hdd/movie/";
+ }
+ try{
+ this.tags = xml.getElementsByTagName('e2tags').item(0).firstChild.data;
+ } catch (e) {
+ this.tags = "";
+ }
+ try{
this.logentries = xml.getElementsByTagName('e2logentries').item(0).firstChild.data;
} catch (e) {
this.logentries = "N/A";
return this.afterevent;
};
+ this.getDirname = function(){
+ return this.dirname;
+ };
+
+ this.getTags = function(){
+ return this.tags;
+ };
+
this.getLogentries = function(){
return this.logentries;
};
addTimerEditFormArray.RadioListFilled = 0;
addTimerEditFormArray.deleteOldOnSave = 0;
addTimerEditFormArray.eventID = 0;
+addTimerEditFormArray.locationsList = [];
+addTimerEditFormArray.tagsList = [];
days = ['mo', 'tu', 'we', 'th', 'fr', 'sa', 'su'];
-function addTimerFormChangeTime(which) {
- var start = new Date( $('syear').value, ($('smonth').value -1), $('sday').value, $('shour').value, $('smin').value, 0);
- var end = new Date($('eyear').value, ($('emonth').value -1), $('eday').value, $('ehour').value, $('emin').value, 0);
-// debug("("+start+")(" + end+")");
-
- if(start.getTime() > end.getTime()) {
- opponent = (which.substr(0,1) == 's') ? 'e' + which.substr(1, which.length -1) : 's' + which.substr(1, which.length -1) ;
- $(opponent).value = $(which).value;
- }
- var all = ['year','month','day','hour','min'];
- for(i=0; i < all.length; i++) {
- if(which.substr(1, which.length -1) == all[i]) {
- addTimerFormChangeTime(which.substr(0,1) + all[i+1] );
- break;
- }
- }
-}
-
-
function addTimerFormChangeType() {
selected = ($('tvradio').checked === true) ? addTimerEditFormArray.TVList: addTimerEditFormArray.RadioList;
}
}
+function addTimerFormChangeLocation(newloc) {
+
+}
+
+function addTimerFormPrepareTagsMenu(currtags) {
+ result = {};
+ 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];
+ } 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;
+}
+
+function addTimerFormChangeTags(newtags) {
+ lst = addTimerFormPrepareTagsMenu(newtags);
+
+ for (i = $('tags').options.length; i !== 0; i--) {
+ $('tags').options[i - 1] = null;
+ }
+
+ for(element in lst) {
+ $('tags').options[i] = new Option(lst[element]);
+ $('tags').options[i].value = element;
+ i++;
+ }
+}
+
// Timer
function addTimerByID(sRef,eventID,justplay){
'justplayReadable': justplayReadable[Number(timer.getJustplay())],
'afterevent': timer.getAfterevent(),
'aftereventReadable': aftereventReadable[Number(timer.getAfterevent())],
+ 'dirname' : timer.getDirname(),
+ 'tags' : timer.getTags(),
'disabled': timer.getDisabled(),
'onOff': timer.getToggleDisabledIMG(),
'enDis': timer.getToggleDisabledText(),
function loadTimerFormNow() {
var now = new Date();
- addTimerEditFormArray.syear = now.getFullYear();
- addTimerEditFormArray.smonth = now.getMonth() + 1;
- addTimerEditFormArray.sday = now.getDate();
+ addTimerEditFormArray.year = now.getFullYear();
+ addTimerEditFormArray.month = now.getMonth() + 1;
+ addTimerEditFormArray.day = now.getDate();
addTimerEditFormArray.shour = now.getHours();
addTimerEditFormArray.smin = now.getMinutes();
var plusTwoHours = new Date(now.getTime() + ((120 *60)*1000) );
- addTimerEditFormArray.eyear = plusTwoHours.getFullYear();
- addTimerEditFormArray.emonth = plusTwoHours.getMonth() + 1;
- addTimerEditFormArray.eday = plusTwoHours.getDate();
addTimerEditFormArray.ehour = plusTwoHours.getHours();
addTimerEditFormArray.emin = plusTwoHours.getMinutes();
addTimerEditFormArray.channelSort = "tv";
addTimerEditFormArray.name = "";
addTimerEditFormArray.description = "";
+ addTimerEditFormArray.dirname = "/hdd/movie";
+ addTimerEditFormArray.tags = "";
addTimerEditFormArray.repeated = 0;
addTimerEditFormArray.afterEvent = "3";
addTimerEditFormArray.deleteOldOnSave = 0;
debug("[loadTimerFormNow] done");
- loadTimerFormChannels();
+ loadTimerFormTags();
}
-function loadTimerEditForm(justplay, begin, end, repeated, channel, channelName, name, description, afterEvent, deleteOldOnSave, eit) {
- debug('[loadTimerEditForm] justplay: ' + justplay + ',begin: ' + begin + ',end: ' + end + ',repeated: ' + repeated + ',channel: ' + channel + ',name: ' + name +',description: ' + description + ',afterEvent: ' + afterEvent + ',deleteOldOnSave: ' + deleteOldOnSave);
+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.syear = start.getFullYear();
- addTimerEditFormArray.smonth = start.getMonth() + 1;
- addTimerEditFormArray.sday = start.getDate();
+ addTimerEditFormArray.year = start.getFullYear();
+ addTimerEditFormArray.month = start.getMonth() + 1;
+ addTimerEditFormArray.day = start.getDate();
addTimerEditFormArray.shour = start.getHours();
addTimerEditFormArray.smin = start.getMinutes();
var stopp = new Date(Number(end)*1000);
- addTimerEditFormArray.eyear = stopp.getFullYear();
- addTimerEditFormArray.emonth = stopp.getMonth() + 1;
- addTimerEditFormArray.eday = stopp.getDate();
addTimerEditFormArray.ehour = stopp.getHours();
addTimerEditFormArray.emin = stopp.getMinutes();
addTimerEditFormArray.channelSort = "";
addTimerEditFormArray.name = String(name);
addTimerEditFormArray.description = String(description);
+ addTimerEditFormArray.dirname = String(dirname);
+ addTimerEditFormArray.tags = String(tags);
addTimerEditFormArray.repeated = Number(repeated);
addTimerEditFormArray.afterEvent = Number(afterEvent);
- debug("[loadTimerEditForm]" + justplay + "|" + begin + "|" + end + "|" + repeated + "|"+channel+"|"+name+"|"+description+"|"+afterEvent);
+ debug("[loadTimerEditForm]" + justplay + "|" + begin + "|" + end + "|" + repeated + "|"+channel+"|"+name+"|"+description+"|"+dirname+"|"+tags+"|"+afterEvent);
addTimerEditFormArray.deleteOldOnSave = Number(deleteOldOnSave);
addTimerEditFormArray.beginOld = Number(begin);
addTimerEditFormArray.eventID = Number(eit);
- loadTimerFormChannels();
+ loadTimerFormTags();
+}
+
+function loadTimerFormTags() {
+ doRequest(url_getTags, incomingTimerFormTags, false);
+}
+
+function incomingTimerFormTags(request){
+ debug("[incomingTimerFormTags] called");
+ if(request.readyState == 4){
+ var result = new SimpleXMLResult(getXML(request));
+ addTimerEditFormArray.tagsList = result.getStateText().split(" ");
+ loadTimerFormLocations();
+ }
+}
+
+function loadTimerFormLocations() {
+ doRequest(url_getLocations, incomingTimerFormLocations, false);
+}
+
+function incomingTimerFormLocations(request){
+ debug("[incomingTimerFormLocations] called");
+ if(request.readyState == 4){
+ var result = new SimpleXMLResult(getXML(request));
+ addTimerEditFormArray.locationsList = result.getStateText().split(" ");
+ loadTimerFormChannels();
+ }
}
channelObject[element.getServiceReference()] = element.getServiceName();
}
+ var locationsObject = {};
+ for (i = 0; i < addTimerEditFormArray.locationsList.length; i++) {
+ str = addTimerEditFormArray.locationsList[i];
+ locationsObject[str] = str;
+ }
+
+ var tagsObject = addTimerFormPrepareTagsMenu(addTimerEditFormArray.tags);
+
var namespace = {
- syear: createOptions(2008,2015,addTimerEditFormArray.syear),
- smonth: createOptions(1,12,addTimerEditFormArray.smonth),
- sday: createOptions(1,31,addTimerEditFormArray.sday),
+ year: createOptions(2008,2015,addTimerEditFormArray.year),
+ month: createOptions(1,12,addTimerEditFormArray.month),
+ day: createOptions(1,31,addTimerEditFormArray.day),
shour: createOptions(0,23,addTimerEditFormArray.shour),
smin: createOptions(0,59,addTimerEditFormArray.smin),
- eyear: createOptions(2008,2015,addTimerEditFormArray.eyear),
- emonth: createOptions(1,12,addTimerEditFormArray.emonth),
- eday: createOptions(1,31,addTimerEditFormArray.eday),
ehour: createOptions(0,23,addTimerEditFormArray.ehour),
emin: createOptions(0,59,addTimerEditFormArray.emin),
action: createOptionList(Action, addTimerEditFormArray.justplay),
channel: createOptionList(channelObject, addTimerEditFormArray.channel),
afterEvent: createOptionList(AfterEvent, addTimerEditFormArray.afterEvent),
repeated: createOptionListRepeated(Repeated, addTimerEditFormArray.repeated),
+ dirname: createOptionList(locationsObject, addTimerEditFormArray.dirname),
+ tags: createOptionList(tagsObject, addTimerEditFormArray.tags),
timer: {
name: addTimerEditFormArray.name,
// 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;
}
txt = txt.substr(0,1).toUpperCase() + txt.substr(1,1);
}
checked = " ";
- if(num >= list[i]) {
- num -= list[i];
+ 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
};
}
return namespace;
debug("[sendAddTimer]" + "parentChannel:" +$('channel').value);
if(parentPin($('channel').value)) {
- beginD = new Date(ownLazyNumber($('syear').value), (ownLazyNumber($('smonth').value) - 1), ownLazyNumber($('sday').value), ownLazyNumber($('shour').value), ownLazyNumber($('smin').value));
+ beginD = new Date(ownLazyNumber($('year').value), (ownLazyNumber($('month').value) - 1), ownLazyNumber($('day').value), ownLazyNumber($('shour').value), ownLazyNumber($('smin').value));
begin = beginD.getTime()/1000;
- endD = new Date(ownLazyNumber($('eyear').value), (ownLazyNumber($('emonth').value) - 1), ownLazyNumber($('eday').value), ownLazyNumber($('ehour').value), ownLazyNumber($('emin').value));
+ endD = new Date(ownLazyNumber($('year').value), (ownLazyNumber($('month').value) - 1), ownLazyNumber($('day').value), ownLazyNumber($('ehour').value), ownLazyNumber($('emin').value));
end = endD.getTime()/1000;
+ if(end<begin) {
+ end += 86400;
+ }
repeated = 0;
if( $('ms').checked ) {
return;
}
+ dirname = $('dirname').value;
+ tags = $('tags').value;
repeated = 0;
if($('ms').checked) {
repeated = ownLazyNumber($('ms').value);
//addTimerByID(\'%(servicereference)\',\'%(eventid)\',\'False\');
doRequest(url_timerchange+"?"+"sRef="+($('channel').value).replace(""", '"')+"&begin="+ begin +
"&end="+end+"&name="+escape(nameClean)+"&description="+escape(descriptionClean) +
+ "&dirname="+dirname+"&tags="+escape(tags) +
"&afterevent="+$('after_event').value+"&eit=0&disabled=0" +
"&justplay="+ownLazyNumber($('justplay').value)+"&repeated="+repeated +
"&channelOld="+$('channelOld').value +
}
-function sendToggleTimerDisable(justplay,begin,end,repeated,channel,name,description,afterEvent,disabled){
+function sendToggleTimerDisable(justplay,begin,end,repeated,channel,name,description,dirname,tags,afterEvent,disabled){
disabled = (ownLazyNumber(disabled) === 0) ? 1 : 0;
var descriptionClean = (description == " " || description == "N/A") ? "" : description;
doRequest(url_timerchange+"?"+"sRef="+channel.replace(""", '"')+"&begin="+begin +
"&end="+end+"&name="+escape(nameClean)+"&description="+escape(descriptionClean) +
+ "&dirname="+dirname+"&tags="+escape(tags) +
"&afterevent="+afterEvent+"&eit=0&disabled="+disabled +
"&justplay="+justplay+"&repeated="+repeated +
"&channelOld="+channel +
function incomingChannellist(request){
var services = null;
- if(request.readyState == 4) {
+ if(typeof(loadedChannellist[currentBouquet]) != "undefined"){
+ services = loadedChannellist[currentBouquet];
+ } else if(request.readyState == 4) {
services = new ServiceList(getXML(request)).getArray();
debug("[incomingChannellist] got "+services.length+" Services");
}
'endDate': endDate.toLocaleString(),
'state': timer.getState(),
'duration': Math.ceil((timer.getDuration()/60)),
+ 'dirname': timer.getDirname(),
+ 'tags': timer.getTags(),
'repeated': timer.getRepeated(),
'repeatedReadable': repeatedReadable(timer.getRepeated()),
'justplay': timer.getJustplay(),
</tr>
<tr>
<td colspan="3"> </td>
- <td colspan="3">Note: For recurring events start/end day/month are not required.</td>
+ <td colspan="3">Note: For recurring events date is not required.</td>
</tr>
<tr>
- <td colspan="3">Start:</td>
+ <td colspan="3">Date:</td>
<td colspan="3">
- <select name="syear" size="1" id="syear" onchange="javascript:addTimerFormChangeTime('syear');">
- {for year in syear}
- <option value="${year.value}" ${year.selected}>${year.txt}</option>
+ <select name="year" size="1" id="year">
+ {for y in year}
+ <option value="${y.value}" ${y.selected}>${y.txt}</option>
{/for}
</select>
.
- <select name="smonth" id="smonth" size="1" onchange="javascript:addTimerFormChangeTime('smonth');">
- {for month in smonth}
- <option value="${month.value}" ${month.selected}>${month.txt}</option>
+ <select name="month" id="month" size="1">
+ {for m in month}
+ <option value="${m.value}" ${m.selected}>${m.txt}</option>
{/for}
</select>
.
- <select name="sday" id="sday" size="1" onchange="javascript:addTimerFormChangeTime('sday');">
- {for day in sday}
- <option value="${day.value}" ${day.selected}>${day.txt}</option>
+ <select name="day" id="day" size="1">
+ {for d in day}
+ <option value="${d.value}" ${d.selected}>${d.txt}</option>
{/for}
</select>
- -
- <select name="shour" id="shour" size="1" onchange="javascript:addTimerFormChangeTime('shour');">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">Start:</td>
+ <td colspan="3">
+ <select name="shour" id="shour" size="1">
{for hour in shour}
<option value="${hour.value}" ${hour.selected}>${hour.txt}</option>
{/for}
</select>
:
- <select name="smin" id="smin" size="1" onchange="javascript:addTimerFormChangeTime('smin');">
+ <select name="smin" id="smin" size="1">
{for min in smin}
<option value="${min.value}" ${min.selected}>${min.txt}</option>
{/for}
<tr>
<td colspan="3">End:</td>
<td colspan="3">
- <select name="eyear" id="eyear" size="1" onchange="javascript:addTimerFormChangeTime('eyear');">
- {for year in eyear}
- <option value="${year.value}" ${year.selected}>${year.txt}</option>
- {/for}
- </select>
- .
- <select name="emonth" id="emonth" size="1" onchange="javascript:addTimerFormChangeTime('emonth');">
- {for month in emonth}
- <option value="${month.value}" ${month.selected}>${month.txt}</option>
- {/for}
- </select>
- .
- <select name="eday" id="eday" size="1" onchange="javascript:addTimerFormChangeTime('eday');">
- {for day in eday}
- <option value="${day.value}" ${day.selected}>${day.txt}</option>
- {/for}
- </select>
- -
- <select name="ehour" id="ehour" size="1" onchange="javascript:addTimerFormChangeTime('ehour');">
+ <select name="ehour" id="ehour" size="1">
{for hour in ehour}
<option value="${hour.value}" ${hour.selected}>${hour.txt}</option>
{/for}
</select>
:
- <select name="emin" id="emin" size="1" onchange="javascript:addTimerFormChangeTime('emin');">
+ <select name="emin" id="emin" size="1">
{for min in emin}
<option value="${min.value}" ${min.selected}>${min.txt}</option>
{/for}
<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="timerFormExtendChannellist($('channel').options[$('channel').selectedIndex].value)">
+ <select name="channel" id="channel" size="1" onchange="javascript:timerFormExtendChannellist($('channel').options[$('channel').selectedIndex].value)">
{for c in channel}
<option value="${c.value}" ${c.selected}>${c.txt}</option>
{/for}
<tr>
<td colspan="3">Name:</td>
<td colspan="3">
- <input name="name" id="name" type="text" size="100" maxlength="100" style="color: #000000;" value="${timer.name}">
+ <input name="name" id="name" type="text" size="80" maxlength="80" style="color: #000000;" value="${timer.name}">
</td>
</tr>
<tr>
<td colspan="3">Description:</td>
<td colspan="3">
- <input name="descr" id="descr" type="text" size="100" maxlength="100" style="color: #000000;" value="${timer.description}">
+ <input name="descr" id="descr" type="text" size="80" maxlength="80" style="color: #000000;" value="${timer.description}">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">Location:</td>
+ <td colspan="3">
+ <select id="dirname" name="dirname" size="1" onchange="javascript:addTimerFormChangeLocation($('dirname').options[$('dirname').selectedIndex].value)">
+ {for d in dirname}
+ <option value="${d.value}" ${d.selected}>${d.txt}</option>
+ {/for}
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3">Tags:</td>
+ <td colspan="3">
+ <select id="tags" name="tags" size="1" onchange="javascript:addTimerFormChangeTags($('tags').options[$('tags').selectedIndex].value)">
+ {for t in tags}
+ <option value="${t.value}" ${t.selected}>${t.txt}</option>
+ {/for}
+ </select>
</td>
</tr>
<tr>
<img src="/web-data/img/delete.png" title="Delete timer ${t.title}" border="0" onclick="delTimer('${t.servicereference}','${t.begin}','${t.end}','${t.servicename}','${t.title}','${t.description}',incomingTimerDelResult);">
</a>
<a href="#">
- <img src="/web-data/img/${t.onOff}.png" title="${t.enDis} ${t.title}" border="0" onclick="sendToggleTimerDisable('${t.justplay}','${t.begin}','${t.end}','${t.repeated}','${t.servicereference}','${t.title}','${t.description}','${t.afterevent}','${t.disabled}' );">
+ <img src="/web-data/img/${t.onOff}.png" title="${t.enDis} ${t.title}" border="0" onclick="sendToggleTimerDisable('${t.justplay}','${t.begin}','${t.end}','${t.repeated}','${t.servicereference}','${t.title}','${t.description}','${t.dirname}','${t.tags}','${t.afterevent}','${t.disabled}' );">
</a>
<a href="#">
- <img src="/web-data/img/edit.png" title="Edit timer ${t.title}" border="0" onclick="loadTimerEditForm('${t.justplay}','${t.begin}','${t.end}','${t.repeated}','${t.servicereference}','${t.servicename}','${t.title}','${t.description}','${t.afterevent}',1);">
+ <img src="/web-data/img/edit.png" title="Edit timer ${t.title}" border="0" onclick="loadTimerEditForm('${t.justplay}','${t.begin}','${t.end}','${t.repeated}','${t.servicereference}','${t.servicename}','${t.title}','${t.description}','${t.dirname}','${t.tags}','${t.afterevent}',1);">
</a>
</td>
</tr>
--- /dev/null
+<e2:screen name="LocationsAndTagsWebScreen"><?xml version="1.0" encoding="UTF-8"?>
+ <e2:element source="Locations">
+ <e2:convert type="web:TextToHTML" />
+ </e2:element>
+</e2:screen>
\ No newline at end of file
--- /dev/null
+<e2:screen name="LocationsAndTagsWebScreen"><?xml version="1.0" encoding="UTF-8"?>
+ <e2:element source="Tags">
+ <e2:convert type="web:TextToHTML" />
+ </e2:element>
+</e2:screen>
\ No newline at end of file
<e2:screen name="TimerWebScreen"><?xml version="1.0" encoding="UTF-8"?>
- <e2:element source="TimerAdd" id="sRef,begin,end,name,description,eit,disabled,justplay,afterevent">
+ <e2:element source="TimerAdd" id="sRef,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent">
<e2:convert type="web:TextToHTML" />
</e2:element>
</e2:screen>
\ No newline at end of file
<e2:screen name="TimerWebScreen"><?xml version="1.0" encoding="UTF-8"?>
- <e2:element source="TimerChange" id="sRef,begin,end,name,description,eit,disabled,justplay,afterevent,repeated,channelOld,beginOld,endOld,deleteOldOnSave">
+ <e2:element source="TimerChange" id="sRef,begin,end,name,description,dirname,tags,eit,disabled,justplay,afterevent,repeated,channelOld,beginOld,endOld,deleteOldOnSave">
<e2:convert type="web:TextToHTML" />
</e2:element>
</e2:screen>
\ No newline at end of file
<e2name><e2:item name="Name" filter="xml"/></e2name>
<e2description><e2:item name="Description" filter="xml"/></e2description>
<e2descriptionextended><e2:item name="DescriptionExtended" filter="xml"/></e2descriptionextended>
- <e2directory><e2:item name="Directory" filter="xml"/></e2directory>
<e2disabled><e2:item name="Disabled" /></e2disabled>
<e2timebegin><e2:item name="TimeBegin" /></e2timebegin>
<e2timeend><e2:item name="TimeEnd" /></e2timeend>
<e2startprepare><e2:item name="startPrepare" /></e2startprepare>
<e2justplay><e2:item name="justPlay" /></e2justplay>
<e2afterevent><e2:item name="afterEvent" /></e2afterevent>
- <e2logentries><e2:item name="LogEntries" /></e2logentries>
+ <e2dirname><e2:item name="Location" /></e2dirname>
+ <e2tags><e2:item name="Tags" filter="xml"/></e2tags>
+ <e2logentries><e2:item name="LogEntries" filter="xml"/></e2logentries>
<e2filename><e2:item name="Filename" filter="xml"/></e2filename>
<e2backoff><e2:item name="Backoff" /></e2backoff>
<e2nextactivation><e2:item name="nextActivation" /></e2nextactivation>
<e2:screen name="TimerWebScreen"><?xml version="1.0" encoding="UTF-8"?>
- <e2:element source="TVBrowser" id="sRef,name,description,eit,disabled,justplay,afterevent,command,syear,smonth,sday,shour,smin,eyear,emonth,eday,ehour,emin,repeated">
+ <e2:element source="TVBrowser" id="sRef,name,description,dirname,tags,eit,disabled,justplay,afterevent,command,year,month,day,shour,smin,ehour,emin,repeated">
<e2:convert type="web:TextToHTML" />
</e2:element>
</e2:screen>
\ No newline at end of file
from WebComponents.Sources.ServiceListReload import ServiceListReload
from WebComponents.Sources.AT import AT
from WebComponents.Sources.CurrentService import CurrentService
+from WebComponents.Sources.LocationsAndTags import LocationsAndTags
from Components.Sources.FrontendStatus import FrontendStatus
ugly, but necessary :(
"""
+class LocationsAndTagsWebScreen(WebScreen):
+ def __init__(self, session, request):
+ WebScreen.__init__(self, session, request)
+ self["Locations"] = LocationsAndTags(session,LocationsAndTags.LOCATIONS)
+ self["Tags"] = LocationsAndTags(session,LocationsAndTags.TAGS)
+
class EPGWebScreen(WebScreen):
def __init__(self, session, request):
WebScreen.__init__(self, session, request)
class WAPWebScreen(WebScreen):
def __init__(self, session, request):
WebScreen.__init__(self, session, request)
- self["WAPFillOptionListSyear"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
- self["WAPFillOptionListSday"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
- self["WAPFillOptionListSmonth"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
+ self["WAPFillOptionListYear"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
+ self["WAPFillOptionListDay"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
+ self["WAPFillOptionListMonth"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
self["WAPFillOptionListShour"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
self["WAPFillOptionListSmin"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
-
- self["WAPFillOptionListEyear"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
- self["WAPFillOptionListEday"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
- self["WAPFillOptionListEmonth"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
self["WAPFillOptionListEhour"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
self["WAPFillOptionListEmin"] = WAPfunctions(session,func = WAPfunctions.LISTTIME)
self["WAPFillValueName"] = WAPfunctions(session,func = WAPfunctions.FILLVALUE)
self["WAPFillValueDescr"] = WAPfunctions(session,func = WAPfunctions.FILLVALUE)
+ self["WAPFillLocation"] = WAPfunctions(session,func = WAPfunctions.LOCATIONLIST)
+ self["WAPFillTags"] = WAPfunctions(session,func = WAPfunctions.TAGLIST)
self["WAPFillOptionListRepeated"] = WAPfunctions(session,func = WAPfunctions.REPEATED)
self["WAPServiceList"] = WAPfunctions(session, func = WAPfunctions.SERVICELIST)