Скрипты для foo_uie_wsh_panel_mod

Список разделов foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #841 duzzy » 04.03.2016, 00:54

kgena_ua
Поздравляю с прошедшим Днем Рождения. Счастья Здоровья Успехов и Удачи Вам и Вашим Близким !!! :beer:
по скрипту, картинки AC/DC начинает грузить только после добавления замены с "/" на " - " ... artist = Eval("%artist%").replace("/"," - ");
возможно если ты посчитаешь нужным можно добавить функцию замены в стороке разных непотребных символов :wink:
еще в gr.GdiDrawText(......, DT_LEFT|0x00000800); нужно это добавить DT_NOPREFIX = 0x00000800; для отображения символа "&" иначе вместо него нижнее тире "_".


seriousstas
Привет !
Для этих целей, я про сравнение текста в файлах лучше Araxis Merge пользовать, на мой взгляд удобнее...
duzzy
Репутация: 25
С нами: 8 лет 8 месяцев

Сообщение #842 seriousstas » 04.03.2016, 16:37

Привет !
Спасибо , Araxis Merge - уже пользуюсь :beer:
Финал "Марковский картинок" с управлением кнопками :
Изображение
http://www.pccar.ru/showpost.php?p=353594&postcount=1194
Бонусом Аспект "Centr+" - в центре с увеличением, который Марк припрятал)))
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #843 kgena_ua » 06.03.2016, 01:05

Всем спасибо
duzzy:Eval("%artist%").replace("/"," - ");
Наверное как частный случай, может быть. Только я не люблю частные случаи :smile:
duzzy:DT_NOPREFIX
Да, конечно, :beer:
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #844 kgena_ua » 06.03.2016, 12:07

duzzy, привет.
По ACDC.
Вот как хранятся картинки на сайте. Пример - Metallica.
Безымянный.png

Тут все понятно. Мы выбираем изображения по условиям
Код: Выделить всё
  if (data[i].className == "image-list-image"){     
и
Код: Выделить всё
if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/avatar170s") == 0)
Так для всех исполнителей.
А по ACDC - я их вообще не могу найти на сайте, вернее они есть :smile:, а вот в HTML коде я их не вижу. Как они хранятся ???

Добавлено спустя 3 часа 56 минут:
duzzy,
https://forums.plex.tv/discussion/182237/artist-with-in-name-not-interpreted-by-pms-correctly
duzzy:Eval("%artist%").replace("/"," - ");

Добавлено спустя 5 минут 53 секунды:
Или на все случаи:
Код: Выделить всё
artist = Eval("%artist%").replace(/\//g,"-");
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #845 seriousstas » 06.03.2016, 16:26

kgena_ua
я их вообще не могу найти на сайте
Коды для URL-ов можно посмотреть :
http://www.w3schools.com/tags/ref_urlencode.asp
соответственно правильным будет:
Код: Выделить всё
http://www.last.fm/ru/music/AC%2FDC
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #846 duzzy » 06.03.2016, 18:58

kgena_ua, привет ! :smile:
Спасибо за подсказку с /\//g, я пока не совсем понимаю как сними работать, не так сказал, вернее будет... понимать более менее понимаю а вот написать то что нужно мне пока трудно.
Как они там хранятся я не совсем в курсе, это я просто эксперимент ставил по замене, и он удачно прошел.

Попробовать решил по тому что сам знаешь у кого))) картинки грузятся в папку AC-DC и тут до меня дошло что это замена символов)))
Почему решил попробовать, по тому что отвязывал скрипт от сборки который давно хотел отвязать, скрипт CoverFlow из сборки вьетнамца...
Изменил в скрипте сортировку на отображение папками, и при отображении папками получил вместо альбома артиста отображение названия пути к папке в таком виде например: D:\Music\Daft Punk - Random Access Memories... поэтому решил попробовать замену и у меня удачно получилось убрать путь до папки т.е. теперь вид такой... Daft Punk - Random Access Memories...
В скрипте он создает объект в котором и производит операции по листингу того что есть в плейлисте, и в этот момент мы просто делаем замену полученной строки... делал так

добавил в пропертис пути до папок...
var library_path_ = window.GetProperty("_SYS: Remove Library Path from Cell", "D:\\Music\\").split(";");

затем в полученных названиях меняю пути на пустышку...
for (var j = 0; j < library_path_.length; j++)
string = string.replace(library_path_[j], "");
возможно не совсем правильно))), но этот вариант работает :wink:

Выглядит он так...
Изображение

Короткий видосик как он работает...
https://youtu.be/EshjYWnv_jM

Его сборка...
сборка откуда тащил скрипт
у него есть в ней интересные идеи по управлению скриптами через функцию on_notify_data(name, info)...
Забыл сказать, некоторые скрипты в его сборке закрыты от пользователя, в скрипт можно попасть через комбинацию клавиш Ctrl + Shift + Alt + кнопка Win + правый клик.
duzzy
Репутация: 25
С нами: 8 лет 8 месяцев

Сообщение #847 kgena_ua » 07.03.2016, 11:53

duzzy:я пока не совсем понимаю как сними работать
.replace(/\//g,"-");
тут мы заменяем все "/", а не первый найденный, на "-", ну так, на всякий случай для других исполнителей, если такое повторится.
duzzy, если я правильно понял, то вот чем я пользуюсь:
https://javascript.ru/RegExp
duzzy:Ctrl + Shift + Alt + кнопка Win + правый клик.
Да....
По ACDC да, Вы правы, это не частный случай, как я писал, просто:
Artist with "/" in name not interpreted by PMS correctly
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #848 seriousstas » 07.03.2016, 12:24

kgena_ua
duzzy
Мне стало интересно ,чего Вы тут делаете ? :smile: это всё из-за AC/DC ?
Я так понимаю нам нужно получить правильную ссылку , если используется слеш или другие знаки в названиях ..
Тогда вы пишите хоть так
http://www.last.fm/ru/music/AC_DC
хоть так
http://www.last.fm/ru/music/AC-DC
хоть просто
http://www.last.fm/ru/music/ACDC
Сайт всё равно поправит на :
Код: Выделить всё
http://www.last.fm/ru/music/AC%2FDC
Тогда какой смыл в этом :think: Почему сразу не заменить на правильный код ? :
Код: Выделить всё
artist = Eval("%artist%").replace("/","%2F");
Откуда берутся коды - ссылку давал ))

Только заметил, что те фото, что на сайте берут файл из папки /770x0/ . Это максимально увеличенное фото . Может-кому и пригодится для
больших экранов ...
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #849 zeremy » 07.03.2016, 23:32

kgena_ua
duzzy
seriousstas

Problem is with illegal characters in the filename.

