Skip to content

feat(logo): ケーブルの局のロゴも集める - #2802

Merged
5ym merged 2 commits into
mainfrom
feat/catv-logo
Nov 14, 2026
Merged

5ym merged 2 commits into
mainfrom
feat/catv-logo

Conversation

@5ym

@5ym 5ym commented Nov 14, 2026

Copy link
Copy Markdown
Collaborator

ケーブル (CATV) の局のロゴを、元の放送と同じ方法で集めます。

  • 地上波の再送信と自主放送は、その TS の CDT から取得します
  • BS・CS の再送信は、カルーセルを積んだ BS の TS を再送信しているチャンネルで待ちます。チャンネルは決め打ちせず、スキャンで見つけた TS から選びます
  • 中継の当たり外れと読みかけは、チャンネルの名前でなく TS で控えます。アンテナで当たった TS は、同じ TS のケーブルのチャンネルにも当てはめます。上げたあと 1 回だけ中継を当たり直します
  • 6 分開いても CDT が来なかったケーブルの TS は、1 週間取得しません。設定では「—」になります
  • 4K (TLV)・スカパー!プレミアム・復号できない局は、今までどおり取得しません

ケーブルでカルーセルと CDT が届くかは、実機ではまだ確かめていません。届かなくても、控えで開くのをやめるだけです (docs/logo.md「ケーブルの局」)。

🤖 Generated with Claude Code

https://claude.ai/code/session_01T8TqVbtN2Hp8wNmqBX8pzT

ケーブルの局は元の放送 (original_network_id) で分けて取得する。地上波の再送信と自主放送は
その TS の CDT、BS・CS の再送信はカルーセルを積んだ BS の TS を再送信しているチャンネルで待つ。
中継の当たり外れと読みかけはチャンネルの名前でなく TS で控え、アンテナで当たった TS を
ケーブルのチャンネルにも当てはめる。6 分開いても CDT が来なかったケーブルの TS は 1 週間取得しない。
4K (TLV)・スカパー!プレミアム・復号できない局は今までどおり取得しない。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T8TqVbtN2Hp8wNmqBX8pzT
@claude

claude Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 27s —— View job


レビュー結果

ケーブルの局のロゴ取得を、元の放送 (origin) で cdt と carousel に振り分ける変更を読みました。控えのキーをチャンネル名から TS に替えたことで、アンテナで当たった TS をケーブル側にも当てはめられます。構成は筋が通っていて、テストも追加されています。指摘は 1 件です。

不具合 (要確認)

  • src/lib/server/logo.ts:952: チャンネルを開けないまま 6 分過ぎた回が、「CDT が来ない TS」として 1 週間控えられる可能性があります。opened を条件に足すことを勧めます。詳細はインラインコメントにあります。

セキュリティ

  • 問題は見つかりませんでした。外部入力は増えていません。

設計

  • logoSource が noCdtOn を通して控えを読むため、純粋な分類関数ではなくなっています。ただし logos.server.ts と tunableServices で同じ判定を使えるので、今の形で問題ないと考えます。
  • tunableServices で transport_stream_id === null を先に除くので、logoSource 内の transport_stream_id === null の分岐は logos.server.ts からの呼び出しでだけ使われます。

テスト

  • cdtVerdict・TS キーの共有・ケーブルの分類にテストがあります。上の「開けなかった回」のケースだけが足りません。

文章 (docs/writing.md)

  • 読んだ範囲では、決まりに反する箇所は見つかりませんでした。docs の差分 (docs/app.md など) は行数が多いので、細かい確認まではしていません。
    | branch: feat/catv-logo

Comment thread src/lib/server/logo.ts Outdated
* その間は取得しない。共有でも 1 つ来れば控えを消す
*/
if (!satellite && target.type === "CATV") {
const seen = cdtVerdict(feed?.cdtSections ?? 0, ranOut, timeout);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

要確認 (不具合の可能性): チャンネルを開けないまま timeout が切れた回も、cdtVerdict が false を返して markNoCdt で 1 週間の控えを書きます。

expire のタイマーは openChannelStream を呼ぶ前から動いています。チューナーが塞がっていて開く待ちのまま 6 分過ぎると、ranOut が true、feed が null になります。feed?.cdtSections ?? 0 は 0 になるので、一度も受信していない TS が「CDT が来ない TS」と控えられ、設定で「—」になります。

opened が true のときだけ判定すれば防げます。例: const seen = opened ? cdtVerdict(...) : null;

開けなかった回を数えるかどうかは openChannelStream が待つ時間にもよるので、そこは確認してください。opened と feed の判定を足すテストも欲しいです (logo-cable-cdt.test.ts に開けなかった回のケースが無いようです)。

上限のタイマーは選局を待つ間も進むので、実際に 5 分以上読んで CDT が 0 だった回だけを証拠にする。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T8TqVbtN2Hp8wNmqBX8pzT
@claude

claude Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Claude finished @5ym's task in 26s —— View job


レビュー結果 (7afc78e を反映)

前回「要確認」とした、チャンネルを開けないまま 6 分過ぎた回が「CDT が来ない TS」と控えられる問題は、7afc78e で直っています。

  • cdtVerdict に openedMs を足し、ranOut かつ timeout >= SWEEP_TIMEOUT かつ openedMs >= NO_CDT_WINDOW (5 分) のときだけ false を返します (src/lib/server/logo.ts:247)。開けなかった回 (openedMs が 0) と、選局待ちが長くて少ししか読めなかった回は null で、控えません。
  • logo-cable.test.ts:203 以降に、開けなかった回 (openedMs 0) と 2 分しか読めなかった回が null になるテストがあります。

不具合: 新しく見つかった問題はありません。
セキュリティ: 問題はありません。外部入力は増えていません。
設計: 問題はありません。
テスト: cdtVerdict の境界は足りています。collect から markNoCdt までをつなぐテストは logo-cable-cdt.test.ts にあります。
文章: docs/writing.md に反する箇所は見つかりませんでした。

問題無しです。
| branch: feat/catv-logo

@5ym
5ym merged commit 4f6a969 into main Nov 14, 2026
34 checks passed
@5ym
5ym deleted the feat/catv-logo branch November 14, 2026 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant