EPGStation対応のpvr.chinachuに関して。
使えるようになったのでもう良いかな...と思いつつもソースを眺める。
pvr.chinachuは旨く工夫して最低限の機能は果していた。
正直、chinachuの少ないwabapiを利用しているために仕方ないとの見方もある。
いずれにしても、最初に面倒なkodi対応からインターフェースを実装するまでが大変だったに違いない。
しかし、あきらかに手抜きしている箇所もある。
1.録画済みの情報がkodiへ渡されない。
2.番組表が更新されない。
3.録画ルールと予約の情報が紐付けされていない。
1と2はメニューを追加して手動対応できるようにしているが、それがまた機能していない。
3の処理はスルーされている。
3は既にpvr.chinachu(改)で対応済み。
また、1と2に関してはメニューのフック処理を修正して、既存の御座なり対応をそのまま利用している。
上記対応に関しては、以前のブログに記しています。
EPGStationの豊富なwebapiを利用すれば、工夫なしに1と2の処理が実装できるのでは?...と思いたつ。
1は録画開始、終了のタイミングをとる必要があり現状では直ぐには無理かも...。
2に関してはEPG取得用のインターフェースが用意されているので、実装し直してみる。
少しおさらいする。
現状は、pvr.chinachuの実装処理をそのまま利用。
内容としてはチャンネル取得関数内でチャンネル情報取得時、同時にEPG情報を取得している。
また、EPG取得関数内ではkodiより要求された情報を渡している。
が、EPG取得はチャンネル更新がない限りは新たにEPG取得されない。
よって、kodiから要求されるものが保持情報の時間を越えた場合は表示できなくなる...はず。
では、実装するにあたり、EPGStationのwebapiで使えるのものを確認する。
chinachuではEPG情報を任意期間のものを取得することができない。
が、EPGStationでは放送局別に任意期間を指定することができる。
これはピッタリ!...と、色めきたつが任意期間の単位が日数となっている。
kodiから要求されるのは時間単位である。
冗長てきではあるが、選択肢がない。
いざ実装。
修正するpvr-addonメソッド、
PVR_ERROR GetEPGForChannel(ADDON_HANDLE handle, const PVR_CHANNEL& channel, time_t iStart, time_t iEnd)
使用するwebapi、
GET /schedule/{id}?time&days
引数を設定、
id = channel.iUniqueId チャンネル番号
time = iStart 開始時刻
days = ((iEnd - iStart) / 24 * 3600) + 1
後は、取得した情報をからiStartとiEnd内のデータ転送
TransferEpgEntry(handle, &tag)
以上で、実装が完了。
おっと...忘れてならないのはチャンネル取得時に全局分のEPGを取得していた箇所をチャンネル取得のみに修正。
後は、kodi上からPVRのガイド設定を利用して「過去の表示日数」「先の表示日数」や「アップデートインターバル」を任意に変更する。
使ってみる。
kodi起動時に全データを取得するので読み込みにもたつくが、以降の読み込みでは気にならない。
しかし、局毎EPG取得が時間単位でできればもう少し...。