Advertisement
Guest User

Untitled

a guest
Jan 20th, 2020
530
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 200.11 KB | None | 0 0
  1. // ==PREPROCESSOR==
  2. // @name "Biography, albums, title, similar artist info.www.last.fm mod Rus (WSH - JS) ТЕСТ"
  3. // @version "24082019"
  4. // @author "kgena_ua"
  5. // @feature "v1.4"
  6. // @feature "watch-metadb"
  7. // ==/PREPROCESSOR==
  8.  
  9. // https://jsfiddle.net/p76j7Lb4/
  10.  
  11. function RGB(r,g,b){
  12. return (0xff000000|(r<<16)|(g<<8)|(b));
  13. }
  14.  
  15. function RGBA(r,g,b,a){
  16. return ((a << 24) | (r << 16) | (g << 8) | (b));
  17. }
  18.  
  19. function getRed(color){
  20. return ((color >> 16) & 0xff);
  21. }
  22.  
  23. function getGreen(color){
  24. return ((color >> 8) & 0xff);
  25. }
  26.  
  27. function getBlue(color){
  28. return (color & 0xff);
  29. }
  30.  
  31. function combineColors(c1, c2, k){
  32. var c1 = toRGB(c1);
  33. var c2 = toRGB(c2);
  34. k = k < 0 || k > 1 ? 0.5 : k;
  35.  
  36. var r = Math.round(c1[0] * (1 - k) + c2[0] * k);
  37. var g = Math.round(c1[1] * (1 - k) + c2[1] * k);
  38. var b = Math.round(c1[2] * (1 - k) + c2[2] * k);
  39.  
  40. return (0xff000000 | (r << 16) | (g << 8) | (b));
  41. }
  42.  
  43. function toRGB(d){
  44. var d = d-0xff000000;
  45. var r = d >> 16;
  46. var g = d >> 8 & 0xFF;
  47. var b = d & 0xFF;
  48.  
  49. return [r,g,b];
  50. }
  51.  
  52. DT_LEFT = 0x00000000;
  53. DT_RIGHT = 0x00000002;
  54. DT_CENTER = 0x00000001;
  55. DT_VCENTER = 0x00000004;
  56. DT_SINGLELINE = 0x00000020;
  57. DT_WORD_ELLIPSIS = 0x00040000;
  58. DT_WORDBREAK = 0x00000010;
  59. DT_CALCRECT = 0x00000400;
  60. DT_NOPREFIX = 0x00000800;
  61.  
  62. MF_ENABLED = 0x00000000;
  63. MF_GRAYED = 0x00000001;
  64. MF_SEPARATOR = 0x00000800;
  65.  
  66. IDC_HAND = 32649;
  67. IDC_ARROW = 32512;
  68.  
  69. ENTER = 13;
  70. BACKSPACE = 8;
  71. ESC = 27;
  72.  
  73. VK_SHIFT = 0x10;
  74. VK_CONTROL = 0x11;
  75. VK_PAGE_UP = 0x21;
  76. VK_PAGE_DOWN = 0x22;
  77. VK_END = 0x23;
  78. VK_HOME = 0x24;
  79. VK_LEFT = 0x25;
  80. VK_UP = 0x26;
  81. VK_RIGHT = 0x27;
  82. VK_DOWN = 0x28;
  83. VK_DELETE = 0x2E;
  84. VK_INSERT = 0x2D;
  85.  
  86. var ww = 800, wh = 800;
  87.  
  88. String.prototype.repeat = function(n) {
  89. return new Array(n + 1).join(this);
  90. }
  91.  
  92. window.SetProperty(" - user", "");
  93. if (window.GetProperty(" - user") != "" ) window.SetProperty(" - user", "");
  94. window.SetProperty("- user", "");
  95. if (window.GetProperty("- user") != "" ) window.SetProperty("- user", "");
  96. window.SetProperty("_".repeat(50), "");
  97. if (window.GetProperty("_".repeat(50)) != "" ) window.SetProperty("_".repeat(50), "");
  98.  
  99. var text_alignment = [
  100. ["Слева", DT_VCENTER | DT_LEFT | DT_NOPREFIX], ///////////
  101. ["По центру", DT_VCENTER | DT_CENTER | DT_NOPREFIX], ///////////
  102. ["Справа" , DT_VCENTER | DT_RIGHT | DT_NOPREFIX] ///////////
  103. ];
  104.  
  105. var font_style = [
  106. ["Обычный", 0], ///////////
  107. ["Жирный", 1], ///////////
  108. ["Курсив" , 2], ///////////
  109. ["Жирный курсив" , 3] ///////////
  110. ];
  111.  
  112. var text_alignment_h0 = window.GetProperty(" text alignment : header 0 (0, 1, 2)", 0); ///////////
  113. var text_alignment_h1 = window.GetProperty("text alignment : header 1", 1); ///////////
  114. var text_alignment_h2 = window.GetProperty("text alignment : header 2", 1); ///////////
  115. var text_alignment_t = window.GetProperty("text alignment : text", 0); ///////////
  116.  
  117. var font_name_h0 = window.GetProperty(" text: font name: header 0", "FontAwesome"); /////////// Для специальных символов, отображение ЗАМКА при блокировке
  118. var font_name_h1 = window.GetProperty(" text: font name: header 1", "Verdana"); ///////////
  119. var font_name_h2 = window.GetProperty(" text: font name: header 2", "Verdana"); ///////////
  120. var font_name_t = window.GetProperty(" text: font name: text", "Verdana"); ///////////
  121.  
  122. var font_size_h0 = window.GetProperty("text: font size: header 0", 16); /////////// Для специальных символов
  123. var font_size_h1 = window.GetProperty("text: font size: header 1", 16); ///////////
  124. var font_size_h2 = window.GetProperty("text: font size: header 2", 16); ///////////
  125. var font_size_t = window.GetProperty("text: font size: text", 12);
  126.  
  127. var font_style_h0 = window.GetProperty("text: font style: header 0", 0); /////////// Для специальных символов
  128. var font_style_h1 = window.GetProperty("text: font style: header 1", 2); ///////////
  129. var font_style_h2 = window.GetProperty("text: font style: header 2", 2); ///////////
  130. var font_style_t = window.GetProperty("text: font style: text", 0);
  131.  
  132. var min_font_size = window.GetProperty(" text: font size: min", 11);
  133. var max_font_size = window.GetProperty(" text: font size: max", 16);
  134.  
  135. var text_shadow = window.GetProperty("text: shadow", false);
  136.  
  137. var h0_font, h1_font, h2_font, t_font, t2_font, tt_font; ///////////
  138. get_font();
  139.  
  140. function get_font(){
  141. h0_font = gdi.Font(font_name_h0, font_size_h0, font_style_h0);
  142. h1_font = gdi.Font(font_name_h1, font_size_h1, font_style_h1);
  143. h2_font = gdi.Font(font_name_h2, font_size_h2, font_style_h2);
  144. t_font = gdi.Font(font_name_t, font_size_t, font_style_t);
  145. t2_font = gdi.Font(font_name_t, font_size_t - 1, font_style_t);
  146. tt_font = gdi.Font(font_name_t, font_size_t, 0); /////////// 1
  147. }
  148.  
  149. ColorTypeCUI = {
  150. text: 0, //
  151. selection_text: 1,
  152. inactive_selection_text: 2, //
  153. background: 3, //
  154. selection_background: 4,
  155. inactive_selection_background: 5,
  156. active_item_frame: 6
  157. };
  158.  
  159. ColorTypeDUI = {
  160. text: 0,
  161. background: 1,
  162. highlight: 2,
  163. selection: 3
  164. };
  165.  
  166. function get_color(){
  167. try {
  168. if (window.InstanceType == 0){
  169. bg_color = window.GetColorCUI(ColorTypeCUI.background);
  170. h0_color = window.GetColorCUI(ColorTypeCUI.selection_text); ///////////
  171. h1_color = window.GetColorCUI(ColorTypeCUI.text);
  172. //test_color = window.GetColorCUI(ColorTypeCUI.selection_text);
  173. h2_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
  174. t_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
  175. } else if (window.InstanceType == 1) {
  176. bg_color = window.GetColorDUI(ColorTypeDUI.background);
  177. h0_color = window.GetColorDUI(ColorTypeDUI.highlight); ///////////
  178. h1_color = window.GetColorDUI(ColorTypeDUI.text);
  179. h2_color = window.GetColorDUI(ColorTypeDUI.highlight);
  180. t_color = window.GetColorDUI(ColorTypeDUI.highlight);
  181. }
  182. } catch(e){};
  183. try {
  184. if (window.InstanceType == 0){
  185. bg_color = window.GetColourCUI(ColorTypeCUI.background);
  186. h0_color = window.GetColourCUI(ColorTypeCUI.selection_text); ///////////
  187. h1_color = window.GetColourCUI(ColorTypeCUI.text);
  188. test_color = window.GetColourCUI(ColorTypeCUI.selection_text);
  189. h2_color = window.GetColourCUI(ColorTypeCUI.inactive_selection_text);
  190. t_color = window.GetColourCUI(ColorTypeCUI.inactive_selection_text);
  191. } else if (window.InstanceType == 1) {
  192. bg_color = window.GetColourDUI(ColorTypeDUI.background);
  193. h0_color = window.GetColourDUI(ColorTypeDUI.highlight); ///////////
  194. h1_color = window.GetColourDUI(ColorTypeDUI.text);
  195. h2_color = window.GetColourDUI(ColorTypeDUI.highlight);
  196. t_color = window.GetColourDUI(ColorTypeDUI.highlight);
  197. }
  198. } catch(e){};
  199. window.Repaint();
  200. }
  201.  
  202. var custom_colors = window.GetProperty(" colors: custom", true); ///////////
  203.  
  204. var c_bg_color = customColor(window.GetProperty(" color: background", "19-30-38")); ///////////
  205. var c_h0_color = customColor(window.GetProperty(" color: header 0", "255-0-0")); /////////// Для специальных символов
  206. var c_h1_color = customColor(window.GetProperty(" color: header 1", "128-192-255")); ///////////
  207. var c_h2_color = customColor(window.GetProperty(" color: header 2", "192-224-255")); ///////////
  208. var c_t_color = customColor(window.GetProperty(" color: text", "192-192-192")); ///////////
  209.  
  210. get_color();
  211. ini_color();
  212.  
  213. function on_colors_changed(){
  214. get_color();
  215. ini_color();
  216. }
  217.  
  218. function ini_color(){
  219. bg_color = custom_colors ? c_bg_color : bg_color;
  220. h0_color = custom_colors ? c_h0_color : h0_color; ///////////
  221. h1_color = custom_colors ? c_h1_color : h1_color;
  222. h2_color = custom_colors ? c_h2_color : h2_color;
  223. t_color = custom_colors ? c_t_color : t_color;
  224. }
  225.  
  226. function customColor(colour){
  227. tmp = colour.split("-");
  228. return (0xff000000 | (tmp[0]<<16) | (tmp[1]<<8) | (tmp[2]));
  229. }
  230.  
  231. var colors_swap = window.GetProperty(" colors: swap", false);
  232. var tmp_h0_color = h0_color; ///////////
  233. var tmp_h1_color = h1_color;
  234. var tmp_h2_color = h2_color;
  235. var tmp_t_color = t_color;
  236.  
  237. h0_color = !colors_swap ? tmp_h0_color : tmp_t_color; ///////////
  238. h1_color = !colors_swap ? tmp_h1_color : tmp_t_color;
  239. h2_color = !colors_swap ? tmp_h2_color : tmp_h1_color;
  240. t_color = !colors_swap ? tmp_t_color : tmp_h1_color;
  241. var color_selected_item = combineColors(bg_color, t_color , 0.6)
  242.  
  243. var rc_arr = [".", "/", ":", "*", "?", '"', "<", ">", "|"];
  244.  
  245. window.GetProperty(".reserved characters: " + rc_arr[0] + " replace by", "no char"); // "."
  246. window.GetProperty(".reserved characters: " + rc_arr[1] + " replace by", "-"); // "/"
  247. window.GetProperty(".reserved characters: " + rc_arr[2] + " replace by", "no char"); // ":"
  248. window.GetProperty(".reserved characters: " + rc_arr[3] + " replace by", "x"); // "*"
  249. window.GetProperty(".reserved characters: " + rc_arr[4] + " replace by", "no char"); // "?"
  250. window.GetProperty(".reserved characters: " + rc_arr[5] + " replace by", "''"); // '"'
  251. window.GetProperty(".reserved characters: " + rc_arr[6] + " replace by", "_"); // "<"
  252. window.GetProperty(".reserved characters: " + rc_arr[7] + " replace by", "_"); // ">"
  253. window.GetProperty(".reserved characters: " + rc_arr[8] + " replace by", "no char"); // "\"
  254. //window.GetProperty(".reserved characters: " + rc_arr[9] + " replace by", "no char");
  255.  
  256. check_char_enter();
  257.  
  258. function check_char_enter() {
  259. for (var i = 0; i < rc_arr.length; i++) {
  260. tmp = window.GetProperty(".reserved characters: " + rc_arr[i] + " replace by");
  261. tmp = tmp.length > 1 && tmp != "no char" && tmp != "space" ? tmp[0] : tmp;
  262. window.SetProperty(".reserved characters: " + rc_arr[i] + " replace by", tmp);
  263. if (/[\.\/\:\*\?\"\<\>\|\\]/g.test(tmp) || tmp == ""){
  264. window.SetProperty(".reserved characters: " + rc_arr[i] + " replace by", "no char");
  265. }
  266. if (tmp == " ") window.SetProperty(".reserved characters: " + rc_arr[i] + " replace by", "space");
  267. }
  268. }
  269.  
  270. function ch(i){
  271. var tmp = window.GetProperty(".reserved characters: " + rc_arr[i] + " replace by");
  272. tmp = tmp == "no char" ? "" : tmp;
  273. tmp = tmp == "space" ? " " : tmp;
  274. return tmp;
  275. }
  276.  
  277. function clean(str) {
  278. if (!str) return;
  279. // var tmp = n.replace(/\;/g,ch(0)).replace(/\//g,ch(1)).replace(/\:/g,ch(2)).replace(/\*/g,ch(3)).replace(/\?/g,ch(4)).replace(/\"/g,ch(5)).replace(/\</g,ch(6)).replace(/\>/g,ch(7)).replace(/\|/g,ch(8)).replace(/\\/g,"") // Отображение точки в имени Исполнителя
  280. var tmp = str.replace(/\./g,ch(0)).replace(/\//g,ch(1)).replace(/\:/g,ch(2)).replace(/\*/g,ch(3)).replace(/\?/g,ch(4)).replace(/\"/g,ch(5)).replace(/\</g,ch(6)).replace(/\>/g,ch(7)).replace(/\|/g,ch(8)).replace(/\\/g,"") //
  281. return tmp.replace(/^\s+|\s+$/g,"").substr(0, 150);
  282. }
  283.  
  284. function clean_ini(str){
  285. if (!str) return;
  286. return str.replace(/[\[\]’']/g, "");
  287. }
  288.  
  289. function trim(str){
  290. if (!str) return;
  291. return str.replace(/^\s+|\s+$/g, "")
  292. }
  293.  
  294. function title_case(str){
  295. var arr = str.toLowerCase().split(" ");
  296. for (i = 0; i < arr.length; i++){
  297. arr[i] = arr[i].charAt(0).toUpperCase()+(arr[i].substr(1));
  298. }
  299. return arr.join(" ").replace(/\s+/g," ");
  300. }
  301.  
  302. var fso = new ActiveXObject("Scripting.FileSystemObject");
  303. var objShellApp = new ActiveXObject("Shell.Application");
  304. var htmlfile = new ActiveXObject('htmlfile');
  305. var clipboardData = "";
  306.  
  307. var work_dir = window.GetProperty(" work directory", "tmp_Biography");
  308. work_dir = clean(work_dir);
  309. window.SetProperty(" work directory", work_dir);
  310. if (!/\S/.test(work_dir)) {work_dir = "tmp_Biography"; window.SetProperty(" work directory", work_dir)};
  311.  
  312. var work_path = fb.FoobarPath + clean(work_dir) + "\\"; ///////////
  313. //var work_path = fb.ProfilePath + clean(work_dir) + "\\"; ///////////
  314.  
  315. check_folder(work_path);
  316.  
  317. var script_path = work_path + "_download\\";
  318. check_folder(script_path);
  319. if (!fso.FileExists(script_path + "download.vbs")) {create_download_file()};
  320.  
  321. var doc = new ActiveXObject("htmlfile");
  322. var WshShell = new ActiveXObject("WScript.Shell");
  323. var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";
  324.  
  325. var def_img;
  326. var default_img_set = false;
  327. var default_img = window.GetProperty("default img", true); // Включить изображение заданное по умолчанию
  328. var default_img_path_bio = window.GetProperty(" default img path bio", ".\\tmp_Biography\\_download\\nocover.png"); ///////////
  329. var default_img_path_album_review = window.GetProperty(" default img path album review", ".\\tmp_Biography\\_download\\nocover.png"); ///////////
  330. var default_img_transparence = window.GetProperty(" default img transparence (0-255)", 255);
  331. var fader_def_img = default_img_transparence;
  332. try {
  333. var default_img_bio = resize_image(gdi.Image(default_img_path_bio));
  334. var default_img_album_review = resize_image(gdi.Image(default_img_path_album_review));
  335. } catch(e) {};
  336.  
  337.  
  338. var def_img_size;
  339. default_img_ini();
  340. var def_img_size_recount = true;
  341.  
  342. function default_img_ini() {
  343. if (data_main == 1 && data_other_idx == 3) {
  344. def_img = default_img_album_review;
  345. } else {
  346. def_img = default_img_bio;
  347. }
  348. def_img_size_recount = false;
  349. }
  350.  
  351. var logo_img;
  352. var logo_img_set = false;
  353. var logo_img_idx = window.GetProperty("logo_img_idx", 4);
  354. var logo_img_transparence = window.GetProperty(" logo img transparence (0-255)", 255);
  355. var fader_logo = logo_img_transparence;
  356. load_last_fm_logo();
  357.  
  358. var logo_img_path = [
  359. script_path + "footer_logo.png",
  360. script_path + "logo_sq_256_new_small.png",
  361. script_path + "logo_static.png",
  362. script_path + "logo.png",
  363. script_path + "logo 2.png"
  364. ]
  365.  
  366. var logo_img_dim = [
  367. [37, 37, 0, 0],
  368. [40, 40, 0, 0],
  369. [60, 60, 0, 0],
  370. [70, 70, 0, 70],
  371. [60, 60, 0, 0]
  372. ]
  373.  
  374. logo_img_ini();
  375.  
  376. function logo_img_ini(){
  377. logo_img = resize_logo_img(gdi.Image(logo_img_path[logo_img_idx]), logo_img_dim[logo_img_idx][0], logo_img_dim[logo_img_idx][1], logo_img_dim[logo_img_idx][2], logo_img_dim[logo_img_idx][3]);
  378. }
  379.  
  380. function resize_logo_img(img, w, h, cx, cy){
  381. if (!img) return;
  382.  
  383. var scale_w = w / img.Width;
  384. var scale_h = w / img.Height;
  385.  
  386. var scale = Math.min(scale_w, scale_h);
  387.  
  388. var iw = Math.round(img.Width * scale);
  389. var ih = Math.round(img.Height * scale)
  390.  
  391. var temp_bmp = gdi.CreateImage(iw, ih);
  392. var temp_gr = temp_bmp.GetGraphics();
  393. temp_gr.SetSmoothingMode(2);
  394. temp_gr.SetInterpolationMode(7);
  395. temp_gr.DrawImage(img, 0, 0, iw, ih, cx, cy, img.width, img.height);
  396. temp_bmp.ReleaseGraphics(temp_gr);
  397.  
  398. return temp_bmp;
  399. temp_bmp.Dispose();
  400. temp_gr = null;
  401. temp_bmp = null;
  402. }
  403.  
  404. function default_fader_ini(){
  405. fader_logo = fade_effect ? 0 : logo_img_transparence;
  406. fader_def_img = fade_effect ? 0 : default_img_transparence;
  407. }
  408.  
  409. /*
  410. function artist_folder_path(n) {
  411. if (!n) return;
  412. return work_path + n;
  413. }
  414. */
  415.  
  416. var save_images = window.GetProperty("save images", false); //////////////////////////////////////
  417. var save_images_to_artist_folder = window.GetProperty("save to artist folder containing track", false);
  418.  
  419. function artist_folder_path(n) {
  420. if (!n || !metadb) return;
  421.  
  422. if (metadb.RawPath.indexOf("file") < 0 || !save_images_to_artist_folder) {
  423. return work_path + n;
  424. }
  425.  
  426. if (metadb.RawPath.indexOf("file") >= 0 && save_images_to_artist_folder) {
  427. var directory_path_arr = [], artist_path_arr = [], artist_path = "";
  428. directory_path_arr = directory_path.split("\\");
  429.  
  430. for (var i = 0; i < directory_path_arr.length; i++) {
  431. if (directory_path_arr[i].toLowerCase().replace(/\s*/g, "").match(n.toLowerCase().replace(/\s*/g, ""))){
  432. artist_path_arr = directory_path_arr.slice(0, i + 1);
  433. break;
  434. }
  435. }
  436.  
  437. artist_path = artist_path_arr.join("\\");
  438.  
  439. if (fso.FolderExists(artist_path)) {
  440. return artist_path + "\\" + "lastFm";
  441. } else {
  442. return work_path + n;
  443. }
  444. }
  445. }
  446.  
  447. function check_folder(n) {
  448. if (!n) return;
  449. try {
  450. if(!fso.FolderExists(n)) {fso.CreateFolder(n)};
  451. } catch(e) {}
  452. }
  453.  
  454. function get_fnext(p) {
  455. if (!p) return;
  456. return p.replace(/.*\\/g,'');
  457. }
  458.  
  459. var g_img = null;
  460. var img_show = window.GetProperty("img show", true);
  461. var img_size;
  462. var img_size_recount = true;
  463. var img_margin = window.GetProperty(" img: margin", 0);
  464. var img_alignment = new Array("Подогнать", "Подогнать сверху - по центру", "Подогнать сверху - слева", "По центру", "По центру - сверху", "Растянуть"); //////////////////////////////////////
  465. var img_alignment_idx = window.GetProperty("align mode", 1);
  466. var img_selected = 0;
  467. var on_img = false;
  468. var img_file_names = [];
  469. var images = [];
  470. var no_img_msg = "";
  471.  
  472. var limit = window.GetProperty("img download limit", 6);
  473.  
  474. var img_border = window.GetProperty("img border", false); ////////////////////////////////////// true
  475. var img_border_width = window.GetProperty(" img border width", 2);
  476. if (!/\S/.test(img_border_width) || img_border_width <= 0) {img_border_width = 1; window.SetProperty(" img border width", img_border_width);}
  477.  
  478. var fader = 255;
  479. var fade_effect = window.GetProperty("fade effect", true); ////////////////////////////////////// false
  480.  
  481. var quality_idx = window.GetProperty("download quality", 1);
  482.  
  483. var quality = [
  484. ["Низкое", "avatar170s", "avatar170s"], //////////////////////////////////////
  485. ["Среднее", "ar0", "300x300"], ////////////////////////////////////// ["Среднее", "ar0", "300x300"],
  486. ["Высокое", "770x0", "770x0"] //////////////////////////////////////
  487. ];
  488.  
  489. var data_main = window.GetProperty("data_main: bio or album, similar", 0);
  490. var data_other_idx = window.GetProperty("data_other_idx", 0); //////////////////////////////////////////////// data_sub
  491. var data_other = [ ////////////////////////////////////////////////////////////////////////////////////////// data_sub .......
  492. // menu text, LastFm query file name(tooltip, INI data)
  493. ["Альбомы по популярности", "albums", "albums_popular"], //////////////////////////////////////
  494. ["Альбомы по дате релиза", "albums?order=release_date", "albums_release_date"], //////////////////////////////////////
  495. ["Похожие исполнители", "similar", "similar"], //////////////////////////////////////
  496. ["Альбом", "", "album"], //////////////////////////////////////
  497. ["Название", "", "title"], //////////////////////////////////////
  498. ["Текст песни", "", "lyrics"] //////////////////////////////////////
  499. ];
  500.  
  501. var scrollbar = window.GetProperty("Scrollbar", true);
  502. var seekbar_x = 0;
  503. var seekbar_y = 0;
  504. var seekbar_w = window.GetProperty(" seekbar width ", 4);
  505. var seekbar_h = 0;
  506. var seekbar_k = 0;
  507. var seekbar_posy = 0;
  508. var on_seekbar = false;
  509. var on_seekbar_down = false;
  510. var on_scrollbar = false;
  511. var on_scrollbar_down = false;
  512.  
  513. var scroll = 0, scroll_ = 0, scroll__ = 0, scroll___ = 0, old_scroll = 0;
  514. var scroll_timer;
  515. var scroll_timer_on = false;
  516. var wheel_id = 0;
  517. var scroll_k = window.GetProperty(" scroll key k", 2);
  518. if (!/\S/.test(scroll_k) || scroll_k < 0 || scroll_k > 6) {scroll_k = 2; window.SetProperty(" scroll key k", scroll_k);}
  519. scroll_k = 0;
  520.  
  521. var bg_transparence = window.GetProperty("text bg transparence (0-255)", 200); ////////////////////////////////////// 150
  522. var t_margin = window.GetProperty(" text: margin", 0); // 10
  523. var txt_x = window.GetProperty("txt_x", 0);
  524. var old_txt_x = 0;
  525. var txt_y = window.GetProperty("txt_y", Math.round(window.Height / 2));
  526. var delta_x, delta_y;
  527. var h1_y = 0, h2_y = 0, t_y = 0, t_x = 0;
  528.  
  529. //var search_by = ["%artist%", "%album artist%", "%remixed by%"];
  530. var search_by = [
  531. ["Исполнитель <ARTIST>", "$replace(%artist%,,,&#1072;,а,&#1073;,б,&#1074;,в,&#1075;,г,&#1076;,д,&#1077;,е,&#1105;,ё,&#1078;,ж,&#1079;,з,&#1080;,и,&#1081;,й,&#1082;,к,&#1083;,л,&#1084;,м,&#1085;,н,&#1086;,о,&#1087;,п,&#1088;,р,&#1089;,с,&#1090;,т,&#1091;,у,&#1092;,ф,&#1093;,х,&#1094;,ц,&#1095;,ч,&#1096;,ш,&#1097;,щ,&#1098;,ъ,&#1099;,ы,&#1101;,э,&#1102;,ю,&#1100;,ь,&#1103;,я,&#1040;,А,&#1041;,Б,&#1042;,В,&#1043;,Г,&#1044;,Д,&#1045;,Е,&#1025;,Ё,&#1046;,Ж,&#1047;,З,&#1048;,И,&#1049;,Й,&#1050;,К,&#1051;,Л,&#1052;,М,&#1053;,Н,&#1054;,О,&#1055;,П,&#1056;,Р,&#1057;,С,&#1058;,Т,&#1059;,У,&#1060;,Ф,&#1061;,Х,&#1062;,Ц,&#1063;,Ч,&#1064;,Ш,&#1065;,Щ,&#1066;,Ъ,&#1067;,Ы,&#1068;,Ь,&#1069;,Э,&#1070;,Ю,&#1071;,Я,&#8470;,№)"], //////////////////////////////////////
  532. ["Исполнитель альбома <ALBUM ARTIST>", "$replace(%album artist%,,,&#1072;,а,&#1073;,б,&#1074;,в,&#1075;,г,&#1076;,д,&#1077;,е,&#1105;,ё,&#1078;,ж,&#1079;,з,&#1080;,и,&#1081;,й,&#1082;,к,&#1083;,л,&#1084;,м,&#1085;,н,&#1086;,о,&#1087;,п,&#1088;,р,&#1089;,с,&#1090;,т,&#1091;,у,&#1092;,ф,&#1093;,х,&#1094;,ц,&#1095;,ч,&#1096;,ш,&#1097;,щ,&#1098;,ъ,&#1099;,ы,&#1101;,э,&#1102;,ю,&#1100;,ь,&#1103;,я,&#1040;,А,&#1041;,Б,&#1042;,В,&#1043;,Г,&#1044;,Д,&#1045;,Е,&#1025;,Ё,&#1046;,Ж,&#1047;,З,&#1048;,И,&#1049;,Й,&#1050;,К,&#1051;,Л,&#1052;,М,&#1053;,Н,&#1054;,О,&#1055;,П,&#1056;,Р,&#1057;,С,&#1058;,Т,&#1059;,У,&#1060;,Ф,&#1061;,Х,&#1062;,Ц,&#1063;,Ч,&#1064;,Ш,&#1065;,Щ,&#1066;,Ъ,&#1067;,Ы,&#1068;,Ь,&#1069;,Э,&#1070;,Ю,&#1071;,Я,&#8470;,№)"], //////////////////////////////////////
  533. ["Исполнитель ремикса <REMIXED BY>", "$replace(%remixed by%,,,&#1072;,а,&#1073;,б,&#1074;,в,&#1075;,г,&#1076;,д,&#1077;,е,&#1105;,ё,&#1078;,ж,&#1079;,з,&#1080;,и,&#1081;,й,&#1082;,к,&#1083;,л,&#1084;,м,&#1085;,н,&#1086;,о,&#1087;,п,&#1088;,р,&#1089;,с,&#1090;,т,&#1091;,у,&#1092;,ф,&#1093;,х,&#1094;,ц,&#1095;,ч,&#1096;,ш,&#1097;,щ,&#1098;,ъ,&#1099;,ы,&#1101;,э,&#1102;,ю,&#1100;,ь,&#1103;,я,&#1040;,А,&#1041;,Б,&#1042;,В,&#1043;,Г,&#1044;,Д,&#1045;,Е,&#1025;,Ё,&#1046;,Ж,&#1047;,З,&#1048;,И,&#1049;,Й,&#1050;,К,&#1051;,Л,&#1052;,М,&#1053;,Н,&#1054;,О,&#1055;,П,&#1056;,Р,&#1057;,С,&#1058;,Т,&#1059;,У,&#1060;,Ф,&#1061;,Х,&#1062;,Ц,&#1063;,Ч,&#1064;,Ш,&#1065;,Щ,&#1066;,Ъ,&#1067;,Ы,&#1068;,Ь,&#1069;,Э,&#1070;,Ю,&#1071;,Я,&#8470;,№)"] //////////////////////////////////////
  534. ];
  535.  
  536. var search_by_idx = window.GetProperty("search by idx", 0);
  537.  
  538. var refresh_data = false;
  539. var lock_loading = false;
  540. var history_arr = [];
  541. var history_seach = ""
  542. var history_show = false;
  543. var histity_list_edit = false;
  544. var history_file_path = script_path + "history.txt";
  545. var history_result = false;
  546. var key_down = false;
  547.  
  548. var complete_path, directory_path;
  549. var meta_artist = "", old_artist = "", lock_artist = "";
  550. var meta_album = "", old_album = "", lock_album = "";
  551. var meta_title = "", old_title = "", lock_title = "";
  552. var artist_folder_path_old = "";
  553. var request_counter = 0;
  554.  
  555. var text = "", header_0 = "", header_1 = "", header_2 = "";
  556.  
  557. var text_arr = [];
  558. var text_height = 0;
  559. var text_row_width = 0;
  560. var text_row_height = 0;
  561. var text_rows = 0;
  562. var text_rows_visable = 0;
  563. var text_height_visable = 0;
  564.  
  565. var h0_text_arr = [];
  566. var h0_text_row_height = 0;
  567. var h0_text_rows_visable = 0;
  568.  
  569. var h1_char_width = 0;
  570. var h1_text_arr = [];
  571. var h1_text_row_height = 0;
  572. var h1_text_rows_visable = 0;
  573.  
  574. var h2_text_arr = [];
  575. var h2_text_row_height = 0;
  576. var h2_text_rows_visable = 0;
  577.  
  578. var info_text_arr = [];
  579. var info_text_color = [];
  580. var info_text_color_arr = [];
  581. var info_text_font = [];
  582. var info_text_font_arr = [];
  583.  
  584. var info_text_0 = window.GetProperty("info text 0", true);
  585. var info_text_1 = window.GetProperty("info text 1", true);
  586. var info_text_2 = window.GetProperty("info text 2", true);
  587. var info_text_3 = window.GetProperty("info text 3", false);
  588. var info_text_4 = window.GetProperty("info text 4", true);
  589. var info_text_5 = window.GetProperty("info text 5", true);
  590. var info_text_6 = window.GetProperty("info text 6", true);
  591. var info_text_show = window.GetProperty("info text " + (data_main == 0 ? 0 : data_main + data_other_idx));
  592. var info_text_btn_transparence = window.GetProperty(" infotext btn transparence (0-255)", 200);
  593.  
  594. var on_text = false;
  595. var on_header_0 = false;
  596. var on_header_1 = false;
  597. var on_header_2 = false;
  598. var on_text_down = false;
  599. var on_info_text_btn = false;
  600. var refresh_txt = true;
  601. var text_hiden = window.GetProperty("txt hiden", false);
  602.  
  603. var tooltip_on = false;
  604. var tooltip_delay = window.GetProperty(" tooltip delay (ms)", 2000);
  605. if (!/\S/.test(tooltip_delay) || tooltip_delay < 1){tooltip_delay = 2000; window.SetProperty(" tooltip delay (ms)", tooltip_delay)};
  606. var tooltip = window.GetProperty(" tooltip", true);
  607. var tooltip_text = "";
  608. var pos_x = 0, pos_y = 0;
  609. var tooltip_x = 0, pos_y = 0;
  610.  
  611. var text_idx = 0;
  612. var selected_item = "";
  613. var selected_item_rows_idx = [];
  614. var selected_item_rows = [];
  615. var popular_this_week = "";
  616. var latest_release = "";
  617.  
  618. var external_links = [];
  619.  
  620. var language_text = [
  621. ["en", "Английский язык", "Текст не найден"], ////////////////////////////////////// Text not found
  622. ["it", "Итальянский язык", "Текст не найден"], ////////////////////////////////////// Testo non trovato
  623. ["zh", "Китайский язык", "Текст не найден"], ////////////////////////////////////// 找不到文字
  624. ["de", "Немецкий язык", "Текст не найден"], ////////////////////////////////////// Text nicht gefunden
  625. ["pl", "Польский язык", "Текст не найден"], ////////////////////////////////////// Nie znaleziono tekstu
  626. ["pt", "Португальский язык","Текст не найден"], //////////////////////////////////////
  627. ["ru", "Русский язык", "Текст не найден"], //////////////////////////////////////
  628. ["tr", "Турецкий язык", "Текст не найден"], //////////////////////////////////////
  629. ["fr", "Французский язык", "Текст не найден"], ////////////////////////////////////// Texte non trouvé
  630. ["sv", "Шведский язык", "Текст не найден"], //////////////////////////////////////
  631. ["ja", "Японский язык", "Текст не найден"] //////////////////////////////////////
  632. ]
  633.  
  634. window.GetProperty("en", true);
  635. window.GetProperty("it", false); //////////////////////////////////////
  636. window.GetProperty("zh", false); //////////////////////////////////////
  637. window.GetProperty("de", false); //////////////////////////////////////
  638. window.GetProperty("pl", false); //////////////////////////////////////
  639. window.GetProperty("pt", false); //////////////////////////////////////
  640. window.GetProperty("ru", true);
  641. window.GetProperty("tr", false); //////////////////////////////////////
  642. window.GetProperty("fr", false); //////////////////////////////////////
  643. window.GetProperty("sv", false); //////////////////////////////////////
  644. window.GetProperty("ja", false); //////////////////////////////////////
  645.  
  646. var lang_idx = window.GetProperty("lang", 1); //////////////////////////////////////
  647. var tmp_lang_idx;
  648. var lang_arr = [];
  649. create_lang_arr();
  650.  
  651. function create_lang_arr(){
  652. lang_arr = [];
  653. for (var i = 0; i < language_text.length; i++) {
  654. if (window.GetProperty(language_text[i][0]) == true){
  655. lang_arr.push(language_text[i][0]);
  656. }
  657. }
  658.  
  659. if (lang_idx >= lang_arr.length) {
  660. lang_idx = lang_idx - 1 <= 0 ? 0 : lang_idx - 1;
  661. window.SetProperty("lang", lang_idx);
  662. }
  663.  
  664. if (lang_idx < lang_arr.length) {
  665. var i = 0;
  666. do {
  667. if (tmp_lang_idx == lang_arr[i]) {
  668. lang_idx = i;
  669. window.SetProperty("lang", lang_idx);
  670. }
  671. i++;
  672. } while (i < lang_arr.length);
  673. }
  674.  
  675. if (lang_arr.length == 1){
  676. tmp_lang = lang_arr[0];
  677. }
  678.  
  679. if (lang_arr.length == 0){
  680. lang_arr.push(tmp_lang);
  681. window.SetProperty(tmp_lang, true);
  682. get_text();
  683. }
  684. }
  685.  
  686. function lang_query(i){
  687. return lang_arr[i] == "en" ? "" : lang_arr[i] + "/";;
  688. }
  689.  
  690. function get_text_nf(n) {
  691. tmp = "";
  692. var j = 0;
  693. do {
  694. if (language_text[j][0] == n) {
  695. tmp = language_text[j][2];
  696. }
  697. j++;
  698. } while (j < language_text.length);
  699. return tmp;
  700. }
  701.  
  702. function get_text_menu(n) {
  703. tmp = "";
  704. var j = 0;
  705. do {
  706. if (language_text[j][0] == n) {
  707. tmp = language_text[j][1];
  708. }
  709. j++;
  710. } while (j < language_text.length);
  711. return tmp;
  712. }
  713.  
  714. var remap_data = window.GetProperty(" remap artist", "ALLMAN BROTHERS BAND:THE ALLMAN BROTHERS BAND;");
  715. if (!/\S/.test(remap_data)) {remap_data = "ALLMAN BROTHERS BAND:THE ALLMAN BROTHERS BAND;"; window.SetProperty(" remap artist", remap_data)};
  716. var remap_arr = [];
  717. remap_arr = remap_data.split(/[:;]/g);
  718.  
  719. function remap_artist(n){
  720. if (!n) return;
  721. var tmp = "";
  722. for (var i = 0; i < remap_arr.length; i += 2) {
  723. if (remap_arr[i] == n) tmp = remap_arr[i + 1];
  724. }
  725. return tmp ? tmp : n;
  726. }
  727.  
  728. var cycle_txt_y = 20;
  729. var cycle_set = false;
  730. var cycle_timer, cycle_step = 0;
  731. var cycle = window.GetProperty("auto cycle (sec)", 10); ////////////////////////////////////// 0
  732. if (cycle > 0) cycle_set_timer();
  733.  
  734. var delay = false;
  735. var get_files_timer, ftimer, ftimer_logo, ftimer_def_img, tooltip_timer;
  736.  
  737. var upload_delay_time = window.GetProperty("upload delay: time (ms)", 50); ////////////////////////////////////// 500
  738.  
  739. var panel_on = true;
  740.  
  741. var selection_mode = window.GetProperty("selection mode", 0);
  742. var metadb;
  743. on_item_focus_change();
  744.  
  745. function on_paint(gr){
  746. !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bg_color);
  747.  
  748. draw_image(gr);
  749.  
  750. if (!meta_artist && !history_show){
  751. text_shadow && gr.GdiDrawText( "Исполнитель не выбран", h1_font, bg_color, t_x + 1, h1_y + h1_text_row_height * 1 + 2, text_row_width, wh, text_alignment[text_alignment_h1][1] ); //////////////////////////////////////
  752. gr.GdiDrawText( "Исполнитель не выбран", h1_font, h1_color, t_x, h1_y + h1_text_row_height * 1, text_row_width, wh, text_alignment[text_alignment_h1][1] ); //////////////////////////////////////
  753.  
  754. // text_shadow && gr.GdiDrawText( "No artist selected", gdi.Font("Arial",12, 0), bg_color, 0 + 1, 0 + 2, ww, wh, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
  755. // gr.GdiDrawText( "No artist selected", gdi.Font("Arial",12, 0), h1_color, 0, 0, ww, wh, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
  756. }
  757.  
  758. if (cycle_set && on_img){
  759. gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bg_color), getGreen(bg_color), getBlue(bg_color), bg_transparence));
  760. var txt_cycle = cycle == 0 ? "Отключено" : cycle + " сек."; //////////////////////////////////////
  761. text_shadow && gr.GdiDrawText("Зацикливание изображений\n" + txt_cycle, t_font, bg_color, 0 + 1, cycle_txt_y + 2, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS ); //////////////////////////////////////
  762. gr.GdiDrawText("Зацикливание изображений\n" + txt_cycle, t_font, t_color, 0, cycle_txt_y, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS ); //////////////////////////////////////
  763. } else {
  764. if (meta_artist || history_show) gr.FillSolidRect(txt_x, txt_y, ww - txt_x, wh - txt_y, RGBA(getRed(bg_color), getGreen(bg_color), getBlue(bg_color), bg_transparence));
  765. }
  766.  
  767. draw_seekbar(gr);
  768.  
  769. if (lock_loading){
  770. for (var i = 0; i < h0_text_rows_visable; i++) { // header_0
  771. try {
  772. // color = on_header_0 || on_header_1 ? t_color : h1_color; //////////////////////////////////////
  773.  
  774. text_shadow && gr.GdiDrawText( h0_text_arr[i], h0_font, bg_color, t_x + 1, h0_y + h0_text_row_height * i + 2, text_row_width, wh, text_alignment[text_alignment_h0][1] ); //////////////////////////////////////
  775. gr.GdiDrawText( h0_text_arr[i], h0_font, h0_color, t_x, h0_y + h0_text_row_height * i, text_row_width, wh, text_alignment[text_alignment_h0][1] ); //////////////////////////////////////
  776. // text_shadow && gr.GdiDrawText( h0_text_arr[i], h0_font, bg_color, t_x + 1, h0_y + h0_text_row_height * i + 2, text_row_width, wh, text_alignment[text_alignment_h0][1] ); //////////////////////////////////////
  777. // gr.GdiDrawText( h0_text_arr[i], h0_font, color, t_x, h0_y + h0_text_row_height * i, text_row_width, wh, text_alignment[text_alignment_h0][1] ); //////////////////////////////////////
  778. } catch(e) {}
  779. }
  780. }
  781.  
  782. for (var i = 0; i < h1_text_rows_visable; i++) { // header_1
  783. try {
  784. font = !history_show ? h1_font : (history_seach ? t_font : h0_font);
  785.  
  786. text_shadow && gr.GdiDrawText( h1_text_arr[i], font, bg_color, t_x + 1, h1_y + h1_text_row_height * i + 2, text_row_width, wh, text_alignment[text_alignment_h1][1] );
  787. gr.GdiDrawText( h1_text_arr[i], font, h1_color, t_x, h1_y + h1_text_row_height * i, text_row_width, wh, text_alignment[text_alignment_h1][1] );
  788. } catch(e) {}
  789. }
  790.  
  791. if (meta_artist){
  792. l_x1 = t_x;
  793. l_y1 = h1_y + h1_text_row_height * h1_text_arr.length + 2;
  794. l_x2 = t_x + text_row_width;
  795. l_y2 = h1_y + h1_text_row_height * h1_text_arr.length + 2;
  796. l_color = RGBA(getRed(h1_color), getGreen(h1_color), getBlue(h1_color), 120);
  797. gr.DrawLine(l_x1, l_y1, l_x2, l_y2, 1, l_color);
  798.  
  799. if (text_shadow){
  800. l_color_2 = RGBA(getRed(bg_color), getGreen(bg_color), getBlue(bg_color), 255);
  801. gr.DrawLine(l_x1, l_y1 + 1, l_x2, l_y2 + 1, 1, l_color_2);
  802. }
  803. }
  804.  
  805. if (on_info_text_btn && info_text_arr.length && !history_show) draw_info_text_btn(gr, t_x + text_row_width / 2, t_y - text_row_height / 2);
  806.  
  807. if (data_main == 0){
  808. for (var i = 0; i < h2_text_rows_visable; i++) { // header_2
  809. try {
  810. text_shadow && gr.GdiDrawText( h2_text_arr[i], t2_font, bg_color, t_x + 1, h2_y + h2_text_row_height * i + 2, text_row_width, wh, text_alignment[text_alignment_h2][1] );
  811. gr.GdiDrawText( h2_text_arr[i], t2_font, h1_color, t_x, Math.round(h2_y + h2_text_row_height * i), text_row_width, wh, text_alignment[text_alignment_h2][1] );
  812. } catch(e) {}
  813. }
  814. }
  815.  
  816. if (data_main == 1){
  817. for (var i = 0; i < h2_text_rows_visable; i++) { // header_2
  818. try {
  819. text_shadow && gr.GdiDrawText( h2_text_arr[i], h2_font, bg_color, t_x + 1, h2_y + h2_text_row_height * i + 2, text_row_width, wh, text_alignment[text_alignment_h2][1] );
  820. gr.GdiDrawText( h2_text_arr[i], h2_font, h2_color, t_x, Math.round(h2_y + h2_text_row_height * i), text_row_width, wh, text_alignment[text_alignment_h2][1] );
  821. } catch(e) {}
  822. }
  823. }
  824.  
  825. for (var i = 0; i < text_arr.length; i += 2) { // text
  826. try {
  827. row = t_y + (i * text_row_height / 2) + scroll_;
  828.  
  829. color = info_text_color_arr[i]? info_text_color_arr[i] : t_color;
  830. font = info_text_font_arr[i] ? info_text_font_arr[i]: t_font;
  831.  
  832. if (data_main == 0 || history_show) {
  833. var j = 0;
  834. do {
  835. if (selected_item_rows_idx[j] == i / 2){
  836. color = color_selected_item;
  837. }
  838. j++;
  839. } while (j < selected_item_rows_idx.length);
  840. }
  841.  
  842. if (row > t_y - text_row_height * 0.5 && row < t_y + text_height_visable){
  843. if (row > t_y + text_height_visable - text_row_height){
  844. dh = Math.ceil(Math.abs(scroll_) / text_row_height) * text_row_height - Math.abs(scroll_);
  845. } else {
  846. dh = 0;
  847. }
  848.  
  849. text_shadow && gr.GdiDrawText( trim(text_arr[i]), font, bg_color, t_x + 1, row + 2, text_row_width, text_row_height - dh, text_alignment[text_alignment_t][1] );
  850. gr.GdiDrawText( trim(text_arr[i]), font, color, t_x, row, text_row_width, text_row_height - dh, text_alignment[text_alignment_t][1] );
  851.  
  852. }
  853. } catch(e) {}
  854. }
  855.  
  856.  
  857. tooltip_on && draw_tooltip(gr);
  858. }
  859.  
  860. function draw_image(gr){
  861. if (g_img && img_show){
  862. if (!img_size_recount){
  863. img_size = calc_img_size(g_img);
  864. img_size_recount = true;
  865. }
  866.  
  867. gr.DrawImage(g_img, img_size.x, img_size.y, img_size.width, img_size.height, img_size.cx, img_size.cy, img_size.cwidth, img_size.cheight, 0, fader);
  868. img_border && gr.DrawRect( img_size.x - img_border_width /2, img_size.y - img_border_width /2, img_size.width + img_border_width, img_size.height + img_border_width, img_border_width, RGBA(getRed(t_color), getGreen(t_color), getBlue(t_color), fader));
  869. lw = 1;
  870. img_border && gr.DrawRect(img_size.x + lw / 2, img_size.y + lw / 2, img_size.width - lw, img_size.height - lw, lw, RGBA(getRed(bg_color), getGreen(bg_color), getBlue(bg_color), fader - 200 <= 0 ? 0 : fader - 200));
  871. }
  872.  
  873. if ((!g_img && (!default_img && !default_img_set) && logo_img && img_show) || logo_img_set){
  874. if (fader_logo == 0 && fade_effect) fader_timer_logo_on();
  875.  
  876. gr.DrawImage(logo_img, 5, 5, logo_img.Width, logo_img.Height, 0, 0, logo_img.Width, logo_img.Height, 0, fader_logo);
  877. }
  878.  
  879. if ((!g_img && default_img && def_img && img_show) || default_img_set){
  880. if (!def_img_size_recount){
  881. def_img_size = calc_img_size(def_img);
  882. def_img_size_recount = true;
  883. }
  884.  
  885. if (fader_def_img == 0 && fade_effect) fader_timer_def_img_on();
  886.  
  887. def_img && gr.DrawImage(def_img, def_img_size.x, def_img_size.y, def_img_size.width, def_img_size.height, def_img_size.cx, def_img_size.cy, def_img_size.cwidth, def_img_size.cheight, 0, fader_def_img);
  888. img_border && gr.DrawRect( def_img_size.x - img_border_width /2, def_img_size.y - img_border_width /2, def_img_size.width + img_border_width, def_img_size.height + img_border_width, img_border_width, RGBA(getRed(t_color), getGreen(t_color), getBlue(t_color), fader_def_img));
  889. }
  890. }
  891.  
  892. function draw_seekbar(gr){
  893. seekbar_x = (text_height > text_height_visable && scrollbar) ? ww - t_margin - seekbar_w - 10 : ww;
  894. seekbar_y = t_y + (scroll_ * -1) / text_row_height * seekbar_k;
  895. seekbar_h = text_height_visable * (text_rows_visable / text_rows);
  896.  
  897. if (scrollbar && text_height > text_height_visable){
  898. gr.SetSmoothingMode(2);
  899. seekbar_alpha = (on_seekbar || on_seekbar_down || on_scrollbar) && !on_text_down ? 150 : 50;
  900. seekbar_color = RGBA(getRed(h1_color), getGreen(h1_color), getBlue(h1_color), seekbar_alpha);
  901.  
  902. gr.FillSolidRect(seekbar_x + 10, seekbar_y, seekbar_w, seekbar_h, seekbar_color);
  903. }
  904. }
  905.  
  906. function draw_info_text_btn(gr, x, y){
  907. var x = t_x + text_row_width / 2;
  908. var y = t_y - text_row_height / 2;
  909. var d = 8;
  910. var color = RGBA(getRed(h1_color), getGreen(h1_color), getBlue(h1_color), info_text_btn_transparence);
  911. var color2 = RGBA(getRed(bg_color), getGreen(bg_color), getBlue(bg_color), info_text_btn_transparence);
  912.  
  913. var show = info_text_show ? 0 : 1;
  914. var radius = d / 2;
  915. var points = [];
  916. var steps = 6;
  917.  
  918. for (var i = 0; i < steps; i++) {
  919. if (i % 2 == show) {
  920. points.push(x + (radius * Math.cos(Math.PI * i / steps * 2 - Math.PI / 2)));
  921. points.push(y - 1 + (radius * Math.sin(Math.PI * i / steps * 2 - Math.PI / 2)));
  922. }
  923. }
  924.  
  925. gr.SetSmoothingMode(2);
  926. if (text_rows_visable > 0){
  927. gr.DrawPolygon(color2, 1, points);
  928. gr.FillPolygon(color, 1, points);
  929. }
  930. }
  931.  
  932. function draw_tooltip(gr){
  933. tt = tooltip_text;
  934.  
  935. tt_w = gr.CalcTextWidth(tt, tt_font) + 12;
  936. tt_h = gr.CalcTextHeight(tt, tt_font) + 2;
  937. tt_x = tooltip_x - tt_w * 0.5;
  938. tt_x = tt_x <= 10 ? 10 : (tt_x >= ww - tt_w - 10 ? ww - tt_w - 10 : tt_x);
  939. tt_y = tooltip_y - tt_h - 8;
  940. tt_y = tt_y <= 10 ? 10 : tt_y;
  941.  
  942. gr.FillSolidRect(tt_x, tt_y, tt_w, tt_h, t_color);
  943. gr.DrawRect(tt_x, tt_y, tt_w, tt_h, 1, bg_color);
  944. gr.GdiDrawText( tt, tt_font, bg_color, tt_x, tt_y, tt_w, tt_h, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
  945. }
  946.  
  947. function on_playlist_switch() {
  948. on_item_focus_change();
  949. }
  950.  
  951. function on_playback_new_track() {
  952. on_item_focus_change();
  953. }
  954.  
  955. function on_playback_dynamic_info_track() {
  956. on_item_focus_change();
  957. }
  958.  
  959. function on_playback_stop() {
  960. on_item_focus_change();
  961. }
  962.  
  963. function on_selection_changed(metadb) {
  964. on_item_focus_change();
  965. }
  966.  
  967. function on_item_focus_change() {
  968. switch (selection_mode) {
  969. case 0:
  970. metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
  971. break;
  972. case 1:
  973. metadb = fb.GetFocusItem();
  974. break;
  975. }
  976.  
  977. if (metadb) on_metadb_changed();
  978. }
  979.  
  980. function Eval(field) {
  981. if (!metadb) return;
  982. complete_path = fb.Titleformat("%path%").EvalWithMetadb(metadb);
  983. directory_path = fb.Titleformat("$directory_path(%path%)").EvalWithMetadb(metadb);
  984. return complete_path.indexOf('://') > 0 ? fb.TitleFormat("[" + field + "]").Eval(true) : fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
  985. }
  986.  
  987. function on_metadb_changed(handles, fromhook) {
  988. if (!panel_on) return;
  989. if (!metadb) return;
  990.  
  991. ini_data();
  992.  
  993. if (refresh_data){
  994. del_folder(artist_folder_path(clean(meta_artist)));
  995. old_artist = "";
  996. old_album = "";
  997. old_title = "";
  998. refresh_data = false;
  999. }
  1000.  
  1001. if (meta_artist != old_artist){
  1002. write_history(meta_artist);
  1003.  
  1004. delete_empty_folders();
  1005. check_folder(artist_folder_path(clean(meta_artist)));
  1006.  
  1007. //if (!save_images) del_folders(clean(meta_artist));
  1008.  
  1009. if (!save_images) {
  1010. if (!save_images_to_artist_folder){
  1011. del_folders(clean(meta_artist));
  1012. }
  1013. if (save_images_to_artist_folder){
  1014. del_folder(artist_folder_path_old);
  1015. }
  1016. }
  1017.  
  1018. artist_folder_path_old = artist_folder_path(clean(meta_artist));
  1019. }
  1020.  
  1021. if (meta_artist != old_artist || meta_title != old_title || meta_album != old_album) {
  1022. get_img(meta_artist, meta_album, meta_title);
  1023. old_artist = meta_artist;
  1024. old_album = meta_album;
  1025. old_title = meta_title;
  1026. }
  1027.  
  1028. }
  1029.  
  1030. function ini_data(){
  1031. // search = search_by_idx == 2 ? "$if3(%remixed by%, %album artist%, %artist%)" : search_by[search_by_idx]; //////////////////////////////////////
  1032. search = search_by_idx == 2 ? "$if3($replace(%remixed by%,,,&#1072;,а,&#1073;,б,&#1074;,в,&#1075;,г,&#1076;,д,&#1077;,е,&#1105;,ё,&#1078;,ж,&#1079;,з,&#1080;,и,&#1081;,й,&#1082;,к,&#1083;,л,&#1084;,м,&#1085;,н,&#1086;,о,&#1087;,п,&#1088;,р,&#1089;,с,&#1090;,т,&#1091;,у,&#1092;,ф,&#1093;,х,&#1094;,ц,&#1095;,ч,&#1096;,ш,&#1097;,щ,&#1098;,ъ,&#1099;,ы,&#1101;,э,&#1102;,ю,&#1100;,ь,&#1103;,я,&#1040;,А,&#1041;,Б,&#1042;,В,&#1043;,Г,&#1044;,Д,&#1045;,Е,&#1025;,Ё,&#1046;,Ж,&#1047;,З,&#1048;,И,&#1049;,Й,&#1050;,К,&#1051;,Л,&#1052;,М,&#1053;,Н,&#1054;,О,&#1055;,П,&#1056;,Р,&#1057;,С,&#1058;,Т,&#1059;,У,&#1060;,Ф,&#1061;,Х,&#1062;,Ц,&#1063;,Ч,&#1064;,Ш,&#1065;,Щ,&#1066;,Ъ,&#1067;,Ы,&#1068;,Ь,&#1069;,Э,&#1070;,Ю,&#1071;,Я,&#8470;,№), $replace(%album artist%,,,&#1072;,а,&#1073;,б,&#1074;,в,&#1075;,г,&#1076;,д,&#1077;,е,&#1105;,ё,&#1078;,ж,&#1079;,з,&#1080;,и,&#1081;,й,&#1082;,к,&#1083;,л,&#1084;,м,&#1085;,н,&#1086;,о,&#1087;,п,&#1088;,р,&#1089;,с,&#1090;,т,&#1091;,у,&#1092;,ф,&#1093;,х,&#1094;,ц,&#1095;,ч,&#1096;,ш,&#1097;,щ,&#1098;,ъ,&#1099;,ы,&#1101;,э,&#1102;,ю,&#1100;,ь,&#1103;,я,&#1040;,А,&#1041;,Б,&#1042;,В,&#1043;,Г,&#1044;,Д,&#1045;,Е,&#1025;,Ё,&#1046;,Ж,&#1047;,З,&#1048;,И,&#1049;,Й,&#1050;,К,&#1051;,Л,&#1052;,М,&#1053;,Н,&#1054;,О,&#1055;,П,&#1056;,Р,&#1057;,С,&#1058;,Т,&#1059;,У,&#1060;,Ф,&#1061;,Х,&#1062;,Ц,&#1063;,Ч,&#1064;,Ш,&#1065;,Щ,&#1066;,Ъ,&#1067;,Ы,&#1068;,Ь,&#1069;,Э,&#1070;,Ю,&#1071;,Я,&#8470;,№), $replace(%artist%,,,&#1072;,а,&#1073;,б,&#1074;,в,&#1075;,г,&#1076;,д,&#1077;,е,&#1105;,ё,&#1078;,ж,&#1079;,з,&#1080;,и,&#1081;,й,&#1082;,к,&#1083;,л,&#1084;,м,&#1085;,н,&#1086;,о,&#1087;,п,&#1088;,р,&#1089;,с,&#1090;,т,&#1091;,у,&#1092;,ф,&#1093;,х,&#1094;,ц,&#1095;,ч,&#1096;,ш,&#1097;,щ,&#1098;,ъ,&#1099;,ы,&#1101;,э,&#1102;,ю,&#1100;,ь,&#1103;,я,&#1040;,А,&#1041;,Б,&#1042;,В,&#1043;,Г,&#1044;,Д,&#1045;,Е,&#1025;,Ё,&#1046;,Ж,&#1047;,З,&#1048;,И,&#1049;,Й,&#1050;,К,&#1051;,Л,&#1052;,М,&#1053;,Н,&#1054;,О,&#1055;,П,&#1056;,Р,&#1057;,С,&#1058;,Т,&#1059;,У,&#1060;,Ф,&#1061;,Х,&#1062;,Ц,&#1063;,Ч,&#1064;,Ш,&#1065;,Щ,&#1066;,Ъ,&#1067;,Ы,&#1068;,Ь,&#1069;,Э,&#1070;,Ю,&#1071;,Я,&#8470;,№))" : search_by[search_by_idx][1]; ////////////////
  1033. meta_artist = Eval(search);
  1034. meta_album = Eval('%album%');
  1035. // meta_title = Eval('%title%'); //////////////////////////////////////
  1036. meta_title = Eval('$replace(%title%,,,&#1072;,а,&#1073;,б,&#1074;,в,&#1075;,г,&#1076;,д,&#1077;,е,&#1105;,ё,&#1078;,ж,&#1079;,з,&#1080;,и,&#1081;,й,&#1082;,к,&#1083;,л,&#1084;,м,&#1085;,н,&#1086;,о,&#1087;,п,&#1088;,р,&#1089;,с,&#1090;,т,&#1091;,у,&#1092;,ф,&#1093;,х,&#1094;,ц,&#1095;,ч,&#1096;,ш,&#1097;,щ,&#1098;,ъ,&#1099;,ы,&#1101;,э,&#1102;,ю,&#1100;,ь,&#1103;,я,&#1040;,А,&#1041;,Б,&#1042;,В,&#1043;,Г,&#1044;,Д,&#1045;,Е,&#1025;,Ё,&#1046;,Ж,&#1047;,З,&#1048;,И,&#1049;,Й,&#1050;,К,&#1051;,Л,&#1052;,М,&#1053;,Н,&#1054;,О,&#1055;,П,&#1056;,Р,&#1057;,С,&#1058;,Т,&#1059;,У,&#1060;,Ф,&#1061;,Х,&#1062;,Ц,&#1063;,Ч,&#1064;,Ш,&#1065;,Щ,&#1066;,Ъ,&#1067;,Ы,&#1068;,Ь,&#1069;,Э,&#1070;,Ю,&#1071;,Я,&#8470;,№)'); //////////////////////////////////////
  1037.  
  1038. // meta_artist = meta_artist ? trim(remap_artist(meta_artist)) : ""; //////////////////////////////////////
  1039. meta_artist = meta_artist ? trim(remap_artist(meta_artist.toUpperCase())) : ""; //////////////////////////////////////
  1040. meta_album = meta_album ? trim(meta_album) : "";
  1041. meta_title = meta_title ? trim(meta_title) : "";
  1042.  
  1043. if (lock_loading){
  1044. meta_artist = lock_artist;
  1045. meta_album = lock_album;
  1046. meta_title = lock_title;
  1047. }
  1048.  
  1049. if (!meta_album && data_main == 1 && data_other_idx == 3) {
  1050. data_main = 0;
  1051. data_other_idx = 0; /// data_main_sub
  1052. }
  1053. }
  1054.  
  1055. function clear_img_var(){
  1056. if (g_img) g_img.Dispose();
  1057. g_img = null;
  1058. images = [];
  1059. img_file_names = [];
  1060. img_selected = 0;
  1061. no_img_msg = "";
  1062. }
  1063.  
  1064. function get_img(t_artist, t_album, t_title) {
  1065. path = artist_folder_path(clean(t_artist));
  1066.  
  1067. clear_img_var();
  1068. clear_txt_var();
  1069.  
  1070. if (fso.FolderExists(path)){
  1071. get_img_from_dir(path, t_artist, t_album, t_title);
  1072.  
  1073. if (!g_img && images.length) {
  1074. next_image(0);
  1075. get_text(path, t_artist, t_album, t_title);
  1076. } else {
  1077. switch(data_main) {
  1078. case 0:
  1079. get_lastFm_meta_artist_img(path, t_artist);
  1080. break;
  1081. case 1:
  1082. switch(data_other_idx) {
  1083. case 0:
  1084. case 1:
  1085. get_lastFm_album_img(path, t_artist);
  1086. break;
  1087. case 2:
  1088. get_lastFm_similar_img(path, t_artist);
  1089. break;
  1090. case 3:
  1091. get_lastFm_meta_album_img(path, t_artist, t_album);
  1092. break;
  1093. case 4:
  1094. case 5:
  1095. get_lastFm_meta_title_img(path, t_artist, t_album, t_title);
  1096. break;
  1097. }
  1098. break;
  1099. }
  1100. }
  1101. }
  1102. }
  1103.  
  1104. function get_img_from_dir(path, t_artist, t_album, t_title) {
  1105. t_artist = t_artist ? clean(t_artist) : "";
  1106. t_album = t_album ? clean(t_album) : "";
  1107. t_title = t_title ? clean(t_title) : "";
  1108.  
  1109. switch(data_main) {
  1110. case 0:
  1111. img_file_names = utils.Glob( path + "\\" + t_artist + "*" + "artist.jpg").toArray();
  1112. img_file_names = naturalSort(img_file_names);
  1113. break;
  1114. case 1:
  1115. switch(data_other_idx) {
  1116. case 0:
  1117. case 1:
  1118. img_file_names = [];
  1119. for (var i = 0; i < limit; i++) {
  1120. var album = utils.ReadINI( path + "\\" + t_artist + "_album_info.ini", data_other[data_other_idx][2] + " : name" , i );
  1121. album && img_file_names.push(path + "\\" + t_artist + "_" + clean(album) + ".jpg");
  1122. }
  1123. break;
  1124. case 2:
  1125. img_file_names = utils.Glob( path + "\\" + t_artist + "*" + data_other[data_other_idx][2] + ".jpg").toArray();
  1126. img_file_names = naturalSort(img_file_names);
  1127. break;
  1128. case 3:
  1129. img_file_names = utils.Glob( path + "\\" + t_artist + "_" + t_album.replace(/[.’']/g, "*") + ".jpg").toArray();
  1130. break;
  1131. case 4:
  1132. case 5:
  1133. var album = utils.ReadINI( path + "\\" + t_artist + "_title_info.ini", clean_ini(t_title), "album");
  1134. img_file_names = utils.Glob( path + "\\" + t_artist + "_" + album + ".jpg").toArray();
  1135. break;
  1136. }
  1137. break;
  1138. }
  1139.  
  1140. if (img_file_names.length > images.length){
  1141. images = [];
  1142.  
  1143. var i = 0;
  1144. do {
  1145. var tmp;
  1146. try {
  1147. tmp = resize_image(gdi.Image(img_file_names[i]))
  1148. if (typeof tmp == 'object' ) {
  1149. images.push(tmp);
  1150. }
  1151. } catch(e) {}
  1152. i++;
  1153. } while (i < img_file_names.length);
  1154. }
  1155.  
  1156. if (images.length == 0){
  1157. default_img_ini();
  1158. }
  1159.  
  1160. if (cycle_timer) cycle_step = 0;
  1161. }
  1162.  
  1163. function next_image(d){
  1164. fader = fade_effect ? 0 : 255;
  1165. default_fader_ini();
  1166.  
  1167. if (d < 0) {img_selected = img_selected <= 0 ? images.length - 1 : img_selected = img_selected - 1};
  1168. if (d > 0) {img_selected = img_selected >= images.length - 1 ? 0 : img_selected = img_selected + 1};
  1169.  
  1170. g_img = images[img_selected];
  1171. img_size_recount = false;
  1172.  
  1173. window.Repaint();
  1174. if (g_img && fade_effect) fader_timer();
  1175. }
  1176.  
  1177. function resize_image(img){
  1178. if (!img || !ww || !wh) return;
  1179.  
  1180. var scale_w = ww / img.Width;
  1181. var scale_h = wh / img.Height;
  1182.  
  1183. if (img_alignment_idx == 0 || img_alignment_idx == 1 || img_alignment_idx == 2){
  1184. var scale = Math.min(scale_w, scale_h);
  1185. } else {
  1186. var scale = Math.max(scale_w, scale_h);
  1187. }
  1188.  
  1189. var iw = Math.round(img.Width * scale);
  1190. var ih = Math.round(img.Height * scale)
  1191.  
  1192. return img.Resize(iw, ih, 7);
  1193. img && img.Dispose();
  1194. img = null;
  1195. }
  1196.  
  1197. function clear_txt_var() {
  1198. header_2 = "";
  1199. text = "";
  1200. text_arr = [];
  1201. scroll = scroll_ = scroll__ = scroll___ = 0;
  1202. info_text_arr = [];
  1203. info_text_color = [];
  1204. info_text_font = [];
  1205. popular_this_week = "";
  1206. latest_release = "";
  1207. external_links = [];
  1208. history_arr = [];
  1209. selected_item_rows_idx = [];
  1210. get_text_arr();
  1211. }
  1212.  
  1213. function get_text(path, t_artist, t_album, t_title){
  1214. clear_txt_var();
  1215.  
  1216. switch(data_main) {
  1217. case 0:
  1218. get_bio_text(path, t_artist);
  1219. break;
  1220. case 1:
  1221. switch(data_other_idx) {
  1222. case 0:
  1223. case 1:
  1224. get_album_text(img_selected, path, t_artist)
  1225. break;
  1226. case 2:
  1227. get_similar_text(img_selected, path, t_artist);
  1228. break;
  1229. case 3:
  1230. get_meta_album_text(path, t_artist, t_album);
  1231. break;
  1232. case 4:
  1233. get_meta_title_text(path, t_artist, t_album, t_title);
  1234. break;
  1235. case 5:
  1236. get_meta_lyrics_text(path, t_artist, t_album, t_title);
  1237. break;
  1238. }
  1239. break;
  1240. }
  1241.  
  1242. get_external_links(path, t_artist);
  1243. }
  1244.  
  1245. function get_bio_text(path, t_artist) {
  1246. refresh_txt = true;
  1247.  
  1248. var txt_file = path + "\\" + clean(t_artist) + "_biography_" + lang_arr[lang_idx] + ".txt";
  1249. header_2 = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)) + " : years active", lang_arr[lang_idx]);
  1250.  
  1251. info_text_arr = get_info_text("", path, t_artist);
  1252. info_text_color = get_info_text_color("", path, t_artist);
  1253. info_text_font = get_info_text_font("", path, t_artist);
  1254.  
  1255. popular_this_week = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), "popular_this_week");
  1256. latest_release = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), "latest_release");
  1257.  
  1258. if (info_text_arr.length == 0 && request_counter <= 1) {
  1259. get_lastFm_artist_info_text(path, "file", t_artist);
  1260. } else {
  1261. if (fso.FileExists(txt_file)){
  1262. read_txt_file(txt_file);
  1263. } else {
  1264. get_lastFm_bio_text(path, txt_file, t_artist);
  1265. }
  1266. request_counter = 0;
  1267. }
  1268. request_counter++;
  1269. }
  1270.  
  1271. function get_album_text(s, path, t_artist) {
  1272. refresh_txt = true;
  1273.  
  1274. var album = utils.ReadINI( path + "\\" + clean(t_artist) + "_album_info.ini", data_other[data_other_idx][2] + " : name" , s );
  1275. var txt_file = path + "\\" + clean(t_artist) + "_" + clean(album) + "_" + lang_arr[lang_idx] + ".txt";
  1276. header_2 = album;
  1277.  
  1278. info_text_arr = get_info_text(s, path, t_artist);
  1279. info_text_color = get_info_text_color(s, path, t_artist);
  1280. info_text_font = get_info_text_font(s, path, t_artist);
  1281.  
  1282. if (info_text_arr.length == 0 && request_counter <= 1) {
  1283. get_lastFm_album_img(path, t_artist);
  1284. } else {
  1285. if (fso.FileExists(txt_file)){
  1286. read_txt_file(txt_file);
  1287. } else {
  1288. get_lastFm_album_text(path, txt_file, album ? t_artist : "", album);
  1289. }
  1290. request_counter = 0;
  1291. }
  1292. request_counter++;
  1293. }
  1294.  
  1295. function get_similar_text(s, path, t_artist) {
  1296. refresh_txt = true;
  1297.  
  1298. var txt_file = path + "\\" + clean(t_artist) + "_" + s + "_" + data_other[data_other_idx][2] + "_" + lang_arr[lang_idx] + ".txt";
  1299. var similar_artist = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", data_other[data_other_idx][2] + " : name" , s );
  1300. header_2 = similar_artist;
  1301.  
  1302. if (!similar_artist && request_counter <= 1) {
  1303. get_lastFm_similar_img(path, t_artist);
  1304. } else {
  1305. if (fso.FileExists(txt_file)){
  1306. read_txt_file(txt_file);
  1307. } else {
  1308. get_lastFm_bio_text(path, txt_file, similar_artist);
  1309. }
  1310. request_counter = 0;
  1311. }
  1312. request_counter++;
  1313. }
  1314.  
  1315. function get_meta_album_text(path, t_artist, t_album) {
  1316. refresh_txt = true;
  1317.  
  1318. var txt_file = path + "\\" + clean(t_artist) + "_" + clean(t_album) + "_" + lang_arr[lang_idx] + ".txt";
  1319. var album = t_album;
  1320. header_2 = album;
  1321.  
  1322. info_text_arr = get_info_text("", path, t_artist, t_album);
  1323. info_text_color = get_info_text_color("", path, t_artist, t_album);
  1324. info_text_font = get_info_text_font("", path, t_artist, t_album);
  1325.  
  1326. if (info_text_arr.length == 0 && request_counter <= 1) {
  1327. get_lastFm_meta_album_img(path, t_artist, album);
  1328. } else {
  1329. if (fso.FileExists(txt_file)){
  1330. read_txt_file(txt_file);
  1331. } else {
  1332. get_lastFm_album_text(path, txt_file, t_artist, album);
  1333. }
  1334. request_counter = 0;
  1335. }
  1336. request_counter++;
  1337. }
  1338.  
  1339. function get_meta_title_text(path, t_artist, t_album, t_title) {
  1340. refresh_txt = true;
  1341.  
  1342. var txt_file = path + "\\" + "title_" + clean(t_title) + "_" + lang_arr[lang_idx] + ".txt";
  1343. var title = t_title;
  1344. header_2 = title;
  1345.  
  1346. info_text_arr = get_info_text("", path, t_artist, t_album, t_title);
  1347. info_text_color = get_info_text_color("", path, t_artist, t_album, t_title);
  1348. info_text_font = get_info_text_font("", path, t_artist, t_album, t_title);
  1349.  
  1350. if (info_text_arr.length == 0 && request_counter <= 1) {
  1351. get_lastFm_meta_title_img(path, t_artist, "", title);
  1352. } else {
  1353. if (fso.FileExists(txt_file)){
  1354. read_txt_file(txt_file);
  1355. } else {
  1356. get_lastFm_meta_title_text(path, txt_file, t_artist, t_album, title);
  1357. }
  1358. request_counter = 0;
  1359. }
  1360. request_counter++;
  1361. }
  1362.  
  1363. function get_meta_lyrics_text(path, t_artist, t_album, t_title) {
  1364. refresh_txt = true;
  1365.  
  1366. var txt_file = path + "\\" + "lyrics_" + clean(t_title) + ".txt";
  1367. var title = t_title;
  1368. header_2 = title;
  1369.  
  1370. var lyrics_url = utils.ReadINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "LastFm_lyrics_url");
  1371. info_text_arr = get_info_text("", path, t_artist, t_album, t_title);
  1372. info_text_color = get_info_text_color("", path, t_artist, t_album, t_title);
  1373. info_text_font = get_info_text_font("", path, t_artist, t_album, t_title);
  1374.  
  1375. if (fso.FileExists(txt_file)){
  1376. read_txt_file(txt_file);
  1377. } else {
  1378. //if (lyrics_url){
  1379. ///get_metrolyrics_lyrics_text(path, txt_file, lyrics_url, t_artist, title);
  1380. get_metrolyrics_meta_lyrics_text(path, txt_file, t_artist, title);
  1381. //} else {
  1382. // get_azlyrics_meta_lyrics_text(path, txt_file, t_artist, title);
  1383. //}
  1384. }
  1385. }
  1386.  
  1387. function get_info_text(s, path, t_artist, t_album, t_title) {
  1388. switch(data_main) {
  1389. case 0:
  1390. var text_rank = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_rank");
  1391. var text = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx]);
  1392. break;
  1393. case 1:
  1394. switch(data_other_idx) {
  1395. case 0:
  1396. case 1:
  1397. var text = utils.ReadINI( path + "\\" + clean(t_artist) + "_album_info.ini", data_other[data_other_idx][2] + " : info : " + lang_arr[lang_idx], s );
  1398. break;
  1399. case 2:
  1400. //
  1401. break;
  1402. case 3:
  1403. var text = utils.ReadINI( path + "\\" + clean(t_artist) + "_album_info.ini", clean_ini(clean(t_album)), lang_arr[lang_idx]);
  1404. break;
  1405. case 4:
  1406. var text = utils.ReadINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), lang_arr[lang_idx]);
  1407. break;
  1408. case 5:
  1409. var text = utils.ReadINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics");
  1410. break;
  1411. }
  1412. }
  1413.  
  1414. text = text_rank ? text_rank + text : text;
  1415. return (text ? text.replace(/\*+$/g, "").split("*") : []);
  1416. }
  1417.  
  1418. function get_info_text_color(s, path, t_artist, t_album, t_title) {
  1419. switch(data_main) {
  1420. case 0:
  1421. var color_rank = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_rank_c");
  1422. var color = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_c");
  1423. break;
  1424. case 1:
  1425. switch(data_other_idx) {
  1426. case 0:
  1427. case 1:
  1428. var color = utils.ReadINI( path + "\\" + clean(t_artist) + "_album_info.ini", data_other[data_other_idx][2] + " : info : " + lang_arr[lang_idx], s + "_c");
  1429. break;
  1430. case 2:
  1431. //
  1432. break;
  1433. case 3:
  1434. var color = utils.ReadINI( path + "\\" + clean(t_artist) + "_album_info.ini", clean_ini(clean(t_album)), lang_arr[lang_idx] + "_c");
  1435. break;
  1436. case 4:
  1437. var color = utils.ReadINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), lang_arr[lang_idx] + "_c");
  1438. break;
  1439. case 5:
  1440. var color = utils.ReadINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics_c");
  1441. break;
  1442. }
  1443. }
  1444.  
  1445. color = color_rank ? color_rank + color : color;
  1446. return (color ? color.replace(/\*+$/g, "").split("*") : []);
  1447. }
  1448.  
  1449. function get_info_text_font(s, path, t_artist, t_album, t_title) {
  1450. switch(data_main) {
  1451. case 0:
  1452. var font_rank = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_rank_f");
  1453. var font = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_f");
  1454. break;
  1455. case 1:
  1456. switch(data_other_idx) {
  1457. case 0:
  1458. case 1:
  1459. var font = utils.ReadINI( path + "\\" + clean(t_artist) + "_album_info.ini", data_other[data_other_idx][2] + " : info : " + lang_arr[lang_idx], s + "_f");
  1460. break;
  1461. case 2:
  1462. //
  1463. break;
  1464. case 3:
  1465. var font = utils.ReadINI( path + "\\" + clean(t_artist) + "_album_info.ini", clean_ini(clean(t_album)), lang_arr[lang_idx] + "_f");
  1466. break;
  1467. case 4:
  1468. var font = utils.ReadINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), lang_arr[lang_idx] + "_f");
  1469. break;
  1470. case 5:
  1471. var font = utils.ReadINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics_f");
  1472. break;
  1473. }
  1474. }
  1475.  
  1476. font = font_rank ? font_rank + font : font;
  1477. return (font ? font.replace(/\*+$/g, "").split("*") : []);
  1478. }
  1479.  
  1480. function get_external_links(path, t_artist) {
  1481. var info_external_links = utils.ReadINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(t_artist), "external_links");
  1482. external_links = info_external_links ? info_external_links.split("*") : [];
  1483.  
  1484. if (external_links.length == 0) get_artist_external_links(path, t_artist);
  1485. }
  1486.  
  1487. function read_txt_file(file){
  1488. if (!file) return;
  1489. text = utils.ReadTextFile(file);
  1490. get_text_arr();
  1491. }
  1492.  
  1493. function get_text_arr() {
  1494. t_x = txt_x + t_margin;
  1495.  
  1496. text_row_width = scrollbar ? Math.max(ww - t_x - t_margin - seekbar_w - 10, 0) : Math.max(ww - t_x - t_margin, 0);
  1497.  
  1498. temp_bmp = gdi.CreateImage(1, 1);
  1499. temp_gr = temp_bmp.GetGraphics();
  1500.  
  1501. header_0 = lock_loading ? '\uF023' : ""; /////////// Обозначение блокировки "Замок" ('\uF023') шрифт FontAwesome
  1502. // header_0 = lock_loading ? '\uF084' : ""; /////////// Обозначение блокировки "Ключ" ('\uF084') шрифт FontAwesome
  1503. // header_0 = lock_loading ? '\uF08D' : ""; /////////// Обозначение блокировки "Кнопка" ('\uF08D') шрифт FontAwesome
  1504.  
  1505. // header_0 = lock_loading ? '\u2611' : ""; /////////// Обозначение блокировки "Галочка" ('\u2611') любой шрифт
  1506. // header_0 = lock_loading ? "БЛОКИРОВКА" : ""; ///////////
  1507.  
  1508. h0_text_row_height = temp_gr.CalcTextHeight("Header_0", h0_font); ///////////
  1509. var h0_text_arr_tmp = header_0 ? temp_gr.EstimateLineWrap(header_0, h0_font, text_row_width).toArray() : []; ///////////
  1510. // h0_text_row_height = temp_gr.CalcTextHeight("Header_0", h0_font);
  1511. // var h0_text_arr_tmp = header_0 ? temp_gr.EstimateLineWrap(header_0, h0_font, text_row_width).toArray() : [];
  1512.  
  1513. if (!history_show){
  1514. header_1 = meta_artist ? meta_artist : "";
  1515. var font = h1_font;
  1516. } else {
  1517. header_1 = history_seach ? history_seach : "Введите символ (назад - Space или ESC)"; ///////////
  1518. var font = t_font;
  1519. header_2 = "";
  1520. }
  1521.  
  1522. h1_char_width = temp_gr.CalcTextWidth(header_1.substr(0, 1), h1_font);
  1523.  
  1524. h1_text_row_height = temp_gr.CalcTextHeight("Header_1", font);
  1525. var h1_text_arr_tmp = header_1 ? temp_gr.EstimateLineWrap(header_1, font, text_row_width).toArray() : [];
  1526.  
  1527. var font = data_main == 0 ? t2_font : h2_font;
  1528. h2_text_row_height = temp_gr.CalcTextHeight("Header_2", font);
  1529. var h2_text_arr_tmp = header_2 ? temp_gr.EstimateLineWrap(header_2, font, text_row_width).toArray() : [];
  1530.  
  1531. text_row_height = temp_gr.CalcTextHeight("Biography", t_font);
  1532.  
  1533. info_text_idx = data_main == 0 ? 0 : data_main + data_other_idx;
  1534. info_text_show = window.GetProperty("info text " + info_text_idx);
  1535.  
  1536. if (Math.abs(txt_x - old_txt_x) > 10 || refresh_txt){
  1537.  
  1538. var info_text_arr_tmp = [];
  1539.  
  1540. info_text_color_arr = [];
  1541. info_text_font_arr = [];
  1542.  
  1543. selected_item_rows = [];
  1544.  
  1545. /////////////////////////////////////////////////////////////////////////
  1546.  
  1547. if (!history_show && info_text_show && info_text_arr.length){
  1548. for (var i = 0; i < info_text_arr.length; i++) {
  1549. var color;
  1550. var font;
  1551.  
  1552. if (info_text_color[i] == "h1_color") color = h1_color;
  1553. if (info_text_color[i] == "t_color") color = t_color;
  1554.  
  1555. if (info_text_font[i] == "t2_font") font = t2_font;
  1556. if (info_text_font[i] == "t_font") font = t_font;
  1557.  
  1558. var tmp_arr = temp_gr.EstimateLineWrap( info_text_arr[i], font, text_row_width).toArray();
  1559. info_text_arr_tmp = info_text_arr_tmp.concat(tmp_arr);
  1560.  
  1561. for (var j = 0; j < tmp_arr.length; j++) {
  1562. info_text_color_arr.push(color);
  1563. info_text_font_arr.push(font);
  1564.  
  1565. if (j % 2){
  1566. if ( info_text_arr[i] == popular_this_week || info_text_arr[i] == latest_release){
  1567. selected_item_rows.push(info_text_arr[i]);
  1568. } else {
  1569. selected_item_rows.push("");
  1570. }
  1571. }
  1572. }
  1573. }
  1574. info_text_arr_tmp.push("\n", 0);
  1575. }
  1576. ///////////////////////////////////////////////////////////////////////////////////
  1577.  
  1578. var history_arr_tmp = [];
  1579.  
  1580. if (history_show && history_arr.length){
  1581. for (var i = 0; i < history_arr.length; i++) {
  1582.  
  1583. var tmp_arr = temp_gr.EstimateLineWrap( history_arr[i], t_font, text_row_width).toArray();
  1584. history_arr_tmp = history_arr_tmp.concat(tmp_arr);
  1585.  
  1586. for (var j = 0; j < tmp_arr.length; j++) {
  1587. if (j % 2){
  1588. selected_item_rows.push(history_arr[i]);
  1589. }
  1590. }
  1591. }
  1592.  
  1593. info_text_arr_tmp = history_arr_tmp;
  1594. }
  1595.  
  1596. var text_arr_tmp = [];
  1597. var t = !history_show ? no_img_msg + text : (!history_show ? text : "");
  1598. if (t) text_arr_tmp = temp_gr.EstimateLineWrap(t, t_font, text_row_width).toArray();
  1599.  
  1600. text_arr = [];
  1601. text_arr = text_arr.concat(info_text_arr_tmp, text_arr_tmp);
  1602.  
  1603. old_txt_x = txt_x;
  1604.  
  1605. refresh_txt = false;
  1606. }
  1607.  
  1608. temp_bmp.ReleaseGraphics(temp_gr);
  1609. temp_bmp.Dispose();
  1610. temp_gr = null;
  1611. temp_bmp = null;
  1612. CollectGarbage();
  1613.  
  1614. h0_y = Math.round(txt_y) + t_margin;
  1615. var h0_text_visable_area = Math.floor(Math.max(0, window.Height - t_margin - h0_y));
  1616. h0_text_rows_visable = Math.max(1, Math.floor(h0_text_visable_area / h0_text_row_height));
  1617.  
  1618. h0_text_arr = [];
  1619. for (var i = 0; i < h0_text_arr_tmp.length; i += 2) {
  1620. h0_text_arr.push(trim(h0_text_arr_tmp[i]));
  1621. }
  1622.  
  1623. h1_y = h0_y + h0_text_arr.length * h0_text_row_height;
  1624. var h1_text_visable_area = Math.floor(Math.max(0, window.Height - t_margin - h1_y));
  1625. h1_text_rows_visable = Math.max(1, Math.floor(h1_text_visable_area / h1_text_row_height));
  1626.  
  1627. h1_text_arr = [];
  1628. for (var i = 0; i < h1_text_arr_tmp.length; i += 2) {
  1629. h1_text_arr.push(trim(h1_text_arr_tmp[i]));
  1630. }
  1631.  
  1632. h2_y = h1_y + h1_text_arr.length * h1_text_row_height + 6;
  1633. var h2_text_visable_area = Math.floor(Math.max(0, window.Height - t_margin - h2_y));
  1634. h2_text_rows_visable = Math.floor(h2_text_visable_area / h2_text_row_height);
  1635.  
  1636. h2_text_arr = [];
  1637. for (var i = 0; i < h2_text_arr_tmp.length; i += 2) {
  1638. h2_text_arr.push(trim(h2_text_arr_tmp[i]));
  1639. }
  1640.  
  1641. t_y = (header_2.length ? h2_y + h2_text_arr.length * h2_text_row_height : h1_y + h1_text_arr.length * h1_text_row_height + 6) + text_row_height;
  1642. var text_visable_area = Math.floor(Math.max(0, window.Height - t_margin - t_y));
  1643. text_rows_visable = Math.floor(text_visable_area / text_row_height);
  1644.  
  1645. text_height_visable = text_rows_visable * text_row_height;
  1646. text_rows = text_arr.length / 2;
  1647. text_rows_visable = Math.min(text_rows_visable, text_rows);
  1648. text_height = text_rows * text_row_height;
  1649.  
  1650. seekbar_k = text_height_visable / text_rows;
  1651.  
  1652. if (text_height_visable + Math.abs(scroll) > text_height && scroll < 0) {
  1653. scroll = scroll_ = scroll__ = scroll___ = (text_height - text_height_visable) * -1;
  1654. }
  1655.  
  1656. window.Repaint();
  1657. }
  1658.  
  1659. function strip_tags(t) {
  1660. doc.open();
  1661. var div = doc.createElement("div");
  1662. div.innerHTML = t.replace(/<[Pp][^>]*>/g, "").replace(/<\/[Pp]>/g, "<br>").replace(/\n/g, "<br>");
  1663. var text = div.innerText;
  1664. doc.close();
  1665. return text;
  1666. }
  1667.  
  1668. function save_txt_file(t, file){
  1669. if (!t || !meta_artist) return;
  1670.  
  1671. path = artist_folder_path(clean(meta_artist));
  1672.  
  1673. if (fso.FolderExists(artist_folder_path(clean(meta_artist)))){
  1674. try {
  1675. file = fso.OpenTextFile( file, 2, true, -1)
  1676. file.Write(t);
  1677. file.Close();
  1678. } catch(e) {
  1679. return;
  1680. }
  1681. }
  1682. }
  1683.  
  1684. var menu_items = [
  1685. "Выбранные языки", //////////////////////////////////////
  1686. "Режим выбора", //////////////////////////////////////
  1687. "Страничка на Last.fm", //////////////////////////////////////
  1688. "Внешние ссылки", //////////////////////////////////////
  1689. "Обновить страницу", //////////////////////////////////////
  1690. "История", //////////////////////////////////////
  1691. "Поиск по тегу", //////////////////////////////////////
  1692. "Текст", //////////////////////////////////////
  1693. "Изображение", //////////////////////////////////////
  1694. "Место хранения", //////////////////////////////////////
  1695. "Выбор языка", //////////////////////////////////////
  1696. "Справка", //////////////////////////////////////
  1697. "Свойства WSH", //////////////////////////////////////
  1698. "Настройки WSH..." //////////////////////////////////////
  1699. ];
  1700.  
  1701. function main_menu_setting(x, y){
  1702. for (var i = 0; i < menu_items.length; i++) {
  1703. window.GetProperty("mi_" + menu_items[i], false);
  1704. }
  1705.  
  1706. var _menu = window.CreatePopupMenu();
  1707.  
  1708. for (var i = 1; i < menu_items.length + 1; i++) {
  1709. _menu.AppendMenuItem(MF_ENABLED, i, menu_items[i - 1]);
  1710. _menu.CheckMenuItem(i - 0, window.GetProperty("mi_" + menu_items[i - 1]));
  1711. }
  1712.  
  1713. _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
  1714. _menu.AppendMenuItem(MF_ENABLED, 100, "Вернуться в основное меню"); //////////////////////////////////////
  1715.  
  1716. ret = _menu.TrackPopupMenu(x, y);
  1717.  
  1718. switch (true) {
  1719. case (ret >= 1 && ret <= menu_items.length + 1):
  1720. selected_item = window.GetProperty("mi_" + menu_items[ret - 1]);
  1721. window.SetProperty("mi_" + menu_items[ret - 1], selected_item == false ? true : false);
  1722. main_menu_setting(x, y);
  1723. break;
  1724. }
  1725.  
  1726. switch (ret) {
  1727. case 100:
  1728. on_mouse_rbtn_up (x, y);
  1729. break;
  1730. }
  1731. _menu.Dispose();
  1732. }
  1733.  
  1734. function mi_prop(item){
  1735. return window.GetProperty("mi_" + item) ? true : false;
  1736. }
  1737.  
  1738. function mi_dim(t1, t2) {
  1739. w = 35;
  1740. return (t1 + t2).length > w ? (t1 + t2).substr(0, w - 3) + "..." : t1 + t2;
  1741. }
  1742.  
  1743. function on_mouse_rbtn_up (x, y){
  1744. var _menu = window.CreatePopupMenu();
  1745. var _group_20 = window.CreatePopupMenu();
  1746.  
  1747. function mi(item){
  1748. return window.GetProperty("mi_" + item) ? _menu : _group_20;
  1749. }
  1750.  
  1751. for (var i = 1; i < lang_arr.length + 1; i++) {
  1752. menuItem = get_text_menu(lang_arr[i - 1]);
  1753. mi("Выбранные языки").AppendMenuItem(MF_ENABLED, i, menuItem); //////////////////////////////////////
  1754. mi("Выбранные языки").CheckMenuRadioItem(i, lang_arr.length + 1, window.GetProperty("lang") + 1); //////////////////////////////////////
  1755. try {
  1756. mi("Выбранные языки").EnableMenuItem(window.GetProperty("lang") + 1, 1); //////////////////////////////////////
  1757. } catch(e){};
  1758. }
  1759.  
  1760. mi("Выбранные языки").AppendMenuItem(MF_SEPARATOR, 0, 0); //////////////////////////////////////
  1761.  
  1762. var _group_selection_mode = window.CreatePopupMenu();
  1763. _group_selection_mode.AppendTo(mi("Режим выбора"), MF_ENABLED, "Режим выбора"); //////////////////////////////////////
  1764.  
  1765. _group_selection_mode.AppendMenuItem(MF_ENABLED, 40, "Предпочитать воспроизводимый"); //////////////////////////////////////
  1766. _group_selection_mode.AppendMenuItem(MF_ENABLED, 41, "Следовать за выбранным треком"); //////////////////////////////////////
  1767. _group_selection_mode.CheckMenuRadioItem(40, 41 , selection_mode + 40);
  1768. try {
  1769. _group_selection_mode.EnableMenuItem(selection_mode + 40, 1);
  1770. } catch(e){};
  1771.  
  1772. mi("Режим выбора").AppendMenuItem(MF_SEPARATOR, 0, 0); //////////////////////////////////////
  1773.  
  1774. MF_STRING = meta_artist ? MF_ENABLED : MF_GRAYED;
  1775. var artist_txt = mi_dim("Исполнитель : ", meta_artist); //////////////////////////////////////
  1776. _menu.AppendMenuItem(MF_STRING, 50, artist_txt + (data_main == 1 ? " *" : ""));
  1777. _menu.CheckMenuRadioItem(50, 50 , data_main + 50);
  1778. try {
  1779. _menu.EnableMenuItem(data_main + 50, 1);
  1780. } catch(e){};
  1781.  
  1782. _menu.AppendMenuItem(MF_STRING, 52, data_other[0][0] + (data_main == 0 && data_other_idx == 0 ? " *" : ""));
  1783. //_menu.AppendMenuItem(MF_STRING, 53, data_other[1][0] + (data_main == 0 && data_other_idx == 1 ? " *" : ""));
  1784. _menu.AppendMenuItem(MF_STRING, 54, data_other[2][0] + (data_main == 0 && data_other_idx == 2 ? " *" : ""));
  1785.  
  1786. MF_STRING = meta_artist && meta_album ? MF_ENABLED : MF_GRAYED;
  1787. // var meta_album_txt = mi_dim(data_other[3][0], meta_album); //////////////////////////////////////
  1788. var meta_album_txt = mi_dim(data_other[3][0] + " : ", meta_album); //////////////////////////////////////
  1789. _menu.AppendMenuItem(MF_STRING, 55, meta_album_txt + (data_main == 0 && data_other_idx == 3 ? " *" : ""));
  1790.  
  1791. MF_STRING = meta_artist && meta_title ? MF_ENABLED : MF_GRAYED;
  1792. // var meta_title_txt = mi_dim(data_other[4][0], meta_title); //////////////////////////////////////
  1793. var meta_title_txt = mi_dim(data_other[4][0] + " : ", meta_title); //////////////////////////////////////
  1794. _menu.AppendMenuItem(MF_STRING, 56, meta_title_txt + (data_main == 0 && data_other_idx == 4 ? " *" : ""));
  1795.  
  1796. // var meta_title_txt = mi_dim(data_other[5][0], meta_title); //////////////////////////////////////
  1797. var meta_title_txt = mi_dim(data_other[5][0] + " : ", meta_title); //////////////////////////////////////
  1798. _menu.AppendMenuItem(MF_STRING, 57, meta_title_txt + (data_main == 0 && data_other_idx == 5 ? " *" : ""));
  1799.  
  1800. if (data_main == 1){
  1801. _menu.CheckMenuRadioItem(52, 57 , data_other_idx + 52);
  1802. try {
  1803. _menu.EnableMenuItem(data_other_idx + 52, 1);
  1804. } catch(e){};
  1805. }
  1806.  
  1807. _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
  1808.  
  1809. /////////////////////////////////////////////////////////////////////////////////////////
  1810.  
  1811. switch(data_main) {
  1812. case 0:
  1813. lastFm_query_text = meta_artist ? meta_artist : "";
  1814. lastFm_query = encodeURIComponent(meta_artist);
  1815. break;
  1816. case 1:
  1817. switch(data_other_idx) {
  1818. case 0:
  1819. case 1:
  1820. lastFm_query_text = header_2 ? header_2 : "";
  1821. lastFm_query = encodeURIComponent(meta_artist) + "/" + encodeURIComponent(header_2);
  1822. break;
  1823. case 2:
  1824. lastFm_query_text = header_2 ? header_2 : "";
  1825. lastFm_query = encodeURIComponent(header_2);
  1826. break;
  1827. case 3:
  1828. lastFm_query_text = meta_album ? meta_album : "";
  1829. lastFm_query = encodeURIComponent(meta_artist) + "/" + encodeURIComponent(meta_album);
  1830. break;
  1831. case 4:
  1832. case 5:
  1833. lastFm_query_text = meta_title ? meta_title : "";
  1834. lastFm_query = encodeURIComponent(meta_artist) + "/" + (meta_album ? encodeURIComponent(meta_album) + "/" : "_/") + encodeURIComponent(meta_title);
  1835. break;
  1836. }
  1837. break;
  1838. }
  1839.  
  1840. MF_STRING = lastFm_query_text ? MF_ENABLED : MF_GRAYED;
  1841. mi("Страничка на Last.fm").AppendMenuItem(MF_STRING, 60, mi_dim("Страничка на Last.fm : ", lastFm_query_text)); ///////////
  1842.  
  1843. var _group_external_links = window.CreatePopupMenu();
  1844. MF_STRING = external_links.length ? MF_ENABLED : MF_GRAYED;
  1845.  
  1846. _group_external_links.AppendTo(mi("Внешние ссылки"), MF_STRING, "Внешние ссылки ..."); ///////////
  1847.  
  1848. for (var i = 70; i < external_links.length + 70; i += 2) {
  1849. var links_txt = mi_dim("", external_links[i - 70]);
  1850. _group_external_links.AppendMenuItem(MF_ENABLED, i, links_txt);
  1851. }
  1852.  
  1853. mi("Обновить страницу").AppendMenuItem(MF_ENABLED, 100, "Обновить страницу"); ///////////
  1854.  
  1855. MF_STRING = !history_show ? MF_ENABLED : MF_GRAYED;
  1856. mi("История").AppendMenuItem(MF_STRING, 110, "История"); ///////////
  1857.  
  1858. if (history_show){
  1859. MF_STRING = history_arr.length && selected_item ? MF_ENABLED : MF_GRAYED;
  1860. _menu.AppendMenuItem(MF_STRING, 370, mi_dim("Удалить ", selected_item ? selected_item : "...")); ///////////
  1861. MF_STRING = history_arr.length ? MF_ENABLED : MF_GRAYED;
  1862. _menu.AppendMenuItem(MF_STRING, 380, "Очистить историю"); ///////////
  1863. }
  1864.  
  1865. if(mi_prop("Страничка на Last.fm") || mi_prop("Внешние ссылк") || mi_prop("Обновить страницу") || mi_prop("История") || history_show) _menu.AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  1866. if(!mi_prop("Страничка на Last.fm") || !mi_prop("Внешние ссылк") || !mi_prop("Обновить страницу") || !mi_prop("История")) _group_20.AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  1867.  
  1868. /////////////////////////////////////////////////////////////////////////////////////////
  1869.  
  1870. var _group_search_by = window.CreatePopupMenu();
  1871. _group_search_by.AppendTo(mi("Поиск по тегу"), MF_ENABLED, "Поиск по тегу : " + search_by[search_by_idx][0]); ////////////////// Массив
  1872.  
  1873. _group_search_by.AppendMenuItem(MF_ENABLED, 130, search_by[0][0]); ////////////////// Выбор элемента из массива
  1874. _group_search_by.AppendMenuItem(MF_ENABLED, 131, search_by[1][0]); ////////////////// Выбор элемента из массива
  1875. _group_search_by.AppendMenuItem(MF_ENABLED, 132, search_by[2][0]); ////////////////// Выбор элемента из массива
  1876. _group_search_by.CheckMenuRadioItem(130, 132, search_by_idx + 130);
  1877. try {
  1878. _group_search_by.EnableMenuItem(search_by_idx + 130, 1);
  1879. } catch(e){};
  1880.  
  1881. var _group_text = window.CreatePopupMenu();
  1882. _group_text.AppendTo(mi("Текст"), MF_ENABLED, "Текст"); ///////////
  1883.  
  1884. var _group_text_alignment = window.CreatePopupMenu();
  1885. _group_text_alignment.AppendTo(_group_text, MF_ENABLED, "Выравнивание текста"); ///////////
  1886.  
  1887. var _group_text_alignment_h1 = window.CreatePopupMenu();
  1888. _group_text_alignment_h1.AppendTo(_group_text_alignment, MF_ENABLED, "Заголовок 1 : " + text_alignment[text_alignment_h1][0]); ///////////
  1889.  
  1890. _group_text_alignment_h1.AppendMenuItem(MF_ENABLED, 140, text_alignment[0][0]);
  1891. _group_text_alignment_h1.AppendMenuItem(MF_ENABLED, 141, text_alignment[1][0]);
  1892. _group_text_alignment_h1.AppendMenuItem(MF_ENABLED, 142, text_alignment[2][0]);
  1893. _group_text_alignment_h1.CheckMenuRadioItem(140, 142, text_alignment_h1 + 140);
  1894. try {
  1895. _group_text_alignment_h1.EnableMenuItem(text_alignment_h1 + 140, 1);
  1896. } catch(e){};
  1897.  
  1898. var _group_text_alignment_h2 = window.CreatePopupMenu();
  1899. _group_text_alignment_h2.AppendTo(_group_text_alignment, MF_ENABLED, "Заголовок 2 : " + text_alignment[text_alignment_h2][0]); ///////////
  1900.  
  1901. _group_text_alignment_h2.AppendMenuItem(MF_ENABLED, 150, text_alignment[0][0]);
  1902. _group_text_alignment_h2.AppendMenuItem(MF_ENABLED, 151, text_alignment[1][0]);
  1903. _group_text_alignment_h2.AppendMenuItem(MF_ENABLED, 152, text_alignment[2][0]);
  1904. _group_text_alignment_h2.CheckMenuRadioItem(150, 152, text_alignment_h2 + 150);
  1905. try {
  1906. _group_text_alignment_h2.EnableMenuItem(text_alignment_h2 + 150, 1);
  1907. } catch(e){};
  1908.  
  1909. var _group_text_alignment_t = window.CreatePopupMenu();
  1910. _group_text_alignment_t.AppendTo(_group_text_alignment, MF_ENABLED, "Основной текст : " + text_alignment[text_alignment_t][0]); ///////////
  1911.  
  1912. _group_text_alignment_t.AppendMenuItem(MF_ENABLED, 160, text_alignment[0][0]);
  1913. _group_text_alignment_t.AppendMenuItem(MF_ENABLED, 161, text_alignment[1][0]);
  1914. _group_text_alignment_t.AppendMenuItem(MF_ENABLED, 162, text_alignment[2][0]);
  1915. _group_text_alignment_t.CheckMenuRadioItem(160, 162, text_alignment_t + 160);
  1916.  
  1917. try {
  1918. _group_text_alignment_t.EnableMenuItem(text_alignment_t + 160, 1);
  1919. } catch(e){};
  1920.  
  1921. var _group_font_style = window.CreatePopupMenu();
  1922. _group_font_style.AppendTo(_group_text, MF_ENABLED, "Начертание шрифта"); ///////////
  1923.  
  1924. var _group_font_style_h1 = window.CreatePopupMenu();
  1925. _group_font_style_h1.AppendTo(_group_font_style, MF_ENABLED, "Заголовок 1 : " + font_style[font_style_h1][0]); ///////////
  1926.  
  1927. _group_font_style_h1.AppendMenuItem(MF_ENABLED, 170, font_style[0][0]);
  1928. _group_font_style_h1.AppendMenuItem(MF_ENABLED, 171, font_style[1][0]);
  1929. _group_font_style_h1.AppendMenuItem(MF_ENABLED, 172, font_style[2][0]);
  1930. _group_font_style_h1.AppendMenuItem(MF_ENABLED, 173, font_style[3][0]);
  1931. _group_font_style_h1.CheckMenuRadioItem(170, 173, font_style_h1 + 170);
  1932. try {
  1933. _group_font_style_h1.EnableMenuItem(font_style_h1 + 170, 1);
  1934. } catch(e){};
  1935.  
  1936. var _group_font_style_h2 = window.CreatePopupMenu();
  1937. _group_font_style_h2.AppendTo(_group_font_style, MF_ENABLED, "Заголовок 2 : " + font_style[font_style_h2][0]); ///////////
  1938.  
  1939. _group_font_style_h2.AppendMenuItem(MF_ENABLED, 180, font_style[0][0]);
  1940. _group_font_style_h2.AppendMenuItem(MF_ENABLED, 181, font_style[1][0]);
  1941. _group_font_style_h2.AppendMenuItem(MF_ENABLED, 182, font_style[2][0]);
  1942. _group_font_style_h2.AppendMenuItem(MF_ENABLED, 183, font_style[3][0]);
  1943. _group_font_style_h2.CheckMenuRadioItem(180, 183, font_style_h2 + 180);
  1944. try {
  1945. _group_font_style_h2.EnableMenuItem(font_style_h2 + 180, 1);
  1946. } catch(e){};
  1947.  
  1948. var _group_font_style_t = window.CreatePopupMenu();
  1949. _group_font_style_t.AppendTo(_group_font_style, MF_ENABLED, "Основной текст : " + font_style[font_style_t][0]); ///////////
  1950.  
  1951. _group_font_style_t.AppendMenuItem(MF_ENABLED, 190, font_style[0][0]);
  1952. _group_font_style_t.AppendMenuItem(MF_ENABLED, 191, font_style[1][0]);
  1953. _group_font_style_t.AppendMenuItem(MF_ENABLED, 192, font_style[2][0]);
  1954. _group_font_style_t.AppendMenuItem(MF_ENABLED, 193, font_style[3][0]);
  1955. _group_font_style_t.CheckMenuRadioItem(190, 193, font_style_t + 190);
  1956. try {
  1957. _group_font_style_t.EnableMenuItem(font_style_t + 190, 1);
  1958. } catch(e){};
  1959.  
  1960. _group_text.AppendMenuItem(MF_ENABLED, 200, "Показать тень текста"); ///////////
  1961. _group_text.CheckMenuItem(200, text_shadow);
  1962.  
  1963. _group_text.AppendMenuItem(MF_ENABLED, 210, "Показать полосу прокрутки"); ///////////
  1964. _group_text.CheckMenuItem(210, scrollbar);
  1965.  
  1966. /////////////////////////////////////////////////////////////////////////////////////////
  1967.  
  1968. var _group_image = window.CreatePopupMenu();
  1969. _group_image.AppendTo(mi("Изображение"), MF_ENABLED, "Изображение"); ///////////
  1970.  
  1971. _group_image.AppendMenuItem(MF_ENABLED, 220, "Показать изображение"); ///////////
  1972. _group_image.CheckMenuItem(220, img_show);
  1973.  
  1974. _group_image.AppendMenuItem(MF_SEPARATOR, 0, 0);
  1975.  
  1976. var _group_image_alignment = window.CreatePopupMenu();
  1977. _group_image_alignment.AppendTo(_group_image, MF_ENABLED, "Выравнивание изображения"); ///////////
  1978.  
  1979. _group_image_alignment.AppendMenuItem(MF_ENABLED, 230, img_alignment[0]);
  1980. _group_image_alignment.AppendMenuItem(MF_ENABLED, 231, img_alignment[1]);
  1981. _group_image_alignment.AppendMenuItem(MF_ENABLED, 232, img_alignment[2]);
  1982. _group_image_alignment.AppendMenuItem(MF_ENABLED, 233, img_alignment[3]);
  1983. _group_image_alignment.AppendMenuItem(MF_ENABLED, 234, img_alignment[4]);
  1984. _group_image_alignment.AppendMenuItem(MF_ENABLED, 235, img_alignment[5]);
  1985. _group_image_alignment.CheckMenuRadioItem(230, 235, img_alignment_idx + 230);
  1986. try {
  1987. _group_image_alignment.EnableMenuItem(img_alignment_idx + 230, 1);
  1988. } catch(e){};
  1989.  
  1990. var _group_download_quality = window.CreatePopupMenu();
  1991. _group_download_quality.AppendTo(_group_image, MF_ENABLED, "Качество изображения : " + quality[quality_idx][0]); ///////////
  1992.  
  1993. _group_download_quality.AppendMenuItem(MF_ENABLED, 240, quality[0][0]);
  1994. _group_download_quality.AppendMenuItem(MF_ENABLED, 241, quality[1][0]);
  1995. _group_download_quality.AppendMenuItem(MF_ENABLED, 242, quality[2][0]);
  1996. _group_download_quality.CheckMenuRadioItem(240, 242, quality_idx + 240);
  1997. try {
  1998. _group_download_quality.EnableMenuItem(quality_idx + 240, 1);
  1999. } catch(e){};
  2000.  
  2001. MF_STRING = images[img_selected] ? MF_ENABLED : MF_GRAYED;
  2002. _group_image.AppendMenuItem(MF_STRING, 250, "Открыть изображение"); ///////////
  2003.  
  2004. var _group_default_img = window.CreatePopupMenu();
  2005. _group_default_img.AppendTo(_group_image, MF_ENABLED, "Изображение по умолчанию"); ///////////
  2006.  
  2007. _group_default_img.AppendMenuItem(MF_ENABLED, 260, "Изображение по умолчанию"); ///////////
  2008. _group_default_img.CheckMenuItem(260, default_img);
  2009.  
  2010. var _group_lastFm_logo = window.CreatePopupMenu();
  2011. MF_STRING = !default_img ? MF_ENABLED : MF_GRAYED;
  2012. _group_lastFm_logo.AppendTo(_group_default_img, MF_STRING, "Изображение логотипа Last.fm"); ///////////
  2013.  
  2014. _group_lastFm_logo.AppendMenuItem(MF_ENABLED, 270, "1");
  2015. _group_lastFm_logo.AppendMenuItem(MF_ENABLED, 271, "2");
  2016. _group_lastFm_logo.AppendMenuItem(MF_ENABLED, 272, "3");
  2017. _group_lastFm_logo.AppendMenuItem(MF_ENABLED, 273, "4");
  2018. _group_lastFm_logo.AppendMenuItem(MF_ENABLED, 274, "5");
  2019. _group_lastFm_logo.CheckMenuRadioItem(270, 274 , logo_img_idx - 0 + 270);
  2020. try {
  2021. _group_lastFm_logo.EnableMenuItem(logo_img_idx + 270, 1);
  2022. } catch(e){};
  2023.  
  2024. _group_image.AppendMenuItem(MF_ENABLED, 280, "Рамка"); ///////////
  2025. _group_image.CheckMenuItem(280, img_border);
  2026.  
  2027. _group_image.AppendMenuItem(MF_ENABLED, 290, "Эффект плавного перехода"); ///////////
  2028. _group_image.CheckMenuItem(290, fade_effect);
  2029.  
  2030. _group_image.AppendMenuItem(MF_ENABLED, 300, "Ограничение загрузки изображений (" + limit + ")"); ///////////
  2031.  
  2032. if(mi_prop("Поиск по ") || mi_prop("Текст") || mi_prop("Изображение")) _menu.AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  2033. if(!mi_prop("Поиск по ") || !mi_prop("Текст") || !mi_prop("Изображение")) _group_20.AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  2034.  
  2035. /////////////////////////////////////////////////////////////////////////////////////////
  2036.  
  2037. var _group_copy_to = window.CreatePopupMenu();
  2038. MF_STRING = images.length ? MF_ENABLED : MF_GRAYED;
  2039. //MF_STRING = images.length > 0 ? MF_ENABLED : MF_GRAYED;
  2040. _group_copy_to.AppendTo(mi("Копировать в папку с треком"), MF_STRING, "Копировать в папку с треком ..."); ///////////
  2041.  
  2042. _group_copy_to.AppendMenuItem(MF_STRING, 310, "Копировать файл"); ///////////
  2043. _group_copy_to.AppendMenuItem(MF_STRING, 320, "Копировать файлы"); ///////////
  2044.  
  2045. mi("Копировать в папку с треком").AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  2046.  
  2047. var _group_storage = window.CreatePopupMenu();
  2048. _group_storage.AppendTo(mi("Место хранения"), MF_ENABLED, "Место хранения"); ///////////
  2049.  
  2050. _group_storage.AppendMenuItem(MF_ENABLED, 330, "Сохранять изображения и текст"); ///////////
  2051. _group_storage.CheckMenuItem(330, save_images);
  2052.  
  2053. _group_storage.AppendMenuItem(MF_ENABLED, 340, save_images ? "Использовать папку исполнителя для сохранения" : "Использовать папку исполнителя для временных файлов"); ///////////
  2054. _group_storage.CheckMenuItem(340, save_images_to_artist_folder);
  2055.  
  2056. _group_storage.AppendMenuItem(MF_SEPARATOR, 0, 0);
  2057. _group_storage.AppendMenuItem(MF_ENABLED, 350, "Удалить временные файлы"); ///////////
  2058.  
  2059. mi("Место хранения").AppendMenuItem(MF_SEPARATOR, 0, 0);
  2060.  
  2061. var _group_language_selection = window.CreatePopupMenu();
  2062. _group_language_selection.AppendTo(mi("Выбор языка"), MF_ENABLED, "Выбор языка"); ///////////
  2063.  
  2064. for (var i = 20; i < language_text.length + 20; i++) {
  2065. menuItem = language_text[i - 20][1];
  2066. _group_language_selection.AppendMenuItem(MF_ENABLED, i, menuItem);
  2067. _group_language_selection.CheckMenuItem(i, window.GetProperty(language_text[i - 20][0]));
  2068. }
  2069. mi("Выбор языка").AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  2070.  
  2071. mi("Справка").AppendMenuItem(MF_ENABLED, 360, "Справка ..."); ///////////
  2072. mi("Справка").AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  2073.  
  2074. mi("Свойства WSH").AppendMenuItem(MF_ENABLED, 510, "Свойства WSH"); ///////////
  2075. mi("Настройки WSH").AppendMenuItem(MF_ENABLED, 520, "Настройки WSH ..."); ///////////
  2076.  
  2077. if (mi_prop("Свойства WSH") || mi_prop("Настройки WSH")) _menu.AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  2078. if (!mi_prop("Свойства WSH") || !mi_prop("Настройки WSH")) _group_20.AppendMenuItem(MF_SEPARATOR, 0, 0); ///////////
  2079.  
  2080. _group_20.AppendMenuItem(MF_ENABLED, 600, "Настройки основного меню"); ///////////
  2081.  
  2082. _group_20.AppendTo(_menu, MF_ENABLED, "Дополнительно ..."); ///////////
  2083.  
  2084. /////////////////////////////////////////////////////////////////////////////////////////
  2085.  
  2086. ret = _menu.TrackPopupMenu(x + 20, y);
  2087. if (ret == 0) return;
  2088.  
  2089. switch (true) {
  2090. case (ret >= 1 && ret < lang_arr.length + 1):
  2091. lang_idx = ret - 1;
  2092. window.SetProperty("lang", lang_idx);
  2093. path = artist_folder_path(clean(meta_artist));
  2094. get_text(path, meta_artist, meta_album, meta_title);
  2095. break;
  2096. }
  2097.  
  2098. switch (true) {
  2099. case (ret >= 20 && ret < language_text.length + 20):
  2100. tmp_lang_idx = lang_arr[lang_idx];
  2101. var tmp = window.GetProperty(language_text[ret - 20][0]);
  2102. window.SetProperty(language_text[ret - 20][0], !tmp);
  2103. create_lang_arr();
  2104. path = artist_folder_path(clean(meta_artist));
  2105. get_text(path, meta_artist, meta_album, meta_title);
  2106. on_mouse_rbtn_up (x, y);
  2107. break;
  2108. }
  2109.  
  2110. switch (true) {
  2111. case (ret >= 70 && ret < external_links.length + 70):
  2112. external_links_query = external_links[ret - 70 + 1];
  2113. try {
  2114. WshShell.run(external_links_query);
  2115. } catch (e) {};
  2116. break;
  2117. }
  2118.  
  2119. switch (ret) {
  2120. case 40:
  2121. case 41:
  2122. old_album = "";
  2123. old_title = "";
  2124. selection_mode = ret - 40;
  2125. window.SetProperty("selection mode", selection_mode);
  2126. on_item_focus_change();
  2127. break;
  2128. case 50:
  2129. case 51:
  2130. data_main = ret - 50;
  2131. window.SetProperty("data_main: bio or album, similar", data_main);
  2132. if (history_show && lock_loading){
  2133. history_show = false;
  2134. lock_loading = false;
  2135. }
  2136. get_img(meta_artist, meta_album, meta_title);
  2137. break;
  2138. case 52:
  2139. case 53:
  2140. case 54:
  2141. case 55:
  2142. case 56:
  2143. case 57:
  2144. data_other_idx = ret - 52;
  2145. window.SetProperty("data_other_idx", data_other_idx);
  2146. if (history_show && lock_loading){
  2147. history_show = false;
  2148. lock_loading = false;
  2149. }
  2150. if (data_main == 0) {
  2151. data_main = 1;
  2152. window.SetProperty("data_main: bio or album, similar", data_main);
  2153. }
  2154. get_img(meta_artist, meta_album, meta_title);
  2155. break;
  2156. case 60:
  2157. try {
  2158. WshShell.run("https://www.last.fm/" + lang_query(lang_idx) + "music/" + lastFm_query);
  2159. } catch (e) {};
  2160. break;
  2161. case 80:
  2162. copy_files(0);
  2163. break;
  2164. case 81:
  2165. copy_files(1);
  2166. break;
  2167. case 90:
  2168. // not use
  2169. break;
  2170. case 100:
  2171. refresh_data = true;
  2172. on_metadb_changed();
  2173. break;
  2174. case 110:
  2175. history_show = true;
  2176. lock_loading = true;
  2177. lock_mode();
  2178. history_seach = "";
  2179. get_history();
  2180. break;
  2181. case 120:
  2182. // not use
  2183. break;
  2184. case 130:
  2185. case 131:
  2186. case 132:
  2187. search_by_idx = ret - 130;
  2188. window.SetProperty("search by idx", search_by_idx);
  2189. on_item_focus_change();
  2190. on_mouse_rbtn_up (x, y);
  2191. break;
  2192. case 140:
  2193. case 141:
  2194. case 142:
  2195. text_alignment_h1 = ret - 140;
  2196. window.SetProperty("text alignment : header 1", text_alignment_h1);
  2197. window.Repaint();
  2198. on_mouse_rbtn_up (x, y);
  2199. break;
  2200. case 150:
  2201. case 151:
  2202. case 152:
  2203. text_alignment_h2 = ret - 150;
  2204. window.SetProperty("text alignment : header 2", text_alignment_h2);
  2205. window.Repaint();
  2206. on_mouse_rbtn_up (x, y);
  2207. break;
  2208. case 160:
  2209. case 161:
  2210. case 162:
  2211. text_alignment_t = ret - 160;
  2212. window.SetProperty("text alignment : text", text_alignment_t);
  2213. window.Repaint();
  2214. on_mouse_rbtn_up (x, y);
  2215. break;
  2216. case 170:
  2217. case 171:
  2218. case 172:
  2219. case 173:
  2220. font_style_h1 = ret - 170;
  2221. window.SetProperty("text: font style: header 1", font_style_h1);
  2222. get_font();
  2223. refresh_txt = true;
  2224. get_text_arr();
  2225. on_mouse_rbtn_up (x, y);
  2226. break;
  2227. case 180:
  2228. case 181:
  2229. case 182:
  2230. case 183:
  2231. font_style_h2 = ret - 180;
  2232. window.SetProperty("text: font style: header 2", font_style_h2);
  2233. get_font();
  2234. refresh_txt = true;
  2235. get_text_arr();
  2236. on_mouse_rbtn_up (x, y);
  2237. break;
  2238. case 190:
  2239. case 191:
  2240. case 192:
  2241. case 193:
  2242. font_style_t = ret - 190;
  2243. window.SetProperty("text: font style: text", font_style_t);
  2244. get_font();
  2245. refresh_txt = true;
  2246. get_text_arr();
  2247. on_mouse_rbtn_up (x, y);
  2248. break;
  2249. case 200:
  2250. text_shadow = !text_shadow;
  2251. window.SetProperty("text: shadow", text_shadow);
  2252. window.Repaint();
  2253. //on_mouse_rbtn_up (x, y);
  2254. break;
  2255. case 210:
  2256. scrollbar = !scrollbar;
  2257. window.SetProperty("scrollbar", scrollbar);
  2258. refresh_txt = true;
  2259. get_text_arr();
  2260. //on_mouse_rbtn_up (x, y);
  2261. break;
  2262. case 220:
  2263. img_show = !img_show;
  2264. window.SetProperty("img off", img_show);
  2265. default_fader_ini();
  2266. images[img_selected] && next_image(img_selected);
  2267. break;
  2268. case 230:
  2269. case 231:
  2270. case 232:
  2271. case 233:
  2272. case 234:
  2273. case 235:
  2274. img_alignment_idx = ret - 230;
  2275. window.SetProperty("align mode", img_alignment_idx);
  2276. img_size_recount = false;
  2277. def_img_size_recount = false;
  2278. window.Repaint();
  2279. //on_mouse_rbtn_up (x, y);
  2280. break;
  2281. case 240:
  2282. case 241:
  2283. case 242:
  2284. quality_idx = ret - 240;
  2285. window.SetProperty("download quality", quality_idx);
  2286. refresh_data = true;
  2287. on_metadb_changed();
  2288. //on_mouse_rbtn_up (x, y);
  2289. break;
  2290. case 250:
  2291. try {
  2292. if (images[img_selected]) WshShell.run( '"' + img_file_names[img_selected] + '"' );
  2293. } catch(e) {};
  2294. break;
  2295. case 260:
  2296. default_img = !default_img;
  2297. window.SetProperty("default img", default_img);
  2298. default_img_set = true;
  2299. fdelay2();
  2300. //on_mouse_rbtn_up (x, y);
  2301. break;
  2302. case 270:
  2303. case 271:
  2304. case 272:
  2305. case 273:
  2306. case 274:
  2307. logo_img_idx = ret - 270;
  2308. window.SetProperty("logo_img_idx", logo_img_idx);
  2309. logo_img = null;
  2310. logo_img_set = true;
  2311. fdelay2();
  2312. //on_mouse_rbtn_up (x, y);
  2313. break;
  2314. case 280:
  2315. img_border = !img_border;
  2316. window.SetProperty("img border", img_border);
  2317. img_size_recount = false;
  2318. def_img_size_recount = false;
  2319. window.Repaint();
  2320. //on_mouse_rbtn_up (x, y);
  2321. break;
  2322. case 290:
  2323. fade_effect = !fade_effect;
  2324. window.SetProperty("fade effect", fade_effect);
  2325. default_fader_ini();
  2326. break;
  2327. case 300:
  2328. download_limit(x, y);
  2329. break;
  2330. case 310:
  2331. copy_files(0);
  2332. break;
  2333. case 320:
  2334. copy_files(1);
  2335. break;
  2336. case 330:
  2337. save_images = !save_images;
  2338. window.SetProperty("save images", save_images);
  2339. break;
  2340. case 340:
  2341. save_images_to_artist_folder = !save_images_to_artist_folder;
  2342. window.SetProperty("save to artist folder containing track", save_images_to_artist_folder);
  2343. break
  2344. case 350:
  2345. try {
  2346. WshShell.Run("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8");
  2347. //WshShell.Run("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2");
  2348. } catch (e) {};
  2349. break;
  2350. case 360:
  2351. help();
  2352. break;
  2353. case 370:
  2354. del_history_item();
  2355. break;
  2356. case 380:
  2357. del_history();
  2358. break;
  2359. case 510:
  2360. window.ShowProperties();
  2361. break;
  2362. case 520:
  2363. window.ShowConfigure();
  2364. break;
  2365. case 600:
  2366. main_menu_setting(x, y);
  2367. break;
  2368.  
  2369. }
  2370. _menu.Dispose();
  2371. _group_20.Dispose();
  2372. _group_selection_mode.Dispose();
  2373. _group_external_links.Dispose();
  2374. _group_search_by.Dispose();
  2375. _group_text.Dispose();
  2376. _group_text_alignment.Dispose();
  2377. _group_text_alignment_h1.Dispose();
  2378. _group_text_alignment_h2.Dispose();
  2379. _group_text_alignment_t.Dispose();
  2380. _group_font_style.Dispose();
  2381. _group_font_style_h1.Dispose();
  2382. _group_font_style_h2.Dispose();
  2383. _group_font_style_t.Dispose();
  2384. _group_image.Dispose();
  2385. _group_image_alignment.Dispose();
  2386. _group_download_quality.Dispose();
  2387. _group_default_img.Dispose();
  2388. _group_lastFm_logo.Dispose();
  2389. _group_copy_to.Dispose();
  2390. _group_storage.Dispose();
  2391. _group_language_selection.Dispose();
  2392. return true;
  2393. }
  2394.  
  2395. function download_limit(x, y){
  2396. var _menu = window.CreatePopupMenu();
  2397.  
  2398. _menu.AppendMenuItem(MF_ENABLED, 1, "Увеличить"); //////////
  2399. _menu.AppendMenuItem(MF_ENABLED, 2, "Ограничение загрузки " + limit); //////////
  2400. _menu.AppendMenuItem(MF_ENABLED, 3, "Уменьшить"); //////////
  2401.  
  2402. ret = _menu.TrackPopupMenu(x, y);
  2403.  
  2404. switch (ret) {
  2405. case 1:
  2406. limit = limit + 1;
  2407. window.SetProperty("img download limit", limit);
  2408. download_limit(x, y);
  2409. break;
  2410. case 2:
  2411. on_mouse_rbtn_up (x, y);
  2412. break;
  2413. case 3:
  2414. limit = limit <= 1 ? 1 : limit - 1;
  2415. window.SetProperty("img download limit", limit);
  2416. download_limit(x, y);
  2417. break;
  2418. }
  2419. _menu.Dispose();
  2420. }
  2421.  
  2422. function get_files_if_loaded(path, t_artist, t_album, t_title){
  2423. var i = 0;
  2424. get_files_timer && window.ClearInterval(get_files_timer);
  2425. get_files_timer = window.SetInterval(function() {
  2426. i++;
  2427. get_img_from_dir(path, t_artist, t_album, t_title);
  2428. if (images.length || i >= 20) {
  2429. next_image(0);
  2430. get_text(path, t_artist, t_album, t_title);
  2431. window.ClearInterval(get_files_timer);
  2432. }
  2433. }, 500);
  2434. }
  2435.  
  2436. function image_upload_delay(p, t_artist, t_album, t_title) {
  2437. var upload_delay = window.SetTimeout(function() {
  2438. get_files_if_loaded(p, t_artist, t_album, t_title);
  2439. window.ClearTimeout(upload_delay);
  2440. }, upload_delay_time);
  2441. }
  2442.  
  2443. function cycle_set_timer(){
  2444.     cycle_timer && window.ClearInterval(cycle_timer);
  2445.     cycle_timer = window.SetInterval(function() {
  2446. cycle_step = cycle_set ? 0 : cycle_step + 1;
  2447. if (cycle > 0 && cycle_step >= cycle){
  2448. if (images.length < limit) get_img_from_dir(artist_folder_path(clean(meta_artist)), meta_artist);
  2449. if (images.length > 1){
  2450. next_image(1);
  2451.  
  2452. if (data_main != 0 && (data_other_idx == 0 || data_other_idx == 1 || data_other_idx == 2)){
  2453. path = artist_folder_path(clean(meta_artist));
  2454. get_text(path, meta_artist, meta_album, meta_title);
  2455. }
  2456. cycle_step = 0;
  2457. }
  2458. }
  2459.     }, 1000);
  2460. }
  2461.  
  2462. function fdelay(){
  2463. var delay_timer = window.SetTimeout(function() {
  2464. delay = false;
  2465. window.ClearTimeout(delay_timer);
  2466. }, 200);
  2467. }
  2468.  
  2469. function fdelay2(){
  2470. g_img = null;
  2471. window.Repaint();
  2472. default_fader_ini();
  2473. default_img_set && default_img_ini();
  2474. logo_img_set && logo_img_ini();
  2475.  
  2476. var delay_timer = window.SetTimeout(function() {
  2477. images[img_selected] && next_image(img_selected);
  2478. logo_img_set = false;
  2479. default_img_set = false;
  2480. window.ClearTimeout(delay_timer);
  2481. window.Repaint();
  2482. }, 1500);
  2483. }
  2484.  
  2485. function fader_timer(){
  2486. img_size = calc_img_size(g_img);
  2487.     ftimer && window.ClearInterval(ftimer);
  2488.     ftimer = window.SetInterval(function() {
  2489. fader = fader * 2;
  2490. window.RepaintRect(img_size.x - img_border_width, img_size.y - img_border_width, img_size.width + img_border_width * 2, img_size.height + img_border_width * 2);
  2491. fader = fader == 0 ? 1 : fader;
  2492. if (fader >= 255) {
  2493. fader = 255;
  2494. window.ClearInterval(ftimer);
  2495. }
  2496.     }, 25); // 50 Плавность смены изображений /////////////////////////////////
  2497. }
  2498.  
  2499. function fader_timer_logo_on(){
  2500.     ftimer_logo && window.ClearInterval(ftimer_logo);
  2501.     ftimer_logo = window.SetInterval(function() {
  2502. fader_logo = fade_effect ? Math.round(fader_logo + logo_img_transparence / 10) : 0;
  2503. window.Repaint();
  2504. if (fader_logo >= logo_img_transparence) {
  2505. fader_logo = logo_img_transparence;
  2506. window.ClearInterval(ftimer_logo);
  2507. }
  2508.     }, 50);
  2509. }
  2510.  
  2511. function fader_timer_def_img_on(){
  2512. def_img_size = calc_img_size(def_img);
  2513.     ftimer_def_img && window.ClearInterval(ftimer_def_img);
  2514.     ftimer_def_img = window.SetInterval(function() {
  2515. fader_def_img = fade_effect ? Math.round(fader_def_img + default_img_transparence / 10) : 0;
  2516. window.RepaintRect(def_img_size.x - img_border_width, def_img_size.y - img_border_width, def_img_size.width + img_border_width * 2, def_img_size.height + img_border_width * 2);
  2517. if (fader_def_img >= default_img_transparence) {
  2518. fader_def_img = default_img_transparence;
  2519. window.ClearInterval(ftimer_def_img);
  2520. }
  2521.     }, 50);
  2522. }
  2523.  
  2524. function info_tooltip() {
  2525. tooltip_on = true;
  2526. tooltip_timer && window.ClearTimeout(tooltip_timer);
  2527. tooltip_timer = window.SetTimeout(function() {
  2528. tooltip_on = false;
  2529. window.Repaint();
  2530. tooltip_timer && window.ClearTimeout(tooltip_timer);
  2531. }, tooltip_delay);
  2532. }
  2533.  
  2534. function load_last_fm_logo(){
  2535. if(!fso.FileExists(script_path + "last_fm_ico.ico")) {
  2536. var url = "http://static-web.last.fm/static/images/favicon.702b239b6194.ico"
  2537. var file = "\"" + script_path + "last_fm_ico.ico" + "\"";
  2538. WshShell.Run(vbs + " " + url + " " + file, false);
  2539. }
  2540. if(!fso.FileExists(script_path + "footer_logo.png")) {
  2541. var url = "https://static-web.last.fm/static/images/footer_logo.ddcfd65712a6.png"
  2542. var file = "\"" + script_path + "footer_logo.png" + "\"";
  2543. WshShell.Run(vbs + " " + url + " " + file, false);
  2544. }
  2545. if(!fso.FileExists(script_path + "logo_static.png")) {
  2546. var url = "https://www.last.fm/static/images/logo_static.png?7b581436b23f"
  2547. var file = "\"" + script_path + "logo_static.png" + "\"";
  2548. WshShell.Run(vbs + " " + url + " " + file, false);
  2549. }
  2550. if(!fso.FileExists(script_path + "logo_sq_256_new_large.png")) {
  2551. var url = "https://d2r1vs3d9006ap.cloudfront.net/public/uploaded_images/10596530/logo_sq_256_new_large.png"
  2552. var file = "\"" + script_path + "logo_sq_256_new_large.png" + "\"";
  2553. WshShell.Run(vbs + " " + url + " " + file, false);
  2554. }
  2555. if(!fso.FileExists(script_path + "logo_sq_256_new_small.png")) {
  2556. var url = "https://d2r1vs3d9006ap.cloudfront.net/public/uploaded_images/10596530/logo_sq_256_new_small.png"
  2557. var file = "\"" + script_path + "logo_sq_256_new_small.png" + "\"";
  2558. WshShell.Run(vbs + " " + url + " " + file, false);
  2559. }
  2560. if(!fso.FileExists(script_path + "logo.png")) {
  2561. var url = "http://cdn.shopify.com/s/files/1/0270/7261/t/3/assets/logo.png?13435600546523064478" // ?????????????
  2562. var file = "\"" + script_path + "logo.png" + "\"";
  2563. WshShell.Run(vbs + " " + url + " " + file, false);
  2564. }
  2565. if(!fso.FileExists(script_path + "logo 2.png")) {
  2566. var url = "http://cdn.shopify.com/s/files/1/0270/7261/t/1/assets/logo.png?13435600546523064478" // ?????????????
  2567. var file = "\"" + script_path + "logo 2.png" + "\"";
  2568. WshShell.Run(vbs + " " + url + " " + file, false);
  2569. }
  2570. }
  2571.  
  2572. function create_download_file() {
  2573. try {
  2574. file = fso.CreateTextFile(script_path + "download.vbs" );
  2575.  
  2576. var text =
  2577. "If (WScript.Arguments.Count <> 2) Then" + "\n\r" +
  2578. " WScript.Quit" + "\n\r" +
  2579. "End If" + "\n\r" + "\n\r" +
  2580.  
  2581. "url = WScript.Arguments(0)" + "\n\r" +
  2582. "file = WScript.Arguments(1)" + "\n\r" + "\n\r" +
  2583.  
  2584. "Set objFSO = Createobject(" + '"Scripting.FileSystemObject"' + ")" + "\n\r" +
  2585. "If objFSO.Fileexists(file) Then" + "\n\r" +
  2586. " Set objFSO = Nothing" + "\n\r" +
  2587. " WScript.Quit" + "\n\r" +
  2588. "End If" + "\n\r" + "\n\r" +
  2589.  
  2590. "Set objXMLHTTP = CreateObject(" + '"MSXML2.XMLHTTP"' + ")" + "\n\r" +
  2591. "objXMLHTTP.open " + '"GET"' + ", url,false" + "\n\r" +
  2592. "objXMLHTTP.send()" + "\n\r" + "\n\r" +
  2593.  
  2594. "If objXMLHTTP.Status = 200 Then" + "\n\r" +
  2595. " Set objADOStream = CreateObject(" + '"ADODB.Stream"' + ")" + "\n\r" +
  2596. " objADOStream.Open" + "\n\r" +
  2597. " objADOStream.Type = 1" + "\n\r" +
  2598. " objADOStream.Write objXMLHTTP.ResponseBody" + "\n\r" +
  2599. " objADOStream.Position = 0" + "\n\r" +
  2600. " objADOStream.SaveToFile file" + "\n\r" +
  2601. " objADOStream.Close" + "\n\r" +
  2602. " Set objADOStream = Nothing" + "\n\r" +
  2603. "End If" + "\n\r" + "\n\r" +
  2604.  
  2605. "Set objFSO = Nothing" + "\n\r" +
  2606. "Set objXMLHTTP = Nothing"
  2607. ;
  2608.  
  2609. file.WriteLine(text);
  2610. file.Close();
  2611. } catch(e) {};
  2612. }
  2613.  
  2614. var old_x = 0;
  2615. var old_y = 0;
  2616.  
  2617. function on_mouse_move(x, y) {
  2618. window.SetCursor(IDC_HAND);
  2619.  
  2620. //pos_x = x;
  2621. pos_y = y;
  2622.  
  2623. on_header_0 = x >= txt_x && x < ww && y >= txt_y && y < h0_y + h0_text_row_height * h0_text_arr.length ? true : false;
  2624. on_header_1 = x >= txt_x && x < ww && y >= h1_y && y < h1_y + h1_text_row_height * h1_text_arr.length + 6 ? true : false;
  2625. on_header_2 = x >= txt_x && x < ww && y >= h2_y && y < h2_y + h2_text_row_height * h2_text_arr.length ? true : false;
  2626. on_info_text_btn = x >= txt_x && x < ww && y >= t_y - text_row_height && y < t_y ? true : false;
  2627. on_text = x >= txt_x && x < seekbar_x && y >= t_y && y <= wh ? true : false;
  2628. on_scrollbar = x >= seekbar_x && x < ww && y >= t_y && y <= wh ? true : false;
  2629. on_seekbar = x >= seekbar_x && x < ww && y >= seekbar_y && y <= seekbar_y + seekbar_h ? true : false;
  2630. on_img = !on_header_0 && !on_header_1 && !on_header_2 && !on_text && !on_info_text_btn && !on_scrollbar ? true : false;
  2631.  
  2632. if (on_text_down){
  2633. txt_x = x - delta_x;
  2634. txt_y = y - delta_y;
  2635.  
  2636. txt_x = Math.round(Math.max(0, Math.min(txt_x, ww - t_margin * 2 - h1_char_width - (scrollbar ? seekbar_w + 10 : 0))));
  2637. txt_y = Math.round(Math.max(0, Math.min(txt_y, wh - (h1_text_row_height + t_margin * 2))));
  2638.  
  2639. get_text_arr();
  2640. }
  2641.  
  2642. if (on_seekbar_down){
  2643. seekbar_posy = y + delta_y;
  2644. scroll = y + delta_y >= 0 ? y + delta_y <= (text_rows - text_rows_visable) * seekbar_k ? Math.round(seekbar_posy / seekbar_k) : text_rows - text_rows_visable : 0;
  2645. scroll = scroll * - 1 * text_row_height;
  2646. scroll_check();
  2647. }
  2648.  
  2649. if (scrollbar && seekbar_x && seekbar_y && seekbar_h && !on_text_down){
  2650. window.RepaintRect(seekbar_x, t_y, ww, wh);
  2651. }
  2652.  
  2653. if (!on_text_down){ // info_text_btn
  2654. window.RepaintRect(txt_x, t_y - text_row_height, ww, text_row_height);
  2655. }
  2656.  
  2657. if (lock_loading){ // lock_btn
  2658. window.RepaintRect(t_x, txt_y, ww, h0_y + h0_text_row_height * h0_text_arr.length);
  2659. }
  2660.  
  2661. if (on_header_1 && on_text_down) {
  2662. text_hiden = false;
  2663. window.SetProperty("txt hiden", text_hiden);
  2664. }
  2665.  
  2666. //if (tooltip_on) window.Repaint();
  2667.  
  2668. if (old_x != x || old_y != y){
  2669. get_text_idx();
  2670. get_selected_item();
  2671. old_x = x;
  2672. old_y = y;
  2673. }
  2674.  
  2675.  
  2676. //////////////////////////////////////////////////////////////////////////////////////////////
  2677. //window.Repaint();
  2678. //////////////////////////////////////////////////////////////////////////////////////////////
  2679. }
  2680.  
  2681. function on_mouse_wheel(delta) {
  2682. ShiftDown = utils.IsKeyPressed(VK_SHIFT) ? true : false;
  2683. ControltDown = utils.IsKeyPressed(VK_CONTROL) ? true : false;
  2684.  
  2685. if (on_img && !cycle_set && !delay && !history_show){
  2686. if (images.length < limit) get_img_from_dir(artist_folder_path(clean(meta_artist)), meta_artist);
  2687. if (img_file_names.length > 1){
  2688. delay = true;
  2689. fdelay();
  2690. next_image(delta);
  2691.  
  2692. if (data_main != 0 && (data_other_idx == 0 || data_other_idx == 1 || data_other_idx == 2)){
  2693. path = artist_folder_path(clean(meta_artist));
  2694. get_text(path, meta_artist, meta_album, meta_title);
  2695. }
  2696.  
  2697. if (cycle > 0) cycle_step = 0;
  2698. }
  2699. }
  2700.  
  2701. if ((on_header_0 || on_header_1 || on_header_2 || on_text || on_info_text_btn || on_seekbar || on_scrollbar) && !ShiftDown && !ControltDown){
  2702. if (text_height > text_height_visable){
  2703. wheel_id += delta;
  2704. scroll -= (wheel_id * -1) * text_row_height * (on_seekbar || on_scrollbar ? text_rows_visable : 1);
  2705. scroll_check();
  2706. }
  2707. }
  2708.  
  2709. if ((on_header_0 || on_header_1 || on_header_2 || on_text) && ShiftDown && !delay && !ControltDown){
  2710. tooltip_t = "";
  2711. delay = true;
  2712. fdelay();
  2713.  
  2714. if (on_header_0 && delta < 0) {font_size_h0 = Math.max(min_font_size, font_size_h0 -= 1)};
  2715. if (on_header_0 && delta > 0) {font_size_h0 = Math.min(max_font_size, font_size_h0 += 1)};
  2716. window.SetProperty("text: font size: header 0", font_size_h0);
  2717. if (on_header_1 && delta < 0) {font_size_h1 = Math.max(min_font_size, font_size_h1 -= 1)};
  2718. if (on_header_1 && delta > 0) {font_size_h1 = Math.min(max_font_size, font_size_h1 += 1)};
  2719. window.SetProperty("text: font size: header 1", font_size_h1);
  2720. if (data_main == 1 && on_header_2 && delta < 0) {font_size_h2 = Math.max(min_font_size, font_size_h2 -= 1)};
  2721. if (data_main == 1 && on_header_2 && delta > 0) {font_size_h2 = Math.min(max_font_size, font_size_h2 += 1)};
  2722. window.SetProperty("text: font size: header 2", font_size_h2);
  2723. if (on_text && delta < 0) {font_size_t = Math.max(min_font_size, font_size_t -= 1)};
  2724. if (on_text && delta > 0) {font_size_t = Math.min(max_font_size, font_size_t += 1)};
  2725. window.SetProperty("text: font size: text", font_size_t);
  2726.  
  2727. get_font();
  2728. refresh_txt = true;
  2729.  
  2730. if (text_hiden){
  2731. txt_x = ww - t_margin * 2 - h1_char_width - (scrollbar ? scrollbar_w + 10 : 0);
  2732. txt_y = wh - (h1_text_row_height + t_margin * 2);
  2733. }
  2734.  
  2735. get_text_arr();
  2736. }
  2737.  
  2738. if ((on_header_0 || on_header_1 || on_header_2 || on_text) && !ShiftDown && ControltDown){
  2739. if (delta < 0) {bg_transparence = Math.max(0, bg_transparence -= 10)};
  2740. if (delta > 0) {bg_transparence = Math.min(255, bg_transparence += 10)};
  2741. window.SetProperty("text bg transparence (0-255)", bg_transparence);
  2742. window.Repaint();
  2743. }
  2744.  
  2745. if (on_img && cycle_set && ShiftDown) {
  2746. if (delta < 0) {cycle = cycle <= 0 ? 0 : cycle - 5;};
  2747. if (delta > 0) {cycle = cycle >= 60 ? 60 : cycle + 5;};
  2748. window.SetProperty("auto cycle (sec)", cycle);
  2749. window.Repaint();
  2750. }
  2751. }
  2752.  
  2753. function on_mouse_lbtn_down(x, y){
  2754. if (on_header_0 || on_header_1 || on_header_2 || on_info_text_btn || on_text){
  2755. on_text_down = true;
  2756. delta_x = x - txt_x;
  2757. delta_y = y - txt_y;
  2758. }
  2759.  
  2760. if (on_seekbar){
  2761. on_seekbar_down = true;
  2762. seekbar_posy = Math.abs(scroll) / text_row_height * seekbar_k;
  2763. delta_y = seekbar_posy - y;
  2764. }
  2765.  
  2766. if (on_scrollbar && !on_seekbar){
  2767. on_scrollbar_down = true;
  2768. scroll = (y - t_y) / seekbar_k * text_row_height * -1;
  2769. scroll = Math.floor(scroll / text_row_height) * text_row_height;
  2770.  
  2771. scroll_check();
  2772. }
  2773.  
  2774. if (tooltip_on){
  2775. tooltip_on = false;
  2776. window.Repaint();
  2777. }
  2778. }
  2779.  
  2780. function on_mouse_lbtn_up(x,y){
  2781. window.SetProperty("txt_x", txt_x);
  2782. window.SetProperty("txt_y", txt_y);
  2783. on_text_down = false;
  2784. on_seekbar_down = false;
  2785. on_scrollbar_down = false;
  2786. }
  2787.  
  2788. function lock_mode(){
  2789. get_text_arr();
  2790.  
  2791. if (lock_loading){
  2792. lock_artist = meta_artist;
  2793. lock_album = meta_album;
  2794. lock_title = meta_title;
  2795. }
  2796.  
  2797. if (!lock_loading){
  2798. if (history_show){
  2799. history_show = false;
  2800. old_artist = "";
  2801. old_album = "";
  2802. old_title = "";
  2803. history_arr = [];
  2804. refresh_txt = true;
  2805. get_text_arr();
  2806. }
  2807. on_metadb_changed();
  2808. }
  2809. }
  2810.  
  2811. function on_mouse_lbtn_dblclk (x, y){
  2812. tooltip_x = x;
  2813. tooltip_y = y;
  2814.  
  2815. if (on_header_0 || on_header_1){
  2816. lock_loading = !lock_loading;
  2817. lock_mode();
  2818. }
  2819.  
  2820. if (text && on_text && lang_arr.length && !selected_item && !history_show){
  2821. ShiftDown = utils.IsKeyPressed(VK_SHIFT) ? true : false;
  2822.  
  2823. if (ShiftDown) {
  2824. lang_idx = lang_idx <= 0 ? lang_arr.length - 1 : lang_idx - 1;
  2825. } else {
  2826. lang_idx = lang_idx >= lang_arr.length - 1 ? 0 : lang_idx + 1;
  2827. }
  2828.  
  2829. window.SetProperty("lang", lang_idx);
  2830. path = artist_folder_path(clean(meta_artist));
  2831. get_text(path, meta_artist, meta_album, meta_title);
  2832. tooltip_text = get_text_menu(lang_arr[lang_idx]);
  2833. tooltip && info_tooltip();
  2834. }
  2835.  
  2836. if (on_text && selected_item){
  2837. if (selected_item == latest_release){
  2838. data_main = 1;
  2839. data_other_idx = 3;
  2840. meta_album = latest_release;
  2841. get_img(meta_artist, meta_album, meta_title);
  2842. }
  2843.  
  2844. if (selected_item == popular_this_week){
  2845. data_main = 1;
  2846. data_other_idx = 4;
  2847. meta_album = "";
  2848. meta_title = popular_this_week;
  2849. get_img(meta_artist, meta_album, meta_title);
  2850. }
  2851.  
  2852. if (history_show){
  2853. history_show = false;
  2854. data_main = 0;
  2855. lock_artist = selected_item;
  2856. lock_album = "";
  2857. lock_title = "";
  2858. on_metadb_changed();
  2859. }
  2860. }
  2861.  
  2862. if (on_img){
  2863. if (!history_show){
  2864. data_main = data_main == 1 ? 0 : 1;
  2865. window.SetProperty("data_main: bio or album, similar", data_main);
  2866. get_img(meta_artist, meta_album, meta_title);
  2867.  
  2868. switch(data_main) {
  2869. case 0:
  2870. tooltip_text = "Исполнитель"; //////////////////////////////////////
  2871. // tooltip_text = "artist"; //////////////////////////////////////
  2872. break;
  2873. case 1:
  2874. tooltip_text = data_other[data_other_idx][0].replace(/_/g," "); //////////////////////////////////////
  2875. // tooltip_text = data_other[data_other_idx][2].replace(/_/g," "); //////////////////////////////////////
  2876. break;
  2877. }
  2878. meta_artist && tooltip && info_tooltip();
  2879. }
  2880. }
  2881.  
  2882. if (on_info_text_btn){
  2883. info_text_idx = data_main == 0 ? 0 : data_main + data_other_idx;
  2884. info_text_show = !window.GetProperty("info text " + info_text_idx);
  2885. window.SetProperty("info text " + info_text_idx, info_text_show);
  2886. scroll = scroll_ = scroll__ = scroll___ = 0;
  2887. refresh_txt = true;
  2888. get_text_arr();
  2889. }
  2890. }
  2891.  
  2892. function on_mouse_mbtn_dblclk (x, y){
  2893. !text_hiden && hide_text(x, y);
  2894. text_hiden && restore_text();
  2895. text_hiden = !text_hiden;
  2896. window.SetProperty("txt hiden", text_hiden);
  2897.  
  2898. window.SetProperty("txt_x", txt_x);
  2899. window.SetProperty("txt_y", txt_y);
  2900. }
  2901.  
  2902. function on_mouse_leave() {
  2903. window.SetCursor(IDC_ARROW);
  2904. on_header_0 = false, on_header_1 = false, on_header_2 = false, on_info_text_btn = false, on_text = false, on_scrollbar = false, on_seekbar = false, on_img = false;
  2905. window.Repaint();
  2906. }
  2907.  
  2908. function on_char(code) {
  2909. if (history_show){
  2910. e_char = String.fromCharCode(code);
  2911.  
  2912. switch(code){
  2913. case ESC:
  2914. history_seach = "";
  2915. get_history();
  2916. break;
  2917. case BACKSPACE:
  2918. history_seach = history_seach.substring(0, history_seach.length - 1);
  2919. get_history();
  2920. break;
  2921.  
  2922. case 22: //CTRL+V
  2923. clipboardData = htmlfile.parentWindow.clipboardData.getData('text');
  2924. clipboardData = clipboardData.substring(0, 200);
  2925. clipboardData = clipboardData.replace(/[\n\r]/g,' ');
  2926. history_seach = trim(clipboardData);
  2927. get_history();
  2928. break;
  2929. case ENTER:
  2930. //if (history_show && !history_result){
  2931. // get_last_fm_artist(trim(history_seach));
  2932. //}
  2933.  
  2934. if (history_show && selected_item){
  2935. history_show = false;
  2936. data_main = 0;
  2937. lock_artist = selected_item;
  2938. lock_album = "";
  2939. lock_title = "";
  2940. on_metadb_changed();
  2941. }
  2942. break;
  2943. default: // any character
  2944. history_seach = title_case(history_seach + e_char);
  2945. get_history();
  2946. break;
  2947. }
  2948. }
  2949. }
  2950.  
  2951. function on_key_down(vkey) {
  2952. switch(vkey){
  2953. case VK_SHIFT:
  2954. cycle_set = true;
  2955. window.Repaint();
  2956. break;
  2957. case VK_DELETE:
  2958. if (history_show) del_history_item();;
  2959. break;
  2960. }
  2961.  
  2962. if (img_file_names.length > 1 && !cycle_set && !delay && !history_show){
  2963. switch(vkey){
  2964. case VK_LEFT:
  2965. next_image(-1);
  2966. break;
  2967. case VK_RIGHT:
  2968. next_image(1);
  2969. break;
  2970. }
  2971.  
  2972. if (vkey == VK_LEFT || vkey == VK_RIGHT){
  2973. if (data_main != 0 && (data_other_idx == 0 || data_other_idx == 1 || data_other_idx == 2)){
  2974. path = artist_folder_path(clean(meta_artist));
  2975. get_text(path, meta_artist, meta_album, meta_title);
  2976. }
  2977. delay = true;
  2978. fdelay();
  2979. if (cycle > 0) cycle_step = 0;
  2980. }
  2981. }
  2982.  
  2983. if (text_height > text_height_visable || history_show){
  2984. key_down = true;
  2985. switch(vkey){
  2986. case VK_UP:
  2987. if (!history_show){
  2988. scroll_k = window.GetProperty(" scroll key k");
  2989. scroll = scroll + text_row_height;
  2990. scroll_check();
  2991. }
  2992.  
  2993. if (history_show && text_idx > 0){
  2994. if (text_idx <= (Math.abs(scroll) / text_row_height) && text_rows > text_rows_visable){
  2995. scroll = scroll + text_row_height;
  2996. scroll_check();
  2997. }
  2998.  
  2999. text_idx = Math.max(text_idx - 1, 0);
  3000. get_selected_item();
  3001. }
  3002. break;
  3003. case VK_DOWN:
  3004. if (!history_show ){
  3005. scroll_k = window.GetProperty(" scroll key k");
  3006. scroll = scroll - text_row_height;
  3007. scroll_check();
  3008. }
  3009.  
  3010. if (history_show && text_idx < text_rows){
  3011. if (text_idx >= (Math.abs(scroll) / text_row_height) + text_rows_visable - 1 && text_rows > text_rows_visable){
  3012. scroll = scroll - text_row_height;
  3013. scroll_check();
  3014. }
  3015.  
  3016. text_idx = Math.min(text_idx + 1, text_rows - 1);
  3017. get_selected_item();
  3018. }
  3019. break;
  3020. case VK_HOME:
  3021. scroll = 0;
  3022. text_idx = 0;
  3023. scroll_check();
  3024. break;
  3025. case VK_END:
  3026. scroll = -1 * (text_height - text_height_visable);
  3027. text_idx = text_rows - 1;
  3028. scroll_check();
  3029. break;
  3030. case VK_PAGE_UP:
  3031. if (text_rows > text_rows_visable){
  3032. scroll += text_row_height * text_rows_visable;
  3033. text_idx = Math.max(text_idx - text_rows_visable, 0);
  3034. scroll_check();
  3035. }
  3036. break;
  3037. case VK_PAGE_DOWN:
  3038. if (text_rows > text_rows_visable){
  3039. scroll -= text_row_height * text_rows_visable;
  3040. text_idx = Math.min(text_idx + text_rows_visable, text_rows - 1);
  3041. scroll_check();
  3042. }
  3043. break;
  3044. }
  3045. }
  3046. }
  3047.  
  3048. function on_key_up(vkey) {
  3049. switch(vkey){
  3050. case VK_SHIFT:
  3051. cycle_set = false;
  3052. if (cycle > 0) cycle_set_timer();
  3053. if (cycle == 0) window.ClearInterval(cycle_timer);
  3054. window.Repaint();
  3055. break;
  3056. }
  3057. }
  3058.  
  3059. function hide_text(x, y){
  3060. window.SetProperty("tmp_txt_x", txt_x);
  3061. window.SetProperty("tmp_txt_y", txt_y);
  3062.  
  3063. txt_x = ww - t_margin * 2 - h1_char_width - (scrollbar ? seekbar_w + 10 : 0);
  3064. txt_y = wh - (h1_text_row_height + t_margin * 2);
  3065. get_text_arr();
  3066. }
  3067.  
  3068. function restore_text(){
  3069. txt_x = window.GetProperty("tmp_txt_x");
  3070. txt_y = window.GetProperty("tmp_txt_y");
  3071. get_text_arr();
  3072. }
  3073.  
  3074. function on_size(){
  3075. ww = window.Width;
  3076. wh = window.Height;
  3077.  
  3078. txt_x = window.GetProperty("txt_x");
  3079. txt_y = window.GetProperty("txt_y");
  3080.  
  3081. txt_x = Math.round(Math.max(0, Math.min(txt_x, ww - t_margin * 2 - h1_char_width - (scrollbar ? seekbar_w + 10 : 0))));
  3082. txt_y = Math.round(Math.max(0, Math.min(txt_y, wh - (h1_text_row_height + t_margin * 2))));
  3083.  
  3084. refresh_txt = true;
  3085. img_size_recount = false;
  3086. def_img_size_recount = false;
  3087. get_text_arr();
  3088. }
  3089.  
  3090. function del_folders(n){
  3091. var dir = fso.GetFolder(work_path);
  3092. var e = new Enumerator( dir.SubFolders );
  3093. try {
  3094. for(; !e.atEnd(); e.moveNext() ) {
  3095. var sub_folder = e.item().Name;
  3096. if (sub_folder.indexOf("_download") < 0){
  3097. if (sub_folder.indexOf(n) < 0){
  3098. fso.deleteFolder(work_path + sub_folder, true);
  3099. }
  3100. }
  3101. }
  3102. } catch(e) {};
  3103. }
  3104.  
  3105. function del_folder(n){
  3106. if(!n) return;
  3107. try {
  3108. fso.deleteFolder(n, true);
  3109. } catch(e) {};
  3110. }
  3111.  
  3112. function delete_empty_folders(){
  3113. var dir = fso.GetFolder(work_path);
  3114.  
  3115. var e = new Enumerator( dir.SubFolders );
  3116. try {
  3117. for(; !e.atEnd(); e.moveNext() ) {
  3118. var sub_folder = objShellApp.NameSpace( e.item() + "\\" );
  3119. var items = sub_folder.Items();
  3120. var items_count = items.Count;
  3121.  
  3122. if (!items_count){
  3123. fso.deleteFolder(e.item(), true);
  3124. }
  3125. }
  3126. } catch(e) {}
  3127. }
  3128.  
  3129. function calc_img_size(img){
  3130. if(!img) return;
  3131.  
  3132. ww = window.Width;
  3133. wh = window.Height;
  3134.  
  3135. var size = {x:0, y:0, width:0, height:0, cx:0, cy:0, cwidth:0, cheight:0};
  3136.  
  3137. var margin = img_margin ? img_margin : 0;
  3138. var border = img_border && img_border_width > 0 ? img_border_width : 0;
  3139. var new_width = ww - border * 2 - margin * 2;
  3140. var new_height = wh - border * 2 - margin * 2;
  3141.  
  3142. switch(img_alignment_idx) {
  3143. case 0: // adjust
  3144. var sw = new_width / img.Width;
  3145. var sh = new_height / img.Height;
  3146. var s = Math.min(sw, sh);
  3147.  
  3148. var x = border + margin;
  3149. var y = border + margin;
  3150.  
  3151. if (sw > sh) x = x + (new_width - img.Width * s) / 2;
  3152. else if (sw < sh) y = y + (new_height - img.height * s) / 2;
  3153.  
  3154. var width = img.Width * s;
  3155. var height = img.Height * s;
  3156. var cx = 0;
  3157. var cy = 0;
  3158. var cwidth = img.Width;
  3159. var cheight = img.Height;
  3160. break;
  3161.  
  3162. case 1: // adjust top - center
  3163. var sw = new_width / img.Width;
  3164. var sh = new_height / img.Height;
  3165. var s = Math.min(sw, sh);
  3166.  
  3167. var x = border + margin;
  3168. if (sw > sh) x = x + (new_width - img.Width * s) / 2;
  3169. var y = border + margin;
  3170. var width = img.Width * s;
  3171. var height = img.Height * s;
  3172. var cx = 0;
  3173. var cy = 0;
  3174. var cwidth = img.Width;
  3175. var cheight = img.Height;
  3176. break;
  3177.  
  3178. case 2: // adjust top - left
  3179. var sw = new_width / img.Width;
  3180. var sh = new_height / img.Height;
  3181. var s = Math.min(sw, sh);
  3182.  
  3183. var x = border + margin;
  3184. var y = border + margin;
  3185. var width = img.Width * s;
  3186. var height = img.Height * s;
  3187. var cx = 0;
  3188. var cy = 0;
  3189. var cwidth = img.Width;
  3190. var cheight = img.Height;
  3191. break;
  3192.  
  3193. case 3: // centre
  3194. var sr = img.Width / img.Height;
  3195. var dr = new_width / new_height;
  3196. if (sr < dr) {
  3197. var r = img.Width / new_width;
  3198. var cheight = new_height * r;
  3199. var cy = Math.round((img.Height - cheight) / 2);
  3200. var cwidth = img.Width;
  3201. var cx = 0;
  3202. } else {
  3203. var r = img.Height / new_height;
  3204. var cwidth = new_width * r;
  3205. var cx = Math.round((img.Width - cwidth) / 2);
  3206. var cheight = img.Height;
  3207. var cy = 0;
  3208. }
  3209. var x = border + margin;
  3210. var y = border + margin;
  3211. var width = new_width;
  3212. var height = new_height;
  3213. break;
  3214.  
  3215. case 4: // centre - top
  3216. var sr = img.Width / img.Height;
  3217. var dr = new_width / new_height;
  3218. if (sr < dr) {
  3219. var r = img.Width / (new_width);
  3220. var cheight = new_height * r;
  3221. var cy = 0;
  3222. var cwidth = img.Width;
  3223. var cx = 0;
  3224. } else {
  3225. var r = img.Height / new_height;
  3226. var cwidth = new_width * r;
  3227. var cx = Math.round((img.Width - cwidth) / 2);
  3228. var cheight = img.Height;
  3229. var cy = 0;
  3230. }
  3231. var x = border + margin;
  3232. var y = border + margin;
  3233. var width = new_width;
  3234. var height = new_height;
  3235. break;
  3236. case 5: // stretch
  3237. var x = border + margin;
  3238. var y = border + margin;
  3239. var width = new_width;
  3240. var height = new_height;
  3241. var cx = 0;
  3242. var cy = 0;
  3243. var cwidth = img.Width;
  3244. var cheight = img.Height;
  3245. break;
  3246. }
  3247.  
  3248. size.x = Math.round(x);
  3249. size.y = Math.round(y);
  3250. size.width = Math.round(width);
  3251. size.height = Math.round(height);
  3252. size.cx = Math.round(cx);
  3253. size.cy = Math.round(cy);
  3254. size.cwidth = Math.round(cwidth);
  3255. size.cheight = Math.round(cheight);
  3256. return size;
  3257. }
  3258.  
  3259. function copy_files(select_file){
  3260. var destination_path;
  3261. var tmp_destination_path;
  3262. var tmp_files = [];
  3263. var tmp_artist = meta_artist;
  3264. var tmp_folder;
  3265.  
  3266. switch(data_main) {
  3267. case 0:
  3268. tmp_folder = "artist";
  3269. break;
  3270. case 1:
  3271. tmp_folder = data_other[data_other_idx][2];
  3272. break;
  3273. }
  3274.  
  3275. if (metadb.RawPath.indexOf("file") < 0) {
  3276. tmp_destination_path = fb.ProfilePath + "tmp_lastFm_img\\";
  3277. } else {
  3278. tmp_destination_path = directory_path + "\\" + tmp_folder + "\\";
  3279. }
  3280.  
  3281. var nl = "\" + chr(10) + \"";
  3282.  
  3283. if (select_file == 0){
  3284. tmp_files.push(img_file_names[img_selected]);
  3285. var input_box_text = "Копировать файл :" + nl + nl + get_fnext(tmp_files[0]) + nl + nl + "в"; //////////////////////////////////////
  3286. // var input_box_text = "Copy " + nl + nl + get_fnext(tmp_files[0]) + nl + "file to"; //////////////////////////////////////
  3287. } else {
  3288. tmp_files = img_file_names;
  3289. var input_box_text = "Копировать файлы :" + nl + nl + tmp_artist + " * " + tmp_folder + ".jpg" + nl + nl + "в"; //////////////////////////////////////
  3290. // var input_box_text = "Copy " + nl + nl + tmp_artist + " * " + tmp_folder + ".jpg" + nl + "files to"; //////////////////////////////////////
  3291. }
  3292.  
  3293. var string = input_box(input_box_text, tmp_destination_path, "Foobar 2000");
  3294. if (!/\S/.test(string)) copy_files();
  3295.  
  3296. if (string){
  3297. destination_path = folder_exists(string);
  3298. if (fso.FolderExists(destination_path)) {
  3299. copy_files_to_folder(destination_path, tmp_files, tmp_folder);
  3300. }
  3301. }
  3302. }
  3303.  
  3304. function copy_files_to_folder(path, img_file_names, folder){
  3305. for (i in img_file_names) {
  3306. try {
  3307. fso.CopyFile (img_file_names[i], path , 1);
  3308. } catch(e) {}
  3309. }
  3310. }
  3311.  
  3312. function input_box(p_text, d_text, w_title){
  3313. vbe = new ActiveXObject('ScriptControl');
  3314. vbe.Language = 'VBScript';
  3315. return vbe.eval( "InputBox(\"" + p_text + "\",\"" + w_title + "\",\"" + d_text + "\")");
  3316. }
  3317.  
  3318. function clean_path_name(n) {
  3319. if (!n) return;
  3320. return n.replace(/[\/\:\*\?\"\<\>\|]/g,'');
  3321. }
  3322.  
  3323. function folder_exists(n) {
  3324. var driver = fso.GetDriveName(n);
  3325. if (!fso.DriveExists(driver)) {
  3326. return "";
  3327. } else {
  3328. var p = "";
  3329. var split_string = [];
  3330. split_string = n.replace(/\\$/g, "").split("\\");
  3331.  
  3332. for (var i = 1; i < split_string.length; i++) {
  3333. p = p + clean_path_name(split_string[i]) + "\\";
  3334. try {
  3335. if(!fso.FolderExists(driver + "\\" + p)) fso.CreateFolder(driver + "\\" + p);
  3336. } catch(e) {};
  3337. }
  3338. return driver + "\\" + p;
  3339. }
  3340. }
  3341.  
  3342. function naturalSort(stringArray) {
  3343. var xor = function(a, b) {
  3344. return a ? !b : b;
  3345. }
  3346. var isDigit = function(chr) {
  3347. var charCode = function(ch) {
  3348. return ch.charCodeAt(0);
  3349. };
  3350. var code = charCode(chr);
  3351. return (code >= charCode('0')) && (code <= charCode('9'));
  3352. }
  3353. var splitString = function(str) {
  3354. var from = 0;
  3355. var index = 0;
  3356. var count = 0;
  3357. var splitter = {};
  3358.  
  3359. splitter.count = function () {
  3360. return count;
  3361. }
  3362. splitter.next = function() {
  3363. if (index === str.length) {
  3364. return null;
  3365. }
  3366. while(++index) {
  3367. var currentIsDigit = isDigit(str.charAt(index - 1));
  3368. var nextChar = str.charAt(index);
  3369. var currentIsLast = (index === str.length);
  3370. var isBorder = currentIsLast || xor(currentIsDigit, isDigit(nextChar));
  3371. if (isBorder) {
  3372. var part = str.slice(from, index);
  3373. from = index;
  3374. count++;
  3375. return {
  3376. IsNumber: currentIsDigit,
  3377. Value: currentIsDigit ? Number(part) : part
  3378. }
  3379. }
  3380. }
  3381. }
  3382. return splitter;
  3383. }
  3384. var compareStrings = function(str1, str2) {
  3385. var compare = function(a, b) {
  3386. return (a < b) ? -1 : (a > b) ? 1 : 0;
  3387. }
  3388. var splitter1 = splitString(str1);
  3389. var splitter2 = splitString(str2);
  3390. while (true) {
  3391. var first = splitter1.next();
  3392. var second = splitter2.next();
  3393. if (null !== first && null !== second) {
  3394. if (xor(first.IsNumber, second.IsNumber)) {
  3395. return first.IsNumber ? -1 : 1;
  3396. } else {
  3397. var comp = compare(first.Value, second.Value);
  3398. if (comp != 0) {
  3399. return comp;
  3400. }
  3401. }
  3402. } else {
  3403. return compare(splitter1.count(), splitter2.count());
  3404. }
  3405. }
  3406. }
  3407. var arr = stringArray;
  3408. return arr.sort(compareStrings);
  3409. }
  3410.  
  3411. function delete_empty_folders(){
  3412. var dir = fso.GetFolder(work_path);
  3413. var e = new Enumerator( dir.SubFolders );
  3414.  
  3415. try {
  3416. for(; !e.atEnd(); e.moveNext() ) {
  3417. var sub_folder = objShellApp.NameSpace( e.item() + "\\" );
  3418. var items = sub_folder.Items();
  3419. var items_count = items.Count;
  3420.  
  3421. if (items_count == 0){
  3422. fso.deleteFolder(e.item(), true);
  3423. }
  3424. }
  3425. } catch(e) {}
  3426. }
  3427.  
  3428. function get_lastFm_meta_artist_img(path, t_artist){
  3429. var xmlhttp1 = new ActiveXObject("Microsoft.XMLHTTP");
  3430. var url1 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist) + "/+images");
  3431. xmlhttp1.open("GET", url1, true );
  3432. xmlhttp1.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  3433. xmlhttp1.send(null);
  3434. xmlhttp1.onreadystatechange = function () {
  3435. if (xmlhttp1.readyState == 4) {
  3436. if (xmlhttp1.status == 200) {
  3437. doc.open();
  3438. var div = doc.createElement("div");
  3439. div.innerHTML = xmlhttp1.responsetext;
  3440. var d = div.getElementsByTagName("div");
  3441. var img = div.getElementsByTagName("img");
  3442.  
  3443. var msg = "";
  3444.  
  3445. for (i = 0; i < d.length; i++) {
  3446. if (d[i].className == "no-data-message"){ // "We don't have any photos for this artist yet."
  3447. msg = d[i].innerText;
  3448. }
  3449. }
  3450.  
  3451. no_img_msg = msg ? msg + "\n\n" : "";
  3452.  
  3453. var img_urls = [];
  3454.  
  3455. for (i = 0; i < img.length; i++) {
  3456. //if (img[i].src.indexOf("https://img2-ak.lst.fm/i/u/avatar170s") == 0 || img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/avatar170s") == 0 || img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/avatar170s") == 0) {
  3457. if (img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/avatar170s") == 0 || img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/avatar170s") == 0) {
  3458. img_urls.push(img[i].src.replace("avatar170s", quality[quality_idx][1]));
  3459. }
  3460. }
  3461.  
  3462. for (i = 0; i < Math.min(img_urls.length, limit); i++) {
  3463. var img_file = path + "\\" + clean(t_artist) + "_" + i + "_artist.jpg";
  3464. if (!fso.FileExists(img_file)){
  3465. WshShell.Run(vbs + " " + img_urls[i] + " " + "\"" + img_file + "\"", 0, false);
  3466. }
  3467. }
  3468.  
  3469. doc.close();
  3470.  
  3471. if (img_urls.length && !g_img) {
  3472. get_files_if_loaded(path, t_artist);
  3473. //image_upload_delay(path, t_artist);
  3474. } else {
  3475. get_lastFm_artist_info_text(path, "file", t_artist);
  3476. }
  3477. } else {
  3478. get_lastFm_artist_info_text(path, "file", t_artist);
  3479. }
  3480. }
  3481. }
  3482. }
  3483.  
  3484. //function get_lastFm_popular_albums(path, t_artist){
  3485. function get_lastFm_album_img(path, t_artist){
  3486. var xmlhttp2 = new ActiveXObject("Microsoft.XMLHTTP");
  3487. var url2 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist) + "/+albums");
  3488. xmlhttp2.open("GET", url2, true );
  3489. xmlhttp2.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  3490. xmlhttp2.send(null);
  3491. xmlhttp2.onreadystatechange = function () {
  3492. if (xmlhttp2.readyState == 4) {
  3493. if (xmlhttp2.status == 200) {
  3494. doc.open();
  3495. var div = doc.createElement("div");
  3496. div.innerHTML = xmlhttp2.responsetext;
  3497. var p = div.getElementsByTagName("p");
  3498. var img = div.getElementsByTagName("img");
  3499.  
  3500. var msg = "";
  3501.  
  3502. for (i = 0; i < p.length; i++) {
  3503. if (p[i].className == "wiki-cta link-block js-link-block"){ // Do you know any background info about this album?
  3504. msg = p[i].innerText;
  3505. }
  3506. }
  3507.  
  3508. no_img_msg = msg;
  3509.  
  3510. var urls = [];
  3511. var img_urls = [];
  3512. var album_name = [];
  3513. var color = [];
  3514. var font = [];
  3515. var tmp_data_2 = [], tmp_data_3 = [];
  3516. var data_1 = [], data_2 = [], data_3 = [];
  3517.  
  3518. for (i = 0; i < p.length; i++) {
  3519. if (p[i].className == "resource-list--release-list-item-aux-text resource-list--release-list-item-listeners" ){ // album: listeners
  3520. tmp_data_2.push(p[i].innerHTML.replace(/\,|(&nbsp;)/g, ' '));
  3521. }
  3522. if (p[i].className == "resource-list--release-list-item-aux-text" ){ // album: release date
  3523. tmp_data_3.push(p[i].innerHTML.replace(/\,|(&nbsp;)/g, ' '));
  3524. }
  3525. }
  3526.  
  3527. for (i = 0; i < img.length; i++) {
  3528. //if (img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300x300") == 0){
  3529. //if (img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/300x300") == 0 || img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300x300") == 0 && img[i].alt.indexOf("Avatar for") < 0){ /////
  3530. if (img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/300x300") == 0 && img[i].alt.indexOf("Avatar for") < 0){ /////
  3531. urls.push(img[i].src);
  3532. album_name.push(img[i].alt); // album: name
  3533. }
  3534. }
  3535.  
  3536. for (i = 0; i < urls.length; i++) {
  3537. if (urls[i].indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0 && urls[i].indexOf("2a96cbd8b46e442fc41c2b86b821562f") < 0) {
  3538. img_urls.push(urls[i].replace("300x300", quality[quality_idx][1]));
  3539.  
  3540. data_1.push(album_name[i]); // album: name
  3541. data_2.push(tmp_data_2[i]); // album: listeners
  3542. data_3.push(tmp_data_3[i]); // album: release date
  3543. }
  3544. }
  3545.  
  3546. color.push("h1_color", "h1_color");
  3547. font.push("t2_font", "t2_font");
  3548.  
  3549. for (i = 0; i < Math.min(img_urls.length, limit); i++) {
  3550. utils.WriteINI( path + "\\" + clean(t_artist) + "_album_info.ini", data_other[data_other_idx][2] + " : name", i, data_1[i]);
  3551. utils.WriteINI( path + "\\" + clean(t_artist) + "_album_info.ini", data_other[data_other_idx][2] + " : info : " + lang_arr[lang_idx], i, data_2[i] + "*" + data_3[i]);
  3552.  
  3553. utils.WriteINI( path + "\\" + clean(t_artist) + "_album_info.ini", data_other[data_other_idx][2] + " : info : " + lang_arr[lang_idx], i + "_c", color.join("*"));
  3554. utils.WriteINI( path + "\\" + clean(t_artist) + "_album_info.ini", data_other[data_other_idx][2] + " : info : " + lang_arr[lang_idx], i + "_f", font.join("*"));
  3555.  
  3556. var img_file = path + "\\" + clean(t_artist) + "_" + clean(data_1[i]) + ".jpg";
  3557. if (!fso.FileExists(img_file )){
  3558. WshShell.Run(vbs + " " + img_urls[i] + " " + "\"" + img_file + "\"", 0, false);
  3559. }
  3560. }
  3561.  
  3562. doc.close();
  3563.  
  3564. if (img_urls.length && !g_img) {
  3565. get_files_if_loaded(path, t_artist);
  3566. //image_upload_delay(path, t_artist);
  3567. } else {
  3568. get_text(path, t_artist);
  3569. }
  3570. } else {
  3571. get_text(path, t_artist);
  3572. }
  3573. }
  3574. }
  3575. }
  3576.  
  3577. function get_lastFm_artist_info_text(path, file, t_artist){
  3578. var xmlhttp9 = new ActiveXObject("Microsoft.XMLHTTP");
  3579. var url9 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist));
  3580. xmlhttp9.open("GET", url9, true );
  3581. xmlhttp9.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  3582. xmlhttp9.send(null);
  3583. xmlhttp9.onreadystatechange = function () {
  3584. if (xmlhttp9.readyState == 4) {
  3585. if (xmlhttp9.status == 200) {
  3586. doc.open();
  3587. var div = doc.createElement("div");
  3588. div.innerHTML = xmlhttp9.responsetext;
  3589. var p = div.getElementsByTagName("p");
  3590. var a = div.getElementsByTagName("a");
  3591. var li = div.getElementsByTagName("li");
  3592. var h4 = div.getElementsByTagName("h4");
  3593. var abbr = div.getElementsByTagName("abbr");
  3594. var a = div.getElementsByTagName("a");
  3595.  
  3596. var data =[];
  3597. var color = [];
  3598. var font = [];
  3599.  
  3600. ////////////////////////////////////////////////////////////////////////////////////
  3601.  
  3602. var rank_text = "";
  3603. var rank_value = "";
  3604.  
  3605. for (i = 0; i < p.length; i++) {
  3606. if (p[i].className.replace(/[\s]/g, "") == "tooltip-dark header-new-chart-position-tooltip".replace(/[\s]/g, "")) {
  3607. rank_text = p[i].innerText.replace(/\./g, "");
  3608. }
  3609. }
  3610.  
  3611. for (i = 0; i < a.length; i++) {
  3612. if (a[i].className.replace(/[\s]/g, "") == "header-new-chart-position-number disclose-trigger".replace(/[\s]/g, "")) {
  3613. rank_value = a[i].innerText;
  3614. }
  3615. }
  3616.  
  3617. if (rank_text && rank_value) {
  3618. var rank_data = [];
  3619. var rank_color = [];
  3620. var rank_font = [];
  3621.  
  3622. rank_data.push(rank_text, rank_value, "", "");
  3623. rank_color.push("h1_color", "t_color", "", "");
  3624. rank_font.push("t2_font", "t_font", "", "");
  3625.  
  3626. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_rank", rank_data.join("*"));
  3627. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_rank_c", rank_color.join("*"));
  3628. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_rank_f", rank_font.join("*"));
  3629. }
  3630.  
  3631. ////////////////////////////////////////////////////////////////////////////////////
  3632.  
  3633. var tag = "";
  3634.  
  3635. for (i = 0; i < li.length; i++) {
  3636. if (li[i].className == "tag") { // classic rock rock southern rock 60s folk 70s
  3637. tag = tag + li[i].innerText + "; ";
  3638. }
  3639. }
  3640.  
  3641. if (tag) {
  3642. tag = tag.substring(0, tag.length - 2);
  3643. data.push(tag, "");
  3644. color.push("t_color", "");
  3645. font.push("t2_font", "");
  3646. }
  3647.  
  3648. ////////////////////////////////////////////////////////////////////////////////////
  3649.  
  3650. var tmp_data_1 = [], tmp_data_2 = [];;
  3651.  
  3652. for (i = 0; i < h4.length; i++) {
  3653. if (h4[i].className == "header-metadata-tnew-title") { // Scrobbles, Listeners NEW
  3654. tmp_data_1.push(h4[i].innerText);
  3655. }
  3656. }
  3657.  
  3658. for (i = 0; i < abbr.length; i++) {
  3659. if (abbr[i].className == "intabbr js-abbreviated-counter") { // 57,404,270, 2,314,768 NEW
  3660. tmp_data_2.push(abbr[i].title.replace(/,/g, " "));
  3661. }
  3662. }
  3663.  
  3664. for (i = 0; i < tmp_data_1.length / 2; i++) {
  3665. data.push(tmp_data_1[i], tmp_data_2[i]);
  3666. color.push("h1_color", "t_color");
  3667. font.push("t2_font", "t_font");
  3668. }
  3669.  
  3670. if (tmp_data_1.length) {
  3671. data.push("");
  3672. color.push("");
  3673. font.push("");
  3674. }
  3675.  
  3676. ////////////////////////////////////////////////////////////////////////////////////
  3677.  
  3678. var tmp_data_1 = [], tmp_data_2 = [];
  3679.  
  3680.  
  3681. for (i = 0; i < h4.length; i++) {
  3682. if (h4[i].className == "artist-header-featured-items-item-header") { // Latest release, Popular this week
  3683. tmp_data_1.push(h4[i].innerText);
  3684. }
  3685. }
  3686.  
  3687. for (i = 0; i < a.length; i++) {
  3688. if (a[i].className == "link-block-target") { // Live At Woodstock, Fortunate Son,
  3689. tmp_data_2.push(a[i].innerText);
  3690. }
  3691. }
  3692.  
  3693. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), "latest_release", tmp_data_2[0]);
  3694. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), "popular_this_week", tmp_data_2[1]);
  3695.  
  3696. for (i = 0; i < tmp_data_1.length; i++) {
  3697. data.push(tmp_data_1[i], tmp_data_2[i]);
  3698. color.push("h1_color", "t_color");
  3699. font.push("t2_font", "t_font");
  3700. }
  3701.  
  3702. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx], data.join("*"));
  3703. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_c", color.join("*"));
  3704. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), lang_arr[lang_idx] + "_f", font.join("*"));
  3705.  
  3706. doc.close();
  3707.  
  3708. get_text(path, t_artist);
  3709. } else {
  3710. get_text(path, t_artist);
  3711. }
  3712. }
  3713. }
  3714. }
  3715.  
  3716. function get_lastFm_bio_text(path, file, t_artist){
  3717. xmlhttp3 = new ActiveXObject("Microsoft.XMLHTTP");
  3718. url3 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist) + "/+wiki");
  3719. xmlhttp3.open("GET", url3, true);
  3720. xmlhttp3.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  3721. xmlhttp3.send(null);
  3722. xmlhttp3.onreadystatechange = function () {
  3723. if (xmlhttp3.readyState == 4) {
  3724. if (xmlhttp3.status == 200) {
  3725. doc.open();
  3726. var div = doc.createElement("div");
  3727. div.innerHTML = xmlhttp3.responsetext;
  3728. var li = div.getElementsByTagName("li");
  3729. var ddiv = div.getElementsByTagName("div");
  3730.  
  3731. var data = [];
  3732.  
  3733. if (data_main == 0) {
  3734. for (i = 0; i < li.length; i++) {
  3735. if (li[i].className == "factbox-item") { // Years Active ...
  3736. if (li[i].innerText) data.push(li[i].innerText.replace(/(\d+)/, " $1"));
  3737. break;
  3738. }
  3739. }
  3740. header_2 = data;
  3741. utils.WriteINI( path + "\\" + clean(meta_artist) + "_artist_info.ini", clean_ini(clean(t_artist)) + " : years active", lang_arr[lang_idx], data);
  3742. }
  3743.  
  3744. var t = "";
  3745. var save_text = false;
  3746.  
  3747. for (i = 0; i < ddiv.length; i++) {
  3748. if (ddiv[i].className == "wiki") {
  3749. t = ddiv[i].innerHTML; // bio or "We don't have a wiki here yet..."
  3750. save_text = t.indexOf('wiki-content') > 0 ? true : false;
  3751. t = trim(strip_tags(t));
  3752. break;
  3753. }
  3754. }
  3755.  
  3756. doc.close();
  3757. }
  3758. if (t) {
  3759. text = t;
  3760. save_text && save_txt_file(t, file);
  3761. } else {
  3762. text = get_text_nf(lang_arr[lang_idx]);
  3763. }
  3764. get_text_arr();
  3765. }
  3766. }
  3767. }
  3768.  
  3769. function get_lastFm_album_text(path, file, t_artist, t_album){
  3770. xmlhttp4 = new ActiveXObject("Microsoft.XMLHTTP");
  3771. url4 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist) + "/" + encodeURIComponent(t_album).replace("%2B", "%252B") + "/+wiki");
  3772. xmlhttp4.open("GET", url4, true);
  3773. xmlhttp4.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  3774. xmlhttp4.send(null);
  3775. xmlhttp4.onreadystatechange = function () {
  3776. if (xmlhttp4.readyState == 4) {
  3777. if (xmlhttp4.status == 200) {
  3778. doc.open();
  3779. var div = doc.createElement("div");
  3780. div.innerHTML = xmlhttp4.responsetext;
  3781. var div = div.getElementsByTagName("div");
  3782.  
  3783. var t = "";
  3784. var save_text = false;
  3785.  
  3786. for (i = 0; i < div.length; i++) {
  3787. if (div[i].className == "wiki") {
  3788. t = div[i].innerHTML;
  3789. save_text = t.indexOf('wiki-content') > 0 ? true : false;
  3790. t = trim(strip_tags(t));
  3791. break;
  3792. }
  3793. }
  3794.  
  3795. doc.close();
  3796. }
  3797. if (t) {
  3798. text = t;
  3799. save_text && save_txt_file(t, file);
  3800. } else {
  3801. text = get_text_nf(lang_arr[lang_idx]);
  3802. }
  3803. get_text_arr();
  3804. }
  3805. }
  3806. }
  3807.  
  3808. function get_lastFm_similar_img(path, t_artist){
  3809. var xmlhttp5 = new ActiveXObject("Microsoft.XMLHTTP");
  3810. var url5 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist) + "/+similar");
  3811. xmlhttp5.open("GET", url5, true );
  3812. xmlhttp5.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  3813. xmlhttp5.send(null);
  3814. xmlhttp5.onreadystatechange = function () {
  3815. if (xmlhttp5.readyState == 4) {
  3816. if (xmlhttp5.status == 200) {
  3817. doc.open();
  3818. var div = doc.createElement("div");
  3819. div.innerHTML = xmlhttp5.responsetext;
  3820. var p = div.getElementsByTagName("p");
  3821. var a = div.getElementsByTagName("a");
  3822. var img = div.getElementsByTagName("img");
  3823.  
  3824. var msg = "";
  3825.  
  3826. for (i = 0; i < p.length; i++) {
  3827. if (p[i].className == "no-data-message"){
  3828. msg = p[i].innerHTML;
  3829. }
  3830. }
  3831.  
  3832. no_img_msg = msg ? msg + "\n\n" : "";
  3833.  
  3834. var tmp_data = [];
  3835. var data = [];
  3836.  
  3837. for (i = 0; i < a.length; i++) {
  3838. if (a[i].className == "link-block-target"){ // similar artist names
  3839. tmp_data.push(a[i].innerHTML.replace(/(&amp;)/g,'&'));
  3840. }
  3841. }
  3842.  
  3843. var urls = [];
  3844. var img_urls = [];
  3845.  
  3846. for (i = 0; i < img.length; i++) {
  3847. if (img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/300x300") == 0 || img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300x300") == 0){ /////
  3848. //if (img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300x300") == 0){ /////
  3849. urls.push(img[i].src);
  3850. }
  3851. }
  3852.  
  3853. for (i = 0; i < urls.length; i++) {
  3854. if (urls[i].indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0 && urls[i].indexOf("2a96cbd8b46e442fc41c2b86b821562f") < 0) {
  3855. img_urls.push(urls[i].replace("300x300", quality[quality_idx][1]));
  3856.  
  3857. data.push(tmp_data[i]); // similar artist names if image exist
  3858. }
  3859. }
  3860.  
  3861. for (i = 0; i < Math.min(img_urls.length, limit); i++) {
  3862. if (img_urls[i].indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0 && img_urls[i].indexOf("2a96cbd8b46e442fc41c2b86b821562f") < 0) {
  3863. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", data_other[data_other_idx][2] + " : name", i, data[i]);
  3864.  
  3865. var img_file = path + "\\" + clean(t_artist) + "_" + i + "_" + data_other[data_other_idx][2] + ".jpg";
  3866. WshShell.Run(vbs + " " + img_urls[i] + " " + "\"" + img_file + "\"", 0, false);
  3867. }
  3868. }
  3869.  
  3870. doc.close();
  3871.  
  3872. if (img_urls.length) {
  3873. get_files_if_loaded(path, t_artist);
  3874. //image_upload_delay(path, t_artist);
  3875. } else {
  3876. get_text(path, t_artist);
  3877. }
  3878. } else {
  3879. get_text(path, t_artist);
  3880. }
  3881. }
  3882. }
  3883. }
  3884.  
  3885. function get_lastFm_meta_album_img(path, t_artist, t_album){
  3886. var xmlhttp6 = new ActiveXObject("Microsoft.XMLHTTP");
  3887. var url6 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist) + "/" + encodeURIComponent(t_album));
  3888. xmlhttp6.open("GET", url6, true );
  3889. xmlhttp6.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  3890. xmlhttp6.send(null);
  3891. xmlhttp6.onreadystatechange = function () {
  3892. if (xmlhttp6.readyState == 4) {
  3893. if (xmlhttp6.status == 200) {
  3894. doc.open();
  3895. var div = doc.createElement("div");
  3896. div.innerHTML = xmlhttp6.responsetext;
  3897. var li = div.getElementsByTagName("li");
  3898. var h4 = div.getElementsByTagName("h4");
  3899. var abbr = div.getElementsByTagName("abbr");
  3900. var dt = div.getElementsByTagName("dt");
  3901. var dd = div.getElementsByTagName("dd");
  3902. var img = div.getElementsByTagName("img");
  3903.  
  3904. var data = [];
  3905. var color = [];
  3906. var font = [];
  3907.  
  3908. var tag = "";
  3909.  
  3910. for (i = 0; i < li.length; i++) {
  3911. if (li[i].className == "tag") {
  3912. tag = tag + li[i].innerText + "; ";
  3913. }
  3914. }
  3915.  
  3916. if (tag) {
  3917. tag = tag.substring(0, tag.length - 2);
  3918. data.push(tag, "");
  3919. color.push("t_color", "");
  3920. font.push("t2_font", "");
  3921. }
  3922.  
  3923. var tmp_data_1 = [], tmp_data_2 = [];
  3924.  
  3925. for (i = 0; i < h4.length; i++) {
  3926. if (h4[i].className == "header-metadata-tnew-title") { // scrobbles isteners -NEW
  3927. tmp_data_1.push(h4[i].innerText);
  3928. }
  3929. }
  3930.  
  3931. for (i = 0; i < abbr.length; i++) {
  3932. if (abbr[i].className == "intabbr js-abbreviated-counter") { // 13,294,523 512,404 -NEW
  3933. tmp_data_2.push(abbr[i].title.replace(/,/g, " "));
  3934. }
  3935. }
  3936.  
  3937. for (i = 0; i < tmp_data_1.length / 2; i++) {
  3938. data.push(tmp_data_1[i], tmp_data_2[i]);
  3939. color.push("h1_color", "t_color");
  3940. font.push("t2_font", "t_font");
  3941. }
  3942.  
  3943. if (tmp_data_1.length){ // empty line
  3944. data.push("");
  3945. color.push("");
  3946. font.push("");
  3947. }
  3948.  
  3949. var tmp_data_1 = [], tmp_data_2 = [];
  3950.  
  3951. for (i = 0; i < dt.length; i++) {
  3952. if (dt[i].className == "catalogue-metadata-heading") { // Length, Release Date
  3953. if (dt[i].innerText) tmp_data_1.push(dt[i].innerText);
  3954. }
  3955. }
  3956.  
  3957. for (i = 0; i < dd.length; i++) {
  3958. if (dd[i].className == "catalogue-metadata-description"){ // 8 tracks, 33:00, 5 July 1968
  3959. if (dd[i].innerText) tmp_data_2.push(dd[i].innerText);
  3960. }
  3961. }
  3962.  
  3963. for (i = 0; i < tmp_data_1.length / 2; i++) {
  3964. data.push(tmp_data_1[i], tmp_data_2[i]);
  3965. color.push("h1_color", "t_color");
  3966. font.push("t2_font", "t_font");
  3967. }
  3968.  
  3969. var img_urls = [];
  3970.  
  3971. for (i = 0; i < img.length; i++) {
  3972. if (img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/500x500") == 0 || img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/500x500") == 0){ /////
  3973. //if (img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/500x500") == 0) { /////
  3974. //if (img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/174s") == 0 && img[i].src.indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0) {
  3975. img_urls.push(img[i].src.replace("500x500", quality[quality_idx][2])); //ar0
  3976. }
  3977. }
  3978.  
  3979. if (img_urls.length) {
  3980. utils.WriteINI( path + "\\" + clean(t_artist) + "_album_info.ini", clean_ini(clean(t_album)), lang_arr[lang_idx], data.join("*"));
  3981. utils.WriteINI( path + "\\" + clean(t_artist) + "_album_info.ini", clean_ini(clean(t_album)), lang_arr[lang_idx] + "_c", color.join("*"));
  3982. utils.WriteINI( path + "\\" + clean(t_artist) + "_album_info.ini", clean_ini(clean(t_album)), lang_arr[lang_idx] + "_f", font.join("*"));
  3983.  
  3984. var img_file = path + "\\" + clean(t_artist) + "_" + clean(t_album) + ".jpg";
  3985.  
  3986. if (!fso.FileExists(img_file)){
  3987. if (g_img) g_img.Dispose();
  3988. g_img = null;
  3989. images = [];
  3990. img_file_names = [];
  3991. WshShell.Run(vbs + " " + img_urls[0] + " " + "\"" + img_file + "\"", 0, false);
  3992. }
  3993. }
  3994.  
  3995. doc.close();
  3996.  
  3997. if (img_urls.length && !g_img) {
  3998. get_files_if_loaded(path, t_artist, t_album);
  3999. //image_upload_delay(path, t_artist, t_album);
  4000. } else {
  4001. get_text(path, t_artist, t_album);
  4002. }
  4003. } else {
  4004. get_text(path, t_artist, t_album);
  4005. }
  4006. }
  4007. }
  4008. }
  4009.  
  4010. function get_lastFm_meta_title_img(path, t_artist, t_album, t_title){
  4011. var q1 = encodeURIComponent(t_artist) + "/";
  4012. var q2 = t_album ? encodeURIComponent(t_album).replace("%2B", "%252B") + "/" : "_/";
  4013. var q3 = t_title ? encodeURIComponent(t_title) : "";
  4014. xmlhttp7 = new ActiveXObject("Microsoft.XMLHTTP");
  4015. url7 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + q1 + q2 + q3);
  4016. xmlhttp7.open("GET", url7, true);
  4017. xmlhttp7.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  4018. xmlhttp7.send(null);
  4019. xmlhttp7.onreadystatechange = function () {
  4020. if (xmlhttp7.readyState == 4) {
  4021. if (xmlhttp7.status == 200) {
  4022. doc.open();
  4023. var div = doc.createElement("div");
  4024. div.innerHTML = xmlhttp7.responsetext;
  4025. var h4 = div.getElementsByTagName("h4");
  4026. var abbr = div.getElementsByTagName("abbr");
  4027. var ddiv = div.getElementsByTagName("div");
  4028. var img = div.getElementsByTagName("img");
  4029.  
  4030. var album_name = "";
  4031. var data = [];
  4032. var color = [];
  4033. var font = [];
  4034.  
  4035. for (i = 0; i < h4.length; i++) { // from the album - album name
  4036. if (h4[i].className == "source-album-name") {
  4037. album_name = h4[i].innerText;
  4038. data.push(album_name.toUpperCase(), "");
  4039. color.push("t_color", "");
  4040. font.push("t_font", "");
  4041. break;
  4042. }
  4043. }
  4044.  
  4045. var tmp_data_1 = [], tmp_data_2 = [];
  4046.  
  4047. for (i = 0; i < h4.length; i++) {
  4048. if (h4[i].className == "header-metadata-tnew-title") { // Listeners Scrobbles
  4049. tmp_data_1.push(h4[i].innerText);
  4050. }
  4051. }
  4052.  
  4053. for (i = 0; i < abbr.length; i++) {
  4054. if (abbr[i].className == "intabbr js-abbreviated-counter") { // 2,426,608 413,322
  4055. tmp_data_2.push(abbr[i].title.replace(/,/g, " "));
  4056. }
  4057. }
  4058.  
  4059. for (i = 0; i < tmp_data_1.length / 2; i++) {
  4060. data.push(tmp_data_1[i], tmp_data_2[i]);
  4061. color.push("h1_color", "t_color");
  4062. font.push("t2_font", "t_font");
  4063. }
  4064.  
  4065. /*
  4066. <dt class="catalogue-metadata-heading">Length</dt>
  4067. <dd class="catalogue-metadata-description">
  4068. 2:50
  4069. */
  4070.  
  4071. /*
  4072. //////////////////////////////////////////////////////////////////////////////
  4073.  
  4074. if (tmp_data_1.length > 0) { // empty line
  4075. data.push("");
  4076. color.push("");
  4077. font.push("");
  4078. }
  4079. */
  4080.  
  4081. var msg = "";
  4082.  
  4083. for (i = 0; i < ddiv.length; i++) {
  4084. if (ddiv[i].className == "source-album-nodata") { // "We don‘t have an album for this track yet."
  4085. msg = ddiv[i].innerText;
  4086. break;
  4087. }
  4088. }
  4089.  
  4090. no_img_msg = msg ? msg + "\n\n" : "";
  4091.  
  4092. //////////////////////////////////////////////////
  4093.  
  4094. /*
  4095. <div class="
  4096. lyrics-snippet-wrap
  4097. "
  4098. >
  4099. <p class="lyrics-snippet">The years have been many, the years have been long<br/>But at last I'm returning to daddy and home<br/>He's looking my way though he hardly can see<br/>God bless&hellip;</p>
  4100.  
  4101. <p class="lyrics-snippet-more-link">
  4102. <a href="/music/Johnny+Cash/_/Snow+in+His+Hair/+lyrics">
  4103. View full lyrics
  4104. </a>
  4105. </p>
  4106. </div>
  4107.  
  4108. var lyrics_url = "";
  4109.  
  4110. var a = div.getElementsByTagName("a");
  4111.  
  4112. for (i = 0; i < a.length; i++) {
  4113. if (a[i].className == "external-link") {
  4114. lyrics_url = a[i].href + ".html";
  4115. }
  4116. }
  4117. */
  4118.  
  4119. var img_urls = [];
  4120.  
  4121. for (i = 0; i < img.length; i++) {
  4122. if (img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/300x300") == 0 || img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300x300") == 0){ /////
  4123. //if (img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300x300") == 0) { /////
  4124. //if (img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/174s") == 0 && img[i].src.indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0) {
  4125. img_urls.push(img[i].src.replace("300x300", quality[quality_idx][2]));
  4126. }
  4127. }
  4128.  
  4129. if (img_urls.length) {
  4130. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "album", clean(album_name));
  4131. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), lang_arr[lang_idx], data.join("*"));
  4132. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), lang_arr[lang_idx] + "_c", color.join("*"));
  4133. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), lang_arr[lang_idx] + "_f", font.join("*"));
  4134.  
  4135. //utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "LastFm_lyrics_url", lyrics_url);
  4136.  
  4137. var img_file = path + "\\" + clean(t_artist) + "_" + clean(album_name) + ".jpg";
  4138.  
  4139. if (album_name && !fso.FileExists(img_file)){
  4140.  
  4141. if (g_img) g_img.Dispose();
  4142. g_img = null;
  4143. images = [];
  4144. img_file_names = [];
  4145. WshShell.Run(vbs + " " + img_urls[0] + " " + "\"" + img_file + "\"", 0, false);
  4146. }
  4147. }
  4148.  
  4149. doc.close();
  4150.  
  4151. if (img_urls.length && !g_img && album_name) {
  4152. get_files_if_loaded(path, t_artist, album_name, t_title);
  4153. //image_upload_delay(path, t_artist, album_name, t_title);
  4154. } else {
  4155. get_text(path, t_artist, t_album, t_title);
  4156. }
  4157. } else {
  4158. get_text(path, t_artist, t_album, t_title);
  4159. }
  4160. }
  4161. }
  4162. }
  4163.  
  4164. function get_lastFm_meta_title_text(path, file, t_artist, t_album, t_title){
  4165. var q1 = encodeURIComponent(t_artist) + "/";
  4166. var q2 = t_album ? encodeURIComponent(t_album).replace("%2B", "%252B") + "/" : "_/";
  4167. var q3 = t_title ? encodeURIComponent(t_title) : "_";
  4168. xmlhttp8 = new ActiveXObject("Microsoft.XMLHTTP");
  4169. url8 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + q1 + q2 + q3 + "/+wiki");
  4170. xmlhttp8.open("GET", url8, true);
  4171. xmlhttp8.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  4172. xmlhttp8.send(null);
  4173. xmlhttp8.onreadystatechange = function () {
  4174. if (xmlhttp8.readyState == 4) {
  4175. if (xmlhttp8.status == 200) {
  4176. doc.open();
  4177. var div = doc.createElement("div");
  4178. div.innerHTML = xmlhttp8.responsetext;
  4179. var div = div.getElementsByTagName("div");
  4180. var t = "";
  4181.  
  4182. var save_text = false;
  4183.  
  4184. for (i = 0; i < div.length; i++) {
  4185. if (div[i].className == "wiki") {
  4186. t = div[i].innerHTML;
  4187. save_text = t.indexOf('wiki-content') > 0 ? true : false;
  4188. t = trim(strip_tags(t));
  4189. break;
  4190. }
  4191. }
  4192.  
  4193. doc.close();
  4194. }
  4195. if (t) {
  4196. text = t;
  4197. save_text && save_txt_file(t, file);
  4198. } else {
  4199. text = get_text_nf(lang_arr[lang_idx]);
  4200. }
  4201. get_text_arr();
  4202. }
  4203. }
  4204. }
  4205.  
  4206. function metrolyrics_query(n){
  4207. if (!n) return;
  4208. n = n.toLocaleLowerCase();
  4209. n = n.replace(/&/g, "and").replace(/\s/g, "-").replace(/\'/g, "");
  4210. return n;
  4211. }
  4212.  
  4213. function get_metrolyrics_meta_lyrics_text(path, file, t_artist, t_title){
  4214. /// t_artist = t_artist.raplace(/"the"/g, "&amp"); ////////////////
  4215. xmlhttp9 = new ActiveXObject("Microsoft.XMLHTTP");
  4216. url = ("http://www.metrolyrics.com/" + metrolyrics_query(t_title) + "-lyrics-" + metrolyrics_query(t_artist) + ".html");
  4217. xmlhttp9.open("GET", url, true);
  4218. xmlhttp9.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  4219. xmlhttp9.send(null);
  4220. xmlhttp9.onreadystatechange = function () {
  4221. if (xmlhttp9.readyState == 4) {
  4222. if (xmlhttp9.status == 200) {
  4223. doc.open();
  4224. var div = doc.createElement("div");
  4225. div.innerHTML = xmlhttp9.responsetext;
  4226. var p = div.getElementsByTagName("p");
  4227.  
  4228. var t = "";
  4229. var tmp = [];
  4230. var data = [];
  4231. var color = [];
  4232. var font = [];
  4233.  
  4234. var site_name = url.replace(/.*\/{2}/g, "").replace(/\/.*/g, "");
  4235.  
  4236. for (i = 0; i < p.length; i++) {
  4237. if (p[i].className == "verse") {
  4238. tmp.push(p[i].innerHTML);
  4239. }
  4240. }
  4241.  
  4242. t = strip_tags(tmp.join("\n\n"));
  4243.  
  4244. if (t){
  4245. data.push(site_name);
  4246. color.push("h1_color");
  4247. font.push("t2_font");
  4248.  
  4249. info_text_arr = data;
  4250. info_text_color = color;
  4251. info_text_font = font;
  4252.  
  4253. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics", data.join("*"));
  4254. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics_c", color.join("*"));
  4255. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics_f", font.join("*"));
  4256. }
  4257.  
  4258. doc.close();
  4259. }
  4260. if (t) {
  4261. text = t;
  4262. save_txt_file(t, file);
  4263. get_text_arr();
  4264. } else {
  4265. get_azlyrics_meta_lyrics_text(path, file, t_artist, t_title)
  4266. //text = get_text_nf(lang_arr[lang_idx]);
  4267. }
  4268. //get_text_arr();
  4269. }
  4270. }
  4271. }
  4272.  
  4273. function azlyrics_query(n){
  4274. if (!n) return;
  4275. n = n.toLocaleLowerCase();
  4276. n = n.replace(/&/g, "and").replace(/\W/g, "");
  4277. return n;
  4278. }
  4279.  
  4280. function get_azlyrics_meta_lyrics_text(path, file, t_artist, t_title){
  4281. xmlhttp10 = new ActiveXObject("Microsoft.XMLHTTP");
  4282. url10 = "https://www.azlyrics.com/lyrics/" + azlyrics_query(t_artist) + "/" + azlyrics_query(t_title) + ".html"
  4283. xmlhttp10.open("GET", url10, true);
  4284. xmlhttp10.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  4285. xmlhttp10.send(null);
  4286. xmlhttp10.onreadystatechange = function () {
  4287. if (xmlhttp10.readyState == 4) {
  4288. if (xmlhttp10.status == 200) {
  4289. doc.open();
  4290. var div = doc.createElement("div");
  4291. div.innerHTML = xmlhttp10.responsetext;
  4292. var h = div.getElementsByTagName("div");
  4293.  
  4294. var t = "";
  4295. var data = [];
  4296. var color = [];
  4297. var font = [];
  4298.  
  4299. var site_name = url10.replace(/.*\/{2}/g, "").replace(/\/.*/g, "");
  4300.  
  4301. for (i = 0; i < h.length; i++) {
  4302. if (h[i].className == "") {
  4303. if (h[i].innerText) t = (h[i].innerText);
  4304. }
  4305. }
  4306.  
  4307. if (t) {
  4308. data.push(site_name);
  4309. color.push("h1_color");
  4310. font.push("t2_font");
  4311.  
  4312. info_text_arr = data;
  4313. info_text_color = color;
  4314. info_text_font = font;
  4315.  
  4316. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics", data.join("*"));
  4317. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics_c", color.join("*"));
  4318. utils.WriteINI( path + "\\" + clean(t_artist) + "_title_info.ini", clean_ini(clean(t_title)), "lyrics_f", font.join("*"));
  4319. }
  4320.  
  4321. doc.close();
  4322. }
  4323. if (t) {
  4324. text = t;
  4325. save_txt_file(t, file);
  4326. } else {
  4327. text = get_text_nf(lang_arr[lang_idx]);
  4328. }
  4329. get_text_arr();
  4330. }
  4331. }
  4332. }
  4333.  
  4334. function get_artist_external_links(path, t_artist){
  4335. xmlhttp11 = new ActiveXObject("Microsoft.XMLHTTP");
  4336. url11 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist));
  4337. xmlhttp11.open("GET", url11, true);
  4338. xmlhttp11.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  4339. xmlhttp11.send(null);
  4340. xmlhttp11.onreadystatechange = function () {
  4341. if (xmlhttp11.readyState == 4) {
  4342. if (xmlhttp11.status == 200) {
  4343. doc.open();
  4344. var div = doc.createElement("div");
  4345. div.innerHTML = xmlhttp11.responsetext;
  4346. var a = div.getElementsByTagName("a");
  4347.  
  4348. var tmp_data = [];
  4349. var data = [];
  4350.  
  4351. for (i = 0; i < a.length; i++) {
  4352. if (a[i].className.indexOf("resource-external-link") >= 0){
  4353. tmp_data.push(a[i].innerText);
  4354. tmp_data.push(a[i].href);
  4355. }
  4356. }
  4357.  
  4358. for (i = 0; i < tmp_data.length / 2; i++) {
  4359. data.push(tmp_data[i]);
  4360. }
  4361.  
  4362. external_links = data;
  4363. utils.WriteINI( path + "\\" + clean(t_artist) + "_artist_info.ini", clean_ini(clean(t_artist)), "external_links", data.join("*"));
  4364.  
  4365. doc.close();
  4366. }
  4367. }
  4368. }
  4369. }
  4370.  
  4371. function scroll_check(){
  4372. if (scroll >= 0){
  4373. scroll = 0;
  4374. } else if (Math.abs(scroll) + text_height_visable >= text_height){
  4375. scroll = (text_height - text_height_visable) * -1;
  4376. }
  4377.  
  4378. !scroll_timer_on && text_scroll_timer();
  4379. }
  4380.  
  4381. function text_scroll_timer(){
  4382. scroll_timer_on = true;
  4383. scroll_timer && window.ClearInterval(scroll_timer);
  4384. scroll_timer = window.SetInterval(function() {
  4385. if (Math.abs(scroll - scroll_) > 0.1){
  4386. k = on_scrollbar_down ? 1.5 : (on_seekbar_down ? 2 : 3 + scroll_k);
  4387.  
  4388. scroll___ += (scroll - scroll___) / k ;
  4389. scroll__ += (scroll___ - scroll__) / k;
  4390. scroll_ += (scroll__ - scroll_) / k;
  4391.  
  4392. if (!key_down) get_text_idx();
  4393. get_selected_item();
  4394. } else {
  4395. window.ClearInterval(scroll_timer);
  4396. scroll_ = scroll;
  4397. scroll_k = 0;
  4398. scroll_timer_on = false;
  4399. key_down = false;
  4400. }
  4401.  
  4402. wheel_id = 0;
  4403. get_selected_item();
  4404.  
  4405. window.RepaintRect(t_x, t_y - text_row_height, ww - t_x, wh);
  4406. }, 40);
  4407. }
  4408.  
  4409.  
  4410. function write_history(n) {
  4411. if (!n) return;
  4412.  
  4413. exist = false;
  4414. var tmp_arr = text_file_to_arr();
  4415.  
  4416. for (var i = 0; i < tmp_arr.length; i++) {
  4417. if (trim(tmp_arr[i]).toLowerCase() == trim(n).toLowerCase()){
  4418. exist = true;
  4419. break;
  4420. }
  4421. }
  4422.  
  4423. if (!exist){
  4424. try {
  4425. history_file = fso.OpenTextFile(history_file_path, 8);
  4426. history_file.WriteLine(n);
  4427. history_file.Close();
  4428. } catch(e) {};
  4429. }
  4430. }
  4431.  
  4432. function del_history(){
  4433. if (history_arr.length) {
  4434. try {
  4435. history_file = fso.OpenTextFile(history_file_path, 2);
  4436. history_file.Close();
  4437. } catch(e) {};
  4438. }
  4439. get_history();
  4440. }
  4441.  
  4442. function get_history(){
  4443. scroll = scroll_ = scroll__ = scroll___ = 0;
  4444. history_arr = [];
  4445. history_result = true;
  4446.  
  4447. var tmp_arr = text_file_to_arr();
  4448.  
  4449. if (tmp_arr.length){
  4450. for (var i = 0; i < tmp_arr.length; i++) {
  4451. if (tmp_arr[i].substring(0, history_seach.length).toLowerCase() == history_seach.toLowerCase()){
  4452. history_arr.push(tmp_arr[i]);
  4453. history_result = true;
  4454. }
  4455. }
  4456.  
  4457. if (history_arr.length == 0) {
  4458. history_arr = tmp_arr;
  4459. history_result = false;
  4460. }
  4461. }
  4462.  
  4463. header_1 = history_seach;
  4464. refresh_txt = true;
  4465. get_text_arr();
  4466.  
  4467. if (histity_list_edit){
  4468. scroll = scroll_ = scroll__ = scroll___ = old_scroll;
  4469. text_idx = text_idx >= text_rows ? text_rows - 1 : text_idx;
  4470. histity_list_edit = false;
  4471. } else {
  4472. get_text_idx();
  4473.  
  4474. }
  4475. get_selected_item();
  4476. }
  4477.  
  4478. function del_history_item(){
  4479. histity_list_edit = true;
  4480.  
  4481. if (Math.abs(scroll) + text_height_visable == text_height && scroll < 0){
  4482. old_scroll = scroll + text_row_height;
  4483. } else {
  4484. old_scroll = scroll;
  4485. }
  4486.  
  4487. var tmp_arr = text_file_to_arr();
  4488.  
  4489. for (var i = 0; i < tmp_arr.length; i++) {
  4490. if (tmp_arr[i] == selected_item){
  4491. tmp_arr.splice(i, 1);
  4492. }
  4493. }
  4494.  
  4495. try {
  4496. history_file = fso.OpenTextFile(history_file_path, 2);
  4497. if (tmp_arr.length){
  4498. history_file.WriteLine(tmp_arr.join("\r\n"));
  4499. history_file.Close();
  4500. }
  4501. } catch(e) {};
  4502.  
  4503. get_history();
  4504. }
  4505.  
  4506. function text_file_to_arr(){
  4507. if (!fso.FileExists(history_file_path)) fso.CreateTextFile(history_file_path);
  4508. var arr = [];
  4509.  
  4510. if (fso.FileExists(history_file_path)){
  4511. arr = utils.ReadTextFile(history_file_path).split("\r\n").sort();
  4512.  
  4513. for (var i = arr.length; i >= 0; i--) {
  4514. if (!arr[i]) arr.splice(i, 1);
  4515. }
  4516. }
  4517. return arr.length ? arr : [];
  4518. }
  4519.  
  4520. function get_text_idx(){
  4521. text_idx = Math.round(Math.floor((pos_y - t_y) / text_row_height) + Math.abs(scroll) / text_row_height);
  4522. text_idx = Math.max(0 + (Math.abs(scroll) / text_row_height), Math.min(text_idx, text_rows_visable - 1 + (Math.abs(scroll) / text_row_height)));
  4523. }
  4524.  
  4525.  
  4526. function get_selected_item() {
  4527. selected_item = selected_item_rows[text_idx];
  4528. selected_item_rows_idx = [];
  4529.  
  4530. for (var j = 0; j < selected_item_rows.length; j++) {
  4531. if (selected_item_rows[j]) {
  4532.  
  4533. if (t_y + (j * text_row_height) - Math.abs(scroll) > 0){
  4534. window.RepaintRect(t_x, t_y + (j * text_row_height) - Math.abs(scroll), text_row_width, text_row_height);
  4535. }
  4536.  
  4537. if (selected_item_rows[j] == selected_item) {
  4538. selected_item_rows_idx.push(j);
  4539. }
  4540. }
  4541. }
  4542. }
  4543.  
  4544. function help(){
  4545. var button_type = 0x0;
  4546. var icon_type = 0x20;
  4547.  
  4548. switch (lang_arr[lang_idx]) {
  4549. case "ru":
  4550. var title = "Справка по сочетанию клавиш и настройкам";
  4551. var txt =
  4552. 'Выбор языка - двойной щелчок ЛКМ (или ЛКМ + Shift) на тексте или через меню (настройка - "Выбор языка").' + '\n\n' +
  4553. 'Размер шрифтов - Shift и КОЛЕСО на тексе или на заголовке.' + '\n\n' +
  4554. 'Передвижение текста - при нажатой ЛКМ.' + '\n\n' +
  4555. 'Спрятать / восстановить текст - двойной щелчок СКМ.' + '\n\n' +
  4556. 'Прозрачность фона под текстом - Ctrl + КОЛЕСО на тексте.' + '\n\n' +
  4557. 'Смена изображения - КОЛЕСО на изображении.' + '\n\n' +
  4558. 'Установка интервала смены изображения - Shift и КОЛЕСО на изображении.' + '\n\n' +
  4559. 'Выбор: "Исполнитель", "Альбомы исполнителя", "Похожие исполнители", "Альбом" (активен, если есть информация), "Информация о треке" или "Текст (лирика)" - двойной щелчок ЛКМ на изображении или через меню.' + '\n\n' +
  4560. 'Включить / отключить пункты контекстного меню - "Настройки основного меню".' + '\n\n' +
  4561. 'Показать / скрыть дополнительную информацию - двойной щелчок ЛКМ на указателе под заголовком.' + '\n\n' +
  4562. 'Заблокировать / разблокировать страницу - двойной щелчок ЛКМ на заголовке.' + '\n\n' +
  4563. 'История - просмотр ранее загруженных данных.'
  4564. break
  4565. default:
  4566. var title = "Справка по сочетанию клавиш и настройкам";
  4567. var txt =
  4568. 'Выбор языка - двойной щелчок ЛКМ (или ЛКМ + Shift) на тексте или через меню (настройка - "Выбор языка").' + '\n\n' +
  4569. 'Размер шрифтов - Shift и КОЛЕСО на тексе или на заголовке.' + '\n\n' +
  4570. 'Передвижение текста - при нажатой ЛКМ.' + '\n\n' +
  4571. 'Спрятать / восстановить текст - двойной щелчок СКМ.' + '\n\n' +
  4572. 'Прозрачность фона под текстом - Ctrl + КОЛЕСО на тексте.' + '\n\n' +
  4573. 'Смена изображения - КОЛЕСО на изображении.' + '\n\n' +
  4574. 'Установка интервала смены изображения - Shift и КОЛЕСО на изображении.' + '\n\n' +
  4575. 'Выбор: "Исполнитель", "Альбомы исполнителя", "Похожие исполнители", "Альбом" (активен, если есть информация), "Информация о треке" или "Текст (лирика)" - двойной щелчок ЛКМ на изображении или через меню.' + '\n\n' +
  4576. 'Включить / отключить пункты контекстного меню - "Настройки основного меню".' + '\n\n' +
  4577. 'Показать / скрыть дополнительную информацию - двойной щелчок ЛКМ на указателе под заголовком.' + '\n\n' +
  4578. 'Заблокировать / разблокировать страницу - двойной щелчок ЛКМ на заголовке.' + '\n\n' +
  4579. 'История - просмотр ранее загруженных данных.'
  4580.  
  4581. /* var title = "Keyboard shortcut and settings help";
  4582. var txt =
  4583. '- select language - double click LMB (or LMB + Shift) on the text or through the menu (the setting is "Select of languages");' + '\n\n' +
  4584. '- font size - Shift and WHEEL on tex or text headings (font and style selection - "Properties" menu, alignment - "Text alignment")' + '\n\n' +
  4585. '- move the text - while pressing the LMB;' + '\n\n' +
  4586. '- hide / restore text - double-click MMB;' + '\n\n' +
  4587. '- the background transparency under the text - Ctrl + WHEEL on the text;' + '\n\n' +
  4588. '- change the image - the WHEEL on the image;' + '\n\n' +
  4589. '- set the interval of the image change - Shift and the WHEEL on the image;' + '\n\n' +
  4590. '- select Artist, Top Albuums, Similar Artist, Album info, Track Info or Lyrics - Double-click on the LMB in the image or through the menu ; ' + '\n\n' +
  4591. '- enable / disable the context menu items - "Menu setting".' + '\n\n' +
  4592. '- additional settings - menu "Properties" .'
  4593. */
  4594. break
  4595. }
  4596.  
  4597. var btn = WshShell.Popup(txt, 0, title, button_type + icon_type);
  4598. }
  4599.  
  4600. function print(msg) {
  4601. try {
  4602. fb.trace(msg);
  4603. } catch(e){console.log(msg);};
  4604. }
  4605.  
  4606. function on_notify_data(name, info) {
  4607. if (name == "panel") {
  4608. if (info == "bio"){
  4609. panel_on = true;
  4610. meta_artist = "";
  4611. on_metadb_changed();
  4612. } else {
  4613. panel_on = false;
  4614. }
  4615. }
  4616. }
  4617.  
  4618. function draw_popularity_rank(gr) {
  4619. pr = "#18";
  4620.  
  4621. pr_font = gdi.Font(font_name_t, font_size_t, 1);
  4622.  
  4623. pr_w = gr.CalcTextWidth(pr, t2_font);
  4624. pr_h = gr.CalcTextHeight(pr, t2_font);
  4625. pr_d = Math.max(pr_w, pr_h);
  4626.  
  4627. pr_x = txt_x + pr_d / 2;
  4628. pr_y = txt_y - pr_d / 1;
  4629.  
  4630. gr.SetSmoothingMode(2);
  4631.  
  4632. gr.DrawEllipse(pr_x - 3, pr_y - 3, pr_d + 6, pr_d + 6, 4, t_color);
  4633. gr.FillEllipse(pr_x - 3, pr_y - 3, pr_d + 6, pr_d + 6, RGB(255, 153, 0));
  4634. gr.GdiDrawText(pr, t2_font, t_color, pr_x, pr_y + 1, pr_d, pr_d, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
  4635. }
  4636.  
  4637. function get_last_fm_artist(t_artist){
  4638. var xmlhttp12 = new ActiveXObject("Microsoft.XMLHTTP");
  4639. var url12 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(t_artist));
  4640. xmlhttp12.open("GET", url12, true );
  4641. xmlhttp12.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
  4642. xmlhttp12.send(null);
  4643. xmlhttp12.onreadystatechange = function () {
  4644. if (xmlhttp12.readyState == 4) {
  4645. if (xmlhttp12.status == 200) {
  4646. var div = doc.createElement("div");
  4647. div.innerHTML = xmlhttp12.responsetext;
  4648. var h1 = div.getElementsByTagName("h1");
  4649.  
  4650. var name = "";
  4651.  
  4652. for (i = 0; i < h1.length; i++) {
  4653. if (h1[i].className == "header-new-title") {
  4654. name = h1[i].innerHTML.replace(/&amp;/g, "And");
  4655. }
  4656. }
  4657.  
  4658. history_show = false;
  4659. data_main = 0;
  4660. lock_artist = name;
  4661. lock_album = "";
  4662. lock_title = "";
  4663. on_metadb_changed();
  4664. }
  4665. }
  4666. }
  4667. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement