OSDN Git Service

edit mode
authorgn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Sat, 4 Jul 2009 01:16:17 +0000 (01:16 +0000)
committergn64_jp <gn64_jp@4e526526-5e11-4fc0-8910-f8fd03428081>
Sat, 4 Jul 2009 01:16:17 +0000 (01:16 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/rec10@65 4e526526-5e11-4fc0-8910-f8fd03428081

Rec10WEB/trunk/src/rec10web.py
Rec10WEB/trunk/src/rswi_edit.htm [new file with mode: 0644]

index 1867bcf..82320aa 100644 (file)
@@ -6,6 +6,7 @@ import cgi
 import cgitb
 import sqlite3
 import os
+import re
 import datetime
 cgitb.enable()
 path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
@@ -56,6 +57,28 @@ def getchtxt():
         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とした数字
@@ -108,6 +131,50 @@ def reserv(type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
         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=""
@@ -127,6 +194,11 @@ def readHtmlSrcSimple():
     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')
@@ -208,7 +280,6 @@ if 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)
@@ -260,7 +331,30 @@ if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(exe
         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
 
diff --git a/Rec10WEB/trunk/src/rswi_edit.htm b/Rec10WEB/trunk/src/rswi_edit.htm
new file mode 100644 (file)
index 0000000..4a57aa7
--- /dev/null
@@ -0,0 +1,421 @@
+
+
+<!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>