#--------------------------------------------------- # クラス設計 #--------------------------------------------------- #---- 時刻補正ファイル $adjust_file = "/home/radio_server/system/time_adjust.txt" #---------------------------------- # 予約アイテムクラス # class RecordItem #------------------------------------- #----- 初期化時パラメータ設定 # line = 録音予約データ一つ分 def initialize(line) @item_val = line.split @item_val[2] = @item_val[2].to_i @item_val[4] = @item_val[4].to_i @item_val[3] =~ /([0-9]+):([0-9]+)/ @item_val[5] = $1.to_i @item_val[6] = $2.to_i # --- オリジナル予約データも保存 @item_org = line # --- 時間補正の取り込み @rec_adjust = 0 if File::exist?($adjust_file) #-- ズレ時間幅の読み込み File::foreach($adjust_file) do |line| if (line =~ /^[\s\t]*$/) || (line =~ /^#/) next end @rec_adjust = line.to_i end end end #------------------------------------- #----- 最も近い未来の放送時刻を返す(sec) def onair #--- 現在の時刻 nowtime = Time::now nowtime -= @rec_adjust #--- 時間差 ad_d = 0 nt = (((nowtime.hour * 60) + nowtime.min) * 60) + nowtime.sec it = (((@item_val[5] * 60) + @item_val[6]) * 60) if nt > it dt = (24*60*60 + it) - nt ad_d = 1 else dt = it - nt end #--- 週から何日離れているかを計算 if nowtime.wday > (@item_val[2] - ad_d) dw = ((@item_val[2] - ad_d + 7) - nowtime.wday) * (24 * 60 * 60) else dw = (@item_val[2] - ad_d - nowtime.wday) * (24 * 60 * 60) end (dw + dt) end #------------------------------------- #----- 現在録音中の番組であるかどうか def recnow? ret = false #--- 現在の時刻 nowtime = Time::now nowtime -= @rec_adjust #--- 時間差 ad_d = 0 nt = (((nowtime.hour * 60) + nowtime.min) * 60) + nowtime.sec it = (((@item_val[5] * 60) + @item_val[6]) * 60) if it > nt dt = (24*60*60 + nt) - it ad_d = 1 else dt = nt - it end #--- 週から何日離れているかを計算 if nowtime.wday > (@item_val[2] - ad_d) dw = ((@item_val[2] - ad_d + 7) - nowtime.wday) * (24 * 60 * 60) else dw = (@item_val[2] - ad_d - nowtime.wday) * (24 * 60 * 60) end #--- 開始時間からどれくらい離れているか dsec = (dw + dt) # if dsec < (@item_val[4] * 60) ret = true end # ret end #------------------------------------- #----- ラジオのタイトルを返す def radio_fulltitle @item_val[0] end #------------------------------------- #----- ラジオのファイル名サフィックスを返す def radio_title @item_val[1] end #------------------------------------- #----- ラジオの放送曜日を返す def radio_week @item_val[2] end #------------------------------------- #----- ラジオの放送時間を返す(min) def radio_length @item_val[4] end #------------------------------------- #----- ラジオの開始時間を返す(min) def radio_time (@item_val[5] * 60) + @item_val[6] end #------------------------------------- #----- オリジナルの予約コマンド def radio_line @item_org end end #---------------------------------- # 録音予約リストクラス # class RecordList #------------------------------------- #----- 初期化時パラメータ設定 # listname は録音リストのファイル名 def initialize(listname) unless File::exist?(listname) print "listfile not found. ("+listname+")\n" exit end @item = [] File::foreach(listname) do |line| if (line =~ /^[\s\t]*$/) || (line =~ /^#/) next end @item.push(RecordItem.new(line)); end end #------------------------------------- #----- 最も近い番組を返す def nearest near = (24*60*60*7) @item.each do |pitem| if near > pitem.onair near = pitem.onair @nitem = pitem end end # -- nitem = 最も放送に近い番組 @nitem end end