Код: Выделить всё
// ==PREPROCESSOR==
// @name "Biography Text && Picture. www.last.fm"
// @author "kgena_ua - mod zeremy for multilanguage "
// @version "07032016"
// @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);
};

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;
DT_END_ELLIPSIS = 0x00008000;

var ww, wh;

var font_name_a = window.GetProperty("font name: artist", "Arial");
var font_name_b = window.GetProperty("font name: biography", "Arial");
var font_size_a_d = window.GetProperty("font size: artist (delta)", 0);
var font_size_b = window.GetProperty("font size: biography", 12);
var a_font_style = window.GetProperty("font style: artist", 1);
var b_font_style = window.GetProperty("font style: biography", 0);
var min_font_size = 10;
var max_font_size = 16;

var a_font, b_font;
get_font();

function get_font() {
   a_font = gdi.Font(font_name_a, font_size_b + font_size_a_d, a_font_style);
   b_font = gdi.Font(font_name_b, font_size_b, b_font_style);
}

ColorTypeCUI = {
   text : 0,
   selection_text : 1,
   inactive_selection_text : 2,
   background : 3,
   selection_background : 4,
   inactive_selection_background : 5,
   active_item_frame : 6
};
/*
function get_color(){
bgcolor = window.GetColorCUI(ColorTypeCUI.background);
a_color = window.GetColorCUI(ColorTypeCUI.text);
b_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
}

get_color();
 */

var bgcolor = RGB(31, 41, 48);
var a_color = RGB(220, 220, 220);
var b_color = RGB(255, 255, 230);

var transparent = 200;

var doc = new ActiveXObject("htmlfile");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var WshShell = new ActiveXObject("WScript.Shell");
var script_path = fb.ProfilePath + "\\tmp_Biography\\download\\";
var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";

var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
if (!fso.FolderExists(tmp_b_path)) {
   fso.CreateFolder(tmp_b_path)
};
if (!fso.FolderExists(tmp_b_path + "\\download\\")) {
   fso.CreateFolder(tmp_b_path + "\\download\\")
};
if (!fso.FileExists(tmp_b_path + "\\download\\" + "download.vbs")) {
   create_download_file()
};
var nocover_path = window.GetProperty("nocover path", ".\\nocover\\nocover.png");
var nocover = window.GetProperty("nocover image", false);

var last_fm_logo;
load_last_fm_logo();

var artist, old_artis, filename;

var g_img = null;
var p_margin = window.GetProperty("margin: picture", 10);
var files = [], selected = 0;
var limit = window.GetProperty("download limit", 5);
var cycle = window.GetProperty("auto cycle (sec)", 0);
var pic_scroll = false;

var scrollbar = window.GetProperty("scrollbar", false);
var sb_down = false;
var sb_scroll = false;
var scrollbar_k;
var posy = 0;

var t_margin = window.GetProperty("margin: text", 10);
var txt_x = window.GetProperty("txt_x", window.Width / 2);
var txt_y = window.GetProperty("txt_y", window.Height / 2);
var delta_x, delta_y;
var artist_x, artist_y;
var b_x = 0, b_y = 0;
var text = "";
var s_text = 0;
var string_width;
var strings_array = [];
var b_text_rows = 0;
var b_text_row_height = 0;
var b_text_visable_rows = 0;
var b_text_visable_height = 0;
var b_text_array = [];
var k_down = false;
var text_scroll = false;

var abc_lang = new Array("", "ru/", "es/", "fr/", "it/", "ja/", "pl/", "pt/", "de/", "sv/", "tr/", "zh/");
var abc = window.GetProperty("abc", 0);

var if_not_found = new Array("Nothing found", "Ничего не найдено", "Nothing found", "Nothing found", "Nothing found", "Nothing found", "Nothing found", "Nothing found", "Nothing found", "Nothing found", "Nothing found", "Nothing found"); // var if_not_found = new Array(_("Nothing found"), _("Nothing found"));
var select_p_a = window.GetProperty("pictures/albums", 0);
var select_p_a_old;
var p_a = new Array("images", "albums");

var selection_mode = window.GetProperty("selection mode", 0);
var metadb;

function _(s) {
   switch (abc) {
   case 1:
      if (typeof(ru) != 'undefined' && ru[s]) {
         return ru[s];
      }
      return s;
      break;
   case 2:
      if (typeof(es) != 'undefined' && es[s]) {
         return es[s];
      }
      return s;
      break;
   case 3:
      if (typeof(fr) != 'undefined' && fr[s]) {
         return fr[s];
      }
      return s;
      break;
   case 4:
      if (typeof(it) != 'undefined' && it[s]) {
         return it[s];
      }
      return s;
      break;
   case 5:
      if (typeof(ja) != 'undefined' && ja[s]) {
         return ja[s];
      }
      return s;
      break;
   case 6:
      if (typeof(pl) != 'undefined' && pl[s]) {
         return pl[s];
      }
      return s;
      break;
   case 7:
      if (typeof(pt) != 'undefined' && pt[s]) {
         return pt[s];
      }
      return s;
      break;
   case 8:
      if (typeof(de) != 'undefined' && de[s]) {
         return de[s];
      }
      return s;
      break;
   case 9:
      if (typeof(sv) != 'undefined' && sv[s]) {
         return sv[s];
      }
      return s;
      break;
   case 10:
      if (typeof(tr) != 'undefined' && tr[s]) {
         return tr[s];
      }
      return s;
      break;
   case 11:
      if (typeof(zh) != 'undefined' && zh[s]) {
         return zh[s];
      }
      return s;
      break;

   default:
      return s;
   }
}

var ru = {
   "Nothing found" : "Ничего не найдено",
   "off" : "Отключено",
   "sec" : "сек",
   "auto cycle" : "Зацикливание изображений",
   "Prefer now playing" : "Предпочитать воспроизводимый",
   "Follow selected track" : "Следовать за выбранным треком",
   "Artist pictures" : "Фото исполнителя",
   "Albums pictures" : "Обложка альбома",
   "last.fm Artist" : "Страничка исполнителя на Last.fm",
   "Reload" : "Перезагрузить",
   "Properties" : "Свойства WSH",
   "Configure..." : "Настройки WSH..."
};

var es = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var fr = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var it = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var ja = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var pl = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var pt = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var de = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var sv = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var tr = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

var zh = {
   "Nothing found" : "",
   "off" : "",
   "sec" : "",
   "auto cycle" : "",
   "Prefer now playing" : "",
   "Follow selected track" : "",
   "Artist pictures" : "",
   "Albums pictures" : "",
   "last.fm Artist" : "",
   "Reload" : "",
   "Properties" : "",
   "Configure..." : ""
};

on_item_focus_change();

//Remove false string from file names
function clean_filename(filename) {
   return filename.replace(/[\/\\|:]/g, '-').replace(/\*/g, 'x').replace(/"/g, "''").replace(/[?<>]/g, '_');
}

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));
      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);
   } 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, RGB(0, 0, 0), artist_x + 1, artist_y + 2, ww - artist_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX);
   gr.GdiDrawText(artist, a_font, a_color, artist_x, artist_y, ww - artist_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX);

   for (var i = 0; i < b_text_visable_rows; i++) {
      gr.GdiDrawText(b_text_array[i + s_text], b_font, RGB(0, 0, 0), b_x + 1, b_y + b_text_row_height * i + 2, ww, wh, DT_LEFT);
      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);
   }

   scrollbar && draw_scrollbar(gr);

   gr.GdiDrawText("", b_font, b_color, 15, 0, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS);
}

function paint(gr) {
   g_img = gdi.Image(files[selected]);
   if (!g_img && nocover) {
      try {
         g_img = gdi.Image(nocover_path);
      } catch (e) {};
   }

   if (g_img) {
      var scale_w = (ww - p_margin * 2) / g_img.Width;
      var scale_h = (wh - p_margin * 2) / g_img.Height;
      var scale = Math.min(scale_w, scale_h);

      if (files.length > 0) {
         g_img = g_img.CreateRawBitmap();
         gr.GdiDrawBitmap(g_img, p_margin, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
      } else {
         gr.DrawImage(g_img, p_margin, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, 100);
      }
   }

   logo_img = gdi.Image(tmp_b_path + "\\download\\" + "last_fm_logo.jpg");
   if (logo_img && files.length == 0 && !nocover) {
      gr.DrawImage(logo_img, p_margin, p_margin, logo_img.Width * 0.8, logo_img.Height * 0.8, 0, 0, logo_img.Width, logo_img.Height, 0, 255);
   }
}

function draw_scrollbar(gr) {
   scrollbar_h = b_text_rows > b_text_visable_rows ? b_text_visable_height * (b_text_visable_rows / b_text_rows) : 0;
   scrollbar_y = s_text > 0 ? s_text * scrollbar_k : 0;

   gr.FillSolidRect(ww - 4, b_y + scrollbar_y, 2, scrollbar_h, a_color);
}

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%");
   filename = clean_filename(artist);
   if (artist != old_artis || select_p_a != select_p_a_old) {
      CollectGarbage();
      g_img = null;
      files = [];
      del_files_from_dir();
      selected = 0;
      s_text = 0;
      text = "";
      get_b_text_array()
      get_pic();
      old_artis = artist;
      select_p_a_old = select_p_a;
   }
}

function get_pic() {
   xmlhttp1 = new ActiveXObject("Microsoft.XMLHTTP");
   var url1 = ("http://www.last.fm/music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a]);
   xmlhttp1.open("GET", url1, true);
   xmlhttp1.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
   xmlhttp1.send();
   xmlhttp1.onreadystatechange = function () {
      if (xmlhttp1.readyState == 4) {
         if (xmlhttp1.status == 200) {
            doc.open();
            var div = doc.createElement("div");
            div.innerHTML = xmlhttp1.responsetext;
            var data = div.getElementsByTagName("img");
            var urls = [];
            for (i = 0; i < data.length; i++) {
               if (data[i].className == "image-list-image") {
                  if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/avatar170s") == 0)
                     urls.push(data[i].src.replace("avatar170s", ""));
               }
               if (data[i].className == "album-grid-album-art") {
                  if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/300") == 0 && data[i].src.indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0)
                     urls.push(data[i].src.replace("300", ""));
               }
            }
            for (i = 0; i < Math.min(urls.length, limit); i++) {
               file = "\"" + tmp_b_path + filename + "_" + i + "_" + p_a[select_p_a] + ".jpg" + "\"";
               WshShell.Run(vbs + " " + urls[i] + " " + file, false);
            }
            doc.close();
         }
         get_b_text();
      }
   }
}

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(filename) == 0) {
         files.push(tmp_b_path + name);
      }
      e.moveNext();
   }
}

/*function get_files_from_dir() {
files = [];
files = utils.Glob(tmp_b_path + artist + "*.*").toArray();
}
 */
function get_b_text() {
   xmlhttp2 = new ActiveXObject("Microsoft.XMLHTTP");
   var url2 = ("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist) + "/+wiki");
   xmlhttp2.open("GET", url2, true);
   xmlhttp2.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
   xmlhttp2.send();
   xmlhttp2.onreadystatechange = function () {
      if (xmlhttp2.readyState == 4) {
         if (xmlhttp2.status == 200) {
            doc.open();
            var div = doc.createElement("div");
            div.innerHTML = xmlhttp2.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]; // text = if_not_found[abc];
         get_b_text_array();
      }
   }
}

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 - 10, 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_visable_rows = Math.round((wh - b_y - 10) / b_text_row_height);
   b_text_visable_height = Math.round(wh - b_y - 10);

   temp_bmp.ReleaseGraphics(temp_gr);
   temp_bmp.Dispose();
   temp_gr = null;
   temp_bmp = null;

   if (b_text_visable_rows + s_text > b_text_rows && s_text > 0) {
      s_text = b_text_rows - b_text_visable_rows;
   };

   scrollbar_k = b_text_visable_height / b_text_rows;
   window.Repaint();
}

function on_mouse_rbtn_up(x, y) {
   var _menu = window.CreatePopupMenu();
   var _firstgroup = window.CreatePopupMenu();
   var i = 1;

   MF_ENABLED = 0x00000000;
   MF_GRAYED = 0x00000001;
   MF_SEPARATOR = 0x00000800;

   _firstgroup.AppendTo(_menu, MF_ENABLED, "Language / Язык");

   _firstgroup.AppendMenuItem(MF_ENABLED, 101, "EN - English");
   _firstgroup.AppendMenuItem(MF_ENABLED, 102, "RU - Русский");
   _firstgroup.AppendMenuItem(MF_ENABLED, 103, "ES - Español");
   _firstgroup.AppendMenuItem(MF_ENABLED, 104, "FR - Français");
   _firstgroup.AppendMenuItem(MF_ENABLED, 105, "IT - Italiano");
   _firstgroup.AppendMenuItem(MF_ENABLED, 106, "JA - 日本語");
   _firstgroup.AppendMenuItem(MF_ENABLED, 107, "PL - Polski");
   _firstgroup.AppendMenuItem(MF_ENABLED, 108, "PT - Português");
   _firstgroup.AppendMenuItem(MF_ENABLED, 109, "DE - Deutsch");
   _firstgroup.AppendMenuItem(MF_ENABLED, 110, "SV - Svenska");
   _firstgroup.AppendMenuItem(MF_ENABLED, 111, "TR - Türkçe");
   _firstgroup.AppendMenuItem(MF_ENABLED, 112, "ZH - 中国人");

   _menu.CheckMenuRadioItem(101, 112, abc + 101);
   _menu.EnableMenuItem(abc + 101, 1);

   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);

   _menu.AppendMenuItem(MF_ENABLED, 3, _("Prefer now playing"));
   _menu.AppendMenuItem(MF_ENABLED, 4, _("Follow selected track"));
   _menu.CheckMenuRadioItem(3, 4, selection_mode + 3);
   _menu.EnableMenuItem(selection_mode + 3, 1);

   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
   _menu.AppendMenuItem(MF_ENABLED, 5, _("Artist pictures"));
   _menu.AppendMenuItem(MF_ENABLED, 6, _("Albums pictures"));
   _menu.CheckMenuRadioItem(5, 6, select_p_a + 5);
   _menu.EnableMenuItem(select_p_a + 5, 1);

   _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
   var is_artist = artist ? MF_ENABLED : MF_GRAYED;
   _menu.AppendMenuItem(is_artist, 7, _("last.fm Artist"));

   //    if (ShiftDown) {

   if (("Reload" in window)) {
      _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 101:
      abc = 0;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 102:
      abc = 1;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 103:
      abc = 2;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 104:
      abc = 3;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 105:
      abc = 4;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 106:
      abc = 5;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 107:
      abc = 6;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 108:
      abc = 7;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 109:
      abc = 8;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 110:
      abc = 9;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 111:
      abc = 10;
      window.SetProperty("abc", abc);
      s_text = 0;
      text = "";
      get_b_text();
      break;
   case 112:
      abc = 11;
      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 5:
      select_p_a = 0;
      window.SetProperty("pictures/albums", select_p_a);
      on_metadb_changed();
      break;
   case 6:
      select_p_a = 1;
      window.SetProperty("pictures/albums", select_p_a);
      on_metadb_changed();
      break;
   case 7:
      WshShell.run("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist));
      break;
   case 10:
      window.Reload();
      break;
   case 20:
      window.ShowProperties();
      break;
   case 30:
      window.ShowConfigure();
      break;
   }
   _menu.Dispose();
   return true;
}

var timer = window.SetInterval(on_timer, 1000);
var step = 0;
var set_cycle = false;
var dis_timer, dis = 0;

function on_timer(id) {
   step = set_cycle || cycle == 0 ? 0 : step + 1;
   if (files.length == 0) {
      get_files_from_dir();
      window.Repaint();
   };

   if (cycle > 0 && step >= cycle) {
      selected = selected >= files.length - 1 ? 0 : selected = selected + 1;
      window.Repaint();
      step = 0;
   }
}

function on_key_down(vkey) {
   if (vkey == 16) {
      set_cycle = true;
      dis_set();
      window.Repaint();
   }
}

function dis_set() {
   dis = 0;
   dis_timer && window.ClearInterval(dis_timer);
   dis_timer = window.SetInterval(function () {
         if (set_cycle) {
            dis++;
            if (dis == 1) {
               set_cycle = false;
               window.ClearInterval(dis_timer);
               window.Repaint();
            };
         }
      }, 1000);
}

var delay = false;

function fdelay() {
   var delay_timer = window.SetTimeout(function () {
         delay = false;
         window.ClearTimeout(delay_timer);
      }, 200);
}

function del_files_from_dir() {
   var del_files = [];
   var e = new Enumerator(fso.GetFolder(tmp_b_path).Files);
   while (!e.atEnd()) {
      var name = e.item().Name;
      try {
         fso.deleteFile(tmp_b_path + name);
      } catch (e) {};
      e.moveNext();
   }
}

/*
function del_files_from_dir() {
del_files = [];
del_files = utils.Glob(tmp_b_path + "*.*").toArray();


for (i in del_files) {
try {
fso.deleteFile(del_files[i]);
} catch(e) {};
}
}
 */

function load_last_fm_logo() {
   if (!fso.FileExists(tmp_b_path + "\\download\\" + "last_fm_logo.jpg")) {
      var url = "http://www.last.fm/static/images/logo_beta.png?eb6d3ca20e73"
         var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_logo.jpg" + "\"";
      WshShell.Run(vbs + " " + url + " " + file, false);
      var url = "http://static-web.last.fm/static/images/favicon.702b239b6194.ico"
         var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_ico.ico" + "\"";
      WshShell.Run(vbs + " " + url + " " + file, false);
   }
}

function create_download_file() {
   try {
      file = fso.CreateTextFile(tmp_b_path + "\\download\\" + "download.vbs")

         var text =
         "If (WScript.Arguments.Count <> 2) Then" + "\n\r" +
         "   WScript.Quit" + "\n\r" +
         "End If" + "\n\r" + "\n\r" +

         "url = WScript.Arguments(0)" + "\n\r" +
         "file = WScript.Arguments(1)" + "\n\r" + "\n\r" +

         "Set objFSO = Createobject(" + '"Scripting.FileSystemObject"' + ")" + "\n\r" +
         "If objFSO.Fileexists(file) Then" + "\n\r" +
         "   Set objFSO = Nothing" + "\n\r" +
         "   WScript.Quit" + "\n\r" +
         "End If" + "\n\r" + "\n\r" +

         "Set objXMLHTTP = CreateObject(" + '"MSXML2.XMLHTTP"' + ")" + "\n\r" +
         "objXMLHTTP.open " + '"GET"' + ", url,false" + "\n\r" +
         "objXMLHTTP.send()" + "\n\r" + "\n\r" +

         "If objXMLHTTP.Status = 200 Then" + "\n\r" +
         "   Set objADOStream = CreateObject(" + '"ADODB.Stream"' + ")" + "\n\r" +
         "   objADOStream.Open" + "\n\r" +
         "   objADOStream.Type = 1" + "\n\r" +
         "   objADOStream.Write objXMLHTTP.ResponseBody" + "\n\r" +
         "   objADOStream.Position = 0" + "\n\r" +
         "   objADOStream.SaveToFile file" + "\n\r" +
         "   objADOStream.Close" + "\n\r" +
         "   Set objADOStream = Nothing" + "\n\r" +
         "End If" + "\n\r" + "\n\r" +

         "Set objFSO = Nothing" + "\n\r" +
         "Set objXMLHTTP = Nothing";

      file.WriteLine(text);
      file.Close();
   } catch (e) {};
}

function on_mouse_move(x, y) {
   window.SetCursor(32649);

   text_scroll = x >= txt_x && x < ww - 20 && y >= txt_y ? true : false;
   sb_scroll = x > ww - 20 && y >= txt_y ? true : false;
   pic_scroll = !text_scroll && !sb_scroll ? true : false;

   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();
   }

   if (sb_down && scrollbar) {
      posy = y + delta_y;
      s_text = y + delta_y >= 0 ? y + delta_y <= (b_text_rows - b_text_visable_rows) * scrollbar_k ? Math.round(posy / scrollbar_k) : b_text_rows - b_text_visable_rows : 0;
      window.Repaint();
   }
}

function on_mouse_wheel(delta) {
   ShiftDown = utils.IsKeyPressed(0x10) ? true : false;

   if (!delay && pic_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_visable_rows) {
         if (delta < 0) {
            s_text = b_text_rows - s_text <= b_text_visable_rows ? b_text_rows - b_text_visable_rows : s_text += 1
         }
         if (delta > 0) {
            s_text = s_text <= 0 ? 0 : s_text -= 1
         }

      }
   }

   if (!delay && text_scroll && ShiftDown) {
      delay = true;
      fdelay();
      if (delta < 0) {
         font_size_b = font_size_b <= min_font_size ? min_font_size : font_size_b - 2;
      };
      if (delta > 0) {
         font_size_b = font_size_b >= max_font_size ? max_font_size : font_size_b + 2;
      };
      window.SetProperty("font size: biography", font_size_b);
      get_font();
      get_b_text_array();
   }

   if (set_cycle && pic_scroll) {
      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_mouse_lbtn_down(x, y) {
   if (text_scroll) {
      k_down = true;
      delta_x = x - txt_x;
      delta_y = y - txt_y;
   }
   if (sb_scroll) {
      sb_down = true;
      posy = s_text * scrollbar_k;
      delta_y = posy - y;
   }
}

function on_mouse_lbtn_up(x, y) {
   window.SetProperty("txt_x", txt_x);
   window.SetProperty("txt_y", txt_y);
   k_down = false;
   sb_down = false;
}

function on_mouse_lbtn_dblclk(x, y) {
   if (text_scroll) {
      abc = abc == 1 ? 0 : 1;
      window.SetProperty("abc", abc);
      s_text = 0;
      b_text_array = [];
      text = "";
      get_b_text();
   }
   if (files[selected] && pic_scroll)
      WshShell.run('"' + files[selected] + '"');
}

function on_mouse_leave() {
   window.SetCursor(32512);
   window.Repaint();
}

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();
}
zeremy
Репутация: 21
С нами: 8 лет 4 месяца

Сообщение #850 duzzy » 08.03.2016, 05:52

kgena_ua
если я правильно понял, то вот чем я пользуюсь:
Спасибо большое за помощь и учебник :wink:
Да....
сборка вьетнамца работает конечно через одно место, но интересные моменты есть... насколько я понял из всего что увидел в сборке он пытался сделать выбор режимов таймеров для снижения нагрузки на проц при отображении разных панелей.
По ACDC да, Вы правы, это не частный случай, как я писал, просто:
я так и подумал :wink: , просто без замены получается что все вхождения с / будут неправильно обрабатываться, поэтому Марк и заменяет у себя названия со слешем на - тире.


seriousstas
Это я тут эксперименты с заменой ставил на вьетнамском CoverFlow :smile: делал сортировку папками и убирал буквы диска и путь, и вспомнил про AC/DC в скрипте Марка... папка создается AC-DC и видимо запрос идет в том же виде, и решил попробовать на скрипте kgena_ua провести замену строки... теперь все нормально качает без проблем.


zeremy
Thank you very much for the help and tips. :beer:
Now script works fine without problems when fast switching tracks.
May I ask you, you work as a programmer? Or do you just write scripts for foobar just for fun and experience?
Sorry for my bad English.
duzzy
Репутация: 25
С нами: 8 лет 8 месяцев

Сообщение #851 kgena_ua » 08.03.2016, 10:48

macarych, ты где......
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #852 zeremy » 08.03.2016, 11:35

duzzy

I'm not a programmer, just learning for the fun of it...
Glad to help as much as I can.
zeremy
Репутация: 21
С нами: 8 лет 4 месяца

Сообщение #853 seriousstas » 08.03.2016, 15:55

duzzy
просто без замены получается что все вхождения с / будут неправильно обрабатываться, поэтому Марк и заменяет у себя названия со слешем на - тире.
Ну Марк и картинки тянет из не существующей папки ... Движок у сайта умный - всё поправит :)
Теория проверяется в браузере за пару сек и не требует долгих дебатов .
Универсальным - будет последний вариант Жареми .
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #854 kgena_ua » 09.03.2016, 08:17

:smile: Блин, до меня только дошло. Имя файла, вернее недопустимые символы в имени файла.
Файл просто не сохранялся на диске. :oops:
Сайт все воспринимает нормально, и я же видел это:
seriousstas:http://www.last.fm/ru/music/AC%2FDC

