チェックをいじっていないのに、勝手にチェックがはずれていることがあるらしい。
確かめてみたら、たしかにチェックをまったくいじってないのに何件かはずれていた。
なので、チェックを自動で入れなおす JXA を書いた。
でも意図的にチェックをはずしている項目もあると思うので
ダイアログを表示して「プレイリストを作成」を選ぶとプレイリスト作るだけにする。
// チェックのはずれた項目を取得
iTunes = Application("iTunes");
unchecked_tracks = iTunes.tracks.whose({enabled: false})();
// ダイアログ表示の下準備
app = Application.currentApplication();
app.includeStandardAdditions = true;
if (unchecked_tracks.length == 0){
app.displayAlert("チェックのはずれている項目はありませんでした。");
} else {
var answer = app.displayDialog(`チェックのはずれている項目が ${unchecked_tracks.length} 件あります。`,
{
buttons: ["キャンセル", "チェックを入れなおす", "プレイリストを作成"],
defaultButton: 3,
cancelButton: 1
}
)
if (answer.buttonReturned == "チェックを入れなおす"){
// 全てチェックを入れなおす
unchecked_tracks.forEach(function(track){
track.enabled = true;
});
} else if (answer.buttonReturned == "プレイリストを作成") {
// プレイリストを作成
var playlist = iTunes.Playlist({name: "チェックがはずれている項目"}).make();
unchecked_tracks.forEach(function(track){
track.duplicate({to: playlist});
});
}
}
わざわざスクリプト書くまでもなくスマートプレイリストで何とかなるだろうけど、使わないと使い方を忘れるので。
メモ
whose
に関しては 公式ドキュメント の「Filtering Arrays」を参照。
whose
の後にカッコをつけてる理由は JXAで子要素のプロパティを一気に得る を参照。
プレイリストに曲を追加するときはtrack.duplicate({to: playlist});
とするらしい。
なんか気持ち悪い。
ES2015の Template strings は涙が出るほど便利なのでばんばん使う。
アロー関数 は使えなくて泣ける。
Application.currentApplication()
はスクリプトを実行しているアプリケーション。
Script EditorからScript Editorだし、ターミナルならosascriptコマンド。
ちなみにスクリプトメニューから実行した場合もosascript。
StandardAdditionsのメソッドはここから使うのが無難。(他だとエラーが出ることがある)
参考
iTunesでアルバムの次の曲が再生されない場合の対処法
Add track to iTunes playlist using JXA