OSDN Git Service

correct rectask over check.
[rec10/rec10-git.git] / Rec10WEB / trunk / src / rec10web.py
1 #!/usr/bin/python
2 # coding: UTF-8
3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
5 import cgi
6 import cgitb
7 import sqlite3
8 import os
9 import datetime
10 cgitb.enable()
11 path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
12 dbpath=path+"ch.db"
13
14 def getRecDate():
15     db=sqlite3.connect(dbpath)
16     recdata="\"id\",\"type\",\"chtxt\",\"title\",\"btime\",\"etime\",\"deltaday\",\"opt\"\n"
17     recdata="id,type,chtxt,title,btime,etime,deltaday,opt\n"
18     for id, typet, chtxt, title, btime, etime, deltatime ,deltaday ,opt in db.execute("SELECT id, type, chtxt, title, btime, etime, deltatime ,deltaday ,opt FROM rectime"):
19         if deltaday==None:
20             deltaday="なし"
21         elif deltaday=="":
22             deltaday="なし"
23         if opt==None:
24             opt="なし"
25         if typet=="res":
26             typet="一回予約"
27         elif typet=="key":
28             typet="検索予約"
29         elif typet=="keyevery":
30             typet="隔週予約"
31         elif typet=="res":
32             typet="録画最終"
33         elif typet=="grid":
34             typet="外部委託"
35         elif typet=="ts2avi":
36             typet="EncQue"
37         btime=btime[5:16]
38         etime=etime[5:16]
39         btime=btime.replace("-","/")
40         etime=etime.replace("-","/")
41         if btime[0:5]==etime[0:5]:
42             etime=etime[6:]
43         s="\""+str(id)+"\",\""+typet+"\",\""+chtxt+"\",\""+title+"\",\""+btime+"\",\""+etime+"\",\""+deltaday+"\",\""+opt+"\"\n"
44         s=str(id)+","+typet+","+chtxt+","+title+","+btime+","+etime+","+deltaday+","+opt+"\n"
45         recdata=recdata+s
46     f=open(path+"/recdatum.csv","w")
47     f.write(recdata)
48     f.close()
49 def getchtxt():
50     db=sqlite3.connect(dbpath)
51     chopt=""
52     for bctype, ontv, chtxt, ch, csch ,updatetime in db.execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata"):
53         chdisplay=""
54         for bctype,channel,display in db.execute("SELECT bctype,channel,display FROM ch WHERE channel=\""+ontv+"\""):
55             chdisplay=display
56         chopt=chopt+"<option  value="+chtxt+">"+display+"</option>\n                "
57     db.close()
58     return chopt
59 def reserv_recday(keyword,chtxt,btime,etime,deltatime,opt,deltaday,day):
60     """
61     dayは月曜日を1日曜日を7とした数字
62     """
63     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
64     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
65     dt=int(day)-bt.isoweekday()
66     if dt<0:
67         dt=dt+7
68     dbt=bt+datetime.timedelta(days=dt)
69     det=et+datetime.timedelta(days=dt)
70     btime=dbt.strftime("%Y-%m-%d %H:%M:%S")
71     etime=det.strftime("%Y-%m-%d %H:%M:%S")
72     return reserv("keyevery",keyword,chtxt,btime,etime,deltatime,opt,"7")
73 def reserv(type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
74     MaxT=2
75     MaxS=2
76     db=sqlite3.connect(dbpath)
77     bt="\'"+btime+"\'"
78     et="\'"+etime+"\'"
79     dbexe="SELECT type,chdata.bctype,rectime.chtxt,rectime.title FROM rectime INNER JOIN chdata ON rectime.chtxt=chdata.chtxt"
80     #dbexe="SELECT bctype,chtxt,title FROM rectime INNER JOIN chdata ON rectime.chtxt=chdata.chtxt"
81
82     dbexe=dbexe+" WHERE NOT( ( rectime.etime <= "+bt+" ) OR ( rectime.btime >= "+et+" ) )"
83     for typet,bctypet, chtxtt, titlet in db.execute(dbexe):
84         if (typet=="rec") or (typet=="res") or (typet=="key") or (typet=="keyevery"):
85             if bctypet.find("cs")>-1:
86                 MaxS=MaxS-1
87             elif bctypet.find("bs")>-1:
88                 MaxS=MaxS-1
89             elif bctypet.find("te")>-1:
90                 MaxT=MaxT-1
91     bctype=""
92     rett=""
93     for bctypet, chtxtt in db.execute("SELECT bctype,chtxt FROM chdata WHERE chtxt=\'"+chtxt+"\'"):
94         bctype=bctypet
95     if (type=="rec") or (type=="res") or (type=="key") or (type=="keyevery"):
96         if bctype.find("cs")>-1:
97             MaxS=MaxS-1
98         elif bctype.find("bs")>-1:
99             MaxS=MaxS-1
100         elif bctype.find("te")>-1:
101             MaxT=MaxT-1
102     if MaxS>-1 and MaxT>-1:
103         recline="\""+type+"\",\""+chtxt+"\",\""+keyword+"\",datetime(\""+btime+"\"),datetime(\""+etime+"\"),\""+deltatime+"\",\""+opt+"\",\""+deltaday+"\""
104         #print recline
105         db.execute('insert into rectime ("type","chtxt","title","btime","etime","deltatime","opt","deltaday") values ('+recline+')')
106         db.commit()
107     else:
108         rett="over"
109     db.close()
110     return rett
111 def station2chtxt(station):
112     db=sqlite3.connect(dbpath)
113     ret=""
114     for bctype, ontv, chtxt, ch, csch ,updatetime in db.execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE station=\""+station+"\""):
115         ret=chtxt
116     db.close()
117     return ret
118 def station_name2chtxt(station):
119     db=sqlite3.connect(dbpath)
120     ret=""
121     for bctype, ontv, chtxt, ch, csch ,updatetime in db.execute("SELECT bctype,ontv,chtxt,ch,csch,updatetime FROM chdata WHERE station_name=\""+station+"\""):
122         ret=chtxt
123     db.close()
124     return ret
125 def readHtmlSrcSimple():
126     f = open(path+'rswi.htm')
127     ret=f.read()
128     f.close()
129     return ret
130
131 def readRecFinisSimple():
132     f = open(path+'fin.htm')
133     ret=f.read()
134     f.close()
135     return ret
136 def readRecFinisOver():
137     f = open(path+'finover.htm')
138     ret=f.read()
139     f.close()
140     return ret
141 def readRecSchedule():
142     f = open(path+'schedule.htm')
143     ret=f.read()
144     f.close()
145     return ret
146 f=cgi.FieldStorage()
147
148 btime=""
149 etime=""
150 title=""
151 chtxt=""
152 type="res"
153 bt=""
154 getRecDate()
155 if f.getfirst('mode')=="schedule":
156     getRecDate()
157
158 ###ここからiEPG用の読み出し
159 if f.getfirst('station_name'):
160     station=f.getfirst('station_name')
161     chtxt=station_name2chtxt(station)
162 if f.getfirst('station'):
163     station=f.getfirst('station')
164     chtxt=station2chtxt(station)
165 ###ここから外部からの読み出しの場合
166 if f.getfirst('type'):
167     type=f.getfirst('type')
168 if f.getfirst('title'):
169     title=f.getfirst('title')
170 if f.getfirst('chtxt'):
171     chtxt=f.getfirst('chtxt')
172 if f.getfirst('btime'):
173     btime=f.getfirst('btime')
174     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
175 if f.getfirst('etime'):
176     etime=f.getfirst('etime')
177     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
178     if bt !="":
179         delt=et-bt
180         dt=delt.days*24*60*60+delt.seconds
181         if dt<0:
182             dd=datetime.timedelta(days=1)
183             et=et+dd
184             etime=et.strftime("%Y-%m-%d %H:%M:%S")
185         if dt<-1*24*60*60:
186             d1=datetime.datetime(bt.year,0,0)
187             d2=datetime.datetime(bt.year+1,0,0)
188             dd=d2-d1
189             et=et+dd
190             etime=et.strftime("%Y-%m-%d %H:%M:%S")
191         
192 size="S"
193 if f.getfirst('size'):
194     size=f.getfirst('size')
195 opts=""
196 if f.getfirst('opts'):
197     opts=f.getfirst('opts')
198 deltahour=""
199 if f.getfirst('deltahour',""):
200     deltahour=f.getfirst('deltahour',"")
201 deltaday=""
202 if f.getfirst('deltaday',""):
203     deltaday=f.getfirst('deltaday',"")
204 exect=""
205 if f.getfirst('exec',""):
206     exect=f.getfirst('exec',"")
207
208
209 htmdate= readHtmlSrcSimple()
210 htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
211
212 htmdate=htmdate.replace("<!--btime-value//-->",btime)
213 htmdate=htmdate.replace("<!--etime-value//-->",etime)
214 htmdate=htmdate.replace("<!--type-value//-->",type)
215 htmdate=htmdate.replace("<!--ch-value//-->",chtxt)
216 htmdate=htmdate.replace("<!--title-value//-->",title)
217 htmdate=htmdate.replace("<!--size-value//-->",size)
218 htmdate=htmdate.replace("<!--opts-value//-->",opts)
219
220
221 #ここから曜日検索の設定
222 if f.getfirst('type')=="keyday":
223     rett=""
224     dayt=f.getfirst('day_Mon')
225     if dayt:
226         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
227     dayt=f.getfirst('day_Tue')
228     if dayt:
229         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
230     dayt=f.getfirst('day_Wed')
231     if dayt:
232         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
233     dayt=f.getfirst('day_Thu')
234     if dayt:
235         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
236     dayt=f.getfirst('day_Fri')
237     if dayt:
238         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
239     dayt=f.getfirst('day_Sat')
240     if dayt:
241         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
242     dayt=f.getfirst('day_Sun')
243     if dayt:
244         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
245
246     if rett=="":
247         htmdate=readRecFinisSimple()
248     else:
249         htmdate=readRecFinisOver()
250     chtxt=""
251     exect=""
252
253     
254
255 if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(exect=="yes"):
256     restxt=reserv(type, title, chtxt, btime, etime, deltahour, opts, deltaday)
257     if restxt=="":
258         htmdate=readRecFinisSimple()
259     elif restxt=="over":
260         htmdate=readRecFinisOver()
261     exect=""
262 #
263 if exect=="schedule":
264     htmdate=readRecSchedule()
265 print htmdate
266