Skip to content

Commit

Permalink
Fix: [Server][Program] ジャンルに規格違反の値が設定されている番組の処理中に例外が発生する問題を修正
Browse files Browse the repository at this point in the history
奈良テレビの一部番組で使われているらしい…
  • Loading branch information
tsukumijima committed Aug 1, 2023
1 parent 527edc5 commit da4a257
Showing 1 changed file with 24 additions and 20 deletions.
44 changes: 24 additions & 20 deletions server/app/models/Program.py
Original file line number Diff line number Diff line change
Expand Up @@ -402,25 +402,29 @@ def MillisecondToDatetime(millisecond: int) -> datetime:
if 'genres' in program_info:
for genre in program_info['genres']: # ジャンルごとに

# major … 大分類
# middle … 中分類
genre_dict: Genre = {
'major': ariblib.constants.CONTENT_TYPE[genre['lv1']][0].replace('/', '・'),
'middle': ariblib.constants.CONTENT_TYPE[genre['lv1']][1][genre['lv2']].replace('/', '・'),
}

# BS/地上デジタル放送用番組付属情報がジャンルに含まれている場合、user_nibble から値を取得して書き換える
# たとえば「中止の可能性あり」や「延長の可能性あり」といった情報が取れる
if genre_dict['major'] == '拡張':
if genre_dict['middle'] == 'BS/地上デジタル放送用番組付属情報':
user_nibble = (genre['un1'] * 0x10) + genre['un2']
genre_dict['middle'] = ariblib.constants.USER_TYPE.get(user_nibble, '')
# 「拡張」はあるがBS/地上デジタル放送用番組付属情報でない場合はなんの値なのかわからないのでパス
else:
continue
# 大まかなジャンルを取得
genre_tuple = ariblib.constants.CONTENT_TYPE.get(genre['lv1'])
if genre_tuple is not None:

# major … 大分類
# middle … 中分類
genre_dict: Genre = {
'major': genre_tuple[0].replace('/', '・'),
'middle': genre_tuple[1].get(genre['lv2'], '未定義').replace('/', '・'),
}

# BS/地上デジタル放送用番組付属情報がジャンルに含まれている場合、user_nibble から値を取得して書き換える
# たとえば「中止の可能性あり」や「延長の可能性あり」といった情報が取れる
if genre_dict['major'] == '拡張':
if genre_dict['middle'] == 'BS/地上デジタル放送用番組付属情報':
user_nibble = (genre['un1'] * 0x10) + genre['un2']
genre_dict['middle'] = ariblib.constants.USER_TYPE.get(user_nibble, '未定義')
# 「拡張」はあるがBS/地上デジタル放送用番組付属情報でない場合はなんの値なのかわからないのでパス
else:
continue

# ジャンルを追加
program.genres.append(genre_dict)
# ジャンルを追加
program.genres.append(genre_dict)

# 番組情報をデータベースに保存する
if duplicate_program is None:
Expand Down Expand Up @@ -682,15 +686,15 @@ async def updateFromEDCB(cls, is_running_multiprocess: bool = False) -> None:
# middle … 中分類
genre_dict: Genre = {
'major': genre_tuple[0].replace('/', '・'),
'middle': genre_tuple[1].get(content_data['content_nibble'] & 0xf, '').replace('/', '・'),
'middle': genre_tuple[1].get(content_data['content_nibble'] & 0xf, '未定義').replace('/', '・'),
}

# BS/地上デジタル放送用番組付属情報がジャンルに含まれている場合、user_nibble から値を取得して書き換える
# たとえば「中止の可能性あり」や「延長の可能性あり」といった情報が取れる
if genre_dict['major'] == '拡張':
if genre_dict['middle'] == 'BS/地上デジタル放送用番組付属情報':
user_nibble = (content_data['user_nibble'] >> 8 << 4) | (content_data['user_nibble'] & 0xf)
genre_dict['middle'] = ariblib.constants.USER_TYPE.get(user_nibble, '')
genre_dict['middle'] = ariblib.constants.USER_TYPE.get(user_nibble, '未定義')
# 「拡張」はあるがBS/地上デジタル放送用番組付属情報でない場合はなんの値なのかわからないのでパス
else:
continue
Expand Down

0 comments on commit da4a257

Please sign in to comment.