今年の年末年始はとある事情で
現在住んでいる埼玉県から、実家の広島県まで車で帰る事になりました。
その運転時間は概算で片道約12時間!
私の車は古くなったカーナビを取り外して、Bluetoothの音楽デッキを積んでいるので
スマホにさえ潤沢な音楽ファイルが入っていれば退屈に耐える事ができそうですが、
Androidの音楽ファイルをメンテする事は非常に面倒でつい忘れがちとなってしまいます。
前回の帰郷では音楽ファイルのメンテを忘れたので、
急遽povo2.0の24時間無制限プランを購入し、YouTubeを再生しまくって帰郷しました。
(あれ?大量の音楽ファイルを買ってメンテするより、330円出すほうが安くね?)
幸いAndroid端末にはADBというデバッグ機能が備わっており、
adb
という実行ファイルを使えばコンソール上でコマンドを実行しながら音楽ファイルを全て送信することが可能なのは知っていました。
この流れを Clojure の babashka で管理すれば更に楽に管理出来ないか?
作ったのがこちら
最初は babashka で手持ちの音楽ファイルをYAMLでリストアップ、
必要なものだけエディタで抽出してからAndroid端末に送信するということを目指していました。
しかし、世の中には'
や
のホワイトスペースをアーティストやアルバム名に含ませる、
じゃじゃまる・ぴっころ・ぽろりの3人が「絶対に許さんぞ!じわじわとなぶり殺しにしてくれるわ!」と叫ぶレベルの名前付けをしている事があるんです。
(shell "adb" "shell" "ls" "/storage/emulated/0/Music/xxx yyy")
こんな感じでbabashkaのshellから、adb
に注入してAndroid端末で実行という流れになりますが、
この時の"/storage/emulated/0/Music/xxx yyy"
がadb
に注入した時に/storage/emulated/0/Music/xxx
になって、
xxx yyy
というアーティスト名なのに、xxx
アーティストだけを探しに行ってそんなファイルねえよと怒られるわけですね。
このエスケープ処理が極めて面倒でもう無理……ってなりました。
なので最終的には adb push [ローカルパス]/. [Androidパス]
を実行するだけの超しょぼい物が出来上がりました。