Добавлено спустя 4 часа 49 минут:
zeremy,
такой вариант функции:
Код: Выделить всё
function clean_filename(filename) {
    return filename.replace(/[\/\:\*\?\"\<\>\|\s]/g,'_');
}

Добавлено спустя 4 часа 5 минут:
duzzy, привет. Я тут немного переделал скрипт, а именно:
если раньше загрузка текста - get_b_text() вызывалась из get_pic(), то теперерь из on_metadb_changed(), что мне кажется более правильным. Теперь при выборе артист/обложка не перегружается текст биографии.
Нужно протестировать на момент проблем с быстрым переключением.

Скрипт без изменений, связанных с выбором языков, от zeremy.
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Biography Text && Picture. www.last.fm"
// @author "kgena_ua"
// @version "09032016"
// @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);};

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 ww,wh;

var font_name_a = window.GetProperty("font name: artist", "Arial");
var font_name_b = window.GetProperty("font name: biography", "Arial");
var font_size_a_d = window.GetProperty("font size: artist (delta)", 0);
var font_size_b = window.GetProperty("font size: biography", 12);
var a_font_style = window.GetProperty("font style: artist", 1);
var b_font_style = window.GetProperty("font style: biography", 0);
var min_font_size = 10;
var max_font_size = 16;

var a_font, b_font;
get_font();

function get_font(){
    a_font = gdi.Font(font_name_a, font_size_b + font_size_a_d, a_font_style);
    b_font = gdi.Font(font_name_b, font_size_b, b_font_style);
}   
/*
ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};

function get_color(){   
    bgcolor = window.GetColorCUI(ColorTypeCUI.background);
    a_color = window.GetColorCUI(ColorTypeCUI.text);
    b_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
}

get_color();

function on_colors_changed(){
    get_color();
}
*/
var bgcolor = RGB(31,41,48);
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 WshShell = new ActiveXObject("WScript.Shell");
var script_path = fb.ProfilePath + "\\tmp_Biography\\download\\";
var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";

var tmp_b_path = fb.ProfilePath + "\\tmp_Biography\\";
if(!fso.FolderExists(tmp_b_path)) {fso.CreateFolder(tmp_b_path)};
if(!fso.FolderExists(tmp_b_path + "\\download\\")) {fso.CreateFolder(tmp_b_path + "\\download\\")};
if(!fso.FileExists(tmp_b_path + "\\download\\" + "download.vbs")) {create_download_file()};
var nocover_path = window.GetProperty("nocover path",".\\nocover\\nocover.png");
var nocover = window.GetProperty("nocover image", false);

load_last_fm_logo();
var logo_img = gdi.Image(tmp_b_path + "\\download\\" + "last_fm_logo.jpg");

var artist, old_artis, filename;

function clean_filename(filename) {
    return filename.replace(/[\/\:\*\?\"\<\>\|\s]/g,'_');
}

var g_img = null;
var p_margin = window.GetProperty("margin: picture", 10);
var files = [], selected = 0;
var limit = window.GetProperty("download limit",5);
var cycle = window.GetProperty("auto cycle (sec)", 0);
var on_pic = false;

var scrollbar = window.GetProperty("scrollbar", false);
var scrollbar_k;
var sb_posy = 0;
var on_sb = false;
var on_sb_down = false;

var t_margin = window.GetProperty("margin: text", 10);
var txt_x = window.GetProperty("txt_x", window.Width / 2);
var txt_y = window.GetProperty("txt_y", window.Height / 2);
var delta_x, delta_y;
var a_x, a_y;
var b_x, b_y;
var text = "";
var s_text = 0;
var b_text_rows = 0;
var b_text_row_height = 0;
var b_text_visable_rows = 0;
var b_text_visable_height = 0;
var b_text_array = [];
var on_text = false;
var on_text_down = false;

var abc_lang = new Array("", "ru/");
var abc = window.GetProperty("abc", 0);
var if_not_found = new Array(". . .", ". . .");
var select_p_a = window.GetProperty("pictures/albums", 0);
var select_p_a_old;
var p_a = new Array("images", "albums");

var selection_mode = window.GetProperty("selection mode", 0);
var metadb;
on_item_focus_change();

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));   
        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 );   
    } 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, RGB(0,0,0), a_x + 1, a_y + 2, ww - a_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS );   
    gr.GdiDrawText(artist, a_font, a_color, a_x, a_y, ww - a_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS );   

    for (var i = 0; i < b_text_visable_rows; i++) { 
        gr.GdiDrawText(b_text_array[i + s_text], b_font, RGB(0,0,0), b_x + 1, b_y + b_text_row_height * i + 2, ww, wh, DT_LEFT );
        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 );
    } 

    scrollbar && draw_scrollbar(gr);

    gr.GdiDrawText("", b_font, b_color, 15, 0, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
}

function paint(gr){
    g_img = gdi.Image(files[selected]); 
    if (!g_img && nocover){
        try {
            g_img = gdi.Image(nocover_path); 
        } catch(e) {};
    }
   
    if (g_img){
        var scale_w = (ww - p_margin * 2) / g_img.Width;
        var scale_h = (wh - p_margin * 2) / g_img.Height;
        var scale = Math.min(scale_w, scale_h);
       
        if (files.length > 0){
            g_img = g_img.CreateRawBitmap();
            gr.GdiDrawBitmap(g_img, p_margin, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
        } else {
            gr.DrawImage(g_img, p_margin, p_margin, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, 100); 
        }
    }
   
    if (logo_img && files.length == 0 && !nocover){
        gr.DrawImage(logo_img, p_margin, p_margin, logo_img.Width * 0.8, logo_img.Height * 0.8, 0, 0, logo_img.Width, logo_img.Height, 0, 255);   
    }
}

function draw_scrollbar(gr){
    scrollbar_h = b_text_rows > b_text_visable_rows ? b_text_visable_height * (b_text_visable_rows / b_text_rows) : 0;
    scrollbar_y = s_text > 0 ? s_text * scrollbar_k : 0;

    gr.FillSolidRect(ww - 4, b_y + scrollbar_y, 2, scrollbar_h, a_color);
}

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 || select_p_a != select_p_a_old){
        CollectGarbage();
        g_img = null;
        s_text = 0;
        text = "";
        get_b_text_array()       
        get_b_text();
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();       
        old_artis = artist;
        select_p_a_old = select_p_a;
    }
}      

function get_pic(){
    xmlhttp1 = new ActiveXObject("Microsoft.XMLHTTP");     
    var url1 = ("http://www.last.fm/music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a]);      
    xmlhttp1.open("GET", url1, true);      
    xmlhttp1.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");      
    xmlhttp1.send();      
    xmlhttp1.onreadystatechange = function () {      
        if (xmlhttp1.readyState == 4) {      
            if (xmlhttp1.status == 200) {      
                doc.open();      
              var div = doc.createElement("div");
              div.innerHTML = xmlhttp1.responsetext;
              var data = div.getElementsByTagName("img");
              var urls = [];
                for (i = 0; i < data.length; i++) {      
                    if (data[i].className == "image-list-image"){        
                        if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/avatar170s") == 0) urls.push(data[i].src.replace("avatar170s", ""));       
                    }       
                    if (data[i].className == "album-grid-album-art"){        
                        if (data[i].src.indexOf("http://img2-ak.lst.fm/i/u/300") == 0 && data[i].src.indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0) urls.push(data[i].src.replace("300", ""));       
                    }        
                }      
                for (i = 0; i < Math.min(urls.length, limit); i++) {      
                    file = "\"" + tmp_b_path + clean_filename(artist) + "_"  + i + "_" + p_a[select_p_a] + ".jpg" + "\"";      
                    WshShell.Run(vbs + " " + urls[i] + " " + file, false);       
                }      
              doc.close();
            }       
            //get_b_text();      
        }      
    }      
}

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(clean_filename(artist)) == 0){
            files.push(tmp_b_path + name);
        }
        e.moveNext();
    }
}

