:dromedary_camel: @hiroget9 さん
SAVE QUEUEやADD STREAMなど、普段使わないメニューがあれば"active":"no",で無効にしていただくと、メニューがスッキリすると思います。
@hiroget9 さん
ランダム再生を私はよく使うので、この情報はありがたいです!
さっそく
nano /home/pi/plugins/.plugin.json
でこうしてみました。
{
"menu" :"<script>$.getScript('/plugins/demo/user.js');</script>",
"active" :"yes",
"icon" :"",
"success":"",
"error" :""
} ,
{
"menu" :"<span id=repeat-state>Repeat</span>",
"active" :"no",
"icon" :"repeat",
"form" :"",
"command":"mpc repeat",
"output" :"",
"success":"success!",
"error" :"error!"
},
{
"menu" :"<span id=random-state>Random</span>",
"active" :"yes",
"icon" :"random",
"form" :"",
"command":"mpc random",
"output" :"",
"success":"success!",
"error" :"error!"
},
(リピートは使わないので、リピートのプラグインの“active” :“no”,にしてあります)
実際にやってみて「分かってないとはまるかも」と思ったのは、/home/pi/plugins/.plugin.jsonの頭にあるこの部分ですね。
{
"menu" :"<script>$.getScript('/plugins/demo/user.js');</script>",
"active" :"yes",
"icon" :"",
"success":"",
"error" :""
} ,
このプラグインが"active" :"yes",になっていないと、/home/pi/plugins/demo/user.jsが読み込まれず、肝心の“ON/OFF”表示ができません。
なので、このプラグインの“active” :“yes”,になっていることがマストな使い方ですね。
私の場合、
nano /home/pi/plugins/demo/user.js
ではこんな感じにしてみました。
/* hide menu icon (Do not edit) */
$('.glyphicon-').parent().hide().parent().prev().hide();
/* your script (modify it as you see fit) */
// example1: append label
$('.navbar-brand').append(" <b>msBerryDAC</b> " );
// example2: append version
$.getJSON( "/.version.json?t=" + Date.now(), function( data ) {
$('.navbar-brand').append("<small class='text-muted'> " + data.major + "." + data.minor + "." + data.revision + "</smal$
});
$('.dropdown-toggle').on('click', function (e) {
if ($('#btnrepeat').hasClass("active")) {
$('#repeat-state').text("Repeat OFF");
} else {
$('#repeat-state').text("Repeat ON");
}
});
$('.dropdown-toggle').on('click', function (e) {
if ($('#btnrandom').hasClass("active")) {
$('#random-state').text("Random OFF");
} else {
$('#random-state').text("Random ON");
}
});
以前、パパリウスさんから「ユーザーが任意の機能を追加できますよ」と案内があったのは、こういうことだったのですね!
これは便利ですねぇ。
おかげでこうできました。

UIの頭の文字列が不必要な場合は、該当記述の行頭に“//”を追加してコメントアウトすれば、簡単に無効にすることもできるということでしょうか。
/* hide menu icon (Do not edit) */
$('.glyphicon-').parent().hide().parent().prev().hide();
/* your script (modify it as you see fit) */
// example1: append label
//$('.navbar-brand').append(" <b>msBerryDAC</b> " );
// example2: append version
// $.getJSON( "/.version.json?t=" + Date.now(), function( data ) {
// $('.navbar-brand').append("<small class='text-muted'> " + data.major + "." + data.minor + "." + data.revision + "</smal$
//});
$('.dropdown-toggle').on('click', function (e) {
if ($('#btnrepeat').hasClass("active")) {
$('#repeat-state').text("Repeat OFF");
} else {
$('#repeat-state').text("Repeat ON");
}
});
$('.dropdown-toggle').on('click', function (e) {
if ($('#btnrandom').hasClass("active")) {
$('#random-state').text("Random OFF");
} else {
$('#random-state').text("Random ON");
}
});

色々と勉強になりました:yum:
@ジャイアン さん
ご指摘ありがとうございます。
昨日のコマンドを修正しました。
/home/pi/plugins
の位置で
ls -a -l
もしくは
ll
(sunatomoさんにお教えいただきました。こちらの方が断然楽ですね!(追加修正です))
としますと、隠しファイルのplugin.jsonも表示されます。
pi@smpd:~/plugins $ ls -a -l
drwxr-xr-x 2 pi pi 4096 Oct 19 16:15 demo
drwxr-xr-x 2 pi pi 4096 Oct 19 16:15 sampling_rate_Setting
drwxr-xr-x 2 pi pi 4096 Oct 19 16:15 sb32
drwxr-xr-x 2 pi pi 4096 Oct 19 16:15 tb2
/home/pi/pluginsの下にuser.jsと.plugin.jsonが2つともあるということですね。
(これは、私が ./demo 配下のuser.jsを一つ上のディレクトリに持ってきていた場合の例です。)
nano /home/pi/plugins/.plugin.json
の
となっているのは、隠しファイルを書き換えるためですね。
sshからのコピーを間違えていたようです。失礼いたしました。
コマンドはそれぞれ次のようになります。
nano /home/pi/plugins/.plugin.json
nano /home/pi/plugins/demo/user.js
ボーッとコマンドを打っていましたが、ご指摘のおかげで隠しファイルの表示の仕方がわかりましたし、書き換え方法もシックリしました。
重ねてお礼申し上げます。
追記
/home/pi/plugins/demo/user.js
はサンプルのようですね。こちらは触っていませんでしたし、あるのも知りませんでした(-_-;)
@hiroget9 さん
v0.9.xをインストール直後は、
/home/pi/plugins/.plugin.json
/home/pi/plugins/demo/user.js
にファイルを置いてあります。
user.js(Web UIカスタマイズプラグイン)は、.plugin.jsonの中で
menu" :"<script>$.getScript('/plugins/demo/user.js');</script>",
というように、demoの下にあるuser.jsを読み込むように設定してあります。
user.jsを/home/pi/plugins直下にコピーしてお使いなのであれば、
menu" :"<script>$.getScript('/plugins/user.js');</script>",
と読み込み先が指定されていれば問題ありません。
ジャイアンさん、またまたお邪魔します。
先日のプラグインの表示切替は、どうやら
/var/lib/mpd/stateを見にいっているのではないかと思います。
中身には
sw_volume: 100
random: 0
repeat: 1
single: 0
consume: 0
crossfade: 0
と書き込まれていますね(/var/lib/mpd/stateの抜粋です)。
そうならば、singleも使えるということで、おまけです。
1曲だけのリピートをプラグインに追加してみました。
あまり需要はないかもしれませんが、ちょっと実験してみたかったんです。
同じようなネタ続きでごめんなさい。
Single On ⇔ Single Off の切り替え表示です。
nano /home/pi/plugins/.plugin.json
で以下を追加
{
"menu" :"<span id=single-state>Single</span>",
"active" :"yes",
"icon" :"play-circle",
"form" :"",
"command":"mpc single",
"output" :"",
"success":"success!",
"error" :"error!"
},
nano /home/pi/plugins/demo/user.js
で以下を追加
$('.dropdown-toggle').on('click', function (e) {
if ($('#btnsingle').hasClass("active")) {
$('#single-state').text("Single OFF");
} else {
$('#single-state').text("Single ON");
}
});
追加した結果です。プラグインが多過ぎですね(-_-;)
今回のは、カバーアートが大きく表示される画面のハートマークと同じ機能です。

htmlなんかも使ってみたいとは思うのですが、私にはまだまだ勉強不足です。
@hiroget9 さん
有益で面白い情報をありがとうございます!
実は私、個人的にランダム再生の時にconsumeをよく併用するのですが、いちいちsettingパネルを開かなきゃ設定できないことに面倒くささを感じていました。しかもconsumeがONなのかOFFなのか、UIからは確認できません。
しかしhiroget9さんの探究心のおかげで、consumeもプラグイン化できることが分かりましたので、さっそくこうしてみました。
nano /home/pi/plugins/.plugin.json
を実行して、以下の内容を追加。
{
"menu" :"<span id=consume-state>Consume</span>",
"active" :"yes",
"icon" :"fire",
"form" :"",
"command":"mpc consume",
"output" :"",
"success":"success!",
"error" :"error!"
},
続いて
nano /home/pi/plugins/demo/user.js
を実行して、以下の内容を追加。
$('.dropdown-toggle').on('click', function (e) {
if ($('#btnconsume').hasClass("active")) {
$('#consume-state').text("Consume OFF");
} else {
$('#consume-state').text("Consume ON");
}
});
おかげでconsume機能のON/OFFとその可視化もできるようになりました!

hiroget9さんの探究心に感謝です!
プラグインのネタ続きで失礼します。
私の場合、プラグインがまだ整理できてなくて、もっと減らさなければ使いづらいのですが、特定のプラグインを目立たせる方法がありました。
簡単ですが、あまり役に立たないかも・・・
nano /home/pi/plugins/.plugin.json
を実行して、 "menu" の部分を・・・で挟み込んでやると太文字になります。
SHUTDOWNを太文字にする一例です。お好きなようにカスタマイズしてみてください。
{
"menu" :"<b>SHUTDOWN</b>",
"active" :"yes",
"icon" :"off",
"form" :"/plugins/demo/are_you_sure.html",
"command":"systemd-run poweroff",
"output" :"",
"success":"shutting down!",
"error" :"error!"
} ,
