--- /dev/null
+#!/usr/bin/python
+# coding: UTF-8
+# Rec10 TS Recording Tools
+# Copyright (C) 2009 Yukikaze
+import cgi
+import cgitb
+import sqlite3
+import os
+cgitb.enable()
+path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
+dbpath=path+"ch.db"
+
+
+def getchtxt():
+ db=sqlite3.connect(dbpath)
+ chopt=""
+ for bctype, ontv, chtxt, ch, csch ,updatetime in db.execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata"):
+ chdisplay=""
+ for bctype,channel,display in db.execute("SELECT bctype,channel,display FROM ch WHERE channel=\""+ontv+"\""):
+ chdisplay=display
+ chopt=chopt+"<option value="+chtxt+">"+display+"</option>\n "
+ db.close()
+ return chopt
+def reserv(type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
+ db=sqlite3.connect(dbpath)
+ 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()
+ db.close()
+def station2chtxt(station):
+ db=sqlite3.connect(dbpath)
+ ret=""
+ for bctype, ontv, chtxt, ch, csch ,updatetime in db.execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE station=\""+station+"\""):
+ ret=chtxt
+ db.close()
+ return ret
+def readHtmlSrcSimple():
+ f = open(path+'rswi.htm')
+ ret=f.read()
+ f.close()
+ return ret
+def readRecFinisSimple():
+ f = open(path+'fin.htm')
+ ret=f.read()
+ f.close()
+ return ret
+f=cgi.FieldStorage()
+
+btime=""
+etime=""
+title=""
+chtxt=""
+type="res"
+###ここからiEPG用の読み出し
+if f.getfirst('station'):
+ station=f.getfirst('station')
+ chtxt=station2chtxt(station)
+###ここから外部からの読み出しの場合
+if f.getfirst('type'):
+ type=f.getfirst('type')
+if f.getfirst('title'):
+ title=f.getfirst('title')
+if f.getfirst('chtxt'):
+ chtxt=f.getfirst('chtxt')
+if f.getfirst('btime'):
+ btime=f.getfirst('btime')
+if f.getfirst('etime'):
+ etime=f.getfirst('etime')
+size=""
+if f.getfirst('size'):
+ size=f.getfirst('size')
+opts=""
+if f.getfirst('opts'):
+ opts=f.getfirst('opts')
+deltahour=""
+if f.getfirst('deltahour',""):
+ deltahour=f.getfirst('deltahour',"")
+deltaday=""
+if f.getfirst('deltaday',""):
+ deltaday=f.getfirst('deltaday',"")
+exect=""
+if f.getfirst('exec',""):
+ exect=f.getfirst('exec',"")
+
+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=htmdate.replace("<!--ch-value//-->",chtxt)
+htmdate=htmdate.replace("<!--title-value//-->",title)
+htmdate=htmdate.replace("<!--size-value//-->",size)
+htmdate=htmdate.replace("<!--opts-value//-->",opts)
+
+if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(exect=="yes"):
+ reserv(type, title, chtxt, btime, etime, deltahour, opts, deltaday)
+ htmdate=readRecFinisSimple()
+ exect=""
+#
+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.1.2</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");
+ function setType(value){
+ if (value=="rec"){
+ //alert("Selected "+value);
+ dijit.byId("deltaday").setDisabled(true);
+ dijit.byId("deltahour").setDisabled(true);
+ }else if (value=="key"){
+ //alert("Selected "+value);
+ dijit.byId("deltaday").setDisabled(true);
+ dijit.byId("deltahour").setDisabled(false);
+ }else if (value=="keyevery"){
+ //alert("Selected "+value);
+ dijit.byId("deltaday").setDisabled(false);
+ dijit.byId("deltahour").setDisabled(false);
+ }else if (value=="res"){
+ //alert("Selected "+value);
+ dijit.byId("deltaday").setDisabled(true);
+ dijit.byId("deltahour").setDisabled(true);
+ }
+
+ }
+ 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("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");
+ }
+ }
+ function init(){
+ setType("rec");
+ changeOpts();
+ changeSize();
+ //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.1.2</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="keyevery">隔日予約</option>
+ <option value="rec">最終予約</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"
+ dojoType="dijit.form.ValidationTextBox"
+ promptmessage="年-月-日 時間:分:秒"
+ value="<!--btime-value//-->"
+ regexp="\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}\:\d{2}">
+ </div>終了時刻
+ <div name="etime"
+ dojoType="dijit.form.ValidationTextBox"
+ promptmessage="年-月-日 時間:分:秒"
+ value="<!--etime-value//-->"
+ regexp="\d{4}\-\d{2}\-\d{2} \d{2}\:\d{2}\:\d{2}">
+ </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>
+ 録画サイズ
+ <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"
+ checked="checked" 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="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="yes"
+ style="display:none";>
+ </div>
+ </body>
+</html>
--- /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"/>
+ <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("dojo.data.ItemFileReadStore");
+ dojo.require("dojox.grid.Grid");
+ dojo.require("dojox.grid.compat._data.model");
+ var view = {
+
+ // 各セルの設定
+ cells: [[
+ {name: "時間", field: "time"}
+ ],[
+ {name: "タイトル", field: "ch[0].title"}
+
+ ],[
+ {name: "タイトル", field: "ch[1].title"}
+ ].[
+ {name: "タイトル", field: "ch[2].title"}
+ ]]
+ };
+ var layout=[view];
+ //dojo.addOnLoad(init);
+ </script>
+ </head>
+ <!-- テーマの読み込み -->
+ <body class="tundra">
+ <div dojoType="dojo.data.ItemFileReadStore"
+ jiId="jsonStore" url="schdule.json">
+ </div>
+ <div dojoType="dojox.grid.data.DojoData" jsId="model"
+ store="jsonStore" rowsPerPage="100">
+ </div>
+ <div id="grid" dojoType="dojox.Grid" model="model" structure="layout">
+ </div>
+</body>
+</html>