/*function get_files_from_dir() {
    files = [];
    files = utils.Glob(tmp_b_path + artist + "*.*").toArray();
}
*/
function get_b_text(){
    xmlhttp2 = new ActiveXObject("Microsoft.XMLHTTP");
    var url2 = ("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist) + "/+wiki");
    xmlhttp2.open("GET", url2, true);
    xmlhttp2.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xmlhttp2.send();
    xmlhttp2.onreadystatechange = function () {
        if (xmlhttp2.readyState == 4) {
            if (xmlhttp2.status == 200) {
                doc.open();
                var div = doc.createElement("div");
                div.innerHTML = xmlhttp2.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();
        }
    }
}

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() {
    a_x = txt_x + t_margin;
    a_y = txt_y + t_margin;
   
    var 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;

    var string_width = Math.max(ww - b_x - 10, 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_row_height = temp_gr.CalcTextHeight("text", b_font)
    b_text_visable_rows = Math.round((wh - b_y - 10) / b_text_row_height);
    b_text_visable_height = Math.round(wh - b_y - 10);

    temp_bmp.ReleaseGraphics(temp_gr);
    temp_bmp.Dispose();
    temp_gr = null;
    temp_bmp = null;

    if (b_text_visable_rows + s_text > b_text_rows && s_text > 0) {
        s_text = b_text_rows - b_text_visable_rows;
    };
   
    scrollbar_k = b_text_visable_height / b_text_rows;
    window.Repaint();
}

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);
       
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Artist pictures");   
    _menu.AppendMenuItem(MF_ENABLED, i++, "Albums pictures");   
    _menu.CheckMenuRadioItem(i - 2, i , select_p_a + 5);   
   _menu.EnableMenuItem(select_p_a + 5, 1); 

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    var is_artist = artist ? MF_ENABLED : MF_GRAYED;   
    _menu.AppendMenuItem(is_artist, i++, "last.fm Artist");   
      
//    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 5:
        select_p_a = 0;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        //on_metadb_changed();
        break;
    case 6:
        select_p_a = 1;
        window.SetProperty("pictures/albums", select_p_a);
        del_files_from_dir();
        files = [];
        selected = 0;
        get_pic();
        //on_metadb_changed();
        break;
    case 7:
        WshShell.run("http://www.last.fm/" + abc_lang[abc] + "music/" + encodeURIComponent(artist));
        break;
    case 10:
        window.Reload();
        break;
    case 20:
        window.ShowProperties();
        break;   
    case 30:
        window.ShowConfigure();   
        break;   
   }
    _menu.Dispose();   
    return true;   
}   

var timer = window.SetInterval(on_timer, 1000);
var step = 0;
var set_cycle = false;
var dis_timer, dis = 0;

function on_timer(id) {
    step =  set_cycle || cycle == 0 ? 0 : step + 1;
    if (files.length == 0) {
        get_files_from_dir();
        window.Repaint();
    };
   
    if (cycle > 0 && step >= cycle){
        selected = selected >= files.length - 1 ? 0 : selected = selected + 1;
        window.Repaint();
        step = 0;
    }
}

function on_key_down(vkey) {
    if (vkey == 16){
        set_cycle = true;
        dis_set();
        window.Repaint();
    }
}

function dis_set(){
    dis = 0;
    dis_timer && window.ClearInterval(dis_timer);
    dis_timer = window.SetInterval(function() {
        if (set_cycle) {
            dis++;
            if(dis == 1) {
                set_cycle = false;
                window.ClearInterval(dis_timer);               
                window.Repaint();
            };
        }
    }, 1000 );
}

var delay = false;

function fdelay(){
    var delay_timer = window.SetTimeout(function() {
        delay = false;
        window.ClearTimeout(delay_timer);
    }, 200);
}

function del_files_from_dir() {
    var del_files = [];
    var e = new Enumerator( fso.GetFolder(tmp_b_path).Files );
    while ( !e.atEnd() ) {
        var name = e.item().Name;
        try {
            fso.deleteFile(tmp_b_path + name );
        } catch(e) {};
        e.moveNext();
    }
}

/*
function del_files_from_dir() {
    del_files = [];
    del_files = utils.Glob(tmp_b_path + "*.*").toArray();
   
    for (i in del_files) {
        try {
            fso.deleteFile(del_files[i]);
        } catch(e) {};
    }
}
*/

function load_last_fm_logo(){
    if(!fso.FileExists(tmp_b_path + "\\download\\" + "last_fm_logo.jpg")) {
        var url = "http://www.last.fm/static/images/logo_beta.png?eb6d3ca20e73"
        var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_logo.jpg" + "\"";
        WshShell.Run(vbs + " " + url + " " + file, false);
        var url = "http://static-web.last.fm/static/images/favicon.702b239b6194.ico"
        var file = "\"" + tmp_b_path + "\\download\\" + "last_fm_ico.ico" + "\"";
        WshShell.Run(vbs + " " + url + " " + file, false);
    }
}

function create_download_file() {
    try {
        file = fso.CreateTextFile(tmp_b_path + "\\download\\" + "download.vbs" )
       
        var text =    
            "If (WScript.Arguments.Count <> 2) Then" + "\n\r" +   
            "   WScript.Quit" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "url = WScript.Arguments(0)" + "\n\r" +   
            "file = WScript.Arguments(1)" + "\n\r"  + "\n\r" +   

            "Set objFSO = Createobject(" + '"Scripting.FileSystemObject"' + ")" + "\n\r" +   
            "If objFSO.Fileexists(file) Then" + "\n\r" +   
            "   Set objFSO = Nothing" + "\n\r" +
            "   WScript.Quit" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "Set objXMLHTTP = CreateObject(" + '"MSXML2.XMLHTTP"' + ")" + "\n\r" +   
            "objXMLHTTP.open " + '"GET"' + ", url,false" + "\n\r" +   
            "objXMLHTTP.send()" + "\n\r" + "\n\r" +   

            "If objXMLHTTP.Status = 200 Then" + "\n\r" +   
            "   Set objADOStream = CreateObject(" + '"ADODB.Stream"' + ")" + "\n\r" +
            "   objADOStream.Open" + "\n\r" +
            "   objADOStream.Type = 1" + "\n\r" +
            "   objADOStream.Write objXMLHTTP.ResponseBody" + "\n\r" +
            "   objADOStream.Position = 0" + "\n\r" +
            "   objADOStream.SaveToFile file" + "\n\r" +
            "   objADOStream.Close" + "\n\r" +
            "   Set objADOStream = Nothing" + "\n\r" +
            "End If" + "\n\r" + "\n\r" +   

            "Set objFSO = Nothing" + "\n\r" +   
            "Set objXMLHTTP = Nothing"   
        ;

        file.WriteLine(text);
        file.Close();
    } catch(e) {};
}

