ライブラリ更新がリモートアプリで実施出来ない現象の解消が出来た。
検証中にライブラリを追加した際に最後にデータベースの圧縮メッセージが表示されて、KODIが強制終了した。
以前にも発生していた記憶がある。
Copilotに聞いてみると、データベースはSQLで管理しておりタイミングはSQLが判断してVACUUMコマンドを実行するらしい。
停止することは出来ないとの回答だが、ネット情報見ると停止は出来そう。
ただし、データベースの最適化は必要なので停止ではなく任意のタイミングで実行すれば良いのでは?
ライブラリ更新→データ圧縮(最適化)を毎回実施すれば負荷は低減されるのでは?
現在は一定の更新量でSQLが判断して最適化しているので負荷が高くなってしまうのでは無いかと推測。
アドオンで更新後に続いて、バキュームを実施する記述を追記していたが、途中でライブラリ更新完了を検出出来る事が判明。
更新完了が検出可能ならば、検出後に自動でバキュームを実行する独立したアドオンのほうが良さそう。
手動でバキュームは実行出来たが、スキャン完了をトリガにしたい。
例:
def run_vacuum(library):
db_dir = xbmc.translatePath("special://database")
files = os.listdir(db_dir)
if library == "video":
for f in files:
if f.startswith("MyVideos") and f.endswith(".db"):
vacuum_db(os.path.join(db_dir, f), "Video")
elif library == "music":
for f in files:
if f.startswith("MyMusic") and f.endswith(".db"):
vacuum_db(os.path.join(db_dir, f), "Music")
サービス化して、スキャン完了をトリガにしたかったがうまくいかない。
いくつか試したが、Copilotが使えない(廃止した)トリガばかり提案してトリガで発動しない(T_T)
KODIのアドオンがPython3に変更されてからの情報がうまく処理できていない(学習データが古いから?)ようで、KODIの21.0以降としているが直ぐに古くて廃止になった記述にして、何度も検証進めて動かず問い詰めると使えないと言い放つ(T_T)
アドオンのライブラリアップデート後にディレイで実行か、特定の時間に実施などでも良さそうだが🤔
更新情報が少ないタイミングならコケないのならば、小まめに実施するだけで良いかも?
検証用
dbにダミーを追加する
MyMusic83.db のあるフォルダに移動
sqlite3 MyMusic83.db
ダミー書き込み データが少ないと反映が検出出来ないみたい。
-- ダミーデータを大量追加
INSERT INTO song (idSong, strTitle)
SELECT 100000+rowid, 'DummySong'
FROM sqlite_master LIMIT 1000;
-- 一括削除
DELETE FROM song WHERE idSong >= 100000;
確認コマンド
PRAGMA freelist_count;
0以外で空き領域が作成されている状態。
バキュームコマンドと続いて確認で、0になればバキュームが実行されている
。
VACUUM;
PRAGMA freelist_count;
