как только научусь, так сразу буду прятать...
P.S.имхо, далее, "портянки мои" скорее, никого не интересуют, их и не будет!
Список разделов › foobar2000 › Секреты foobar2000
function on_mouse_lbtn_dblclk(x, y, mask){
fb.RunContextCommand('File info');
}
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
var font = gdi.Font("Arial",10,1);
var fader = 0;
var fader1, fader2;
var fading_step = 1;
var fading_step_on = 5;
var g_timer;
var g_timer_refresh = 10;
var delay = 0;
var g_drag = 0;
var g_drag_seek = 0;
var g_drag_seek = 0;
var text, text_width, left_right;
var text_h, text_width_h, left_right_h;
var row = 1;
var line_height = 2;
var txt_row = row + line_height + 1;
var on_mouse_sb = false;
var FSO = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var seek_mode ;
var start_end_track = false;
function sec2time(sec) {
var h,m,s;
h = Math.floor(sec/3600);
m = Math.floor((sec-h*3600)/60);
s = sec - h*3600 - m*60;
if(m<10 && h!=0) m = "0" + m;
if(s<10) s = "0" + s;
return (h==0 ? "" : h+":") + m + ":" + s;
}
function on_paint(gr) {
seek_mode = parseInt( utils.ReadINI(fb.FoobarPath + 'seekbar.ini', 'seekbar_mode', 'seek_mode', 1) );
var ww = window.Width;
var wh = window.Height;
var pos = 0;
var length = fb.PlaybackLength;
var pos_h = 0;
if(length > 0) {
if(g_drag){
pos = ww * g_drag_seek;
} else {
pos = ww * (fb.PlaybackTime / length);
}
}
pos_h = ww * g_drag_seek;
gr.FillSolidRect( 0, row + line_height, pos, 1, RGBA(0,0,0,100) );
gr.FillSolidRect( 0, row, pos, line_height, RGBA(100,113,149,100) );
if (fb.IsPlaying) {
text = " " + sec2time(Math.floor((g_drag && length>0) ? length*g_drag_seek : fb.PlaybackTime )) + " " ;
text_width = gr.CalcTextWidth(text, font);
left_right = pos < text_width ? 1 : 0;
switch (seek_mode) {
case 2:
text_h = " " + sec2time(Math.floor(length*g_drag_seek )) + " "; break;
case 3:
text_h = " " + sec2time(Math.floor(length*g_drag_seek )) + " ▪ " + sec2time(Math.floor(fb.PlaybackLength)) + " " ; break;
}
text_width_h = gr.CalcTextWidth(text_h, font) ;
left_right_h = pos_h < text_width_h ? 1 : 0;
if( ( pos_h > text_width_h ? pos_h : text_width_h ) < pos- text_width || pos_h > pos + text_width_h || seek_mode == 1 || g_drag == 1) {
fader1 = fader ;
} else {
fader1 = fader - 100 < 0 ? 0 : fader - 100 ;
}
if(left_right==1) {
gr.DrawString( text, font, RGBA(0,0,0,fader1), 1, txt_row + 1, text_width, wh, 0 );
gr.DrawString( text, font, RGBA(0,157,255,fader1), 0, txt_row, text_width, wh, 0 );
} else {
gr.DrawString( text, font, RGBA(0,0,0,fader1), pos-text_width + 1, txt_row + 1, text_width, wh, 0 );
gr.DrawString( text, font, RGBA(0,157,255,fader1), pos-text_width, txt_row, text_width, wh, 0 );
}
fader2 = fader - 150 < 0 ? 0 : fader - 150 ;
gr.FillSolidRect( 0, row, pos , line_height , RGBA(0,129,215,fader2) );
gr.FillSolidRect( pos, row, ww - pos , line_height , RGBA(0,20,40,fader2) );
if(g_drag == 0 && seek_mode > 1) {
gr.FillSolidRect( pos_h - 3, row + line_height, 3, 1, RGBA(0,0,0,fader) );
gr.FillSolidRect( pos_h - 3, row, 3, line_height, RGBA(140,164,179,fader) );
if(left_right_h==1) {
gr.DrawString( text_h, font, RGBA(0,0,0,fader), 1, txt_row + 1, text_width_h, wh, 0 );
gr.DrawString( text_h, font, RGBA(140,164,179,fader), 0, txt_row, text_width_h, wh, 0 );
} else {
gr.DrawString( text_h, font, RGBA(0,0,0,fader), pos_h - text_width_h + 1, txt_row + 1, text_width_h, wh, 0 );
gr.DrawString( text_h, font, RGBA(140,164,179,fader), pos_h - text_width_h, txt_row, text_width_h, wh, 0 );
}
}
}
if( (fb.PlaybackLength - fb.PlaybackTime) < 5 || fb.PlaybackTime < 1 ){
start_end_track = true;
} else {
start_end_track = false;
}
// gr.DrawString( start_end_track + " " + delay + " " + fader + " " + on_mouse_sb, font, RGBA(255,255,200,255), ww - 200, txt_row, ww , wh, 0);
if(on_mouse_sb || start_end_track){
delay = 400;
window.ClearInterval(g_timer);
g_timer = window.SetInterval(function(){
fader = fader + fading_step_on ;
if ( fader >= 255) { fader = 255; window.ClearInterval(g_timer)}
window.Repaint();
}, g_timer_refresh);
}
if(!(on_mouse_sb || start_end_track)){
window.ClearInterval(g_timer);
g_timer = window.SetInterval(function(){
if ( delay > 0 ) { delay = delay - fading_step };
if ( delay == 0) { fader = fader - fading_step };
if ( fader <= 0) { fader = 0; window.ClearInterval(g_timer)}
window.Repaint();
}, g_timer_refresh);
}
}
function on_mouse_lbtn_down(x,y) {
g_drag = 1;
}
function on_mouse_lbtn_up(x,y) {
if(g_drag) {
g_drag = 0;
g_drag_seek = x / window.Width;
g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
fb.PlaybackTime = fb.PlaybackLength * g_drag_seek;
}
}
function on_mouse_move(x,y){
on_mouse_sb = true;
if(fb.IsPlaying) window.SetCursor(32649);
g_drag_seek = x / window.Width ;
g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
if(g_drag){
g_drag_seek = x / window.Width;
g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
}
if(on_mouse_sb || g_drag) {
window.Repaint();
}
}
function on_mouse_leave() {
on_mouse_sb = false;
window.SetCursor(32512);
window.Repaint();
}
function on_playback_new_track(info) {
window.Repaint();
}
function on_playback_stop(reason) {
window.Repaint();
}
function on_playback_seek(time) {
window.Repaint();
}
function on_playback_time(time) {
window.Repaint();
}
function on_mouse_wheel(delta) {
fb.PlaybackTime = delta>0 ? fb.PlaybackTime + 1 : fb.PlaybackTime - 1;
window.Repaint();
}
function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
var ret = 1;
_menu.AppendMenuItem(0x00000000, ret ++, "PBTime");
_menu.AppendMenuItem(0x00000000, ret ++, "PBTime, seek");
_menu.AppendMenuItem(0x00000000, ret ++, "PBTime, seek, PBLength");
_menu.AppendMenuItem(0x00000800, 0, 0);
_menu.AppendMenuItem(0x00000000, ret ++, "Configure ...");
_menu.CheckMenuRadioItem(1, ret, seek_mode);
_menu.EnableMenuItem(seek_mode, 1);
ret = _menu.TrackPopupMenu(x, y);
if (ret == 0) return;
switch (ret) {
case 1:
utils.WriteINI( fb.FoobarPath + 'seekbar.ini', 'seekbar_mode', 'seek_mode', 1);
break;
case 2:
utils.WriteINI( fb.FoobarPath + 'seekbar.ini', 'seekbar_mode', 'seek_mode', 2);
break;
case 3:
utils.WriteINI( fb.FoobarPath + 'seekbar.ini', 'seekbar_mode', 'seek_mode', 3);
break;
case 4:{
window.ShowConfigure();
}
break;
_menu.Dispose();
}
return true;
}
Из контекстного меню фубара эта комадна отображает окно информации по всем выделенным трекам в плейлисте, вот и отсюда хотелось вызывать из скрипта то самое окно фубара с инфо по всем трекам: команды properties и file info отображает только по 1 треку (который воспроизводиться). Надо понимать не получиться?vladj:fb.RunContextCommand('File info');
Файл инфо, читай трек инфо, а у каждого трека своё название, как скрипт сможет прочитать такой командой треки с различными названиями ?
function on_mouse_lbtn_dblclk(x, y, mask){
fb.RunContextCommandWithMetadb('Properties', fb.GetSelections());
}
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
var font = gdi.Font("Arial",10,1);
var elp_group;
var fso = new ActiveXObject("Scripting.FileSystemObject");
//var path = fb.ProfilePath + "\\maybe\\settings\\";
var path = fb.ProfilePath;
if(!fso.FileExists(path + "elp_group_" + 1)) fso.CreateTextFile(path + "elp_group_" + 1, true);
function on_paint(gr) {
var ww = window.Width;
var wh = window.Height;
gr.DrawString( "elp_group = " + elp_group, font, RGBA(0,0,0,255), 1, 10, ww, wh, 0 );
}
function on_mouse_lbtn_up(x, y){
var _menu = window.CreatePopupMenu();
var ret = 1;
_menu.AppendMenuItem(0x00000000, ret ++, "Group 1");
_menu.AppendMenuItem(0x00000000, ret ++, "Group 2");
_menu.AppendMenuItem(0x00000000, ret ++, "Group 3");
_menu.AppendMenuItem(0x00000800, 0, 0);
_menu.AppendMenuItem(0x00000000, ret ++, "Configure ...");
_menu.CheckMenuRadioItem(1, ret, elp_group);
_menu.EnableMenuItem(elp_group, 1);
ret = _menu.TrackPopupMenu(x, y);
if (ret == 0) return;
elp_group = ret ;
switch (ret) {
case 1:
fso.deleteFile( path + "elp_group_" + '*' );
fso.CreateTextFile( path + "elp_group_" + 1 );
break;
case 2:
fso.deleteFile( path + "elp_group_" + '*' );
fso.CreateTextFile( path + "elp_group_" + 2 );
break;
case 3:
fso.deleteFile( path + "elp_group_" + '*' );
fso.CreateTextFile( path + "elp_group_" + 3 );
break;
case 4:{
window.ShowConfigure();
}
break;
_menu.Dispose();
}
return true;
}
function on_mouse_move(x,y){
window.SetCursor(32649);
window.Repaint();
}
function on_mouse_leave() {
window.SetCursor(32512);
window.Repaint();
}
if (im.trace(x, y) && im.images.length > 0 && (!this.check_feature("thumbs") || th.mode != "grid")) {
_menu.AppendMenuItem(MF_STRING, 400, "Открыть папку с этими файлами");
_menu.AppendMenuItem(MF_STRING, 401, "Открыть изображение");
_menu.AppendMenuItem(MF_STRING, 402, "Удалить изображение");
_menu.AppendMenuSeparator();
_menu.AppendMenuItem(MF_STRING, 404, "Обрезать (фокусировать по центру)");
_menu.AppendMenuItem(MF_STRING, 405, "Обрезать (фокусировать по верху)");
_menu.AppendMenuItem(MF_STRING, 406, "Отцентровать");
_menu.AppendMenuItem(MF_STRING, 407, "Растянуть");
_menu.CheckMenuRadioItem(404, 407, im.type == "crop" ? 404 : im.type == "crop top" ? 405 : im.type == "centre" ? 406 : 407);
_menu.AppendMenuSeparator();
}
case 400:
this.run("explorer /select,\"" + im.files[im.index] + "\"");
break;
case 401:
this.run("\"" + im.files[im.index] + "\"");
break;
case 402:
im.delete_image();
break;
case 403:
im.update();
break;
case 404:
case 405:
case 406:
case 407:
im.type = idx == 404 ? "crop" : idx == 405 ? "crop top" : idx == 406 ? "centre" : "stretch";
window.SetProperty("image_type", im.type);
window.Repaint();
break;
Дело не в плагине, Last.fm что-то поменял в своём API и теперь выдаёт только одну фотографию.Крепыш:вместо 5 фотографий (как было раньше) показывает только одно фото.
Уже не важно - нашёл замену (см. выше). Надо только в скрипт добавить команду для сохранения фотографий в указанную папку.spijet:Дело не в плагине, Last.fm что-то поменял в своём API и теперь выдаёт только одну фотографию.
WSH-скрипт от marc2003 показывает 5 фото исполнителя.vladj:И что, снова качает по пять фото ?
Написал на AutoIt утилиту, добавил в меню плагина Now Playing от marc2003 пункт "Сохранить изображение...", при выборе которого можно указать папку для сохранения файла изображения.Крепыш:Как в меню добавить команду "Сохранить изображение"
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
var font = gdi.Font("arial",10,1);
var fader = 0;
var fader2;
var fading_step = 1;
var fading_step_on = 5;
var g_timer;
var g_timer_refresh = 10;
var delay = 200;
var fading_step_v = 1;
var v_st = 0;
var g_timer_v;
var g_timer_refresh_v = 3;
var g_drag = 0;
var v;
var text, text_muted, text_width, left_right;
var row = 1;
var line_height = 2;
var txt_row = row + line_height + 1;
var on_mouse = false;
var state = 0;
function pos2vol(pos) { return (50 * Math.log(0.99 * pos + 0.01) / Math.LN10); }
function on_paint(gr) {
var volume = fb.Volume;
var www = Math.pow(10,((fb.Volume+100)/50));
var ww = window.Width;
var wh = window.Height;
var pos = www*ww/100;
if(volume == -100) pos=0;
gr.FillSolidRect( 0, row + line_height, pos, 1, RGBA(0,0,0,100));
gr.FillSolidRect( 0, row, pos, line_height, RGBA(100,113,149,100));
text_muted = volume == -100 ? " Muted" : "" ;
gr.DrawString( text_muted, font, RGB(0,0,0), 1, txt_row + 1, text_width, wh, 0);
gr.DrawString( text_muted, font, RGB(100,115,143), 0, txt_row, text_width, wh, 0);
text = volume == -100 ? " Muted" : " " + Math.round(volume) + " db " ;
text_width = gr.CalcTextWidth(text, font);
left_right = pos < text_width ? 1 : 0;
if(left_right==1) {
gr.DrawString( text, font, RGBA(0,0,0,fader), 1, txt_row + 1, text_width, wh, 0);
gr.DrawString( text, font, RGBA(0,157,255,fader), 0, txt_row, text_width, wh, 0);
} else {
gr.DrawString( text, font, RGBA(0,0,0,fader), pos-text_width + 1, txt_row + 1, text_width, wh, 0);
gr.DrawString( text, font, RGBA(0,157,255,fader), pos-text_width, txt_row, text_width, wh, 0);
}
fader2 = fader - 150 < 0 ? 0 : fader - 150 ;
gr.FillSolidRect( 0, 1, pos, line_height, RGBA(0,129,215,fader2));
// gr.FillSolidRect( pos, 1, ww - pos , line_height , RGBA(0,20,40,fader2));
if(on_mouse){
delay = 400;
window.ClearInterval(g_timer);
g_timer = window.SetInterval(function(){
fader = fader + fading_step_on ;
if ( fader >= 255) { fader = 255; window.ClearInterval(g_timer)}
window.Repaint();
}, g_timer_refresh);
}
if(!on_mouse){
window.ClearInterval(g_timer);
g_timer = window.SetInterval(function(){
if ( delay > 0 ) { delay = delay - fading_step };
if ( delay == 0) { fader = fader - fading_step };
if ( fader <= 0) { fader = 0; window.ClearInterval(g_timer)}
window.Repaint();
}, g_timer_refresh);
}
// gr.DrawString( delay + " " + fader , font, RGBA(250,250,250,255), 50, 1, ww, wh, 0 );
}
function on_mouse_lbtn_down(x,y) {
g_drag = 1;
}
function on_mouse_lbtn_up(x,y) {
on_mouse_move(x,y);
g_drag = 0;
}
function on_mouse_move(x,y) {
on_mouse = true;
window.SetCursor(32649);
if(g_drag) {
v = (x / window.Width)*100;
v = (v<0) ? 0 : (v<100) ? v : 100;
v = -100 + pos2vol(v);
if(fb.Volume!=v) fb.Volume = v;
}
if(on_mouse || g_drag) {
window.Repaint();
}
}
function on_mouse_leave() {
on_mouse = false;
window.SetCursor(32512);
window.Repaint();
}
function on_mouse_wheel(delta) {
if(delta>0)
fb.VolumeUp();
else
fb.VolumeDown();
}
function on_volume_change(val) {
window.Repaint();
}
function on_mouse_mbtn_up(x,y) {
if ( fb.Volume > -100){
v_st = 1;
state =fb.Volume
// fb.Volume = -100;
}else{
v_st = 2;
// fb.Volume = state;
}
window.ClearInterval(g_timer_v);
g_timer_v = window.SetInterval(function(){
if ( v_st == 1){
fb.Volume = fb.Volume - fading_step_v;
if ( fb.Volume <= -100 ) { v_st = 0; window.ClearInterval(g_timer_v)}
}
if ( v_st == 2){
fb.Volume = fb.Volume + fading_step_v;
if ( fb.Volume >= state) { v_st = 0; window.ClearInterval(g_timer_v)}
}
window.Repaint();
}, g_timer_refresh_v);
}
Вернуться в Секреты foobar2000