OSDN Git Service

begin to ready for implementing MySQL function.
[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;cgitb.enable()
7 import sqlite3
8 import os
9 import re
10 import datetime
11 import rec10web_dbSQLite
12 #cgitb.enable()
13 path=str(os.path.dirname(os.path.abspath(__file__)))+"/"
14 dbpath=path+"ch.db"
15 database=rec10web_dbSQLite.DB_SQLite(dbpath)
16 def getRecDate():
17     dl=database.select_all_rectime()
18     recdata="id,type,chtxt,title,btime,etime,deltaday,opt\n"
19     for d in dl:
20         id=d['id']
21         typet=d['type']
22         chtxt=d['chtxt']
23         title=d['title']
24         btime=d['btime']
25         etime=d['etime']
26         deltatime=d['deltatime']
27         deltaday=d['deltaday']
28         opt=d['opt']
29         if deltaday==None:
30             deltaday="なし"
31         elif deltaday=="":
32             deltaday="なし"
33         if opt==None:
34             opt="なし"
35         if typet=="res":
36             typet="一回予約"
37         elif typet=="key":
38             typet="検索予約"
39         elif typet=="keyevery":
40             typet="隔週予約"
41         elif typet=="res":
42             typet="録画最終"
43         elif typet=="grid":
44             typet="外部委託"
45         elif typet=="ts2avi":
46             typet="縁故予約"
47         elif typet=="b252ts":
48             typet="復号予約"
49         btime=btime[5:16]
50         etime=etime[5:16]
51         btime=btime.replace("-","/")
52         etime=etime.replace("-","/")
53         if btime[0:5]==etime[0:5]:
54             etime=etime[6:]
55         s="\""+str(id)+"\",\""+typet+"\",\""+chtxt+"\",\""+title+"\",\""+btime+"\",\""+etime+"\",\""+deltaday+"\",\""+opt+"\"\n"
56         s=str(id)+","+typet+","+chtxt+","+title+","+btime+","+etime+","+deltaday+","+opt+"\n"
57         recdata=recdata+s
58     f=open(path+"/recdatum.csv","w")
59     f.write(recdata)
60     f.close()
61 def getchtxt():
62     dl=database.select_all_chdata()
63     chopt=""
64     for bctype, ontv, chtxt, ch, csch ,updatetime in dl:
65         chdisplay=""
66         for bctype,channel,display in database.select_by_ontv_ch(ontv):
67             chdisplay=display
68         if chdisplay!="":
69             chopt=chopt+"<option  value="+chtxt+">"+chdisplay+"</option>\n                "
70     return chopt
71 def edit_date(id):
72     ret=database.select_by_id_rectime(id)
73     return ret
74
75 def reserv_recday(keyword,chtxt,btime,etime,deltatime,opt,deltaday,day):
76     """
77     dayは月曜日を1日曜日を7とした数字
78     """
79     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
80     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
81     dt=int(day)-bt.isoweekday()
82     if dt<0:
83         dt=dt+7
84     dbt=bt+datetime.timedelta(days=dt)
85     det=et+datetime.timedelta(days=dt)
86     btime=dbt.strftime("%Y-%m-%d %H:%M:%S")
87     etime=det.strftime("%Y-%m-%d %H:%M:%S")
88     return reserv("keyevery",keyword,chtxt,btime,etime,deltatime,opt,"7")
89 def reserv(type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
90     MaxT=2
91     MaxS=2
92     tsnum=database.count_schedule_rectime(btime,etime)
93     MaxT=MaxT-tsnum[0]
94     MaxS=MaxS-tsnum[1]
95     bctype=""
96     rett=""
97     bctypegetdb=database.select_by_chtxt_chdata(chtxt)
98     for bctypet,ontvt,chtxtt,cht,cscht,updatetimet in bctypegetdb:
99         bctype=bctypet
100     if (type=="rec") or (type=="res") or (type=="key") or (type=="keyevery"):
101         if bctype.find("cs")>-1:
102             MaxS=MaxS-1
103         elif bctype.find("bs")>-1:
104             MaxS=MaxS-1
105         elif bctype.find("te")>-1:
106             MaxT=MaxT-1
107     if MaxS>-1 and MaxT>-1:
108         database.add_rectime(type=type,chtxt=chtxt,title=keyword,btime=btime,etime=etime,deltatime=deltatime,deltaday=deltaday,opt=opt)
109     else:
110         rett="over"
111     return rett
112 def change_reserv(id,type,keyword,chtxt,btime,etime,deltatime,opt,deltaday):
113     """
114     idはテキスト
115     """
116     MaxT=2
117     MaxS=2
118     tsnum=database.count_schedule_rectime(btime,etime)
119     MaxT=MaxT-tsnum[0]
120     MaxS=MaxS-tsnum[1]
121     bctype=""
122     rett=""
123     for bctypet, chtxtt in database.select_by_chtxt_chdata(chtxt):
124         bctype=bctypet
125     if (type=="rec") or (type=="res") or (type=="key") or (type=="keyevery"):
126         if bctype.find("cs")>-1:
127             MaxS=MaxS-1
128         elif bctype.find("bs")>-1:
129             MaxS=MaxS-1
130         elif bctype.find("te")>-1:
131             MaxT=MaxT-1
132     if MaxS>-1 and MaxT>-1:
133         database.del_by_id_rectime(id)
134         database.add_rectime(type=type, chtxt=chtxt, title=keyword, btime=btime, etime=etime, deltatime=deltatime, deltaday=deltaday, opt=opt)
135     else:
136         rett="over"
137     return rett
138 def station2chtxt(station):
139     ret=""
140     for bctype, ontv, chtxt, ch, csch ,updatetime in database.select_by_station_chdata(station):
141         ret=chtxt
142     return ret
143 def station_name2chtxt(station):
144     ret=""
145     for bctype, ontv, chtxt, ch, csch ,updatetime in database.select_by_station_name_chdata(station):
146         ret=chtxt
147     return ret
148 def readHtmlSrcSimple():
149     f = open(path+'rswi.htm')
150     ret=f.read()
151     f.close()
152     return ret
153 def readHtmlEdit():
154     f = open(path+'rswi_edit.htm')
155     ret=f.read()
156     f.close()
157     return ret
158
159 def readRecFinisSimple():
160     f = open(path+'fin.htm')
161     ret=f.read()
162     f.close()
163     return ret
164 def readRecFinisOver():
165     f = open(path+'finover.htm')
166     ret=f.read()
167     f.close()
168     return ret
169 def readRecSchedule():
170     f = open(path+'schedule.htm')
171     ret=f.read()
172     f.close()
173     return ret
174 f=cgi.FieldStorage()
175
176 btime=""
177 etime=""
178 title=""
179 chtxt=""
180 type="res"
181 bt=""
182 getRecDate()
183 if f.getfirst('mode')=="schedule":
184     getRecDate()
185
186 ###ここからiEPG用の読み出し
187 if f.getfirst('station_name'):
188     station=f.getfirst('station_name')
189     chtxt=station_name2chtxt(station)
190 if f.getfirst('station'):
191     station=f.getfirst('station')
192     chtxt=station2chtxt(station)
193 ###ここから外部からの読み出しの場合
194 if f.getfirst('type'):
195     type=f.getfirst('type')
196 if f.getfirst('title'):
197     title=f.getfirst('title')
198 if f.getfirst('chtxt'):
199     chtxt=f.getfirst('chtxt')
200 if f.getfirst('btime'):
201     btime=f.getfirst('btime')
202     bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
203 if f.getfirst('etime'):
204     etime=f.getfirst('etime')
205     et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
206     if bt !="":
207         delt=et-bt
208         dt=delt.days*24*60*60+delt.seconds
209         if dt<0:
210             dd=datetime.timedelta(days=1)
211             et=et+dd
212             etime=et.strftime("%Y-%m-%d %H:%M:%S")
213         if dt<-1*24*60*60:
214             d1=datetime.datetime(bt.year,0,0)
215             d2=datetime.datetime(bt.year+1,0,0)
216             dd=d2-d1
217             et=et+dd
218             etime=et.strftime("%Y-%m-%d %H:%M:%S")
219         
220 size="S"
221 if f.getfirst('size'):
222     size=f.getfirst('size')
223 opts=""
224 if f.getfirst('opts'):
225     opts=f.getfirst('opts')
226 deltahour=""
227 if f.getfirst('deltahour',""):
228     deltahour=f.getfirst('deltahour',"")
229 deltaday=""
230 if f.getfirst('deltaday',""):
231     deltaday=f.getfirst('deltaday',"")
232 exect=""
233 if f.getfirst('exec',""):
234     exect=f.getfirst('exec',"")
235
236
237 htmdate= readHtmlSrcSimple()
238 htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
239 htmdate=htmdate.replace("<!--btime-value//-->",btime)
240 htmdate=htmdate.replace("<!--etime-value//-->",etime)
241 htmdate=htmdate.replace("<!--type-value//-->",type)
242 htmdate=htmdate.replace("<!--ch-value//-->",chtxt)
243 htmdate=htmdate.replace("<!--title-value//-->",title)
244 htmdate=htmdate.replace("<!--size-value//-->",size)
245 htmdate=htmdate.replace("<!--opts-value//-->",opts)
246
247
248 #ここから曜日検索の設定
249 if f.getfirst('type')=="keyday":
250     rett=""
251     dayt=f.getfirst('day_Mon')
252     if dayt:
253         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
254     dayt=f.getfirst('day_Tue')
255     if dayt:
256         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
257     dayt=f.getfirst('day_Wed')
258     if dayt:
259         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
260     dayt=f.getfirst('day_Thu')
261     if dayt:
262         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
263     dayt=f.getfirst('day_Fri')
264     if dayt:
265         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
266     dayt=f.getfirst('day_Sat')
267     if dayt:
268         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
269     dayt=f.getfirst('day_Sun')
270     if dayt:
271         rett=rett+reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
272
273     if rett=="":
274         htmdate=readRecFinisSimple()
275     else:
276         htmdate=readRecFinisOver()
277     chtxt=""
278     exect=""
279
280     
281
282 if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(exect=="yes"):
283     restxt=reserv(type, title, chtxt, btime, etime, deltahour, opts, deltaday)
284     if restxt=="":
285         htmdate=readRecFinisSimple()
286     elif restxt=="over":
287         htmdate=readRecFinisOver()
288     exect=""
289 #
290 if (chtxt != "")and(title != "")and(btime!="")and(etime!="")and(opts!="")and(re.search('edit-exec:',exect)):
291     editnum=exect.replace("edit-exec:","")
292     restxt=change_reserv(editnum,type, title, chtxt, btime, etime, deltahour, opts, deltaday)
293     if restxt=="":
294         htmdate=readRecFinisSimple()
295     elif restxt=="over":
296         htmdate=readRecFinisOver()
297     exect=""
298 if exect=="schedule":
299     htmdate=readRecSchedule()
300 if re.search('edit:',exect):
301     editnum=exect.replace("edit:","")
302     htmdate= readHtmlEdit()
303     iddata=edit_date(editnum)
304     htmdate=htmdate.replace("<!--text_for_replace_chtxt_input//-->",getchtxt())
305     htmdate=htmdate.replace("<!--ch-value//-->",iddata["chtxt"])
306     htmdate=htmdate.replace("<!--btime-value//-->",iddata["btime"])
307     htmdate=htmdate.replace("<!--etime-value//-->",iddata["etime"])
308     htmdate=htmdate.replace("<!--type-value//-->",iddata["type"])
309     htmdate=htmdate.replace("<!--ch-value//-->",iddata["chtxt"])
310     htmdate=htmdate.replace("<!--title-value//-->",iddata["title"])
311     htmdate=htmdate.replace("<!--size-value//-->",size)
312     htmdate=htmdate.replace("<!--opts-value//-->",iddata["opt"])
313     htmdate=htmdate.replace("<!--exec-value//-->","edit-exec:"+editnum)
314 print "Content-Type: text/html\n"
315 print htmdate
316