« | »

2012.02.18

epgrecその後…. (転記)

epgrecの本家の方も一応 2010.03.22版で完了なのかなぁ

うちは新しいバージョンの機能は必要ないのでずっと古い 2009.08.14版に手を入れながら使ってます。そろそろ HWも更新時期に来てるのし、概ね必要なものは組み込んだので次に備えて現在の状態を備忘録とアーカイブを兼ねて記録しておこう。
取り敢えず、

a. i-mode用の録画予約
b. ディスク残量と予約時間の合計表示
c. チャンネルスキップ
d. mediatobmとの連携強化
e. 録画済みがあまりにも多くなってしまって一覧表示に時間がかかるので、初期表示を直近の2週間に絞り込む。

は既に書いたので、それ以降新たに追加した機能は…

      1. うっかり間違って娘の録画ファイルを消してしまって、エラく怒られたので、安易に削除できないように

削除ロック

      をできるようにする。
      2. 誰が録画登録したかわからないので整理がしにくいから録画予約/録画済み一覧にユーザー名を入れる。
      録画済みファイルを整理しようと思っても誰が録画したのか既に分からなくなっていた。整理できないじゃん。
      3. すでに複数のディスクにまたがって録画済みファイルがたまっているので録画済み一覧から検索~削除 / 再生まで一元でできるようにする。
    4. 番組表の表示が遅いので indexを構築する。

とまぁこんな感じか。
特に 1. の録画済みファイルの「削除ロック」はメーカーの録画機なら必ず付いている機能だし、何によりもロックされてたら消せないと言うことで、もう怒られることもないかと。酔っぱらってるとよくいらんことして怒られるのよねぇ。2.は運用上絶対にいるなぁと思っていたし、3. 4.はうちだけだろうけど使い勝手がもう少し上がるかな。
メーカー製の録画機ではできないことでもちまちまと改良していけるのは LAMP環境ならではだな。

まずは 1.の録画ファイルに削除できないようにロックを掛けるから。
削除ロックは、該当する録画ファイルの「削除ボタン」を録画済み一覧から削除することで実現する。ロックされているファイルには削除ボタンの代りに「ロック解除」ボタンを表示するようにしておくことで、安易な削除を回避できる。言葉で書くより添付の図を見た方が一目瞭然か….
まず、録画ファイルの管理はデータベースの Recorder_reserveTblになるので、これに filelockと言うカラムを追加して、フラグの ON/OFFで表示を制御するようにする。
alter table Recorder_channelTbl add filelock smallint(1) default 0;
default 0で削除可能、0以外でロック。ここでは’1′でロックとしておく。

