動機
- ラジオ番組を録音したオーディオファイルなどは、最後まで再生した後は移動して、二度聴きを防止したい。
- 最後まで再生していないファイルは再度再生したい。
- 音楽ファイルなどはラジオ録音ファイルと異なり、何度も再生したい。
- 安全のため、ある程度メジャーなプレーヤ(オープンソース、いろんなOSで動く等)で実現したい。
解決策
オープンソースのmpvプレーヤを、jsでカスタマイズする。
~/.config/mpv/scripts/my.js
var curPath = null;
// ファイルパスの先頭が一致した場合のみ、移動する。
function mvfile(prefix, to) {
if (curPath.indexOf(prefix) === 0) {
mp.utils.subprocess({args: ["mv", curPath, to], playback_only: false});
// mp.utils.subprocess({args: ["cmd", "/C", "move", curPath, to], playback_only: false}); // for Windows
}
}
// ファイル読み込み後に呼び出されるイベント。
// end-fileイベント内で取得できないため、ファイルパスをこのタイミングで取得する。
mp.register_event("file-loaded", function() {
curPath = mp.get_property_native("path");
});
// ファイルクローズ時に呼び出されるイベント、先頭パターンと移動先を複数指定している。
mp.register_event("end-file", function(event) {
if (event.reason == "eof") { // 最後まで再生された場合
mvfile("sd/radio/", "sd/backup/mvfiles/"); // 引数は例
mvfile("r/", "r/mvfiles/"); // 引数は例
}
});