コンテンツにスキップ

EPGStation から denpa に乗り換える

録画・ルール・手動予約を、EPGStation から denpa へ移します。 設定画面から実行し、 何度走らせても二重にはなりません (録画とルールは取り込み済みを飛ばす。手動予約は予約し直す。下記)。

環境変数の一覧は config.md、保存先の構成は library.md。

次の2つが見えていないと実行できません。

何を どうやって 変数
EPGStation の録画置き場 その PVC (かディレクトリ) を denpa の Pod にマウントする EPGSTATION_RECORDED_DIR (既定 /epgstation-recorded)
EPGStation v2 の MariaDB (recorded・video_file・channel / rule / reserve。v1 は見ない) denpa から届くところに置く。読むだけ EPGSTATION_DB_* (既定は config.md)

録画置き場が見えていないと、設定は実行の欄を出しません (migrate.available)。「引き継ぎ元 ○○ が 見つかりません」と出ていれば、まだマウントできていません。charts/ にも compose.prod.yml にも 雛形は入れていません。 1回きりで外すものなので、手元の EPGStation に合わせて足してください。

先に番組表を集めておきます。 空のまま走らせると手動予約だけ入りません (下記)。

  1. 設定の「連携」の「EPGStation からの引き継ぎ」 (/settings/integrations#migrate)
  2. 「取り込む」を外したまま実行する。 何が入るかを出すだけで、ファイルも データベースも触りません。件数と、飛ばされるものの理由がログに出ます
  3. 問題なければ「取り込む」を入れてもう一度実行する

数百GBのコピーになるので、開始だけ受けて裏で進みます。進み具合は同じ節に出ます。

既定はコピーです。 元が残るので、中身を確かめてから EPGStation 側を消せます。 空き容量が足りないときだけ「コピーではなく移動する」を入れてください。

順番はルール → 手動予約 → 録画です。いちばん長い録画のコピーを最後にするので、 途中で止めても予約は動き出します。

キーワード・除外キーワード・キーワードを当てる範囲 (番組名・説明・詳細説明)・種別 (GR/BS/CS/SKY)・ 局・ジャンル・有効かを移します。当てる範囲も引き継ぐのは、denpa の既定に寄せると説明まで 見ていたルールが黙って当たらなくなるためです。名前はキーワードをそのまま使い、空なら EPGStation #<id> になります。

  • 時刻指定のルールは入りません (denpa に当たるものが無い)
  • 「同じ回は最初の放送だけ録る」はオフで入ります (EPGStation の重複を避ける設定とは見分け方が違うので写さない)。 要るルールは、ルールの一覧で行を押して (検索の画面で) 入れてください
  • キーワード・局・ジャンル・種別がどれも空のルールは飛ばします (全番組に当たるため)。 種別だけのルールは入り、その種別の全番組に当たるので、下見のログで確かめてください

移すのは ruleId IS NULL のものだけです (ルールから作られたものは、ルールを移せば denpa が作り直す)。 除外印 (isSkip) の付いたものと、終わった番組も飛ばします。

denpa の番組表にその番組が無いと入りません。 番組表を集める前に走らせると「番組表に無いので 取り込めません」が並ぶので、埋まってからもう一度実行してください。走らせ直すと、手動予約は 取り込み済みでも予約し直します。二重にはなりませんが (番組ID の UNIQUE)、denpa 側で取り消した ものも予約に戻ります。

元のTSとエンコード済みの両方があればエンコード済みを取り、置き場は「denpa 自身が録ったとき」と同じに 揃えます (EPGStation の video_file.type で分ける)。

向こうの型 置く先
encoded 保存先 (ENCODED_DIR) 完成品として扱う。サムネイルも作る
それ以外 (元のTS) 作業領域 (RAW_DIR) denpa 側で再エンコードできる

元のTSを保存先に置くと denpa からは「エンコード済み」に見え、再エンコードできず、エンコード済みとして巨大な MPEG-2 が 並びます。 サムネイルも保存先に置いたものにだけ作ります (作業領域は画面に出ない)。

  • 元のパスは3通りで探します (EPGStation は相対でも絶対でも持つ)。見つからないものは missing として ログに残し、行も作りません
  • 取り込み済みは飛ばします。EPGStation の ID の符号を反転して program_id に入れるので、denpa の 番組IDと衝突せず、止めて再開しても二重に入りません (ルールは source の epgstation:<id> で見分けます)
  • ファイルを置き終えてから行を入れます。 置く先と同じフォルダに書きかけ (.epgstation-<id>.<拡張子>.migrating) として写し、最終の名前へ rename してから DB に入れます (rename と DB は1つのトランザクション)。途中で止まっても失敗しても「ファイルの無い録画」は残らず、 書きかけは次の実行の頭で消します。移動でも、元を消すのは DB に入れ終えてからです
  • 行があってもファイルが1つも無いもの (先に行を入れていた前の版が途中で止まった跡) は取り込み済みと 見なさず、同じ行のまま置き直します。denpa 側で消したもの (deleted_at) は戻しません。 ファイルマネージャなどで外から消しただけで行が残っているもの (元のTSだけの録画など) は、EPGStation 側に 元が残っていれば置き直されます
  • 移動のとき、取り込み後に元を消せなかったものは失敗にせず、ログに残して先へ進みます

マウントと EPGSTATION_* を外します。 マウントが残っていると設定に実行の欄が出たままになります (EPGSTATION_DB_* は残っても使われないだけ)。

元の PVC は、denpa 側で中身を確かめてから消してください (コピーで取り込んだ場合、消すまでは EPGStation もそのまま動きます)。