import cgitb
import sqlite3
import os
+import re
import datetime
cgitb.enable()
path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
chopt=chopt+"<option value="+chtxt+">"+display+"</option>\n "
db.close()
return chopt
+def edit_date(id):
+ db=sqlite3.connect(dbpath)
+ ret={}
+ for idt,typet,chtxt,title,btime,etime,deltatime,opt,deltaday in db.execute("SELECT id,type,chtxt,title,btime,etime,deltatime,opt,deltaday From rectime WHERE id ="+id):
+ ret['id']=idt
+ ret['type']=typet
+ ret['chtxt']=chtxt
+ ret['title']=title
+ ret['btime']=btime
+ ret['etime']=etime
+ try:
+ ret['deltatime']=deltatime
+ except:
+ ret['deltatime']=""
+ ret['opt']=opt
+ try:
+ ret['deltaday']=daltaday
+ except:
+ ret['deltaday']=""
+ db.close()
+ return ret
+
def reserv_recday(keyword,chtxt,btime,etime,deltatime,opt,deltaday,day):
"""
dayは月曜日を1日曜日を7とした数字
rett="over"
db.close()
return rett
+def change_reserv(id,type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
+ """
+ idはテキスト
+ """
+ MaxT=2
+ MaxS=2
+ db=sqlite3.connect(dbpath)
+ bt="\'"+btime+"\'"
+ et="\'"+etime+"\'"
+ idn=int(id)
+ dbexe="SELECT id,type,chdata.bctype,rectime.chtxt,rectime.title FROM rectime INNER JOIN chdata ON rectime.chtxt=chdata.chtxt"
+ #dbexe="SELECT bctype,chtxt,title FROM rectime INNER JOIN chdata ON rectime.chtxt=chdata.chtxt"
+
+ dbexe=dbexe+" WHERE NOT( ( rectime.etime <= "+bt+" ) OR ( rectime.btime >= "+et+" ) )"
+ for idt,typet,bctypet, chtxtt, titlet in db.execute(dbexe):
+ if idt != idn:
+ if (typet=="rec") or (typet=="res") or (typet=="key") or (typet=="keyevery"):
+ if bctypet.find("cs")>-1:
+ MaxS=MaxS-1
+ elif bctypet.find("bs")>-1:
+ MaxS=MaxS-1
+ elif bctypet.find("te")>-1:
+ MaxT=MaxT-1
+ bctype=""
+ rett=""
+ for bctypet, chtxtt in db.execute("SELECT bctype,chtxt FROM chdata WHERE chtxt=\'"+chtxt+"\'"):
+ bctype=bctypet
+ if (type=="rec") or (type=="res") or (type=="key") or (type=="keyevery"):
+ if bctype.find("cs")>-1:
+ MaxS=MaxS-1
+ elif bctype.find("bs")>-1:
+ MaxS=MaxS-1
+ elif bctype.find("te")>-1:
+ MaxT=MaxT-1
+ if MaxS>-1 and MaxT>-1:
+ db.execute('delete from rectime where id='+id)
+ recline="\""+type+"\",\""+chtxt+"\",\""+keyword+"\",datetime(\""+btime+"\"),datetime(\""+etime+"\"),\""+deltatime+"\",\""+opt+"\",\""+deltaday+"\""
+ #print recline
+ db.execute('insert into rectime ("type","chtxt","title","btime","etime","deltatime","opt","deltaday") values ('+recline+')')
+ db.commit()
+ else:
+ rett="over"
+ db.close()
+ return rett
def station2chtxt(station):
db=sqlite3.connect(dbpath)
ret=""
ret=f.read()
f.close()
return ret
+def readHtmlEdit():
+ f = open(path+'rswi_edit.htm')
+ ret=f.read()
+ f.close()
+ return ret
def readRecFinisSimple():
f = open(path+'fin.htm')
htmdate= readHtmlSrcSimple()
htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
-
htmdate=htmdate.replace("<!--btime-value//-->",btime)
htmdate=htmdate.replace("<!--etime-value//-->",etime)
htmdate=htmdate.replace("<!--type-value//-->",type)
htmdate=readRecFinisOver()
exect=""
#
+if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(re.search('edit-exec:',exect)):
+ editnum=exect.replace("edit-exec:","")
+ restxt=change_reserv(editnum,type, title, chtxt, btime, etime, deltahour, opts, deltaday)
+ if restxt=="":
+ htmdate=readRecFinisSimple()
+ elif restxt=="over":
+ htmdate=readRecFinisOver()
+ exect=""
if exect=="schedule":
htmdate=readRecSchedule()
+if re.search('edit:',exect):
+ editnum=exect.replace("edit:","")
+ htmdate= readHtmlEdit()
+ iddata=edit_date(editnum)
+ htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
+ htmdate=htmdate.replace("<!--ch-value//-->",iddata["chtxt"])
+ htmdate=htmdate.replace("<!--btime-value//-->",iddata["btime"])
+ htmdate=htmdate.replace("<!--etime-value//-->",iddata["etime"])
+ htmdate=htmdate.replace("<!--type-value//-->",iddata["type"])
+ htmdate=htmdate.replace("<!--ch-value//-->",iddata["chtxt"])
+ htmdate=htmdate.replace("<!--title-value//-->",iddata["title"])
+ htmdate=htmdate.replace("<!--size-value//-->",size)
+ htmdate=htmdate.replace("<!--opts-value//-->",iddata["opt"])
+ htmdate=htmdate.replace("<!--exec-value//-->","edit-exec:"+editnum)
+
print htmdate
--- /dev/null
+
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+ <head>
+ <meta http-equive="Content-Type" content="text/html;charset=UTF-8"/>
+ <title>Rec10 Simple Web Interface ver.0.5.0a 編集画面</title>
+ <!-- dojo.jsの読み込み -->
+ <script src="../dojo/dojo.js" djConfig="parseOnLoad:true">
+ </script>
+ <!-- テーマの読み込み -->
+ <style type="text/css">
+ @import "../dojo/resources/dojo.css";
+ @import "../dijit/themes/tundra/tundra.css";
+
+
+ </style>
+ <script type="text/javascript">
+
+ dojo.require("dojo.parser");
+ // ※ ここで、使用するウィジェットの読み込みを行う
+
+ dojo.require("dijit.form.Button");
+ dojo.require("dijit.form.FilteringSelect");
+ dojo.require("dijit.form.ValidationTextBox");
+ dojo.require("dijit.form.NumberSpinner");
+ dojo.require("dijit.form.CheckBox");
+ dojo.require("dijit.form.Form");
+ //dojo.require("dojox.date");
+ function setType(value){
+ if (value=="rec"){
+ //alert("Selected "+value);
+ dijit.byId("deltaday").setDisabled(true);
+ dijit.byId("deltahour").setDisabled(true);
+ setDayopt(false);
+ }else if (value=="key"){
+ //alert("Selected "+value);
+ dijit.byId("deltaday").setDisabled(true);
+ dijit.byId("deltahour").setDisabled(false);
+ setDayopt(false);
+ }else if (value=="keyday"){
+ dijit.byId("deltahour").setDisabled(false);
+ setDayopt(true);
+ }else if (value=="keyevery"){
+ //alert("Selected "+value);
+ dijit.byId("deltaday").setDisabled(false);
+ dijit.byId("deltahour").setDisabled(false);
+ setDayopt(false);
+ }else if (value=="res"){
+ //alert("Selected "+value);
+ dijit.byId("deltaday").setDisabled(true);
+ dijit.byId("deltahour").setDisabled(true);
+ setDayopt(false);
+ }else if (value=="ts2avi"){
+ dijit.byId("deltaday").setDisabled(true);
+ dijit.byId("deltahour").setDisabled(true);
+ setDayopt(false);
+ }
+
+ }
+ function setDayopt(bool){
+ dijit.byId("day_Sun").setDisabled(!bool);
+ dijit.byId("day_Mon").setDisabled(!bool);
+ dijit.byId("day_Tue").setDisabled(!bool);
+ dijit.byId("day_Wed").setDisabled(!bool);
+ dijit.byId("day_Thu").setDisabled(!bool);
+ dijit.byId("day_Fri").setDisabled(!bool);
+ dijit.byId("day_Sat").setDisabled(!bool);
+ }
+ function changeSize(){
+ var str=dijit.byId("opts").value;
+ var s=dijit.byId("size").value;
+ str=str.replace("S","");
+ str=str.replace("H","");
+ str=str.replace("F","");
+ str=str.replace("Q","");
+ str=str+s;
+ //alert("Selected "+str);
+ dijit.byId("opts").setValue(str);
+
+ }
+ function setOpts(obj){
+ if (obj.checked){
+ var str=dijit.byId("opts").value;
+ str=str+obj.value;
+ }else{
+ var str=dijit.byId("opts").value;
+ str=str.replace(obj.value,"");
+ }
+ dijit.byId("opts").setValue(str);
+ }
+ function changeOpts(){
+ var str=dijit.byId("opts").value;
+ if (str.indexOf("a")>-1){
+ dijit.byId("anime").setChecked(true);
+ }else{
+ dijit.byId("anime").setChecked(false);
+ }
+ if (str.indexOf("2")>-1){
+ dijit.byId("2pass").setChecked(true);
+ }else{
+ dijit.byId("2pass").setChecked(false);
+ }
+ if (str.indexOf("x")>-1){
+ dijit.byId("xvid").setChecked(true);
+ }else{
+ dijit.byId("xvid").setChecked(false);
+ }
+ if (str.indexOf("d")>-1){
+ dijit.byId("dualaudio").setChecked(true);
+ }else{
+ dijit.byId("dualaudio").setChecked(false);
+ }
+ if (str.indexOf("5")>-1){
+ dijit.byId("pentaaudio").setChecked(true);
+ }else{
+ dijit.byId("pentaaudio").setChecked(false);
+ }
+ if (str.indexOf("S")>-1){
+ dijit.byId("size").setValue("S");
+ }else if (str.indexOf("H")>-1){
+ dijit.byId("size").setValue("H");
+ }else if (str.indexOf("F")>-1){
+ dijit.byId("size").setValue("F");
+ }else if (str.indexOf("Q")>-1){
+ dijit.byId("size").setValue("Q");
+ }else{
+ changeSize();
+ }
+ }
+ function setbtime_now(){
+ var now =new Date();
+ now.setMinutes(0,0,0);
+ setbtime(now);
+ }
+ function setetime_now(){
+ var ds=dijit.byId("btime").value;
+ var d=txt2date(ds);
+ setetime(d);
+ }
+ function setnow(){
+ var now =new Date();
+ now.setMinutes(0,0,0);
+ setbtime(now);
+ setetime(now);
+ }
+ function txt2date(txt){
+ var d=new Date;
+ var ds=txt;
+ if (ds.length>3){
+ d.setYear(parseInt(ds.substring(0,4)));
+ }
+ if (ds.length>6){
+ d.setMonth(parseInt(ds.substring(5,7))-1);
+ }
+ if (ds.length>9){
+ d.setDate(parseInt(ds.substring(8,10)));
+ }
+ if (ds.length>12){
+ d.setHours(parseInt(ds.substring(11,13)));
+ }
+ if (ds.length>15){
+ d.setMinutes(parseInt(ds.substring(14,16)));
+ }
+ if (ds.length>18){
+ d.setSeconds(parseInt(ds.substring(17,19)));
+ }
+ return d
+ }
+ function add_btimemin(min){
+ var ds=dijit.byId("btime").value;
+ var d=txt2date(ds);
+ d.setTime(d.getTime()+min*60*1000);
+ setbtime(d);
+ }
+ function add_etimemin(min){
+ var ds=dijit.byId("etime").value;
+ var d=txt2date(ds);
+ d.setTime(d.getTime()+min*60*1000);
+ setetime(d);
+ }
+
+ function setbtime(date){
+ var nowtxt="";
+ //window.alert("setbtime");
+ nowtxt=String(date.getFullYear())+"-";
+ if (date.getMonth()<10){
+ nowtxt=nowtxt+"0";
+ }
+ nowtxt=nowtxt+String(date.getMonth()+1)+"-";
+ if (date.getDate()<10){
+ nowtxt=nowtxt+"0";
+ }
+ nowtxt=nowtxt+String(date.getDate())+" ";
+ if (date.getHours()<10){
+ nowtxt=nowtxt+"0"
+ }
+ nowtxt=nowtxt+String(date.getHours())+":";
+ if (date.getMinutes()<10){
+ nowtxt=nowtxt+"0"
+ }
+ nowtxt=nowtxt+String(date.getMinutes())+":00";
+ //console.debug("click");
+ //window.alert("test");
+ dijit.byId("btime").setValue(nowtxt);
+ }
+ function setetime(date){
+ var nowtxt="";
+ //window.alert("test");
+ nowtxt=String(date.getFullYear())+"-";
+ if (date.getMonth()<10){
+ nowtxt=nowtxt+"0";
+ }
+ nowtxt=nowtxt+String(date.getMonth()+1)+"-";
+ if (date.getDate()<10){
+ nowtxt=nowtxt+"0";
+ }
+ nowtxt=nowtxt+String(date.getDate())+" ";
+ if (date.getHours()<10){
+ nowtxt=nowtxt+"0"
+ }
+ nowtxt=nowtxt+String(date.getHours())+":";
+ if (date.getMinutes()<10){
+ nowtxt=nowtxt+"0"
+ }
+ nowtxt=nowtxt+String(date.getMinutes())+":00";
+ //console.debug("click");
+ //window.alert("test");
+ dijit.byId("etime").setValue(nowtxt);
+ }
+ function title2opts(){
+ var str=dijit.byId("title").value;
+ var stropt=dijit.byId("opts").Value;
+ if (stropt==undefined){
+ stropt="";
+ }
+ //stropt=stropt.replace("undefined","");
+ //stropt=""
+ if (str.indexOf("(2)")>-1){
+ //dijit.byId("2pass").setChecked(true);
+ str=stropt+"d";
+ dijit.byId("opts").setValue(str);
+ }else if(str.indexOf("(二)")>-1){
+ //dijit.byId("2pass").setChecked(true);
+ str=stropt+"d";
+ dijit.byId("opts").setValue(str);
+ }else if(str.indexOf("[二]")>-1){
+ //dijit.byId("2pass").setChecked(true);
+ str=stropt+"d";
+ dijit.byId("opts").setValue(str);
+ }else if(str.indexOf("(二)")>-1){
+ //dijit.byId("2pass").setChecked(true);
+ str=stropt+"d";
+ dijit.byId("opts").setValue(str);
+ }else if(str.indexOf("(二)")>-1){
+ //dijit.byId("2pass").setChecked(true);
+ str=stropt+"d";
+ dijit.byId("opts").setValue(str);
+ }else if(str.indexOf("5.1")>-1){
+ //dijit.byId("2pass").setChecked(true);
+ str=stropt+"5";
+ dijit.byId("opts").setValue(str);
+ }else if(str.indexOf("5.1")>-1){
+ //dijit.byId("2pass").setChecked(true);
+ str=stropt+"5";
+ dijit.byId("opts").setValue(str);
+ }
+ }
+ //dojo.addOnLoad(init);
+ function init(){
+ //dojo.debug("test")
+ setType("res");
+ title2opts();
+ changeSize();
+ changeOpts();
+ //changeSize();
+ }
+ dojo.addOnLoad(init);
+ </script>
+ </head>
+ <!-- テーマの読み込み -->
+ <body class="tundra">
+ <div dojoType="dijit.form.Form" action="rec10web.py" onExecute="this.submit()">
+ <h1>Rec10 Simple Web Interface ver.0.5.0a 編集画面</h1><br>
+ <select name="type"
+ dojoType="dijit.form.FilteringSelect"
+ autocomplete="false"
+ value="<!--type-value//-->"
+ onChange="setType">
+ <option value="res">通常予約</option>
+ <option value="key">キーワード予約</option>
+ <option value="keyday">曜日予約</option>
+ <option value="keyevery">隔日予約</option>
+ <option value="rec">最終予約</option>
+ <option value="ts2avi">エンコード予約</option>
+ </select>番組名/キーワード
+ <input type="text"
+ length="40"
+ dojoType="dijit.form.TextBox"
+ value="<!--title-value//-->"
+ id="title"
+ name="title">チャンネル
+ <select name="chtxt"
+ dojoType="dijit.form.FilteringSelect"
+ autocomplete="false"
+ value="<!--ch-value//-->"
+ onChange="setType">
+ <!--text_for_replace_chtxt_input//-->
+ </select>
+ <br><br>開始時刻
+ <div name="btime"
+ id="btime"
+ dojoType="dijit.form.ValidationTextBox"
+ promptmessage="年-月-日 時間:分:秒"
+ value="<!--btime-value//-->"
+ regexp="\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}\:\d{2}">
+ </div>
+ <div dojoType="dijit.form.Button" onclick="setbtime_now()">現在</div>
+ <div dojoType="dijit.form.Button" onclick="add_btimemin(30)">+30m</div>
+ <div dojoType="dijit.form.Button" onclick="add_btimemin(180)">+3h</div>
+ <div dojoType="dijit.form.Button" onclick="add_btimemin(720)">+12h</div>
+ 終了時刻
+ <div name="etime"
+ id="etime"
+ dojoType="dijit.form.ValidationTextBox"
+ promptmessage="年-月-日 時間:分:秒"
+ value="<!--etime-value//-->"
+ regexp="\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}\:\d{2}">
+ </div>
+ <div dojoType="dijit.form.Button" onclick="setetime_now()">一致</div>
+ <div dojoType="dijit.form.Button" onclick="add_etimemin(5)">+5m</div>
+ <div dojoType="dijit.form.Button" onclick="add_etimemin(30)">+30m</div>
+ <div dojoType="dijit.form.Button" onclick="add_etimemin(60)">+1h</div>
+ <br>
+ <br>隔日周期(days)
+ <input dojoType="dijit.form.NumberSpinner"
+ value="7"
+ smallDelta="1"
+ largeDelta="10"
+ constraints="{min:0,max:24,places:0}"
+ maxlength="2"
+ id="deltaday"
+ name="deltaday">
+ キーワード録画許容誤差(hours)
+ <input dojoType="dijit.form.NumberSpinner"
+ value="3"
+ smallDelta="1"
+ largeDelta="10"
+ constraints="{min:0,max:24,places:0}"
+ maxlength="2"
+ id="deltahour"
+ name="deltahour"><br><br>
+
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="day_Mon" name="day_Mon" value="1">月曜</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="day_Tue" name="day_Tue" value="2">火曜</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="day_Wed" name="day_Wed" value="3">水曜</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="day_Thu" name="day_Thu" value="4">木曜</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="day_Fri" name="day_Fri" value="5">金曜</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="day_Sat" name="day_Sat" value="6">土曜</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="day_Sun" name="day_Sun" value="7">日曜</input>
+ <br><br>
+ 録画サイズ
+ <select name="size"
+ dojoType="dijit.form.FilteringSelect"
+ autocomplete="false"
+ value="<!--size-value//-->"
+ id="size"
+ onChange="changeSize">
+ <option selected="selected" value="S">SD画質(720x480)</option>
+ <option value="H">HD画質(1280x720)</option>
+ <option value="Q">WQVG画質(400x240)</option>
+ <option value="F">FULLHD画質(1920x1080)</option>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="anime" name="anime" value="a"
+ onClick="setOpts(this)">アニメ</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="dualaudio" name="dualaudio" value="d"
+ onClick="setOpts(this)">二ヶ国語放送</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="pentaaudio" name="pentaaudio" value="5"
+ onClick="setOpts(this)">5.1ch放送</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="2pass" name="2pass" value="2"
+ onClick="setOpts(this)">2passモード</input>
+ <input type="checkbox"
+ dojoType="dijit.form.CheckBox"
+ id="xvid" name="xvid" value="x"
+ onClick="setOpts(this)">Xvidモード</input>
+ </select>
+ Options
+ <div name="opts"
+ dojoType="dijit.form.ValidationTextBox"
+ value="<!--opts-value//-->"
+ onChange="changeOpts"
+ id="opts">
+ </div><div dojoType="dijit.form.Button" type="submit">予約</div>
+ <div name="exec"
+ dojoType="dijit.form.ValidationTextBox"
+ value="<!--exec-value//-->"
+ style="display:none";>
+ </div>
+ </body>
+</html>