
http://rghost.ru/6Hq9Zf7kQ
ЗЫ - доделаю, - выложу на сайт
===================
там в папке temes ещё более интересные темы, но и более требовательные к ресурсам
Список разделов › foobar2000 › Секреты foobar2000
https://hydrogenaud.io/index.php/topic,110516.msg915863.html#msg915863А как там Марк сделал, можно ссылку на его ветку
Я вызываю проблему за 5 секунд (сравнение марковский скрипт и Ваш ):Тестирую на Rадио Relax(взял у Вас) и на {EX.UA} Rock, Blues, Rock & Roll (MC Web ). Пока никаких проблем. Если нет изображения или текста, то сразу иду на сайт (по отдельной кнопке) - если нет, то этого и нет на сайте.
Вчера вечером были проблемы, но если заходил на сайт - "ошибка...нет доступа к странице"
JScript Panel (Biography Text && Picture. www.last.fm): Ошибка выполнения JavaScript:
File: <main>
Line: 521, Col: 28
<source text only available at compile time>
нет такогоУ всех такое?
Странно :затык с картинками решен
Хорошо работает :)Вот как выглядит у меня
Вот duzzy сегодня ещё тестировал на чистом Фубаре:No_mad » Вчера, 16:48
kgena_ua - вот, чтоб не быть голословным моя DUI-WSH сборка (моя -это к слову сборка, а WSH - это в основном к вам)
http://rghost.ru/6Hq9Zf7kQ
Была проблема, но после правки автором - в последней версии скрипта все наладилось (на 32 странице скрипт). Проверяйте. У меня заработало.seriousstas:Попробуй поклацай несколько штук (смени язык) и посмотри ,как
подгружает картинки(WSH Biography Text & Picture Llast.fm) ... Помогает только перезагрузка Фубара
No_mad, я думаю в этом пока нет необходимости:No_mad:"Unknown Artist" или "" и т.д. - картинку не запрашивать.
MC Web, спасибо, я и забыл про это. Это не сложно - добавим.MC Web:не сохраняются настройки Авто-смены изображений
Я знаю почему, осталось узнать как......MC Web:не всегда отображалось сообщение Ничего не найдено
Я не с точки зрения нагрузки на комп, а с точки зрения нагрузки на зрителя - они иногда для треков с непрописанными или неправильными тегами такие жуткие картинки выводят (видимо с пиратством борются :) )kgena_ua:основная "нагрузка" идет при сохранении картинок
Поиском не получилось найти ни здесь , ни на http://www.ex.ua/ ..Rock, Blues, Rock & Roll
У меня даже не подвисает ничего - комп быстрый , а просто перестаёт качать любые картинки ..окно плеера подвиснет - станцию не нашел - перескочил на след + отпустило
Залипания плеера почти не встречал , а у Тебя даПолноценного ступора с загрузкой поймать не получилось на новой версии твоего скрипта.(ступор/затык --- невозможность загрузки картинок вообще до последующего рестарта фубара как в твоем скрипте так и
// ==PREPROCESSOR==
// @name "Biography Text && Picture. www.last.fm"
// @version "10022016"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==
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)); }
function getRed(color) {return ((color >> 16) & 0xff);};
function getGreen(color) {return ((color >> 8) & 0xff);};
function getBlue(color) {return (color & 0xff);};
var a_font = gdi.Font("Arial",12, 1);
var b_font = gdi.Font("Arial",12, 0);
var ww,wh;
var on_mouse = false;
DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;
DT_WORDBREAK = 0x00000010;
DT_CALCRECT = 0x00000400;
DT_NOPREFIX = 0x00000800;
var bgcolor = RGB(30,30,30);
var a_color = RGB(220,220,220);
var b_color = RGB(255,255,230);
var transparent = 200;
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
var doc = new ActiveXObject("htmlfile");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
//if(!fso.FolderExists(tmp_b_path)) {fso.CreateFolder(tmp_b_path)};
var nocover_path = fb.ProfilePath + "nocover.png";
var g_img = null;
var text = "";
var artist, old_artis;
var files = [], selected = 0;
var txt_x = window.GetProperty("txt_x", window.Width / 2);
var txt_y = window.GetProperty("txt_y", window.Height / 2);
var abc_lang = new Array("", "ru/");
var abc = window.GetProperty("abc", 0);
var if_not_found = new Array(". . .", ". . .");
var artist_x;
var artist_y;
var b_x;
var b_y;
var t_margin = 15;
var string_width;
var b_text_row_height = 0;
var b_text_rows = 0;
var b_text_height = 0;
var s_text = 0;
var strings_array = [];
var b_text_array = [];
var delta_x, delta_y;
var k_down = false;
var text_scroll = false;
var limit = window.GetProperty("download_limit",5);
var p_margn = 10;
var selection_mode = window.GetProperty("selection_mode", 0);
var metadb;
on_item_focus_change();
var WshShell = new ActiveXObject("WScript.Shell");
var script_path = fb.ProfilePath + "\\tmp_Biography\\download\\";
var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";
function on_paint(gr){
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
paint(gr);
if(set_cycle){
gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));
} else{
gr.FillSolidRect(txt_x, txt_y, ww - txt_x, wh - txt_y, RGBA(getRed(bgcolor),getGreen(bgcolor),getBlue(bgcolor),transparent));
}
gr.GdiDrawText(artist, a_font, a_color, artist_x, artist_y, ww - artist_x, wh, DT_LEFT | DT_WORD_ELLIPSIS );
for (var i = 0; i < b_text_height; i++) {
gr.GdiDrawText(b_text_array[i + s_text], b_font, b_color, b_x, b_y + b_text_row_height * i, ww, wh, DT_LEFT );
}
var txt_cycle = cycle == 0 ? "off" : cycle + " sec";
set_cycle && gr.GdiDrawText("auto cycle \n" + txt_cycle, b_font, b_color, 15, 15, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
gr.GdiDrawText("", b_font, b_color, 15, 15, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}
function on_mouse_wheel(delta) {
ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
if (!delay && !text_scroll && !ShiftDown){
delay = true;
fdelay();
get_files_from_dir();
if (delta < 0) {selected = selected <= 0 ? files.length - 1 : selected = selected - 1};
if (delta > 0) {selected = selected >= files.length - 1 ? 0 : selected = selected + 1};
}
if (text_scroll && !ShiftDown){
if (b_text_rows > b_text_height){
if (delta < 0) {s_text = b_text_rows - s_text <= b_text_height ? b_text_rows - b_text_height : s_text += 1}
if (delta > 0) {s_text = s_text <= 0 ? 0 : s_text -= 1}
}
}
if (ShiftDown) {
set_cycle = true;
if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;};
if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;};
window.SetProperty("auto cycle(sec)", cycle);
}
window.Repaint();
}
function on_playlist_switch() {
on_item_focus_change();
}
function on_playback_new_track() {
on_item_focus_change();
}
function on_playback_dynamic_info_track() {
on_item_focus_change();
}
function on_playback_stop() {
on_item_focus_change();
}
function on_selection_changed(metadb) {
on_item_focus_change();
}
function on_item_focus_change() {
switch (selection_mode) {
case 0:
metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
break;
case 1:
metadb = fb.GetFocusItem();
break;
}
if (metadb) on_metadb_changed();
}
function Eval(field) {
if (!metadb) return;
path = fb.Titleformat("%path%").EvalWithMetadb(metadb);
//return path.indexOf('://') > 0 ? fb.TitleFormat("[" + field + "]").Eval() : fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
return fb.Titleformat("[" + field + "]").EvalWithMetadb(metadb) ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval(true);
}
function on_metadb_changed() {
if (!metadb) return;
artist = Eval("%artist%");
if (artist != old_artis){
CollectGarbage();
g_img = null;
files = [];
del_files_from_dir();
selected = 0;
s_text = 0;
text = "";
get_b_text_array()
get_pic();
old_artis = artist;
}
window.Repaint();
}
function get_pic(){
//var url1 = ("http://www.last.fm/music/" + encodeURIComponent(artist) + "/+albums");
var url1 = ("http://www.last.fm/music/" + encodeURIComponent(artist) + "/+images");
xmlhttp.open("GET", url1, true);
xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
qqq= xmlhttp.status; window.Repaint();
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp.responsetext;
var data = div.getElementsByTagName("img");
var urls = [];
for (i = 0; i < data.length; i++) {
if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/avatar170s") == 0) urls.push(data[i].src.replace("avatar170s", "")); //
//if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/300") == 0) urls.push(data[i].src.replace("300", "")); //
}
for (i = 1; i < Math.min(urls.length, limit) + 1; i++) {
file = "\"" + tmp_b_path + artist + "_" + i + ".jpg" + "\"";
WshShell.Run(vbs + " " + urls[i] + " " + file, false);
}
doc.close();
}
get_b_text();
}
}
}
function get_p(url, i){
xmlhttp.open("GET", url, true);
xmlhttp.send();
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
Stream.Open;
Stream.Type = 1;
Stream.Write(xmlhttp.ResponseBody);
Stream.Position = 0;
try {
Stream.SaveToFile(tmp_b_path + artist + "_" + i + ".jpg");
} catch(e) {};
Stream.Close;
}
}
}
function get_files_from_dir() {
files = [];
var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
while ( !e.atEnd() ) {
var name = e.item().Name;
if (name.indexOf(artist) == 0){
files.push(tmp_b_path + name);
}
e.moveNext();
}
}
var delay = false;
function fdelay(){
var delay_timer = window.SetTimeout(function() {
delay = false;
window.Repaint();
}, 200);
}
function paint(gr){
g_img = gdi.Image(files[selected]);
if (!g_img){
try {
g_img = gdi.Image(nocover_path);
} catch(e) {};
}
if (g_img){
var scale_w = (ww - p_margn * 2) / g_img.Width;
var scale_h = (wh - p_margn * 2) / g_img.Height;
var scale = Math.min(scale_w, scale_h);
gr.DrawImage(g_img, p_margn, p_margn, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
}
}
function on_mouse_move(x, y) {
on_mouse = true;
window.SetCursor(32649);
if (k_down){
txt_x = x - delta_x ;
txt_y = y - delta_y;
txt_x = txt_x <= 0 ? 0 : txt_x > ww - 50 ? ww - 50: txt_x;
txt_y = txt_y <= 0 ? 0 : txt_y > wh - 50 ? wh - 50: txt_y;
get_b_text_array();
window.Repaint();
}
if (x >= txt_x && y >= txt_y){
text_scroll = true;
} else {
text_scroll = false;
}
get_b_text_array();
}
function on_mouse_leave() {
on_mouse = false;
window.SetCursor(32512);
window.Repaint();
}
function on_mouse_lbtn_down(x,y){
if (x >= txt_x && y >= txt_y){
k_down = true;
delta_x = x - txt_x;
delta_y = y - txt_y;
}
}
function on_mouse_lbtn_up(x,y){
window.SetProperty("txt_x", txt_x);
window.SetProperty("txt_y", txt_y);
k_down = false;
}
function on_size(){
ww = window.Width;
wh = window.Height;
txt_x = window.GetProperty("txt_x");
txt_y = window.GetProperty("txt_y");
txt_x = txt_x >= ww - 50 && txt_x > 0 ? ww - 50 : txt_x;
txt_y = txt_y >= wh - 50 && txt_y > 0 ? wh - 50 : txt_y;
get_b_text_array();
}
function get_b_text(){
// if (artist == null) return;
var url2 = ("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist) + "/+wiki");
xmlhttp.open("GET", url2, true);
xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp.responsetext;
var data = div.getElementsByTagName("div");
for (i = 0; i < data.length; i++) {
if (data[i].className == "wiki-content") {
text = strip_tags(data[i].innerHTML);
break;
}
}
doc.close();
}
if (text == "") text = if_not_found[abc];
get_b_text_array();
window.Repaint();
}
}
}
function strip_tags(t) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = t.replace(/<[Pp][^>]*>/g, "").replace(/<\/[Pp]>/g, "<br>").replace(/\n/g, "<br>");
var text = div.innerText;
doc.close();
return text;
}
function get_b_text_array() {
artist_x = txt_x + t_margin;
artist_y = txt_y + t_margin;
strings_array = [];
b_text_array = [];
temp_bmp = gdi.CreateImage(1, 1);
temp_gr = temp_bmp.GetGraphics();
b_x = txt_x + t_margin;
b_y = txt_y + temp_gr.CalcTextHeight("text", a_font) + t_margin * 2;
b_text_row_height = temp_gr.CalcTextHeight("text", b_font)
string_width = Math.max(ww - b_x - t_margin, 0);
if (text) strings_array = temp_gr.EstimateLineWrap(text, b_font, string_width).toArray();
for (var i = 0; i < strings_array.length; i += 2) {
b_text_array.push(strings_array[i].replace(/^\s+|\s+$/g, ""));
}
b_text_rows = b_text_array.length;
b_text_height = Math.ceil((wh - b_y - 20) / b_text_row_height);
temp_bmp.ReleaseGraphics(temp_gr);
temp_bmp.Dispose();
temp_gr = null;
temp_bmp = null;
}
function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
var i = 1;
MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
MF_SEPARATOR = 0x00000800;
_menu.AppendMenuItem(MF_ENABLED, i++, "EN text");
_menu.AppendMenuItem(MF_ENABLED, i++, "RU text");
_menu.CheckMenuRadioItem(1, i, abc + 1);
_menu.EnableMenuItem(abc + 1, 1);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, i++, "Prefer now playing");
_menu.AppendMenuItem(MF_ENABLED, i++, "Follow selected track");
_menu.CheckMenuRadioItem(i - 2, i , selection_mode + 3);
_menu.EnableMenuItem(selection_mode + 3, 1);
ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
// if (ShiftDown) {
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 10, "Reload");
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 20, "Properties");
_menu.AppendMenuItem(MF_ENABLED, 30, "Configure ...");
// }
ret = _menu.TrackPopupMenu(x,y);
switch (ret) {
case 1:
abc = 0;
window.SetProperty("abc", abc);
s_text = 0;
text = "";
get_b_text();
break;
case 2:
abc = 1;
window.SetProperty("abc", abc);
s_text = 0;
text = "";
get_b_text();
break;
case 3:
selection_mode = 0;
window.SetProperty("selection_mode", selection_mode);
on_item_focus_change();
break;
case 4:
selection_mode = 1;
window.SetProperty("selection_mode", selection_mode);
on_item_focus_change();
break;
case 10:
window.Reload();
break;
case 20:
window.ShowProperties();
break;
case 30:
window.ShowConfigure();
break;
}
_menu.Dispose();
return true;
}
var cycle = window.GetProperty("auto cycle(sec)", 0);
var set_cycle = false;
var timer = window.SetInterval(on_timer, 1000);
var step = 0;
var dis;
function on_timer(id) {
ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
step = ShiftDown ? 0 : step + 1;
if (files.length == 0) {get_files_from_dir()};
if (cycle > 0 && step >= cycle && !ShiftDown){
selected = selected >= files.length - 1 ? 0 : selected = selected + 1;
window.Repaint();
step = 0;
}
if (!ShiftDown) {
if (set_cycle) dis--; window.Repaint();
if (dis <= 0){
set_cycle = false;
window.Repaint();
}
} else {
dis = 2;
}
}
function on_key_down(vkey) {
if (vkey == 16){
set_cycle = true;
dis = 2;
window.Repaint();
}
}
function on_mouse_lbtn_dblclk (x,y){
if ( files[selected] && !text_scroll) WshShell.run( '"' + files[selected] + '"' );
}
var del_files = [];
function del_files_from_dir() {
del_files = [];
var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
while ( !e.atEnd() ) {
var name = e.item().Name;
try {
//if (name.indexOf(artist) < 0)
fso.deleteFile(tmp_b_path + name );
} catch(e) {};
e.moveNext();
}
window.Repaint();
}
function on_mouse_lbtn_dblclk (x,y){
//if(x>... && y> //дблклк по "тексту"
abc = abc >= 2 ? abc+1 : 0;
window.SetProperty("abc", abc);
text = "";
get_b_text();
}
можно, но через подменю для слепого муторно, хотелось бы не целясь в пункт меню просто кликнуть по тексту в любом месте сразу дблклк. А лучше конечно автоматом - начинаем с поиска русского текста, если его нет то повторить поиск англ. и снова встать в дефолтный русский для след. разаkgena_ua:переключать язык лев.кл. ?
Вернуться в Секреты foobar2000