3 # Rec10 TS Recording Tools
4 # Copyright (C) 2009 Yukikaze
7 import rec10web_dbMySQL
15 path = str(os.path.dirname(os.path.abspath(__file__))) + "/"
16 confp = ConfigParser.SafeConfigParser()
19 if (os.path.exists(os.path.join(path,Conf))):
20 cpath=os.path.join(path,Conf)
21 elif (os.path.exists(os.path.join("/etc/rec10",Conf))):
22 cpath=os.path.join("/etc/rec10",Conf)
23 elif (os.path.exists(os.path.join("/etc",Conf))):
24 cpath=os.path.join("/etc",Conf)
28 f = cgi.FieldStorage()
31 return confp.get('path', string)
32 def getdbpath(string):
34 return confp.get('db', string)
37 if getdbpath('db') == 'MySQL':
38 dbn = getdbpath("mysql_dbname")
39 dbh = getdbpath("mysql_host")
40 dbu = getdbpath("mysql_user")
41 dbpwd = getdbpath("mysql_passwd")
42 dbport = int(getdbpath("mysql_port"))
43 retdb = rec10web_dbMySQL.DB_MySQL(dbname=dbn, host=dbh, user=dbu, passwd=dbpwd, port=dbport)
46 dl = database.select_all_timeline()
47 recdata = "id,type,chtxt,title,btime,etime,deltaday,opt\n"
56 deltatime = d['deltatime']
57 deltaday = d['deltaday']
65 if typet == "reserve_flexible":
67 elif typet == "search_today":
69 elif typet == "search_everyday":
71 elif typet == "reserve_fixed":
75 elif typet == "convert_ts_mp4":
77 elif typet == "convert_b25_ts":
82 btime = btime.replace("-", "/")
83 etime = etime.replace("-", "/")
84 if btime[0:5] == etime[0:5]:
86 s = "\"" + str(id) + "\",\"" + typet + "\",\"" + chtxt + "\",\"" + title + "\",\"" + btime + "\",\"" + etime + "\",\"" + deltaday + "\",\"" + opt + "\"\n"
87 s = str(id) + "," + typet + "," + chtxt + "," + title + "," + btime + "," + etime + "," + deltaday + "," + opt + "\n"
89 f = open(path + "/recdatum.csv", "w")
90 f.write(recdata.encode('utf-8'))
93 dl = database.select_all_iepg()
94 recdata = "id,name,chtxt\n"
98 s = s + d[0] + "," + d[1] + "," + d[2] + "\n"
100 f = open(path + "/iepgdatum.csv", "w")
101 f.write(recdata.encode('utf-8'))
104 dl = database.select_all_epg_ch()
106 for bctype, ontv, chtxt, chname, ch, csch, updatetime in dl:
107 chopt = chopt + "<option value=" + chtxt + ">" + chname + "</option>\n "
110 ret = database.select_by_id_timeline(id)
112 def reserv_recday(keyword, chtxt, btime, etime, deltatime, opt, deltaday, day):
116 #bt=datetime.datetime.strptime(btime,"%Y-%m-%d %H:%M:%S")
117 #et=datetime.datetime.strptime(etime,"%Y-%m-%d %H:%M:%S")
118 bt = datetime.datetime(*time.strptime(btime, "%Y-%m-%d %H:%M:%S")[:-3])
119 et = datetime.datetime(*time.strptime(etime, "%Y-%m-%d %H:%M:%S")[:-3])
120 dt = int(day)-bt.isoweekday()
123 dbt = bt + datetime.timedelta(days=dt)
124 det = et + datetime.timedelta(days=dt)
125 btime = dbt.strftime("%Y-%m-%d %H:%M:%S")
126 etime = det.strftime("%Y-%m-%d %H:%M:%S")
127 return reserv("keyevery", keyword, chtxt, btime, etime, deltatime, opt, "7")
128 def reserv(type, keyword, chtxt, btime, etime, deltatime, opt, deltaday):
131 tsnum = count_schedule(btime, etime)
136 bctypegetdb = database.select_by_chtxt_epg_ch(chtxt)
137 for bctypet, ontvt, chtxtt, cht, cscht, updatetimet in bctypegetdb:
139 if (type == "reserve_fixed") or (type == "reserve_flexible") or (type == "search_today") or (type == "search_everyday"):
140 if bctype.find("cs") > -1:
142 elif bctype.find("bs") > -1:
144 elif bctype.find("te") > -1:
146 if MaxS > -1 and MaxT > -1:
147 database.add_timeline(type=type, chtxt=chtxt, title=keyword, btime=btime, etime=etime, deltatime=deltatime, deltaday=deltaday, opt=opt)
152 def count_schedule(btime, etime):
154 return rec num (int return[0]:TE /int return[1]:BS/CS)
157 #xt=datetime.datetime(*time.strptime(x,"%Y-%m-%d %H:%M:%S")[:-3])
158 #yt=datetime.datetime(*time.strptime(y,"%Y-%m-%d %H:%M:%S")[:-3])
167 dls = database.schedule_timeline(btime, etime)
169 btd = datetime.datetime(*time.strptime(btime, "%Y-%m-%d %H:%M:%S")[:-3])
170 etd = datetime.datetime(*time.strptime(etime, "%Y-%m-%d %H:%M:%S")[:-3])
172 dd1 = datetime.datetime(*time.strptime(dl[4], "%Y-%m-%d %H:%M:%S")[:-3])
173 dd2 = datetime.datetime(*time.strptime(dl[5], "%Y-%m-%d %H:%M:%S")[:-3])
180 times = list(set(times))
184 for i in xrange(0, len(times)-2, 1):
187 btime1 = bt1.strftime("%Y-%m-%d %H:%M:%S")
188 etime1 = et1.strftime("%Y-%m-%d %H:%M:%S")
189 ret1 = database.count_schedule_timeline(btime1, etime1)
190 if retcount[0] < ret1[0]:
191 retcount[0] = ret1[0]
192 if retcount[1] < ret1[1]:
193 retcount[1] = ret1[1]
195 def change_reserv(id, type, keyword, chtxt, btime, etime, deltatime, opt, deltaday):
201 tsnum = count_schedule(btime, etime)
206 for dl in database.select_by_chtxt_epg_ch(chtxt):
208 if (type == "reserve_fixed") or (type == "reserve_flexible") or (type == "search_today") or (type == "search_everyday"):
209 if bctype.find("cs") > -1:
211 elif bctype.find("bs") > -1:
213 elif bctype.find("te") > -1:
215 if MaxS > -1 and MaxT > -1:
216 database.del_by_id_timeline(id)
217 database.add_timeline(type=type, chtxt=chtxt, title=keyword, btime=btime, etime=etime, deltatime=deltatime, deltaday=deltaday, opt=opt)
221 def station2chtxt(station):
227 sta = database.select_by_station_iepg(station)
233 def readHtmlSrcSimple():
234 f = open(path + 'rswi.htm')
237 return unicode(ret,'utf-8')
238 def readRecFinisSimple():
239 f = open(path + 'fin.htm')
242 return unicode(ret,'utf-8')
243 def readRecSchedule():
244 f = open(path + 'schedule.htm')
247 return unicode(ret,'utf-8')
249 f = open(path + 'iepg_add.htm')
252 return unicode(ret,'utf-8')
254 f = open(path + 'iepg_show.htm')
257 return unicode(ret,'utf-8')
258 def get_fin(string, refreshurl):
259 htmdate = readRecFinisSimple()
260 htmdate = htmdate.replace('<!--text_for_replace_fin//-->', string)
261 htmdate = htmdate.replace('<!--url_for_replace_fin//-->', refreshurl)
263 def mode_iepg_add(station):
264 htmdate = readiEPGadd()
265 htmdate = htmdate.replace("<!--text_for_replace_chtxt_input//-->", getchtxt())
266 htmdate = htmdate.replace("<!--ch-value//-->", "")
267 htmdate = htmdate.replace("<!--iepg_title-value//-->", station)
270 s = u"epgデータの追加を完了しました。<br>\n録画を行う場合はもう一度おねがいします。<br>"
271 u = "rec10web.py?exec=iepg-show"
273 def mode_iepg_show():
274 htmdate = readiEPGshow()
277 s = u"epgデータを削除しました。"
278 u = "rec10web.py?exec=iepg-show"
280 def mode_iepg_del_miss():
281 s = u"epgデータの削除に失敗しました。"
282 u = "rec10web.py?exec=iepg-show"
285 htmdate = readRecSchedule()
288 s = u"予約が終了しました。移動します。"
289 u = "rec10web.py?exec=schedule"
292 s = u"最大予約可能数を超えています"
293 u = "rec10web.py?exec=schedule"
296 htmdate = readHtmlSrcSimple()
297 htmdate = htmdate.replace("<!--exec-value//-->", "yes")
301 u = "rec10web.py?exec=schedule"
303 def mode_edit_rec10web(tasknum):
304 #editnum=exect.replace("edit:","")
305 htmdate = readHtmlSrcSimple()
306 iddata = edit_date(tasknum)
307 htmdate = htmdate.replace("<!--text_for_replace_chtxt_input//-->", getchtxt())
308 htmdate = htmdate.replace("<!--ch-value//-->", iddata['chtxt'])
309 htmdate = htmdate.replace("<!--btime-value//-->", iddata['btime'])
310 htmdate = htmdate.replace("<!--etime-value//-->", iddata['etime'])
311 htmdate = htmdate.replace("<!--type-value//-->", iddata['type'])
312 htmdate = htmdate.replace("<!--ch-value//-->", iddata['chtxt'])
313 htmdate = htmdate.replace("<!--title-value//-->", iddata['title'])
314 htmdate = htmdate.replace("<!--size-value//-->", size)
315 htmdate = htmdate.replace("<!--opts-value//-->", iddata["opt"])
316 htmdate = htmdate.replace("<!--exec-value//-->", "edit-exec:" + tasknum)
319 editnum = exect.replace("edit:", "")
320 htmdate = readHtmlSrcSimple()
321 iddata = edit_date(editnum)
322 htmdate = htmdate.replace("<!--text_for_replace_chtxt_input//-->", getchtxt())
323 htmdate = htmdate.replace("<!--ch-value//-->", iddata['chtxt'])
324 htmdate = htmdate.replace("<!--btime-value//-->", iddata['btime'])
325 htmdate = htmdate.replace("<!--etime-value//-->", iddata['etime'])
326 htmdate = htmdate.replace("<!--type-value//-->", iddata['type'])
327 htmdate = htmdate.replace("<!--ch-value//-->", iddata['chtxt'])
328 htmdate = htmdate.replace("<!--title-value//-->", iddata['title'])
329 htmdate = htmdate.replace("<!--size-value//-->", size)
330 htmdate = htmdate.replace("<!--opts-value//-->", iddata["opt"])
331 htmdate = htmdate.replace("<!--exec-value//-->", "edit-exec:" + editnum)
333 dbpath = path + "ch.db"
339 type = "reserve_flexible"
344 if f.getfirst('station_name'):
345 station = f.getfirst('station_name')
346 chtxt = station2chtxt(station)
349 station_name = station
351 if f.getfirst('station'):
352 station = f.getfirst('station')
353 chtxt = station2chtxt(station)
356 station_name = station
359 if f.getfirst('type'):
360 type = unicode(f.getfirst('type'),'utf-8')
361 if f.getfirst('title'):
362 title = unicode(f.getfirst('title'),'utf-8')
363 if f.getfirst('chtxt'):
364 chtxt = unicode(f.getfirst('chtxt'),'utf-8')
365 if f.getfirst('btime'):
366 btime = unicode(f.getfirst('btime'),'utf-8')
367 bt = datetime.datetime(*time.strptime(btime, "%Y-%m-%d %H:%M:%S")[:-3])
368 if f.getfirst('etime'):
369 etime = unicode(f.getfirst('etime'),'utf-8')
370 et = datetime.datetime(*time.strptime(etime, "%Y-%m-%d %H:%M:%S")[:-3])
373 dt = delt.days * 24 * 60 * 60 + delt.seconds
375 dd = datetime.timedelta(days=1)
377 etime = unicode(et.strftime("%Y-%m-%d %H:%M:%S"),'utf-8')
378 if dt < -1 * 24 * 60 * 60:
379 d1 = datetime.datetime(bt.year, 0, 0)
380 d2 = datetime.datetime(bt.year + 1, 0, 0)
383 etime = unicode(et.strftime("%Y-%m-%d %H:%M:%S"),'utf-8')
385 if f.getfirst('size'):
386 size = f.getfirst('size')
388 if f.getfirst('opts'):
389 opts = f.getfirst('opts')
391 if f.getfirst('deltahour', ""):
392 deltahour = f.getfirst('deltahour', "")
394 if f.getfirst('deltaday', ""):
395 deltaday = f.getfirst('deltaday', "")
397 if f.getfirst('exec', ""):
398 exect = f.getfirst('exec', "")
399 if exect == "schedule":
404 elif re.search('edit:', exect):
406 elif re.search('edit-exec:', exect):
408 elif exect == "change":
412 elif exect == "iepg-add":
414 elif exect == "iepg-show":
416 elif exect == "iepg-add_yes":
417 mode = "iepg-add-yes"
418 elif exect == "iepg-del":
420 htmdate = mode_normal()
421 htmdate = htmdate.replace("<!--text_for_replace_chtxt_input//-->", getchtxt())
422 htmdate = htmdate.replace("<!--btime-value//-->", btime)
423 htmdate = htmdate.replace("<!--etime-value//-->", etime)
424 htmdate = htmdate.replace("<!--type-value//-->", type)
425 htmdate = htmdate.replace("<!--ch-value//-->", chtxt)
426 htmdate = htmdate.replace("<!--title-value//-->", title)
427 htmdate = htmdate.replace("<!--size-value//-->", size)
428 htmdate = htmdate.replace("<!--opts-value//-->", opts)
430 if f.getfirst('type') == "keyday":
432 dayt = f.getfirst('day_Mon')
434 rett = rett + reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
435 dayt = f.getfirst('day_Tue')
437 rett = rett + reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
438 dayt = f.getfirst('day_Wed')
440 rett = rett + reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
441 dayt = f.getfirst('day_Thu')
443 rett = rett + reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
444 dayt = f.getfirst('day_Fri')
446 rett = rett + reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
447 dayt = f.getfirst('day_Sat')
449 rett = rett + reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
450 dayt = f.getfirst('day_Sun')
452 rett = rett + reserv_recday(title, chtxt, btime, etime, deltahour, opts, deltaday, dayt)
454 htmdate = mode_recfin()
456 htmdate = mode_recover()
461 if mode == "schedule":
462 htmdate = mode_schedule()
464 htmdate = mode_edit()
465 elif mode == "iepg-add":
466 htmdate = mode_iepg_add(station_name)
467 elif mode == "iepg-add-yes":
472 if f.getfirst('iepg_station') and f.getfirst('iepg_chtxt'):
473 database.add_iepg(f.getfirst('iepg_station'), f.getfirst('iepg_chtxt'))
474 htmdate = mode_iepg_fin()
475 elif mode == "iepg-show":
477 htmdate = mode_iepg_show()
478 elif mode == "iepg-del":
479 s = f.getfirst('iepgdelnum')
482 for st in s.split(","):
484 database.del_by_id_iepg(st)
485 htmdate = mode_iepg_del()
487 # htmdate=mode_iepg_del_miss()
488 elif mode == "edit-rec10":
489 s = f.getfirst('tasknum')
491 htmdate = mode_edit_rec10web(s.split(",")[0])
493 s = f.getfirst('tasknum')
498 database.del_by_id_timeline(st)
500 elif mode == "edit-exec":
501 if (chtxt != "")and(title != "")and(btime != "")and(etime != "")and(opts != ""):
502 editnum = exect.replace("edit-exec:", "")
503 restxt = change_reserv(editnum, type, title, chtxt, btime, etime, deltahour, opts, deltaday)
505 htmdate = mode_recfin()
506 elif restxt == "over":
507 htmdate = mode_recover()
509 htmdate = mode_recfin()
512 if (chtxt != "")and(title != "")and(btime != "")and(etime != "")and(opts != ""):
513 restxt = reserv(type, title, chtxt, btime, etime, deltahour, opts, deltaday)
515 htmdate = mode_recfin()
516 elif restxt == "over":
517 htmdate = mode_recover()
519 htmdate = mode_recfin()
520 print "Content-Type: text/html"
521 print htmdate.encode('utf-8')