次に recordedTable.phpの修正。52行目あたりの
foreach ( $rvs as $r ) {
のループの中で各種パラメータを受け取っているので
$arr[‘mode’] = $RECORD_MODE[$r->mode][‘name’];
の下に
$arr[‘filelock’] = $r->filelock;
を追加する。

最後に、録画済み一覧のテンプレート templates/recordedTable.html の修正。
まずは、ロック/ロック解除の functionを追加。
dialog:functionと editdialog:functionの間に

    lockfile:function(id, title){
      $('#floatBox4Dialog').dialog({title:'削除ロック',width:500});
      var str = '<div class="prg_title">' + title + 'をロックします</div>';
      str +='<div style="margin:2em 0 1em 0;text-align:center;"><a href="javascript:PRG.lock(' + id + ')" class="ui-state-default ui-corner-all ui-dialog-buttonpane button">録画ファイルをロックする</a></div>';
      $('#floatBox4Dialog').html(str);
      $('#floatBox4Dialog').dialog('open', 'center');
    },
    lock:function(id){
      var lf = 1;
      $.post('changeFilelock.php', { reserve_id: id,
                filelock: lf }, function( data ) {
        if(data.match(/^error/i)){
          alert(data);
          $('#floatBox4Dialog').dialog('close');
          window.location.reload();
        }
        else {
          $('#resid_' + id ).hide();
          $('#floatBox4Dialog').dialog('close');
          window.location.reload();
        }
      });
    },
    unlockfile:function(id, title){
      $('#floatBox4Dialog').dialog({title:'ロック解除',width:500});
      var str = '<div class="prg_title">' + title + 'のロックを解除します</div>';
      str +='<div style="margin:2em 0 1em 0;text-align:center;"><a href="javascript:PRG.unlock(' + id + ')" cla
ss="ui-state-default ui-corner-all ui-dialog-buttonpane button">削除ロックを解除する</a></div>';
      $('#floatBox4Dialog').html(str);
      $('#floatBox4Dialog').dialog('open', 'center');
    },
    unlock:function(id){
      var lf = 0;
      $.post('changeFilelock.php', { reserve_id: id,
                filelock: lf }, function( data ) {
        if(data.match(/^error/i)){
          alert(data);
          $('#floatBox4Dialog').dialog('close');
          window.location.reload();
        }
        else {
          $('#resid_' + id ).hide();
          $('#floatBox4Dialog').dialog('close');
          window.location.reload();
        }
      });
    },

を挿入。

続いて「変更」ボタンの下に「ロック」/「解除」ボタンを表示させる。

<td><input type="button" value="変 更" onClick="javascript:PRG.editdialog('{$rec.id}')" /></td>

の行を

<td><input type="button" value="変 更" onClick="javascript:PRG.editdialog('{$rec.id}')"/>{if $rec.filelock == 0}<input type="button" value="ロック" onClick="javascript:PRG.lockfile('{$rec.id}','{$rec.title}')"{/if}{if $rec.filelock > 0}<input type="button" value="ロック解除" onClick="javascript:PRG.unlockfile('{$rec.id}','{$rec.title}')" />{/if}</td>

に書き換え。最後に「削除」ボタンの ON/OFFの切り替え

<td><input type="button" value="削除" onClick="javascript:PRG.dialog('{$rec.id}','{$rec.title}')" /></td>

の行を

{if $rec.filelock == 0}<td><input type="button" value="削除" onClick="javascript:PRG.dialog('{$rec.id}','{$re c.title}')" /></td>{/if}{if $rec.filelock > 0}<td></td>{/if}

に書き換え。


さて、javaの functionで changeFilelock.php を呼んでファイルのロックの状態をDBに書き込んでいるので

<?php
include_once('config.php');
include_once(INSTALL_PATH."/DBRecord.class.php");
include_once(INSTALL_PATH."/reclib.php");
include_once(INSTALL_PATH."/Settings.class.php");

$settings = Settings::factory();

// $reserve_id = "2380";
// $filelock = "0";

if( !isset( $_POST['reserve_id'] ) ) {
        exit("Error: IDが指定されていません" );
}
if( !isset( $_POST['filelock'] ) ) {
        exit("Error: lockが指定されていません" );
}

$reserve_id = $_POST['reserve_id'];
$filelock = $_POST['filelock'];

$dbh = false;
 if( $settings->mediatomb_update == 1 ) {
        $dbh = @mysql_connect( $settings->db_host, $settings->db_user, $settings->db_pass );
        if( $dbh !== false ) {
                $sqlstr = "use ".$settings->db_name;
                @mysql_query( $sqlstr );
                $sqlstr = "set NAME utf8";
                @mysql_query( $sqlstr );
        }
}

try {
        $rec = new DBRecord(RESERVE_TBL, "id", $reserve_id );
        $sqlstr = "update Recorder_reserveTbl set filelock='".$filelock."' where id='".$reserve_id."'";
        print( $sqlstr );
        @mysql_query( $sqlstr );
}
catch( Exception $e ) {
        print("Error: ". $e->getMessage());
        exit("Error: ". $e->getMessage());
}

exit("complete");

?>

を epgrecのディレクトリに’changeFilelock.php’と言うファイル名で作成する。

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*
:-[ (B) (^) (P) (@) (O) (D) :-S ;-( (C) (&) :-$ (E) (~) (K) (I) (L) (8) :-O (T) (G) (F) :-( (H) :-) (*) :-D (N) (Y) :-P (U) (W) ;-)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)