Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

番組がリスケジュールされた際に、必要な番組まで削除される不具合を修正 #134

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

scimmia9286
Copy link

バグの内容

番組スケジュールが変更になった際に放送時間の重なりをチェックして番組を削除しているが、必要な番組まで削除されてしまう

バグの原因

例えば、スポーツ番組などで放送時間が延長された場合、後続番組との重なりは避けられないので、"Forrowing"の番組も含めて削除される場合がある
以降受信するEIT[p/f]やEIT[schedle]で番組情報が復活されることが望まれるが、重なりが生じて削除された番組はProgramクラスが保持している情報にすでに存在しないため、以下に示すコードの229行目の"set"が失敗する(例外としてはEIT[schedule]からEIT[p/f]へテープルが移行した番組はこの限りではない)

service[e.event_id] = state;
} else {
state = service[e.event_id];
if (!state.present && isP) {
state.present = true;
}
if ((!state.present || (state.present && isP)) && isOutOfDate(eit, state.version)) {
state.version[eit.table_id] = eit.version_number;
if (UNKNOWN_START_TIME.compare(e.start_time) !== 0) {
_.program.set(state.programId, {
startAt: getTimeFromMJD(e.start_time),
duration: UNKNOWN_DURATION.compare(e.duration) === 0 ? 1 : getTimeFromBCD24(e.duration),
isFree: e.free_CA_mode === 0,
_pf: isPF || undefined
});
}
}

また、Following番組の開始が早まった場合、EIT[p]よりもEIT[f]を先に受信してしまうと、Following番組でPresent番組が削除されてしまう
const itemEndAt = item.startAt + item.duration;
if ((
(added.startAt <= item.startAt && item.startAt < addedEndAt) ||
(item.startAt <= added.startAt && added.startAt < itemEndAt)
) &&
(!item._pf || added._pf)
) {

改善内容

  • Programオブジェクトに"Present","Following"を識別できるプロパティを追加し、"Following"と"Present"を識別することで"Present"が削除されない様にする
  • 番組の延長などにより一旦削除されても直後に受信するEITにより完全なプログラム情報を提供できるよう、削除した番組情報を一時保管するバッファを用意し、削除済みの番組に対して"add"が呼ばれないで再び"set"メソッドが呼ばれたら一時保管バッファに保管していた情報を戻して処理する
  • 放送番組の変更(例えばスポーツ番組が中止になり、他の番組に差し替えなど)が発生じた際の削除では、一時保管バッファに溜まったままになるので、gcを実行するタイミングで一時保管バッファから削除する

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.

None yet

1 participant