Batocera.linux: いろいろ微修正 EmulationStation編

Batocera.linux ってなんじゃらほい?

…って人には無用な記事なのですが、
とりあえずどんなものかはGitHubでまとめてあるのでそっちで。
興味なかったらお帰りよろしう。

今回の課題

前回、Batocera本体のリポジトリに属するところだけ微修正を施しました。
Batocera.linuxはこれ以外にも多数のリポジトリを扱うわけですが、
今回このうちbatocera-emulationstationに絞って対応します。

ビルド対象commit特定

Batocera 36,37それぞれに対応する別のcommitがあるので特定します。
package/batocera/emulationstation/batocera-emulationstation/batocera-emulationstation.mk
に書かれているので、この位置でブランチを作っておきます。
Batocera36
Batocera37

(23/5/17 変更)
Batocera37側はrebaseが含まれててここからpullしたのは後でハマるので、
公開が好ましくないところ(以下同)

公式パッチ適用

batocera-emulationstationのビルドはリポジトリの内容そのままではなく、
さらに公式パッチを施した状態から始まります。
(batocera-emulationstation.mkと同じディレクトリにある*.patchファイル群)
ソース書き換えにより適用不能になるケースがあり得るため、
事前に適用済の状態でブランチを作っておきます。
Batocera36Patching
Batocera37Patching

また、適用済の*.patchファイル群は削除します。

MetaData 初期化不良問題

従来の実装では MetaDataList::loadFromXML() で構造の初期化を行って
いるのですが、このメソッドは条件により呼ばれないことがあります。
呼ばれないまま他のメソッドを呼ぶとクラッシュするケースがあるため、
初期化元であるFileDataのコンストラクタから確実に初期化されるように
細工しておきます。
__Fix_36_InitMetaData

MetaData テーブルサイズ相違問題

従来の実装ではMetaDataIdの個数とMetaDataList::initMetadata()
内のテーブル定義の個数が一致していることが前提となりますが、
中身をみるとどうも怪しげ。でも偶然動いているような状態です。
それでMetaDataIdの定義を増やしたりするとクラッシュするので、
MetaDataId::Maxを定義しつつ問題個所を確実に合わせておきます。
__Fix_36_MetaDataItemCount

英語が定義されていないジャンル

gameslist.xmlでは、ジャンルが英語名で保存されています。
このため、英語表記のないジャンルは空白で保存され、
読み出し時に反映されません。
このため、英語表記を決めておきます。
勝手に決めていいところではないかもしれないけど、
その対象はPachinkoとShooter Smallなので
たぶん英語でも同じ表記でいいんだろう、きっと。
__Fix_36_EnglishGenreIsRequired
ジャンルには他にも親子関係が怪しいやつとかあるけど、
破壊的変更になってしまうので保留。

ゲームが起動されていないときのWebAPI挙動

従来の実装では、WebAPIの /runningGame をリクエストすると
JSONで情報が送られてくるわけですが、ゲームが起動されていないとき
どういうわけかステータスコード201にエラーメッセージがついてくる。
クライアント側は正常系としてJSONを受け取ることが前提になっているので
エラーメッセージではなく空のJSONで返すことにします。
(ステータス201というのも気になるところではありますが、
これは勝手にいぢくらない方が無難ではある)
__Fix_36_WebAPI_EmptyRunningGame

機能情報追加

これはドサクサ紛れの追加機能になるんですが、
Webフロントエンドの実装にあたり
EmulationStationのバージョン情報や対応機能情報を
把握することは必須となるため、提案も兼ねて
今のうちに仕込んでおきます。
__Add_36_WebAPI_CapabilityInfo

今回の成果

EmulationStationについて、3件のバグ修正+α
これもプルリク予定。

今後の予定

もうひとつ着手しときたいところとして、
ジャンルの日本語対応があります。
テーマとしては少し大きめなので次回に。


この記事が気に入ったらサポートをしてみませんか?