sqliteで管理してみた(4) - まとめ1

出力内容

今更紹介した内容をまとめて実行可能なプログラムにしますが、その前にどのような出力をして、どのように使うかを検討します。

EDCBのマテリアルUIに反映させる事を目的にしているので以下の応答に付け加えます。ライブラリ一覧は以下のAPIで取得してます。

http://127.0.0.1:5501/api/Library実行結果

<xml>
 <entry>
   <dir>
     <name>ホーム</name>
     <id>home</id>
     <dir>
       <name>F:\TVRec</name>
       <id>1</id>
       <dir>
         <name>Convert</name>
         <id>2</id>
         <file>
             <name>test-1.mp4</name>
             <path>F%3a%5cTVRec%
…

上記内容に情報を付加する事にします。受けったJavaScript側で表示内容を追加すれば番組情報を出力出来そうです。

XMLフォーマット

C#でxml出力をするのは簡単ですが既存と同じ形式で出力させる必要があるのでHome、dir、fileのクラスを生成します。

[XmlRoot("entry")]
public class EDCBHome
{
    public EDCBDir dir { get; set; }
}

[XmlRoot("file")]
public class EDCBFile
{
    public string name { get; set; }
    public string title { get; set; }
    public string path { get; set; }
    public string date { get; set; }
    public string thumbs { get; set; }
    public string desc { get; set; }
    public string chname { get; set; }
    public string Recstart { get; set; }
    public string duration { get; set; }
    public string audio { get; set; }
    public string video { get; set; }
    public string extention { get; set; }
    public string needupdate { get; set; }
}

public class EDCBDir
{
    public string name { get; set; }
    public string id { get; set; }

    [XmlElement("dir")]
    public List<EDCBDir> dir { get; set; }

    [XmlElement("file")]
    public EDCBFile[] file { get; set; }
}

一般的な方法でシリアライズさせてxml形式でコンソールに出力させます。

public static string EdcbFormat(string home)
{
    EDCBHome rootTn = new EDCBHome(home);

    XmlSerializer serializer = new XmlSerializer(typeof(EDCBHome));
    var writer = new StringWriterUTF8();
    serializer.Serialize(writer, rootTn);
    string xml = writer.ToString();
    return xml;
}

private class StringWriterUTF8 : StringWriter
{
    public override System.Text.Encoding Encoding
    {
        get { return System.Text.Encoding.UTF8; }
    }
}

Luaからコマンド呼び出し

luaからコマンドを実行して結果を受け取るだけなのでエラー処理を考えなければ単純です。EDCBから録画フォルダを取得して引数で渡す必要がありますが、とりあえず決め打ちに入力しちゃいます。

mg.write(“HTTP/1.1 200 OK¥r¥nContent-Type: text/xml¥r¥n¥r¥n”)
f=edcb.io.open('\"C:¥¥パス名¥¥コマンド 引数\"', ‘rb’):read(‘*a’)
mg.write(f)

同時実行処理

バックエンドにsqliteを使用しているので同時書き込みは出来ないので更新処理は1つのプロセスのみがする必要があります。

暫定的にログファイルを使って判断します。ログファイルが開けたプロセスは更新処理を可能とし、開けなったプロセスは読み込み専用として稼働させます。

ここまでのまとめ

サムネイル関連はまだ紹介していないですが、暫定的ではコマンドベースのffmpegコマンドでサムネイルを作成することにします。将来的には異なる方法で実装したいとは思ってます。

データベースの中身を見るのが面倒になって簡易GUIを作っていましたがいつのまにかあれも、これもっとなり終わりが見えなくなるような気がしますが、何とか形にはなりました。

データベース一覧を表示
番組情報詳細
ライブラリ表示変更(暫定のためtvremoteplusから画面構成を拝借しました)

テスト環境が使えないので数ファイルだけ取り出して色々とやってみました。ということでテストして次回に設定方法とソースを公開します。


この記事が気に入ったらサポートをしてみませんか?