function on_mouse_move(x, y) {
    window.SetCursor(32649);
   
    on_text = x >= txt_x && x < ww - 20 && y  >= txt_y ? true : false;
    on_sb =  x > ww - 20 && y  >= txt_y ? true : false;
    on_pic = !on_text && !on_sb ? true : false;
   
    if (on_text_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();
    }

    if (on_sb_down && scrollbar){
        sb_posy = y + delta_y;
        s_text = y + delta_y >= 0 ? y + delta_y <= (b_text_rows - b_text_visable_rows) * scrollbar_k ? Math.round(sb_posy / scrollbar_k) : b_text_rows - b_text_visable_rows : 0;
        window.Repaint();
    }
}

function on_mouse_wheel(delta) {
    ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
   
    if (on_pic && !ShiftDown && !delay){
        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 (on_text && !ShiftDown){
        if (b_text_rows > b_text_visable_rows){
            if (delta < 0) {s_text = b_text_rows - s_text <= b_text_visable_rows ? b_text_rows - b_text_visable_rows : s_text += 1}
            if (delta > 0) {s_text = s_text <= 0 ? 0 : s_text -= 1}
        }
    }
   
    if (on_text && ShiftDown && !delay){
        delay = true;
        fdelay();
        if (delta < 0) {font_size_b = font_size_b <= min_font_size ? min_font_size : font_size_b - 2;};
        if (delta > 0) {font_size_b = font_size_b >= max_font_size ? max_font_size : font_size_b + 2;};
        window.SetProperty("font size: biography", font_size_b);
        get_font();
        get_b_text_array();
    }
   
    if (set_cycle && on_pic) {
        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_mouse_lbtn_down(x,y){
    if (on_text){
        on_text_down = true;
        delta_x = x - txt_x;
        delta_y = y - txt_y;
    }
    if (on_sb){
        on_sb_down = true;
        sb_posy = s_text * scrollbar_k;
        delta_y = sb_posy - y;
    }
}

function on_mouse_lbtn_up(x,y){
    window.SetProperty("txt_x", txt_x);
    window.SetProperty("txt_y", txt_y);
    on_text_down = false;
    on_sb_down = false;
}

function on_mouse_lbtn_dblclk (x,y){
    if (on_text){
        abc = abc == 1 ? 0 : 1;
        window.SetProperty("abc", abc);
        s_text = 0;
        b_text_array = [];
        text = "";
        get_b_text();
    }
    if (on_pic && files[selected]) WshShell.run( '"' + files[selected] + '"' );
}

function on_mouse_leave() {
    window.SetCursor(32512);
    window.Repaint();
}

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();
}
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #855 seriousstas » 09.03.2016, 18:03

момент проблем с быстрым переключением.
У меня работает хорошо .
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #856 kgena_ua » 09.03.2016, 21:29

seriousstas, хорошо, спасибо, если будет возможность погоняйте т.к. эти изменения касаются того, что мне не нравилось в пред. скрипте.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #857 seriousstas » 10.03.2016, 00:24

Договорились !
kgena_ua
Что-бы упростило жизнь :) :
Автосмена био .
То-есть - если нет на русском (что не редкость) - тянем Eng ..

Свой "ноу кавер" для радиостанций (радейко выводить), как в плейлистах , для стримов .

По фантазирую :
С картинками - если нет на сервере - проверить(загрузить из) папку ..
Часто бывает если исполнителей несколько - картинок не находит .
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Сообщение #858 AHAPXICT » 10.03.2016, 11:02

Чуть усовершенствовал для себя полосу прокрутки. Старая превращалась в точку в один пиксель если окно для текста слишком маленькое, да и непонятно было куда крутить. Так по моему живее смотрится, а самое главное удобнее.
scroll
scroll.png
С автоматизацией выбора цвета пока не знаю, пока установил вручную.
Код: Выделить всё
function draw_scrollbar(gr){
    scrollbar_h = b_text_rows > b_text_visable_rows ? b_text_visable_height * (b_text_visable_rows / b_text_rows) + 10: 0;
    scrollbar_y = s_text > 0 ? s_text * scrollbar_k : 0;

//    gr.FillSolidRect(ww - 4, b_y + scrollbar_y, 2, scrollbar_h, b_color);
    gr.FillSolidRect(ww - 6, b_y, 6, wh*scrollbar_h, RGBA(63, 100, 127, 32));   
    gr.FillSolidRect(ww - 6, b_y + scrollbar_y, 6, scrollbar_h, RGBA(63, 100, 127, 150));
}
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #859 duzzy » 10.03.2016, 17:52

kgena_ua
Привет ! :smile:
Нужно протестировать на момент проблем с быстрым переключением.
Гонял почти сутки, в разных режимах, все работает как должно :wink:
то теперерь из on_metadb_changed(), что мне кажется более правильным
Полностью с тобой согласен, это еще и снизит нагрузку в момент переключений...

Пока тестировал скрипт осознал такую штуку, когда долго играешь один плейлист постоянно грузишь картинки(особенно при шафле) одного и того же исполнителя, и как мне кажется может добавить опцию по сохранению картинок на диске... чтоб была возможность выбора.
Поясню почему, 1.это возможность собрать коллекцию картинок и обложек для просмотра в оффлайн, 2.это исключить лишнюю перезапись на диск хоть новые SSD-хи живут долго, но и умирают они тоже очень внезапно :smile:
Но это только мои мысли в слух, решать тебе.
(Самый весомый аргумент конечно, это полный отказ от скриптов Марка... его абракадаброй пользоваться не очень хочется. Твой скрипт с понятным синтаксисом, выполняет свои функции на 10 баллов, при желании пользователю легко его подстроить под себя, так как собственно и должна работать приложение/программа.)

Хочу попросить тебя о небольшой помощи(если тебе не сложно и у тебя будет на это время), помоги пожалуйста разобраться в ограничении координат Х У по тасканию например текста по экрану с зажатой левой кнопкой мыши.
Как это работает я понимаю))), но вот как это описать в скрипте не совсем понятно.
Зачем нужно, хочу в твой скрипт прикрутить раздельную прокрутку под палец, т.е. прокручивать пальцем картинки, таскать текст пальцем, и прокручивать биографию так же пальцем.
Крутить и таскать по экрану пальцем у меня получилось сделать это не проблема, но возникает проблема при прокрутке текста... текст начинает одновременно и прокручиваться и таскаться по экрану...
Примерно так хочу это сделать...
Изображение
duzzy
Репутация: 25
С нами: 8 лет 8 месяцев

Сообщение #860 seriousstas » 10.03.2016, 18:12

duzzy привет! посмотрел скрин - хорошая задумка ! Скрипт действительно получился "лёгким" в сравнении с марковским .
AHAPXICT
Чуть усовершенствовал для себя полосу прокрутки
Нужное дело , шрифт для названия тоже классно подобран !
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 1 месяц

Пред.След.

Вернуться в Секреты foobar2000