// ==PREPROCESSOR==
// @name "Biography covers album title similar artist info.www.last.fm."
// @version "20032021"
// @author "kgena_ua"
// @feature "v1.4"
// @feature "watch-metadb"f
// ==/PREPROCESSOR==
// compatible with WSH panel mod and jscript panel
function RGB(r,g,b){
return (0xff000000|(r<<16)|(g<<8)|(b));
}
function RGBA(r,g,b,a){
return ((a << 24) | (r << 16) | (g << 8) | (b));
}
function getRed(color){
return ((color >> 16) & 0xff);
}
function getGreen(color){
return ((color >> 8) & 0xff);
}
function getBlue(color){
return (color & 0xff);
}
function combineColors(c1, c2, k){
var c1 = toRGB(c1);
var c2 = toRGB(c2);
k = k < 0 || k > 1 ? 0.5 : k;
var r = Math.round(c1[0] * (1 - k) + c2[0] * k);
var g = Math.round(c1[1] * (1 - k) + c2[1] * k);
var b = Math.round(c1[2] * (1 - k) + c2[2] * k);
return (0xff000000 | (r << 16) | (g << 8) | (b));
}
function toRGB(d){
var d = d-0xff000000;
var r = d >> 16;
var g = d >> 8 & 0xFF;
var b = d & 0xFF;
return [r,g,b];
}
DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;
DT_NOPREFIX = 0x00000800;
DT_BOTTOM = 0x00000008;
MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
MF_SEPARATOR = 0x00000800;
IDC_HAND = 32649;
IDC_ARROW = 32512;
ENTER = 13;
BACKSPACE = 8;
ESC = 27;
CTRLV = 22;
VK_SHIFT = 0x10;
VK_CONTROL = 0x11;
VK_PAGE_UP = 0x21;
VK_PAGE_DOWN = 0x22;
VK_END = 0x23;
VK_HOME = 0x24;
VK_LEFT = 0x25;
VK_UP = 0x26;
VK_RIGHT = 0x27;
VK_DOWN = 0x28;
VK_DELETE = 0x2E;
VK_INSERT = 0x2D;
var ShiftDown = false;
var ControltDown = false;
var ww = 800, wh = 800;
String.prototype.repeat = function(n){
return new Array(n + 1).join(this);
}
window.SetProperty(" - user", "");
if (window.GetProperty(" - user") != "" ) window.SetProperty(" - user", "");
window.SetProperty("- user", "");
if (window.GetProperty("- user") != "" ) window.SetProperty("- user", "");
window.SetProperty("_".repeat(50), "");
if (window.GetProperty("_".repeat(50)) != "" ) window.SetProperty("_".repeat(50), "");
var text_alignment = [
["Left", DT_SINGLELINE | DT_LEFT | DT_NOPREFIX, DT_BOTTOM | DT_SINGLELINE | DT_LEFT | DT_NOPREFIX],
["Center", DT_SINGLELINE | DT_CENTER | DT_NOPREFIX, DT_BOTTOM | DT_SINGLELINE | DT_CENTER | DT_NOPREFIX],
["Right" , DT_SINGLELINE | DT_RIGHT | DT_NOPREFIX, DT_BOTTOM | DT_SINGLELINE | DT_RIGHT | DT_NOPREFIX]
];
var font_style = [
["Normal", 0],
["Bold", 1],
["Italic" , 2],
["Bold italic" , 3]
];
var text_alignment_h0 = window.GetProperty(" text Lock alignment : header 0 (0, 1, 2)", 0);
var text_alignment_h1 = window.GetProperty("text alignment : header 1", 2);
var text_alignment_h2 = window.GetProperty("text alignment : header 2", 2);
var text_alignment_t = window.GetProperty("text alignment : text", 0);
var font_name_h0 = window.GetProperty(" text Lock font name: header 0", "Arial");
var font_name_h1 = window.GetProperty(" text: font name: header 1", "Arial");
var font_name_h2 = window.GetProperty(" text: font name: header 2", "Arial");
var font_name_t = window.GetProperty(" text: font name: text", "Arial");
var font_size_h0 = window.GetProperty("text: font size: header 0", 11);
var font_size_h1 = window.GetProperty("text: font size: header 1", 12);
var font_size_h2 = window.GetProperty("text: font size: header 2", 12);
var font_size_t = window.GetProperty("text: font size: text", 12);
var font_style_h0 = window.GetProperty(" text Lock font style: header 0", 0);
var font_style_h1 = window.GetProperty("text: font style: header 1", 1);
var font_style_h2 = window.GetProperty("text: font style: header 2", 1);
var font_style_t = window.GetProperty("text: font style: text", 0);
var font_size_min = window.GetProperty(" text: font size: min", 11);
var font_size_max = window.GetProperty(" text: font size: max", 16);
var text_shadow = window.GetProperty("text: shadow", false);
var h0_font, h1_font, h2_font, t_font, t2_font, tt_font;
get_font();
function get_font(){
h0_font = gdi.Font(font_name_h0, font_size_h0, font_style_h0);
h1_font = gdi.Font(font_name_h1, font_size_h1, font_style_h1);
h2_font = gdi.Font(font_name_h2, font_size_h2, font_style_h2);
t_font = gdi.Font(font_name_t, font_size_t, font_style_t);
t2_font = gdi.Font(font_name_t, font_size_t - 1, font_style_t);
tt_font = gdi.Font(font_name_t, 12, 1);
}
ColorTypeCUI = {
text: 0, //
selection_text: 1,
inactive_selection_text: 2, //
background: 3, //
selection_background: 4,
inactive_selection_background: 5,
active_item_frame: 6
};
ColorTypeDUI = {
text: 0,
background: 1,
highlight: 2,
selection: 3
};
function get_color(){
try {
if (window.InstanceType == 0){
bg_color = window.GetColorCUI(ColorTypeCUI.background);
h1_color = window.GetColorCUI(ColorTypeCUI.text);
//test_color = window.GetColorCUI(ColorTypeCUI.selection_text);
h2_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
t_color = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
} else if (window.InstanceType == 1){
bg_color = window.GetColorDUI(ColorTypeDUI.background);
h1_color = window.GetColorDUI(ColorTypeDUI.text);
h2_color = window.GetColorDUI(ColorTypeDUI.highlight);
t_color = window.GetColorDUI(ColorTypeDUI.highlight);
}
} catch(e){};
try {
if (window.InstanceType == 0){
bg_color = window.GetColourCUI(ColorTypeCUI.background);
h1_color = window.GetColourCUI(ColorTypeCUI.text);
test_color = window.GetColourCUI(ColorTypeCUI.selection_text);
h2_color = window.GetColourCUI(ColorTypeCUI.inactive_selection_text);
t_color = window.GetColourCUI(ColorTypeCUI.inactive_selection_text);
} else if (window.InstanceType == 1){
bg_color = window.GetColourDUI(ColorTypeDUI.background);
h1_color = window.GetColourDUI(ColorTypeDUI.text);
h2_color = window.GetColourDUI(ColorTypeDUI.highlight);
t_color = window.GetColourDUI(ColorTypeDUI.highlight);
}
} catch(e){};
color_error = RGB(255, 125, 0);
color_true = RGB(128, 255, 128);
window.Repaint();
}
var custom_colors = window.GetProperty(" colors: custom", false);
var c_bg_color = customColor(window.GetProperty(" color: background", "0-0-0"));
var c_h1_color = customColor(window.GetProperty(" color: header 1", "255-255-220"));
var c_h2_color = customColor(window.GetProperty(" color: header 2", "180-180-180"));
var c_t_color = customColor(window.GetProperty(" color: text", "180-180-180"));
get_color();
ini_color();
function on_colors_changed(){
get_color();
ini_color();
}
function ini_color(){
bg_color = custom_colors ? c_bg_color : bg_color;
h1_color = custom_colors ? c_h1_color : h1_color;
h2_color = custom_colors ? c_h2_color : h2_color;
t_color = custom_colors ? c_t_color : t_color;
}
function customColor(colour){
tmp = colour.split("-");
return (0xff000000 | (tmp[0]<<16) | (tmp[1]<<8) | (tmp[2]));
}
var colors_swap = window.GetProperty(" colors: swap", false);
var tmp_h1_color = h1_color;
var tmp_h2_color = h2_color;
var tmp_t_color = t_color;
h1_color = !colors_swap ? tmp_h1_color : tmp_t_color;
h2_color = !colors_swap ? tmp_h2_color : tmp_h1_color;
t_color = !colors_swap ? tmp_t_color : tmp_h1_color;
var color_selected_item = combineColors(bg_color, t_color , 0.6);
var rc_arr = [".", "/", ":", "*", "?", '"', "<", ">", "|"];
window.GetProperty(".reserved characters: " + rc_arr[0] + " replace by", "no char"); // "."
window.GetProperty(".reserved characters: " + rc_arr[1] + " replace by", "-"); // "/"
window.GetProperty(".reserved characters: " + rc_arr[2] + " replace by", "no char"); // ":"
window.GetProperty(".reserved characters: " + rc_arr[3] + " replace by", "x"); // "*"
window.GetProperty(".reserved characters: " + rc_arr[4] + " replace by", "no char"); // "?"
window.GetProperty(".reserved characters: " + rc_arr[5] + " replace by", "''"); // '"'
window.GetProperty(".reserved characters: " + rc_arr[6] + " replace by", "_"); // "<"
window.GetProperty(".reserved characters: " + rc_arr[7] + " replace by", "_"); // ">"
window.GetProperty(".reserved characters: " + rc_arr[8] + " replace by", "no char"); // "\"
//window.GetProperty(".reserved characters: " + rc_arr[9] + " replace by", "no char");
check_char_enter();
function check_char_enter() {
for (var i = 0; i < rc_arr.length; i++) {
tmp = window.GetProperty(".reserved characters: " + rc_arr[i] + " replace by");
tmp = tmp.length > 1 && tmp != "no char" && tmp != "space" ? tmp[0] : tmp;
window.SetProperty(".reserved characters: " + rc_arr[i] + " replace by", tmp);
if (/[\.\/\:\*\?\"\<\>\|\\]/g.test(tmp) || tmp == ""){
window.SetProperty(".reserved characters: " + rc_arr[i] + " replace by", "no char");
}
if (tmp == " ") window.SetProperty(".reserved characters: " + rc_arr[i] + " replace by", "space");
}
}
function symb(i){
var tmp = window.GetProperty(".reserved characters: " + rc_arr[i] + " replace by");
tmp = tmp == "no char" ? "" : tmp;
tmp = tmp == "space" ? " " : tmp;
return tmp;
}
function clean(str) {
if (!str) return;
var tmp = str.replace(/\./g, symb(0)).replace(/\//g, symb(1)).replace(/\:/g, symb(2)).replace(/\*/g, symb(3)).replace(/\?/g, symb(4)).replace(/\"/g, symb(5)).replace(/\/g, symb(7)).replace(/\|/g, symb(8)).replace(/\\/g, "");
return tmp.replace(/^\s+|\s+$/g,"").substr(0, 150);
}
function clean_ini(str){
if (!str) return;
return str.replace(/[\[\]’']/g, "");
}
function trim(str){
if (!str) return;
return str.replace(/^\s+|\s+$/g, "").replace(/\s{1,}/g," ");
}
function title_case(str){
if (!str) return;
var arr = str.toLowerCase().split(" ");
for (i = 0; i < arr.length; i++){
arr[i] = arr[i].charAt(0).toUpperCase()+(arr[i].substr(1));
}
return trim(arr.join(" "));
}
var fso = new ActiveXObject("Scripting.FileSystemObject");
var objShellApp = new ActiveXObject("Shell.Application");
var vbe = new ActiveXObject('ScriptControl');
vbe.Language = 'VBScript';
var htmlfile = new ActiveXObject('htmlfile');
var clipboardData = "";
var work_dir = window.GetProperty(" work directory", "tmp_Biography");
work_dir = clean(work_dir);
window.SetProperty(" work directory", work_dir);
if (!/\S/.test(work_dir) || work_dir == null) {work_dir = "tmp_Biography"; window.SetProperty(" work directory", work_dir)};
//var work_path = fb.FoobarPath + clean(work_dir) + "\\";
var work_path = fb.ProfilePath + clean(work_dir) + "\\";
check_folder(work_path);
var script_path = work_path + "_download\\";
check_folder(script_path);
if (!fso.FileExists(script_path + "download.vbs")) {create_download_file()};
var doc = new ActiveXObject("htmlfile");
var WshShell = new ActiveXObject("WScript.Shell");
var vbs = "cscript //nologo \"" + script_path + "download.vbs\"";
function remap_file_path(n){
if (!n) return;
return script_path + "remap_" + n + ".txt";
}
var def_img;
var def_img_set = false;
var def_img_on = window.GetProperty("default img", false);
var def_img_path_artist_review = window.GetProperty(" default img path bio", ".\\maybe\\textures\\nocover\\nocover.png");
var def_img_path_album_review = window.GetProperty(" default img path album review", ".\\maybe\\textures\\nocover\\nocover.png");
var def_img_transp = window.GetProperty(" default img transparence (0-255)", 255);
var def_img_fader = def_img_transp;
var def_img_artist_review = fso.FileExists(def_img_path_artist_review) ? resize_image(gdi.Image(def_img_path_artist_review)) : null;
var def_img_album_review = fso.FileExists(def_img_path_album_review) ? resize_image(gdi.Image(def_img_path_album_review)) : null;
var def_img_size;
def_img_ini();
var def_img_size_recount = false;
function def_img_ini() {
ci_text_arr = [];
if (def_img_cover_on){
def_img = def_img_cover;
get_covers_info(0);
}
if (def_img_on){
if (ch() == "album") {
def_img = def_img_album_review;
} else {
def_img = def_img_artist_review;
}
}
def_img_size_recount = true;
}
var logo_img;
var logo_img_set = false;
var logo_img_idx = window.GetProperty("logo_img_idx", 4);
var logo_img_transp = window.GetProperty(" logo img transparence (0-255)", 255);
var logo_fader = logo_img_transp;
load_lastFm_logo();
var logo_img_path = [
script_path + "logo_1.png",
script_path + "logo_sq_256_new_small___.png", // not loaded
script_path + "logo_3.png",
script_path + "logo_4.png",
script_path + "logo_5.png"
]
var logo_img_dim = [
[37, 37, 0, 0],
[40, 40, 0, 0],
[60, 60, 0, 0],
[70, 70, 0, 70],
[60, 60, 0, 0]
]
logo_img_ini();
function logo_img_ini(){
file = logo_img_path[logo_img_idx];
i = logo_img_idx;
logo_img = fso.FileExists(file) ? resize_logo_img(gdi.Image(file), logo_img_dim[i][0], logo_img_dim[i][1], logo_img_dim[i][2], logo_img_dim[i][3]) : null;
}
function resize_logo_img(img, w, h, cx, cy){
if (!img) return;
var scale_w = w / img.Width;
var scale_h = w / img.Height;
var scale = Math.min(scale_w, scale_h);
var iw = Math.round(img.Width * scale);
var ih = Math.round(img.Height * scale)
var temp_bmp = gdi.CreateImage(iw, ih);
var temp_gr = temp_bmp.GetGraphics();
temp_gr.SetSmoothingMode(2);
temp_gr.SetInterpolationMode(7);
temp_gr.DrawImage(img, 0, 0, iw, ih, cx, cy, img.width, img.height);
temp_bmp.ReleaseGraphics(temp_gr);
return temp_bmp;
temp_bmp.Dispose();
temp_gr = null;
temp_bmp = null;
}
function def_fader_ini(){
logo_fader = fade_effect ? 0 : logo_img_transp;
def_img_fader = fade_effect ? 0 : def_img_transp;
}
/*
function artist_folder_path(n) {
if (!n) return;
return work_path + n;
}
*/
var save_images = window.GetProperty("save images", true);
var save_images_to_artist_folder = window.GetProperty("save to artist folder containing track", false);
function artist_folder_path(n) {
if (!n || !metadb) return;
if (metadb.RawPath.indexOf("file") < 0 || !save_images_to_artist_folder) {
return work_path + n;
}
if (metadb.RawPath.indexOf("file") >= 0 && save_images_to_artist_folder) {
var directory_path_arr = [], artist_path_arr = [], artist_path = "";
directory_path_arr = directory_path.split("\\");
for (var i = 0; i < directory_path_arr.length; i++) {
if (directory_path_arr[i].toLowerCase().replace(/\s*/g, "").match(n.toLowerCase().replace(/\s*/g, ""))){
artist_path_arr = directory_path_arr.slice(0, i + 1);
break;
}
}
artist_path = artist_path_arr.join("\\");
if (fso.FolderExists(artist_path)) {
return artist_path + "\\" + "lastFm";
} else {
return work_path + n;
}
}
}
function check_folder(n) {
if (!n) return;
try {
if(!fso.FolderExists(n)) {fso.CreateFolder(n)};
} catch(e) {}
}
function check_file(n) {
if (!n) return;
try {
if (!fso.FileExists(n)) fso.CreateTextFile(n);
} catch(e) {}
}
function get_fnext(p) {
if (!p) return;
return p.replace(/.*\\/g,'');
}
var g_img = null;
var img_show = window.GetProperty("img show", true);
var img_size;
var img_size_recount = false;
var img_margin = window.GetProperty(" img: margin", 0);
var img_alignment = new Array("Adjust", "Adjust top - center", "Adjust top - left", "Centre", "Centre - top", "Stretch");
var img_alignment_idx = window.GetProperty("align mode", 1);
var img_selected = 0;
var img_file_names = [];
var img_file_names_old = [];
//var img_refresh = true;
var images = [];
var no_img_msg = "";
var on_img = false;
//var no_text_msg = "";
var limit = window.GetProperty("img download limit", 6);
var img_border = window.GetProperty("img border", true);
var img_border_width = window.GetProperty(" img border width", 4);
if (!/\S/.test(img_border_width) || img_border_width <= 0) {img_border_width = 1; window.SetProperty(" img border width", img_border_width);}
var fader = 255;
var fade_effect = window.GetProperty("fade effect", false);
var quality_idx = window.GetProperty("download quality", 1);
var quality = [
["Low", "avatar170s", "avatar170s"],
["Medium", "ar0", "300x300"],
["High", "770x0", "770x0"]
];
var data_main = window.GetProperty("data_main", 0);
var data_sub = window.GetProperty("data_sub", 0);
var data_sub_value = [
// menu text, LastFm query file name(tooltip, INI data) data_sub
["Most popular albums", "albums", "albums_popular"], // 0
["Similar artists", "similar", "similar"], // 1
["Album : ", "", "album"], // 2
["Title : ", "", "title"], // 3
["Lyrics : ", "", "lyrics"] // 4
];
var scrollbar = window.GetProperty("Scrollbar", true);
var seekbar_x = 0;
var seekbar_y = 0;
var seekbar_w = window.GetProperty(" seekbar width ", 4);
var seekbar_h = 0;
var seekbar_h_min = 20;
var seekbar_k = 0;
var seekbar_posy = 0;
var on_seekbar = false;
var on_seekbar_down = false;
var on_scrollbar = false;
var on_scrollbar_down = false;
var scroll = scroll_ = scroll__ = scroll___ = old_scroll = 0;
var scroll_cut = 0;
var scroll_timer;
var scroll_timer_on = false;
var scroll_delta = 0;
var wheel_id = 0;
var key_down = false;
var scroll_k = window.GetProperty(" scroll k (0-5)", 1);
if (!/\S/.test(scroll_k) || scroll_k < 0 || scroll_k > 5) {scroll_k = 1; window.SetProperty(" scroll k(0-5)", scroll_k);}
var bg_transparence = window.GetProperty("text bg transparence (0-255)", 150);
var t_margin = window.GetProperty(" text: margin", 10);
var txt_x = window.GetProperty("txt_x", 0);
var txt_y = window.GetProperty("txt_y", Math.round(window.Height / 2));
var old_txt_x = old_txt_y = 0;
var delta_x, delta_y;
var h0_y = h1_y = h2_y = t_y = t_x = 0;
var search_by = ["%album artist%", "%artist%", "%remixed by%"];
var search_by_idx = window.GetProperty("search by idx", 0);
var refresh_data = false;
var lock_loading = false;
var history = [];
var history_arr = [];
var history_seach = "";
var history_on = false;
var histity_list_edit = false;
var history_file_path = script_path + "histiry_list.txt";
var history_result = false;
var history_query = true;
var history_file_path_old = script_path + "histiry.txt"; // old version
if (fso.FileExists(history_file_path_old)){
try {
fso.MoveFile(history_file_path_old, history_file_path);
} catch(e) {};
}
var metadb_RawPath;
var complete_path = directory_path = old_directory_path = "";
var tf_artist, tf_album, tf_title;
var meta_artist, old_artist;
var meta_album, old_album;
var meta_title, old_title;
var artist_folder_path_old;
var request_counter = 0;
var text = header_0 = header_1 = header_2 = "";
var cut = false;
var text_refresh_step = 2;
//var refresh_text_step = 2;
var text_arr = [];
var text_arr_tmp = [];
var text_height = 0;
var text_row_width = 0;
var text_row_height = 0;
var text_rows = 0;
var text_rows_per_panel = 0;
var text_rows_per_panel_height = 0;
var h0_text_arr = [];
var h0_text_row_height = 0;
var h0_text_rows_per_panel = 0;
var h1_char_width = 0;
var h1_text_arr = [];
var h1_text_row_height = 0;
var h1_text_rows_per_panel = 0;
var h2_text_arr = [];
var h2_text_row_height = 0;
var h2_text_rows_per_panel = 0;
var ci_x = 0;
var ci_y = 0;
var old_ci_y = 10;
var ci_text_arr = [];
var ci_text_row_width = 0;
var ci_text_height = 0;
var ci_text_row_height = 0;
var info_text = [];
var info_text_old = "";
var info_text_arr = [];
var info_text_color = [];
var info_text_color_arr = [];
var info_text_font = [];
var info_text_font_arr = [];
var info_text_0 = window.GetProperty("info text 0", true);
var info_text_1 = window.GetProperty("info text 1", true);
var info_text_2 = window.GetProperty("info text 2", true);
var info_text_3 = window.GetProperty("info text 3", false);
var info_text_4 = window.GetProperty("info text 4", true);
var info_text_5 = window.GetProperty("info text 5", true);
var info_text_on = window.GetProperty("info text " + (data_main == 0 ? 0 : data_main + data_sub));
var on_text = false;
var on_header_0 = false;
var on_header_1 = false;
var on_header_2 = false;
var on_text_down = false;
var on_info_text_btn = false;
var refresh_text = true;
var text_hiden = window.GetProperty("txt hiden", false);
var tooltip_on = false;
var tooltip_delay = window.GetProperty(" tooltip delay (ms)", 1000);
if (!/\S/.test(tooltip_delay) || tooltip_delay < 1){tooltip_delay = 1000; window.SetProperty(" tooltip delay (ms)", tooltip_delay)};
var tooltip = window.GetProperty("tooltip", false);
var tooltip_text = "";
var pos_x = pos_y = old_x = old_y = 0;
var text_idx = 0;
var selected_item = "";
var selected_item_rows_idx = [];
var selected_item_rows = [];
var popular_this_week = "";
var latest_release = "";
var from_the_album = "";
var external_links = [];
var language_text = [
["en", "English", "Text not found"],
["it", "Italian", "Testo non trovato"],
["zh", "Chinese", ". . ."],
["de", "German", "Text nicht gefunden"],
["pl", "Polish", "Nie znaleziono tekstu"],
["pt", "Portuguese",". . ."],
["ru", "Russian", "Текст не найден"],
["tr", "Turkish", ". . ."],
["fr", "French", "Texte non trouve"],
["sv", "Swedish", ". . ."],
["ja", "Japanese", ". . ."]
]
window.GetProperty("en", true);
window.GetProperty("it", false);
window.GetProperty("zh", false);
window.GetProperty("de", false);
window.GetProperty("pl", false);
window.GetProperty("pt", false);
window.GetProperty("ru", true);
window.GetProperty("tr", false);
window.GetProperty("fr", false);
window.GetProperty("sv", false);
window.GetProperty("ja", false);
var lang_idx = window.GetProperty("lang", 0);
var tmp_lang_idx;
var lang_arr = [];
create_lang_arr();
function create_lang_arr(){
lang_arr = [];
for (var i = 0; i < language_text.length; i++) {
if (window.GetProperty(language_text[i][0]) == true){
lang_arr.push(language_text[i][0]);
}
}
if (lang_idx >= lang_arr.length) {
lang_idx = lang_idx - 1 <= 0 ? 0 : lang_idx - 1;
window.SetProperty("lang", lang_idx);
}
if (lang_idx < lang_arr.length) {
var i = 0;
do {
if (tmp_lang_idx == lang_arr[i]) {
lang_idx = i;
window.SetProperty("lang", lang_idx);
}
i++;
} while (i < lang_arr.length);
}
if (lang_arr.length == 1){
tmp_lang = lang_arr[0];
}
if (lang_arr.length == 0){
lang_arr.push(tmp_lang);
window.SetProperty(tmp_lang, true);
get_text();
}
}
function lang_query(i){
return lang_arr[i] == "en" ? "" : lang_arr[i] + "/";;
}
function no_text_found(n) {
tmp = "";
var j = 0;
do {
if (language_text[j][0] == n) {
tmp = language_text[j][2];
}
j++;
} while (j < language_text.length);
return tmp;
}
function get_text_menu(n) {
tmp = "";
var j = 0;
do {
if (language_text[j][0] == n) {
tmp = language_text[j][1];
}
j++;
} while (j < language_text.length);
return tmp;
}
var cycle_txt_y = 20;
var cycle_set = false;
var cycle_timer, cycle_step = 0;
var cycle = window.GetProperty("auto cycle (sec)", 0);
if (cycle > 0) cycle_set_timer();
var delay = false;
var get_files_timer, ftimer, ftimer_logo, ftimer_def_img, tooltip_timer;
var def_img_cover_on = window.GetProperty("covers as default img", false);
var covers_on = window.GetProperty("covers on", true);
var external = [];
var embedded = [];
var covers = [];
var attached_img_name = ["front cover", "back cover", "disc", "icon", "artist"];
var embedded_img_name = [];
var covers_title = covers_album = covers_directory_path = "";
var root_folders = ["cover", "scan", "art", "img", "images", "pic"];
var set_external = window.GetProperty("external", true);
var set_embedded = window.GetProperty("embedded", true);
var set_priority = window.GetProperty("set priority", 1);
var сover_info_on = window.GetProperty("сover info", true);
var covers_images = [];
var def_img_cover;
var panel_on = true;
var selection_mode = window.GetProperty("selection mode", 0);
var metadb;
on_item_focus_change();
function on_paint(gr){
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bg_color);
draw_image(gr);
if (!meta_artist && !history_on){
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 );
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 );
}
if (cycle_set && on_img){
gr.FillSolidRect(0, 0, ww, wh, RGBA(getRed(bg_color), getGreen(bg_color), getBlue(bg_color), bg_transparence));
var txt_cycle = cycle == 0 ? "off" : cycle + " sec";
text_shadow && gr.GdiDrawText("auto cycle: " + txt_cycle, t_font, bg_color, 0 + 1, cycle_txt_y + 2, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );
gr.GdiDrawText("auto cycle: " + txt_cycle, t_font, t_color, 0, cycle_txt_y, ww, wh, DT_CENTER | DT_WORD_ELLIPSIS );
} else {
if (meta_artist || history_on) gr.FillSolidRect(txt_x, txt_y, ww - txt_x, wh - txt_y, RGBA(getRed(bg_color), getGreen(bg_color), getBlue(bg_color), bg_transparence));
//lw = 1;
//gr.DrawRect(txt_x + lw / 2, txt_y + lw / 2, ww - txt_x - lw, wh - txt_y - lw, lw, RGBA(getRed(t_color), getGreen(t_color), getBlue(t_color), 100));
}
draw_seekbar(gr);
if (lock_loading){
for (var i = 0; i < h0_text_rows_per_panel; i++){ // header_0
try {
color = on_header_0 || on_header_1 ? t_color : h1_color;
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] );
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] );
} catch(e) {}
}
}
for (var i = 0; i < h1_text_rows_per_panel; i++){ // header_1
try {
font = !history_on ? h1_font : (history_seach ? t_font : h0_font);
color = history_on ? (history_seach ? (history_result ? color_true : (history_query ? t_color : color_error)) : h1_color) : h1_color;
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] );
gr.GdiDrawText(h1_text_arr[i], font, color, t_x, h1_y + h1_text_row_height * i, text_row_width, wh, text_alignment[text_alignment_h1][1] );
} catch(e) {}
}
if (meta_artist){
l_x1 = t_x;
l_y1 = h1_y + h1_text_row_height * h1_text_arr.length + 2;
l_x2 = t_x + text_row_width;
l_y2 = h1_y + h1_text_row_height * h1_text_arr.length + 2;
l_color = RGBA(getRed(h1_color), getGreen(h1_color), getBlue(h1_color), 120);
gr.DrawLine(l_x1, l_y1, l_x2, l_y2, 1, l_color);
if (text_shadow){
l_color_2 = RGBA(getRed(bg_color), getGreen(bg_color), getBlue(bg_color), 255);
gr.DrawLine(l_x1, l_y1 + 1, l_x2, l_y2 + 1, 1, l_color_2);
}
}
if (on_info_text_btn && info_text.length && !history_on) draw_info_text_btn(gr, t_x + text_row_width / 2, t_y - text_row_height / 2);
for (var i = 0; i < h2_text_rows_per_panel; i++){ // header_2
try {
color = ch() == "artist" ? h1_color : h2_color;
font = ch() == "artist" ? t2_font : h2_font;
text_shadow && gr.GdiDrawText( h2_text_arr[i], font, bg_color, t_x + 1, h2_y + h2_text_row_height * i + 2, text_row_width, wh, text_alignment[text_alignment_h2][1] );
gr.GdiDrawText( h2_text_arr[i], font, color, t_x, Math.round(h2_y + h2_text_row_height * i), text_row_width, wh, text_alignment[text_alignment_h2][1] );
} catch(e) {}
}
for (var i = 0; i < text_arr.length; i += 2){ // text
try {
row = t_y + (i * text_row_height / 2) + scroll_;
if (row > t_y - text_row_height && row < t_y + text_rows_per_panel_height){
color = info_text_color_arr[i] ? info_text_color_arr[i] : t_color;
font = info_text_font_arr[i] ? info_text_font_arr[i]: t_font;
var j = 0;
do {
if (selected_item_rows_idx[j] == i / 2){
color = color_selected_item;
}
j++;
} while (j < selected_item_rows_idx.length);
if (row < t_y){
format = text_alignment[text_alignment_t][2];
dh = text_row_height - gr.CalcTextHeight(text_arr[i], font);
y = row + (text_row_height - scroll_delta) - dh;
h = text_row_height - (text_row_height - scroll_delta);
}
if (row >= t_y && row <= t_y + text_rows_per_panel_height - text_row_height){
format = text_alignment[text_alignment_t][1];
y = row;
h = text_row_height;
}
if (row > t_y + text_rows_per_panel_height - text_row_height){
format = text_alignment[text_alignment_t][1];
y = row;
h = text_row_height - scroll_delta;
}
text_shadow && gr.GdiDrawText( trim(text_arr[i]), font, bg_color, t_x + 1, y + 2, text_row_width, h, format );
gr.GdiDrawText( trim(text_arr[i]), font, color, t_x, y, text_row_width, h, format );
}
} catch(e) {}
}
tooltip_on && draw_tooltip(gr);
}
function draw_image(gr){
if (img_show){
if (g_img){
if (img_size_recount){
img_size = calc_img_size(g_img);
img_size_recount = false;
}
ci_y = img_size.height + img_border_width * 2 + ci_text_row_height / 2;
ci_x = img_size.x - img_border_width + t_margin;
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);
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));
lw = 1;
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));
}
if (!g_img){
ci_y = t_margin;
ci_x = t_margin;
}
if (!g_img){
if (logo_img){
if ((!def_img_on && !def_img_cover_on && !def_img_set) || logo_img_set){
if (logo_fader == 0 && fade_effect) fader_timer_logo();
gr.DrawImage(logo_img, 5, 5, logo_img.Width, logo_img.Height, 0, 0, logo_img.Width, logo_img.Height, 0, logo_fader);
ci_y = 5 + logo_img.Height + ci_text_row_height;;
ci_x = 5;
}
}
if (def_img){
if (((def_img_on || def_img_cover_on) && !logo_img_set) || def_img_set){
if (def_img_size_recount){
def_img_size = calc_img_size(def_img);
def_img_size_recount = false;
}
ci_y = def_img_size.height + img_border_width * 2 + ci_text_row_height / 2;
ci_x = def_img_size.x - img_border_width + t_margin;
if (def_img_fader == 0 && fade_effect) fader_timer_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, def_img_fader);
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), def_img_fader));
}
}
if (!def_img && def_img_on){
ci_y = t_margin;
ci_x = t_margin;
text_shadow && gr.GdiDrawText("no default amage", t2_font, bg_color, ci_x + 1, ci_y + 1, ww, wh, text_alignment[text_alignment_t][1] );
gr.GdiDrawText("no default amage", t2_font, h1_color, ci_x, ci_y, ww, wh, text_alignment[text_alignment_t][1] );
}
}
if (сover_info_on){
if ((!g_img && def_img_cover_on) || covers_on){
if (Math.abs(ci_y - old_ci_y) < text_row_height / 2){
ci_y = old_ci_y;
} else {
old_ci_y = ci_y;
}
for (var i = 0; i < ci_text_arr.length; i++){
text_shadow && gr.GdiDrawText(ci_text_arr[i], t2_font, bg_color, ci_x + 1, ci_y + ci_text_row_height * i + 1, ci_text_row_width, wh, text_alignment[text_alignment_t][1] );
gr.GdiDrawText(ci_text_arr[i], t2_font, h1_color, ci_x, ci_y + ci_text_row_height * i, ci_text_row_width, wh, text_alignment[text_alignment_t][1] );
}
}
}
}
//gr.DrawImage(smile_img, 10, 10, smile_img.width, smile_img.Height, 0, 0, smile_img.width, smile_img.Height, 0, 255);
}
function draw_seekbar(gr){
seekbar_x = (text_height > text_rows_per_panel_height && scrollbar) ? ww - t_margin - seekbar_w - 10 : ww;
seekbar_h = text_rows_per_panel_height * (text_rows_per_panel / text_rows);
var seekbar_h_d = 0;
if (seekbar_h < seekbar_h_min && text_rows_per_panel_height > 0){
seekbar_h_d = seekbar_h_min - seekbar_h;
seekbar_h = seekbar_h_min;
}
seekbar_k = (text_rows_per_panel_height - seekbar_h_d) / text_rows;
seekbar_y = t_y + (scroll_ * -1) / text_row_height * seekbar_k;
if (scrollbar && text_height > text_rows_per_panel_height){
gr.SetSmoothingMode(2);
seekbar_alpha = (on_seekbar || on_seekbar_down || on_scrollbar) && !on_text_down ? 255 : 100;
seekbar_color = RGBA(getRed(h1_color), getGreen(h1_color), getBlue(h1_color), seekbar_alpha);
//text_shadow && gr.FillSolidRect(seekbar_x + 10 + 1, seekbar_y + 1, seekbar_w, seekbar_h, bg_color);
gr.FillSolidRect(seekbar_x + 10, seekbar_y, seekbar_w, seekbar_h, seekbar_color);
}
}
function draw_info_text_btn(gr, x, y){
var x = t_x + text_row_width / 2;
var y = t_y - text_row_height / 2;
var d = 10;
var arrow_direction = info_text_on ? 0 : 1;
var radius = d / 2;
var points = [];
var points_bg = [];
var steps = 6;
for (var i = 0; i < steps; i++) {
if (i % 2 == arrow_direction) {
points.push(x + (radius * Math.cos(Math.PI * i / steps * 2 - Math.PI / 2)));
points.push(y - 1 + (radius * Math.sin(Math.PI * i / steps * 2 - Math.PI / 2)));
points_bg.push(x + (radius * Math.cos(Math.PI * i / steps * 2 - Math.PI / 2))+1);
points_bg.push(y - 1 + (radius * Math.sin(Math.PI * i / steps * 2 - Math.PI / 2))+1);
}
}
gr.SetSmoothingMode(2);
if (text_rows_per_panel > 0){
text_shadow && gr.FillPolygon(bg_color, 1, points_bg);
gr.FillPolygon(h1_color, 1, points);
}
}
function draw_tooltip(gr){
tt_w = gr.CalcTextWidth(tooltip_text, tt_font) + 14;
tt_h = gr.CalcTextHeight(tooltip_text, tt_font) + 2;
tt_x = pos_x - tt_w * 0.5;
tt_x = tt_x <= 10 ? 10 : (tt_x >= ww - tt_w - 10 ? ww - tt_w - 10 : tt_x);
tt_y = pos_y - tt_h - 8;
tt_y = tt_y <= 10 ? 10 : tt_y;
gr.FillSolidRect(tt_x, tt_y, tt_w, tt_h, t_color);
gr.DrawRect(tt_x, tt_y, tt_w, tt_h, 1, bg_color);
gr.GdiDrawText( tooltip_text, tt_font, bg_color, tt_x, tt_y, tt_w, tt_h, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
function on_playlist_switch() {
on_item_focus_change();
}
function on_playback_new_track() {
on_item_focus_change();
}
function on_playback_dynamic_info_track() {
on_item_focus_change();
}
function on_playback_stop() {
on_item_focus_change();
}
function on_selection_changed(metadb) { //
on_item_focus_change();
}
function on_item_focus_change() {
switch (selection_mode) {
case 0:
metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
break;
case 1:
metadb = fb.GetFocusItem();
break;
}
if (metadb) on_metadb_changed();
}
function Eval(field) {
if (!metadb) return;
complete_path = metadb.Path;
directory_path = fb.Titleformat("$directory_path(%path%)").EvalWithMetadb(metadb);
//return complete_path.indexOf('://') > 0 ? fb.TitleFormat("[" + field + "]").Eval(true) : fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
//return fb.Titleformat("[%length%]").Eval() ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval();
return metadb.RawPath.indexOf("file") >= 0 ? fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb) : fb.TitleFormat("[" + field + "]").Eval();
}
/*
function Eval(field) {
if (!metadb) return "";
complete_path = metadb.Path;
directory_path = fb.Titleformat("$directory_path(%path%)").EvalWithMetadb(metadb);
var tfo = fb.TitleFormat("[" + field + "]");
if (fb.IsPlaying && complete_path.indexOf('://') > 0) {
return tfo.Eval();
} else {
return tfo.EvalWithMetadb(metadb);
}
}
*/
function on_metadb_changed(handles, fromhook) {
if (!panel_on) return;
if (!metadb) return;
ini_data();
if (directory_path.indexOf("://") >= 0 && covers_on) covers_on = false;
if (refresh_data){
del_folder(artist_folder_path(clean(meta_artist)));
old_artist = old_album = old_title = "";
clear_covers_var();
refresh_data = false;
}
if ((meta_artist && (meta_artist != old_artist)) || refresh_data){
add_name_to_history_list(meta_artist);
del_empty_folders();
check_folder(artist_folder_path(clean(meta_artist)));
//if (!save_images) !lock_loading && del_folders(clean(meta_artist));
if (!save_images) {
if (!save_images_to_artist_folder){
!lock_loading && del_folders(clean(meta_artist));
}
if (save_images_to_artist_folder){
!lock_loading && del_folder(artist_folder_path_old);
}
}
artist_folder_path_old = artist_folder_path(clean(meta_artist));
}
if ((meta_artist != old_artist) && (ch() == "artist" || ch() == "popular_albums" || ch() == "similar")){
get_img(meta_artist, meta_album, meta_title);
old_artist = meta_artist;
}
if ((meta_album != old_album) && ch() == "album"){
get_img(meta_artist, meta_album, meta_title);
old_album = meta_album;
}
if ((meta_title != old_title) && (ch() == "title" || ch() == "lyrics")){
get_img(meta_artist, meta_album, meta_title);
old_title = meta_title;
}
if (lock_loading && selected_item){
var items = fb.GetLibraryItems();
items.OrderByPath();
complete_path = " ";
directory_path = " ";
for (var i = 0; i < items.Count; i++) {
if (get_dp(items.Item(i).Path).toLowerCase().indexOf(clean(selected_item).toLowerCase()) >= 0){
complete_path = items.Item(i).Path;
directory_path = get_dp(items.Item(i).Path);
break;
}
}
}
if (directory_path && directory_path.indexOf("://") < 0){
if (tf_title != covers_title) {
get_embedded_covers(complete_path);
}
if (directory_path != covers_directory_path || tf_album != covers_album){
get_external_covers(directory_path, tf_artist, tf_album);
}
if (directory_path != covers_directory_path || tf_album != covers_album || tf_title != covers_title){
get_covers();
covers_title = tf_title;
covers_album = tf_album;
covers_directory_path = directory_path;
}
}
}
function ini_data(){
if (!lock_loading){
search = search_by_idx == 2 ? "$if3(%remixed by%, %album artist%, %artist%)" : search_by[search_by_idx];
tf_artist = Eval(search);
tf_album = Eval('%album%');
tf_title = Eval('%title%');
}
meta_artist = remap_artist(tf_artist);
meta_album = remap_album(remap_artist(tf_artist), tf_album);
meta_title = tf_title;
if (data_main == 1){
if (!meta_album && data_sub == 2 || !meta_title && (data_sub == 4 || data_sub == 5)) {
data_main = 0;
}
}
}
function clear_img_var() {
if (covers_on) return;
img_selected = 0;
images = [];
img_file_names = [];
img_file_names_old = [];
no_img_msg = "";
g_img = null;
}
function clear_covers_var() {
covers_title = covers_album = covers_directory_path = "";
external = [];
embedded = [];
covers = [];
ci_text_arr = [];
def_img_cover = null;
def_img_ini();
g_img = null;
}
function get_img(artist, album, title) {
path = artist_folder_path(clean(artist));
clear_img_var();
clear_txt_var();
if (fso.FolderExists(path)){
get_img_from_dir(path, artist, album, title);
if (images.length) {
!covers_on && next_image_lastFm(0);
get_text(path, artist, album, title);
} else {
switch(ch()) {
case "artist":
get_lastFm_meta_artist_img(true, path, artist);
break;
case "popular_albums":
get_lastFm_popular_albums_img(true, path, artist);
break;
case "similar":
get_lastFm_similar_img(true, path, artist);
break;
case "album":
get_lastFm_meta_album_img(true, path, artist, album);
break;
case "title":
case "lyrics":
get_lastFm_meta_title_img(true, path, artist, album, title);
break;
}
}
}
}
function get_img_from_dir(path, artist, album, title) {
artist = artist ? clean(artist) : "";
album = album ? clean(album) : "";
title = title ? clean(title) : "";
switch(ch()) {
case "artist":
img_file_names = naturalSort(utils.Glob( path + "\\" + artist + "*" + "artist.jpg").toArray());
break;
case "popular_albums":
img_file_names = [];
var j = 0;
do {
var album = utils.ReadINI( path + "\\" + artist + "_album_info.ini", data_sub_value[data_sub][2] + " : name" , j );
album && img_file_names.push(path + "\\" + artist + "_" + clean(album) + ".jpg")
j++;
} while (j < limit);
break;
case "similar":
img_file_names = naturalSort(utils.Glob( path + "\\" + artist + "*" + data_sub_value[data_sub][2] + ".jpg").toArray());
break;
case "album":
img_file_names = utils.Glob( path + "\\" + artist + "_" + album.replace(/[.’']/g, "*") + ".jpg").toArray();
break;
case "title":
case "lyrics":
var album = utils.ReadINI( path + "\\" + artist + "_title_info.ini", clean_ini(title), "album");
img_file_names = utils.Glob( path + "\\" + artist + "_" + clean(album) + ".jpg").toArray();
break;
}
images = [];
var i = 0;
do {
var tmp;
if (fso.FileExists(img_file_names[i])){
images.push(img_to_object(img_file_names[i]));
}
i++;
} while (i < img_file_names.length);
if (images.length == 0) def_img_ini();
if (cycle_timer) cycle_step = 0;
}
function next_image_lastFm(d){
fader = fade_effect ? 0 : 255;
def_fader_ini();
if (d < 0) {img_selected = img_selected <= 0 ? images.length - 1 : img_selected = img_selected - 1};
if (d > 0) {img_selected = img_selected >= images.length - 1 ? 0 : img_selected = img_selected + 1};
g_img = images[img_selected];
if (g_img) img_size_recount = true;
window.Repaint();
if (g_img && fade_effect) fader_timer();
}
function resize_image(img){
if (!img || !ww || !wh) return;
var scale_w = ww / img.Width;
var scale_h = wh / img.Height;
if (img_alignment_idx == 0 || img_alignment_idx == 1 || img_alignment_idx == 2){
var scale = Math.min(scale_w, scale_h);
} else {
var scale = Math.max(scale_w, scale_h);
}
var iw = Math.round(img.Width * scale);
var ih = Math.round(img.Height * scale)
return img.Resize(iw, ih, 7);
img && img.Dispose();
img = null;
}
function clear_txt_var() {
info_text = [];
info_text_color = [];
info_text_font = [];
popular_this_week = "";
latest_release = "";
from_the_album = "";
external_links = [];
history = [];
selected_item_rows_idx = [];
//no_img_msg = "";
//no_text_msg = "";
scroll = scroll_ = scroll__ = scroll___ = 0;
header_2 = "";
text = "";
refresh_text = true;
get_text_arr();
}
function get_text(path, artist, album, title){
clear_txt_var();
refresh_text = true;
switch(ch()) {
case "artist":
get_bio_text(path, artist);
break;
case "popular_albums":
get_popular_albums_text(img_selected, path, artist);
break;
case "similar":
get_similar_text(img_selected, path, artist);
break;
case "album":
get_meta_album_text(path, artist, album);
break;
case "title":
get_meta_title_text(path, artist, album, title);
break;
case "lyrics":
get_meta_lyrics_text(path, artist, album, title);
break;
}
get_external_links(path, artist);
}
function get_bio_text(path, artist) {
var file = path + "\\" + clean(artist) + "_biography_" + lang_arr[lang_idx] + ".txt";
header_2 = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)) + " : years active", lang_arr[lang_idx]);
info_text = get_info_text("", path, artist, "", "");
info_text_color = get_info_text_color("", path, artist, "", "");
info_text_font = get_info_text_font("", path, artist, "", "");
popular_this_week = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), "popular_this_week");
latest_release = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), "latest_release");
if (!info_text.length && request_counter <= 1) {
get_lastFm_artist_info_text(path, "file", artist);
} else {
if (fso.FileExists(file)){
read_txt_file(file);
} else {
get_lastFm_bio_text(path, file, artist);
}
request_counter = 0;
}
request_counter++;
}
function get_popular_albums_text(s, path, artist){
var album = utils.ReadINI( path + "\\" + clean(artist) + "_album_info.ini", data_sub_value[data_sub][2] + " : name" , s );
var file = path + "\\" + clean(artist) + "_" + clean(album) + "_" + lang_arr[lang_idx] + ".txt";
header_2 = album ? album : "";
info_text = get_info_text("", path, artist, album, "");
info_text_color = get_info_text_color("", path, artist, album, "");
info_text_font = get_info_text_font("", path, artist, album, "");
if (!info_text.length && request_counter <= 1) {
get_lastFm_meta_album_img(false, path, artist, album);
} else {
if (fso.FileExists(file)){
read_txt_file(file);
} else {
get_lastFm_album_text(path, file, album ? artist : "", album);
}
request_counter = 0;
}
request_counter++;
}
function get_meta_album_text(path, artist, album) {
var file = path + "\\" + clean(artist) + "_" + clean(album) + "_" + lang_arr[lang_idx] + ".txt";
header_2 = album;
info_text = get_info_text("", path, artist, album, "");
info_text_color = get_info_text_color("", path, artist, album, "");
info_text_font = get_info_text_font("", path, artist, album, "");
if (!info_text.length && request_counter <= 1) {
get_lastFm_meta_album_img(false, path, artist, album);
} else {
if (fso.FileExists(file)){
read_txt_file(file);
} else {
get_lastFm_album_text(path, file, artist, album);
}
request_counter = 0;
}
request_counter++;
}
function get_similar_text(s, path, artist) {
var file = path + "\\" + clean(artist) + "_" + s + "_" + data_sub_value[data_sub][2] + "_" + lang_arr[lang_idx] + ".txt";
var similar_artist = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", data_sub_value[data_sub][2] + " : name" , s );
header_2 = similar_artist ? similar_artist : "";
if (!similar_artist && request_counter <= 1) {
get_lastFm_similar_img(path, artist);
} else {
if (fso.FileExists(file)){
read_txt_file(file);
} else {
get_lastFm_bio_text(path, file, similar_artist);
}
request_counter = 0;
}
request_counter++;
}
function get_meta_title_text(path, artist, album, title) {
var file = path + "\\" + "title_" + clean(title) + "_" + lang_arr[lang_idx] + ".txt";
header_2 = title;
info_text = get_info_text("", path, artist, album, title);
info_text_color = get_info_text_color("", path, artist, album, title);
info_text_font = get_info_text_font("", path, artist, album, title);
from_the_album = utils.ReadINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "album");
if (!info_text.length && request_counter <= 1) {
get_lastFm_meta_title_img(false, path, artist, "", title);
} else {
if (fso.FileExists(file)){
read_txt_file(file);
} else {
get_lastFm_meta_title_text(path, file, artist, album, title);
}
request_counter = 0;
}
request_counter++;
}
function get_meta_lyrics_text(path, artist, album, title) {
var file = path + "\\" + "lyrics_" + clean(title) + ".txt";
var title = title;
header_2 = title;
info_text = get_info_text("", path, artist, album, title);
info_text_color = get_info_text_color("", path, artist, album, title);
info_text_font = get_info_text_font("", path, artist, album, title);
if (fso.FileExists(file)){
read_txt_file(file);
} else {
get_metrolyrics_meta_lyrics_text(path, file, artist, title);
}
}
function get_info_text(s, path, artist, album, title) {
switch(ch()) {
case "artist":
var text_rank = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_rank");
var text = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx]);
break;
case "popular_albums":
case "album":
var text = utils.ReadINI( path + "\\" + clean(artist) + "_album_info.ini", clean_ini(clean(album)), lang_arr[lang_idx]);
break;
case "title":
var text = utils.ReadINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), lang_arr[lang_idx]);
break;
case "lyrics":
var text = utils.ReadINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics");
break;
}
text = text_rank ? text_rank + text : text;
return (text ? text.replace(/\*+$/g, "").split("*") : []);
}
function get_info_text_color(s, path, artist, album, title) {
switch(ch()) {
case "artist":
var color_rank = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_rank_c");
var color = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_c");
break;
case "popular_albums":
case "album":
var color = utils.ReadINI( path + "\\" + clean(artist) + "_album_info.ini", clean_ini(clean(album)), lang_arr[lang_idx] + "_c");
break;
case "title":
var color = utils.ReadINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), lang_arr[lang_idx] + "_c");
break;
case "lyrics":
var color = utils.ReadINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics_c");
break;
}
color = color_rank ? color_rank + color : color;
return (color ? color.replace(/\*+$/g, "").split("*") : []);
}
function get_info_text_font(s, path, artist, album, title) {
switch(ch()) {
case "artist":
var font_rank = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_rank_f");
var font = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_f");
break;
case "popular_albums":
case "album":
var font = utils.ReadINI( path + "\\" + clean(artist) + "_album_info.ini", clean_ini(clean(album)), lang_arr[lang_idx] + "_f");
break;
case "title":
var font = utils.ReadINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), lang_arr[lang_idx] + "_f");
break;
case "lyrics":
var font = utils.ReadINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics_f");
break;
}
font = font_rank ? font_rank + font : font;
return (font ? font.replace(/\*+$/g, "").split("*") : []);
}
function get_external_links(path, artist) {
var info_external_links = utils.ReadINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(artist), "external_links");
external_links = info_external_links ? info_external_links.split("*") : [];
if (!external_links.length) get_artist_external_links(path, artist);
}
function read_txt_file(file){
if (!file) return;
text = utils.ReadTextFile(file);
get_text_arr();
}
function get_text_arr() {
t_x = txt_x + t_margin;
text_row_width = scrollbar ? Math.max(ww - t_x - t_margin - seekbar_w - 10, 0) : Math.max(ww - t_x - t_margin, 0);
temp_bmp = gdi.CreateImage(1, 1);
temp_gr = temp_bmp.GetGraphics();
header_0 = lock_loading ? "l o c k" : "";
h0_text_row_height = temp_gr.CalcTextHeight("Header_0", h0_font);
var h0_text_arr_tmp = header_0 ? temp_gr.EstimateLineWrap(header_0, h0_font, text_row_width).toArray() : [];
if (!history_on){
header_1 = meta_artist ? meta_artist : "";
var font = h1_font;
} else {
header_1 = history_seach ? title_case(history_seach) : "enter char (Ctrl-V, BS or Esc)";
var font = t_font;
header_2 = "";
}
h1_char_width = temp_gr.CalcTextWidth(header_1.substr(0, 1), h1_font);
h1_text_row_height = temp_gr.CalcTextHeight("Header_1", font);
var h1_text_arr_tmp = header_1 ? temp_gr.EstimateLineWrap(header_1, font, text_row_width).toArray() : [];
var font = ch() == "artist" ? t2_font : h2_font;
h2_text_row_height = temp_gr.CalcTextHeight("Header_2", font);
var h2_text_arr_tmp = header_2 ? temp_gr.EstimateLineWrap(header_2, font, text_row_width).toArray() : [];
text_row_height = temp_gr.CalcTextHeight("Biography", t_font);
info_text_idx = ch() == "artist" ? 0 : data_main + data_sub;
info_text_on = window.GetProperty("info text " + info_text_idx);
if (Math.abs(txt_x - old_txt_x) > text_refresh_step || refresh_text){
info_text_arr = [];
info_text_color_arr = [];
info_text_font_arr = [];
selected_item_rows = [];
if (!history_on && info_text_on && info_text.length){
for (var i = 0; i < info_text.length; i++) {
var color;
var font;
if (info_text_color[i] == "h1_color") color = h1_color;
if (info_text_color[i] == "t_color") color = t_color;
if (info_text_font[i] == "t2_font") font = t2_font;
if (info_text_font[i] == "t_font") font = t_font;
var tmp_arr = temp_gr.EstimateLineWrap( info_text[i], font, text_row_width).toArray();
info_text_arr = info_text_arr.concat(tmp_arr);
for (var j = 0; j < tmp_arr.length; j++) {
info_text_color_arr.push(color);
info_text_font_arr.push(font);
if (j % 2){
if ( info_text[i] == popular_this_week || info_text[i] == latest_release || info_text[i] == from_the_album){
selected_item_rows.push(info_text[i]);
} else {
selected_item_rows.push("");
}
}
}
}
info_text_arr.push("\n", 0);
}
history_arr = [];
if (history_on && history.length){
for (var i = 0; i < history.length; i++) {
var tmp_arr = temp_gr.EstimateLineWrap( history[i], t_font, text_row_width).toArray();
history_arr = history_arr.concat(tmp_arr);
for (var j = 0; j < tmp_arr.length; j++) {
if (j % 2){
selected_item_rows.push(history[i]);
}
}
}
}
text_arr_tmp = [];
var t = !history_on ? text : "";
if (t) text_arr_tmp = temp_gr.EstimateLineWrap(t, t_font, text_row_width).toArray();
text_arr = [];
text_arr = text_arr.concat(history_on ? history_arr : info_text_arr, text_arr_tmp);
old_txt_x = txt_x;
refresh_text = false;
}
temp_bmp.ReleaseGraphics(temp_gr);
temp_bmp.Dispose();
temp_gr = null;
temp_bmp = null;
CollectGarbage();
h0_y = Math.round(txt_y) + t_margin;
var h0_text_panel_height = Math.floor(Math.max(0, window.Height - t_margin - h0_y));
h0_text_rows_per_panel = Math.max(1, Math.floor(h0_text_panel_height / h0_text_row_height));
h0_text_arr = [];
for (var i = 0; i < h0_text_arr_tmp.length; i += 2) {
h0_text_arr.push(trim(h0_text_arr_tmp[i]));
}
h1_y = h0_y + h0_text_arr.length * h0_text_row_height;
var h1_text_panel_height = Math.floor(Math.max(0, window.Height - t_margin - h1_y));
h1_text_rows_per_panel = Math.max(1, Math.floor(h1_text_panel_height / h1_text_row_height));
h1_text_arr = [];
for (var i = 0; i < h1_text_arr_tmp.length; i += 2) {
h1_text_arr.push(trim(h1_text_arr_tmp[i]));
}
h2_y = h1_y + h1_text_arr.length * h1_text_row_height + 6;
var h2_text_panel_height = Math.floor(Math.max(0, window.Height - t_margin - h2_y));
h2_text_rows_per_panel = Math.floor(h2_text_panel_height / h2_text_row_height);
h2_text_arr = [];
for (var i = 0; i < h2_text_arr_tmp.length; i += 2) {
h2_text_arr.push(trim(h2_text_arr_tmp[i]));
}
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;
text_rows = text_arr.length / 2;
text_height = text_rows * text_row_height;
var text_panel_height = Math.floor(Math.max(0, window.Height - t_margin - t_y));
text_rows_per_panel = Math.floor(text_panel_height / text_row_height);
text_rows_per_panel_height = text_rows_per_panel * text_row_height;
if (text_rows_per_panel_height + Math.abs(scroll) > text_height && scroll < 0) {
scroll = scroll_ = scroll__ = scroll___ = (text_height - text_rows_per_panel_height) * -1;
}
if (scroll % text_row_height){ // if font size changed
scroll = scroll_ = scroll__ = scroll___ = Math.ceil(scroll / text_row_height) * text_row_height;
}
window.Repaint();
}
function strip_tags(t) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = t.replace(/<[Pp][^>]*>/g, "").replace(/<\/[Pp]>/g, "
").replace(/\n/g, "
");
var text = div.innerText;
doc.close();
return text.replace(/^\s+|\s+$/g, "");
}
function save_txt_file(t, file){
if (!t || !meta_artist) return;
path = artist_folder_path(clean(meta_artist));
if (fso.FolderExists(artist_folder_path(clean(meta_artist)))){
try {
file = fso.OpenTextFile( file, 2, true, -1)
file.Write(t);
file.Close();
} catch(e) {
return;
}
}
}
var menu_items = [
"Selected languages",
"Selection mode",
"last.fm",
"External links",
"Refresh",
"History",
"Remap",
"Search by",
"Text",
"Covers",
"Image",
"Copy to folder containing track",
"Storage",
"Language selection",
"Help",
"Properties",
"Configure"
];
function main_menu_setting(x, y){
for (var i = 0; i < menu_items.length; i++) {
window.GetProperty("mi_" + menu_items[i], false);
}
var _menu_s = window.CreatePopupMenu();
for (var i = 1; i < menu_items.length + 1; i++) {
_menu_s.AppendMenuItem( MF_ENABLED, i, menu_items[i - 1]);
_menu_s.CheckMenuItem(i - 0, window.GetProperty("mi_" + menu_items[i - 1]));
}
_menu_s.AppendMenuItem( MF_SEPARATOR, 0, 0);
_menu_s.AppendMenuItem( MF_ENABLED, 100, "Return to main menu");
ret_s = _menu_s.TrackPopupMenu(x, y);
switch (true) {
case (ret_s >= 1 && ret_s <= menu_items.length + 1):
selected_item = window.GetProperty("mi_" + menu_items[ret_s - 1]);
window.SetProperty("mi_" + menu_items[ret_s - 1], selected_item == false ? true : false);
main_menu_setting(x, y);
break;
}
switch (ret_s) {
case 100:
on_mouse_rbtn_up (x, y);
break;
}
_menu_s.Dispose();
}
function mi_prop(item){
return window.GetProperty("mi_" + item) ? true : false;
}
function mi_dim(t1, t2) {
w = 35;
return (t1 + t2).length > w ? (t1 + t2).substr(0, w - 3) + "..." : t1 + t2;
}
function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
var _group_20 = window.CreatePopupMenu();
function mi(item){
return window.GetProperty("mi_" + item) ? _menu : _group_20;
}
function EMI(n1, v1, n2, v2){
return n1 == v1 && n2 == v2 ? MF_GRAYED : MF_ENABLED;
}
for (var i = 1; i < lang_arr.length + 1; i++) {
menuItem = get_text_menu(lang_arr[i - 1]);
mi("Selected languages").AppendMenuItem( EMI(window.GetProperty("lang") + 1, i), i, menuItem);
mi("Selected languages").CheckMenuRadioItem(i, lang_arr.length + 1, window.GetProperty("lang") + 1);
//try {
// mi("Selected languages").EnableMenuItem(window.GetProperty("lang") + 1, 1);
//} catch(e){};
}
mi("Selected languages").AppendMenuItem( MF_SEPARATOR, 0, 0);
var _group_selection_mode = window.CreatePopupMenu();
_group_selection_mode.AppendTo(mi("Selection mode"), MF_ENABLED, "Selection mode");
_group_selection_mode.AppendMenuItem( EMI(selection_mode, 0), 40, "Prefer now playing");
_group_selection_mode.AppendMenuItem( EMI(selection_mode, 1), 41, "Follow selected track");
_group_selection_mode.CheckMenuRadioItem(40, 41 , selection_mode + 40);
//try {
//_group_selection_mode.EnableMenuItem(selection_mode + 40, 1);
//} catch(e){};
mi("Selection mode").AppendMenuItem( MF_SEPARATOR, 0, 0);
MF_STRING = meta_artist ? EMI(data_main, 0) : MF_GRAYED;
var artist_txt = mi_dim("Artist : ", meta_artist);
_menu.AppendMenuItem( MF_STRING, 50, artist_txt + (data_main == 1 ? " *" : ""));
_menu.CheckMenuRadioItem(50, 50 , data_main + 50);
//try {
// _menu.EnableMenuItem(data_main + 50, 1);
//} catch(e){};
MF_STRING = meta_artist ? EMI(data_main, 1, data_sub, 0) : MF_GRAYED;
_menu.AppendMenuItem( MF_STRING, 60, data_sub_value[0][0] + (data_main == 0 && data_sub == 0 ? " *" : ""));
MF_STRING = meta_artist ? EMI(data_main, 1, data_sub, 1) : MF_GRAYED;
_menu.AppendMenuItem( MF_STRING, 61, data_sub_value[1][0] + (data_main == 0 && data_sub == 1 ? " *" : ""));
MF_STRING = meta_artist && meta_album ? EMI(data_main, 1, data_sub, 2) : MF_GRAYED;
var meta_album_txt = mi_dim(data_sub_value[2][0], meta_album);
_menu.AppendMenuItem( MF_STRING, 62, meta_album_txt + (data_main == 0 && data_sub == 2 ? " *" : ""));
MF_STRING = meta_artist && meta_title ? EMI(data_main, 1, data_sub, 3) : MF_GRAYED;
var meta_title_txt = mi_dim(data_sub_value[3][0], meta_title);
_menu.AppendMenuItem( MF_STRING, 63, meta_title_txt + (data_main == 0 && data_sub == 3 ? " *" : ""));
MF_STRING = meta_artist && meta_title ? EMI(data_main, 1, data_sub, 4) : MF_GRAYED;
var meta_title_txt = mi_dim(data_sub_value[4][0], meta_title);
_menu.AppendMenuItem( MF_STRING, 64, meta_title_txt + (data_main == 0 && data_sub == 4 ? " *" : ""));
if (data_main == 1){
_menu.CheckMenuRadioItem(60, 64 , data_sub + 60);
//try {
// _menu.EnableMenuItem(data_sub + 60, 1);
//} catch(e){};
}
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
/////////////////////////////////////////////////////////////////////////////////////////
switch(ch()) {
case "artist":
lastFm_query_menu_text = meta_artist ? meta_artist : "";
lastFm_query = encodeURIComponent(meta_artist);
break;
case "popular_albums":
lastFm_query_menu_text = header_2 ? header_2 : "";
lastFm_query = encodeURIComponent(meta_artist) + "/" + encodeURIComponent(header_2);
break;
case "similar":
lastFm_query_menu_text = header_2 ? header_2 : "";
lastFm_query = encodeURIComponent(header_2);
break;
case "album":
lastFm_query_menu_text = meta_album ? meta_album : "";
lastFm_query = encodeURIComponent(meta_artist) + "/" + encodeURIComponent(meta_album);
break;
case "title":
case "lyrics":
lastFm_query_menu_text = meta_title ? meta_title : "";
lastFm_query = encodeURIComponent(meta_artist) + "/" + (meta_album ? encodeURIComponent(meta_album) + "/" : "_/") + encodeURIComponent(meta_title);
break;
}
MF_STRING = lastFm_query_menu_text ? MF_ENABLED : MF_GRAYED;
mi("last.fm").AppendMenuItem( MF_STRING, 70, mi_dim("last.fm : ", lastFm_query_menu_text));
var _group_external_links = window.CreatePopupMenu();
MF_STRING = external_links.length ? MF_ENABLED : MF_GRAYED;
_group_external_links.AppendTo(mi("External links"), MF_STRING, "External links ...");
for (var i = 80; i < external_links.length + 80; i += 2) {
var links_txt = mi_dim("", external_links[i - 80]);
_group_external_links.AppendMenuItem( MF_ENABLED, i, links_txt);
}
MF_STRING = !history_on ? MF_ENABLED : MF_GRAYED;
mi("Refresh").AppendMenuItem( MF_STRING, 90, "Refresh");
mi("History").AppendMenuItem( MF_STRING, 100, "History");
if (history_on){
MF_STRING = history.length && selected_item ? MF_ENABLED : MF_GRAYED;
_menu.AppendMenuItem( MF_STRING, 110, mi_dim("Delete ", selected_item ? selected_item : "..."));
MF_STRING = history.length ? MF_ENABLED : MF_GRAYED;
_menu.AppendMenuItem( MF_STRING, 120, "Clear history");
}
if (mi_prop("last.fm") || mi_prop("External links") || mi_prop("Refresh") || mi_prop("History") || history_on) _menu.AppendMenuItem( MF_SEPARATOR, 0, 0);
if (!mi_prop("last.fm") || !mi_prop("External links") || !mi_prop("Refresh") || !mi_prop("History")) _group_20.AppendMenuItem( MF_SEPARATOR, 0, 0);
var _group_remap = window.CreatePopupMenu();
_group_remap.AppendTo(mi("Remap"), MF_ENABLED, "Remap");
_group_remap.AppendMenuItem( MF_ENABLED, 130, "Remap " + title_case(remap_name()) + " name");
_group_remap.AppendMenuItem( MF_ENABLED, 140, "View Remap list ");
/////////////////////////////////////////////////////////////////////////////////////////
var _group_search_by = window.CreatePopupMenu();
_group_search_by.AppendTo(mi("Search by"), MF_ENABLED, "Search by : " + search_by[search_by_idx]);
_group_search_by.AppendMenuItem( EMI(search_by_idx, 0), 150, search_by[0]);
_group_search_by.AppendMenuItem( EMI(search_by_idx, 1), 151, search_by[1]);
_group_search_by.AppendMenuItem( EMI(search_by_idx, 2), 152, search_by[2]);
_group_search_by.CheckMenuRadioItem(150, 152, search_by_idx + 150);
//try {
// _group_search_by.EnableMenuItem(search_by_idx + 150, 1);
//} catch(e){};
if (mi_prop("Remap") || mi_prop("Search by")) _menu.AppendMenuItem( MF_SEPARATOR, 0, 0);
if (!mi_prop("Remap") || !mi_prop("Search by")) _group_20.AppendMenuItem( MF_SEPARATOR, 0, 0);
var _group_text = window.CreatePopupMenu();
_group_text.AppendTo(mi("Text"), MF_ENABLED, "Text");
var _group_text_alignment = window.CreatePopupMenu();
_group_text_alignment.AppendTo(_group_text, MF_ENABLED, "Text alignment");
var _group_text_alignment_h1 = window.CreatePopupMenu();
_group_text_alignment_h1.AppendTo(_group_text_alignment, MF_ENABLED, "Header 1 : " + text_alignment[text_alignment_h1][0]);
_group_text_alignment_h1.AppendMenuItem( EMI(text_alignment_h1, 0), 160, text_alignment[0][0]);
_group_text_alignment_h1.AppendMenuItem( EMI(text_alignment_h1, 1), 161, text_alignment[1][0]);
_group_text_alignment_h1.AppendMenuItem( EMI(text_alignment_h1, 2), 162, text_alignment[2][0]);
_group_text_alignment_h1.CheckMenuRadioItem( 160, 162, text_alignment_h1 + 160);
//try {
// _group_text_alignment_h1.EnableMenuItem(text_alignment_h1 + 160, 1);
//} catch(e){};
var _group_text_alignment_h2 = window.CreatePopupMenu();
_group_text_alignment_h2.AppendTo(_group_text_alignment, MF_ENABLED, "Header 2 : " + text_alignment[text_alignment_h2][0]);
_group_text_alignment_h2.AppendMenuItem( EMI(text_alignment_h2, 0), 170, text_alignment[0][0]);
_group_text_alignment_h2.AppendMenuItem( EMI(text_alignment_h2, 1), 171, text_alignment[1][0]);
_group_text_alignment_h2.AppendMenuItem( EMI(text_alignment_h2, 2), 172, text_alignment[2][0]);
_group_text_alignment_h2.CheckMenuRadioItem( 170, 172, text_alignment_h2 + 170);
//try {
// _group_text_alignment_h2.EnableMenuItem(text_alignment_h2 + 170, 1);
//} catch(e){};
var _group_text_alignment_t = window.CreatePopupMenu();
_group_text_alignment_t.AppendTo(_group_text_alignment, MF_ENABLED, "Main text : " + text_alignment[text_alignment_t][0]);
_group_text_alignment_t.AppendMenuItem( EMI(text_alignment_t, 0), 180, text_alignment[0][0]);
_group_text_alignment_t.AppendMenuItem( EMI(text_alignment_t, 1), 181, text_alignment[1][0]);
_group_text_alignment_t.AppendMenuItem( EMI(text_alignment_t, 2), 182, text_alignment[2][0]);
_group_text_alignment_t.CheckMenuRadioItem( 180, 182, text_alignment_t + 180);
//try {
// _group_text_alignment_t.EnableMenuItem(text_alignment_t + 180, 1);
//} catch(e){};
var _group_font_style = window.CreatePopupMenu();
_group_font_style.AppendTo(_group_text, MF_ENABLED, "Font style");
var _group_font_style_h1 = window.CreatePopupMenu();
_group_font_style_h1.AppendTo(_group_font_style, MF_ENABLED, "Header 1 : " + font_style[font_style_h1][0]);
_group_font_style_h1.AppendMenuItem( EMI(font_style_h1, 0), 190, font_style[0][0]);
_group_font_style_h1.AppendMenuItem( EMI(font_style_h1, 1), 191, font_style[1][0]);
_group_font_style_h1.AppendMenuItem( EMI(font_style_h1, 2), 192, font_style[2][0]);
_group_font_style_h1.AppendMenuItem( EMI(font_style_h1, 3), 193, font_style[3][0]);
_group_font_style_h1.CheckMenuRadioItem( 190, 193, font_style_h1 + 190);
//try {
// _group_font_style_h1.EnableMenuItem(font_style_h1 + 190, 1);
//} catch(e){};
var _group_font_style_h2 = window.CreatePopupMenu();
_group_font_style_h2.AppendTo(_group_font_style, MF_ENABLED, "Header 2 : " + font_style[font_style_h2][0]);
_group_font_style_h2.AppendMenuItem( EMI(font_style_h2, 0), 200, font_style[0][0]);
_group_font_style_h2.AppendMenuItem( EMI(font_style_h2, 1), 201, font_style[1][0]);
_group_font_style_h2.AppendMenuItem( EMI(font_style_h2, 2), 202, font_style[2][0]);
_group_font_style_h2.AppendMenuItem( EMI(font_style_h2, 3), 203, font_style[3][0]);
_group_font_style_h2.CheckMenuRadioItem( 200, 203, font_style_h2 + 200);
//try {
// _group_font_style_h2.EnableMenuItem(font_style_h2 + 200, 1);
//} catch(e){};
var _group_font_style_t = window.CreatePopupMenu();
_group_font_style_t.AppendTo(_group_font_style, MF_ENABLED, "Main text : " + font_style[font_style_t][0]);
_group_font_style_t.AppendMenuItem( EMI(font_style_t, 0), 210, font_style[0][0]);
_group_font_style_t.AppendMenuItem( EMI(font_style_t, 1), 211, font_style[1][0]);
_group_font_style_t.AppendMenuItem( EMI(font_style_t, 2), 212, font_style[2][0]);
_group_font_style_t.AppendMenuItem( EMI(font_style_t, 3), 213, font_style[3][0]);
_group_font_style_t.CheckMenuRadioItem( 210, 213, font_style_t + 210);
//try {
// _group_font_style_t.EnableMenuItem(font_style_t + 210, 1);
//} catch(e){};
_group_text.AppendMenuItem( MF_ENABLED, 220, "Text shadow");
_group_text.CheckMenuItem( 220, text_shadow);
_group_text.AppendMenuItem( MF_ENABLED, 230, "Show scrollbar");
_group_text.CheckMenuItem( 230, scrollbar);
_group_text.AppendMenuItem( MF_ENABLED, 240, "Tooltip");
_group_text.CheckMenuItem( 240, tooltip);
/////////////////////////////////////////////////////////////////////////////////////////
var _group_image = window.CreatePopupMenu();
_group_image.AppendTo(mi("Image"), MF_ENABLED, "Image");
_group_image.AppendMenuItem( MF_ENABLED, 250, "Show Image");
_group_image.CheckMenuItem( 250, img_show);
_group_image.AppendMenuItem( MF_SEPARATOR, 0, 0);
var _group_image_alignment = window.CreatePopupMenu();
_group_image_alignment.AppendTo(_group_image, MF_ENABLED, "Image alignment");
_group_image_alignment.AppendMenuItem( EMI(img_alignment_idx, 0), 260, img_alignment[0]);
_group_image_alignment.AppendMenuItem( EMI(img_alignment_idx, 1), 261, img_alignment[1]);
_group_image_alignment.AppendMenuItem( EMI(img_alignment_idx, 2), 262, img_alignment[2]);
_group_image_alignment.AppendMenuItem( EMI(img_alignment_idx, 3), 263, img_alignment[3]);
_group_image_alignment.AppendMenuItem( EMI(img_alignment_idx, 4), 264, img_alignment[4]);
_group_image_alignment.AppendMenuItem( EMI(img_alignment_idx, 5), 265, img_alignment[5]);
_group_image_alignment.CheckMenuRadioItem( 260, 265, img_alignment_idx + 260);
//try {
// _group_image_alignment.EnableMenuItem(img_alignment_idx + 260, 1);
//} catch(e){};
var _group_download_quality = window.CreatePopupMenu();
_group_download_quality.AppendTo(_group_image, MF_ENABLED, "Download quality : " + quality[quality_idx][0]);
_group_download_quality.AppendMenuItem( EMI(quality_idx, 0), 270, quality[0][0]);
_group_download_quality.AppendMenuItem( EMI(quality_idx, 1), 271, quality[1][0]);
_group_download_quality.AppendMenuItem( EMI(quality_idx, 2), 272, quality[2][0]);
_group_download_quality.CheckMenuRadioItem( 270, 272, quality_idx + 270);
//try {
// _group_download_quality.EnableMenuItem(quality_idx + 270, 1);
//} catch(e){};
MF_STRING = MF_GRAYED;
if (covers_on) MF_STRING = covers[img_selected] && typeof covers[img_selected] != 'object' ? MF_ENABLED : MF_GRAYED;
if (!covers_on) MF_STRING = img_file_names[img_selected] ? MF_ENABLED : MF_GRAYED;
_group_image.AppendMenuItem( MF_STRING, 280, "Open image");
var _group_default_img = window.CreatePopupMenu();
default_img_text = "";
switch(true) {
case def_img_on && !def_img_cover_on:
default_img_text = "selected image";
break;
case def_img_cover_on:
default_img_text = "cover";
break;
case !def_img_on && !def_img_cover_on:
default_img_text = "last Fm logo";
break;
}
_group_default_img.AppendTo(_group_image, MF_ENABLED, "Default image : " + default_img_text);
_group_default_img.AppendMenuItem( MF_ENABLED, 290, "Default image");
_group_default_img.CheckMenuItem( 290, def_img_on);
_group_default_img.AppendMenuItem( MF_ENABLED, 295, "Covers as default image"); // 295 ???????????????????????
_group_default_img.CheckMenuItem( 295, def_img_cover_on);
var _group_lastFm_logo = window.CreatePopupMenu();
MF_STRING = !def_img_on ? MF_ENABLED : MF_GRAYED;
_group_lastFm_logo.AppendTo(_group_default_img, MF_STRING, "last.fm logo images");
_group_lastFm_logo.AppendMenuItem( EMI(logo_img_idx, 0), 300, "1");
_group_lastFm_logo.AppendMenuItem( EMI(logo_img_idx, 1), 301, "2");
_group_lastFm_logo.AppendMenuItem( EMI(logo_img_idx, 2), 302, "3");
_group_lastFm_logo.AppendMenuItem( EMI(logo_img_idx, 3), 303, "4");
_group_lastFm_logo.AppendMenuItem( EMI(logo_img_idx, 4), 304, "5");
_group_lastFm_logo.CheckMenuRadioItem( 300, 304 , logo_img_idx + 300);
//try {
// _group_lastFm_logo.EnableMenuItem(logo_img_idx + 300, 1);
//} catch(e){};
_group_default_img.AppendMenuItem( MF_SEPARATOR, 0, 0);
_group_default_img.AppendMenuItem( MF_ENABLED, 305, "Message if no default image");
//_group_default_img.CheckMenuItem( 305, def_img_on);
_group_image.AppendMenuItem( MF_ENABLED, 310, "Border");
_group_image.CheckMenuItem(310, img_border);
_group_image.AppendMenuItem( MF_ENABLED, 320, "Fade effect");
_group_image.CheckMenuItem(320, fade_effect);
_group_image.AppendMenuItem( MF_ENABLED, 330, "Image download limit (" + limit + ")");
if (mi_prop("Text") || mi_prop("Image")) _menu.AppendMenuItem( MF_SEPARATOR, 0, 0);
if (!mi_prop("Text") || !mi_prop("Image")) _group_20.AppendMenuItem( MF_SEPARATOR, 0, 0);
/////////////////////////////////////////////////////////////////////////////////////////
var _group_covers = window.CreatePopupMenu();
//MF_STRING = metadb.RawPath.indexOf("file") >= 0 ? MF_ENABLED : MF_GRAYED;
MF_STRING = directory_path.indexOf("://") < 0 ? MF_ENABLED : MF_GRAYED;
_group_covers.AppendTo(mi("Covers"), MF_STRING, "Covers : " + (covers_on ? "on" : "off"));
//_group_covers.AppendTo(mi("Covers"), MF_STRING, "Covers : " + (covers_on ? "on" : "off"));
_group_covers.AppendMenuItem( MF_ENABLED, 1000, "Covers");
_group_covers.CheckMenuItem(1000, covers_on);
_group_covers.AppendMenuItem( MF_SEPARATOR, 0, 0);
_group_covers.AppendMenuItem( MF_ENABLED, 2000, "External covers");
_group_covers.CheckMenuItem(2000, set_external);
_group_covers.AppendMenuItem( MF_ENABLED, 3000, "Embedded covers");
_group_covers.CheckMenuItem(3000, set_embedded);
_group_covers.AppendMenuItem( MF_SEPARATOR, 0, 0);
_group_covers.AppendMenuItem( EMI(set_priority, 0), 4000, "Priority external");
_group_covers.AppendMenuItem( EMI(set_priority, 1), 4001, "Priority embedded");
_group_covers.CheckMenuRadioItem(4000, 4001 , set_priority + 4000);
//try {
// _group_covers.EnableMenuItem(set_priority + 4000, 1);
//} catch(e){};
_group_covers.AppendMenuItem( MF_SEPARATOR, 0, 0);
_group_covers.AppendMenuItem( MF_ENABLED, 5000, "Сover information");
_group_covers.CheckMenuItem(5000, сover_info_on);
//_group_covers.AppendMenuItem( MF_ENABLED, 6000, "");
//_group_covers.AppendMenuItem( MF_ENABLED, 7000, "");
if (mi_prop("Covers")) _menu.AppendMenuItem( MF_SEPARATOR, 0, 0);
if (!mi_prop("Covers")) _group_20.AppendMenuItem( MF_SEPARATOR, 0, 0);
/////////////////////////////////////////////////////////////////////////////////////////
var _group_copy_to = window.CreatePopupMenu();
MF_STRING = images.length ? MF_ENABLED : MF_GRAYED;
_group_copy_to.AppendTo(mi("Copy to folder containing track"), MF_STRING, "Copy to folder containing track ...");
_group_copy_to.AppendMenuItem( MF_STRING, 340, "Copy file");
_group_copy_to.AppendMenuItem( MF_STRING, 350, "Copy files");
mi("Copy to folder containing track").AppendMenuItem( MF_SEPARATOR, 0, 0);
var _group_storage = window.CreatePopupMenu();
_group_storage.AppendTo(mi("Storage"), MF_ENABLED, "Storage");
_group_storage.AppendMenuItem( MF_ENABLED, 360, "Save images and text");
_group_storage.CheckMenuItem(360, save_images);
_group_storage.AppendMenuItem( MF_ENABLED, 370, save_images ? "Use artist folder to save" : "Use artist folder for temporary storage");
_group_storage.CheckMenuItem(370, save_images_to_artist_folder);
_group_storage.AppendMenuItem( MF_SEPARATOR, 0, 0);
_group_storage.AppendMenuItem( MF_ENABLED, 380, "Delete temporary internet files");
mi("Storage").AppendMenuItem( MF_SEPARATOR, 0, 0);
var _group_language_selection = window.CreatePopupMenu();
_group_language_selection.AppendTo(mi("Language selection"), MF_ENABLED, "Language selection");
for (var i = 20; i < language_text.length + 20; i++) {
menuItem = language_text[i - 20][1];
_group_language_selection.AppendMenuItem( MF_ENABLED, i, menuItem);
_group_language_selection.CheckMenuItem(i, window.GetProperty(language_text[i - 20][0]));
}
mi("Language selection").AppendMenuItem( MF_SEPARATOR, 0, 0);
mi("Help").AppendMenuItem( MF_ENABLED, 390, "Help ...");
mi("Help").AppendMenuItem( MF_SEPARATOR, 0, 0);
mi("Properties").AppendMenuItem( MF_ENABLED, 510, "Properties");
mi("Configure").AppendMenuItem( MF_ENABLED, 520, "Configure ...");
if (mi_prop("Properties") || mi_prop("Configure")) _menu.AppendMenuItem( MF_SEPARATOR, 0, 0);
if (!mi_prop("Properties") || !mi_prop("Configure")) _group_20.AppendMenuItem( MF_SEPARATOR, 0, 0);
_group_20.AppendMenuItem( MF_ENABLED, 600, "Main menu setting");
_group_20.AppendTo(_menu, MF_ENABLED, "More ...");
/////////////////////////////////////////////////////////////////////////////////////////
ret = _menu.TrackPopupMenu(x + 20, y - 100);
if (ret == 0) return;
switch (true) {
case (ret >= 1 && ret < lang_arr.length + 1):
lang_idx = ret - 1;
window.SetProperty("lang", lang_idx);
path = artist_folder_path(clean(meta_artist));
get_text(path, meta_artist, meta_album, meta_title);
break;
}
switch (true) {
case (ret >= 20 && ret < language_text.length + 20):
tmp_lang_idx = lang_arr[lang_idx];
var tmp = window.GetProperty(language_text[ret - 20][0]);
window.SetProperty(language_text[ret - 20][0], !tmp);
create_lang_arr();
path = artist_folder_path(clean(meta_artist));
get_text(path, meta_artist, meta_album, meta_title);
on_mouse_rbtn_up (x, y);
break;
}
switch (true) {
case (ret >= 80 && ret < external_links.length + 80):
external_links_query = external_links[ret - 80 + 1];
try {
WshShell.run(external_links_query);
} catch (e) {};
break;
}
switch (ret) {
// case 20: used
case 40:
case 41:
old_album = "";
old_title = "";
selection_mode = ret - 40;
window.SetProperty("selection mode", selection_mode);
on_item_focus_change();
break;
case 50:
data_main = 0;
window.SetProperty("data_main", data_main);
if (history_on && lock_loading){
history_on = false;
lock_loading = false;
}
////ini_data();
get_img(meta_artist, meta_album, meta_title);
break;
case 60:
case 61:
case 62:
case 63:
case 64:
data_main = 1;
window.SetProperty("data_main", data_main);
data_sub = ret - 60;
window.SetProperty("data_sub", data_sub);
if (history_on && lock_loading){
history_on = false;
lock_loading = false;
}
////ini_data();
get_img(meta_artist, meta_album, meta_title);
break;
case 70:
try {
WshShell.run("https://www.last.fm/" + lang_query(lang_idx) + "music/" + lastFm_query);
} catch (e) {};
break;
// case 80: used
case 90: // Refresh
refresh_data = true;
on_metadb_changed();
break;
case 100: // History
history_query = true;
history_on = true;
lock_loading = true;
lock_mode();
history_seach = "";
clear_txt_var();
get_history();
break;
case 110:
del_history_item();
break;
case 120:
del_history_list();
break;
case 130: // Remap
edit_remap_list(meta_artist, tf_album, remap_name());
break;
case 140: // Remap list
if ( fso.FileExists(remap_file_path(remap_name())) ){
try {
objShellApp.ShellExecute("notepad.exe", remap_file_path(remap_name()),'' ,'open' , 1);
} catch(e) {};
}
break;
case 150:
case 151:
case 152:
search_by_idx = ret - 150;
window.SetProperty("search by idx", search_by_idx);
refresh_data = true;
on_metadb_changed();
break;
case 160:
case 161:
case 162:
text_alignment_h1 = ret - 160;
window.SetProperty("text alignment : header 1", text_alignment_h1);
window.Repaint();
on_mouse_rbtn_up (x, y);
break;
case 170:
case 171:
case 172:
text_alignment_h2 = ret - 170;
window.SetProperty("text alignment : header 2", text_alignment_h2);
window.Repaint();
on_mouse_rbtn_up (x, y);
break;
case 180:
case 181:
case 182:
text_alignment_t = ret - 180;
window.SetProperty("text alignment : text", text_alignment_t);
window.Repaint();
on_mouse_rbtn_up (x, y);
break;
case 190:
case 191:
case 192:
case 193:
font_style_h1 = ret - 190;
window.SetProperty("text: font style: header 1", font_style_h1);
get_font();
refresh_text = true;
get_text_arr();
on_mouse_rbtn_up (x, y);
break;
case 200:
case 201:
case 202:
case 203:
font_style_h2 = ret - 200;
window.SetProperty("text: font style: header 2", font_style_h2);
get_font();
refresh_text = true;
get_text_arr();
on_mouse_rbtn_up (x, y);
break;
case 210:
case 211:
case 212:
case 213:
font_style_t = ret - 210;
window.SetProperty("text: font style: text", font_style_t);
get_font();
refresh_text = true;
get_text_arr();
on_mouse_rbtn_up (x, y);
break;
case 220:
text_shadow = !text_shadow;
window.SetProperty("text: shadow", text_shadow);
window.Repaint();
break;
case 230:
scrollbar = !scrollbar;
window.SetProperty("scrollbar", scrollbar);
refresh_text = true;
get_text_arr();
break;
case 240:
tooltip = !tooltip;
window.SetProperty("tooltip", tooltip);
break;
case 250:
img_show = !img_show;
window.SetProperty("img show", img_show);
def_fader_ini();
//if (!covers_on) images[img_selected] && next_image_lastFm(img_selected);
//if (covers_on) covers[img_selected] && next_image_2(img_selected);
break;
case 260:
case 261:
case 262:
case 263:
case 264:
case 265:
img_alignment_idx = ret - 260;
window.SetProperty("align mode", img_alignment_idx);
img_size_recount = true;
def_img_size_recount = true;
window.Repaint();
break;
case 270:
case 271:
case 272:
quality_idx = ret - 270;
window.SetProperty("download quality", quality_idx);
refresh_data = true;
on_metadb_changed();
break;
case 280:
if (covers_on){
try {
if (typeof covers[img_selected] != 'object') {
if (covers[img_selected]) WshShell.run( '"' + covers[img_selected] + '"' );
}
} catch(e) {};
}
if (!covers_on){
try {
if (img_file_names[img_selected]) WshShell.run( '"' + img_file_names[img_selected] + '"' );
} catch(e) {};
}
break;
case 290: // Default image
def_img_on = !def_img_on;
window.SetProperty("default img", def_img_on);
if (def_img_on) {
def_img_cover_on = false;
window.SetProperty("covers as default img", def_img_cover_on);
}
def_img_set = true;
delay_def_img_set();
break;
case 295: // Covers as default image /// 295
def_img_cover_on = !def_img_cover_on;
window.SetProperty("covers as default img", def_img_cover_on);
if (def_img_cover_on) {
def_img_on = false;
window.SetProperty("default img", def_img_on);
}
def_img_set = true;
delay_def_img_set();
break;
case 300:
case 301:
case 302:
case 303:
case 304:
logo_img_idx = ret - 300;
window.SetProperty("logo_img_idx", logo_img_idx);
logo_img_set = true;
delay_def_img_set();
break;
case 310:
img_border = !img_border;
window.SetProperty("img border", img_border);
img_size_recount = true;
def_img_size_recount = true;
window.Repaint();
break;
case 320:
fade_effect = !fade_effect;
window.SetProperty("fade effect", fade_effect);
def_fader_ini();
break;
case 330:
download_limit(x, y);
break;
////////////////////////////////////////////////////////////////////////////////////////////////
case 1000:
covers_on = !covers_on;
window.SetProperty("covers on", covers_on);
///clear_img_var(); /////////////////////////?
covers_on && get_covers();
!covers_on && get_img(meta_artist, meta_album, meta_title);
break;
case 2000:
set_external = set_external == false ? true : set_embedded == false ? true : false;
window.SetProperty("external", set_external);
img_selected = 0;
get_external_covers(directory_path, tf_artist, tf_album);
get_covers();
break;
case 3000:
set_embedded = set_embedded == false ? true : set_external == false ? true : false;
window.SetProperty("embedded", set_embedded);
img_selected = 0;
get_embedded_covers(complete_path);
get_covers();
break;
case 4000:
case 4001:
set_priority = set_priority == 0 ? 1 : 0;
window.SetProperty("set priority", set_priority);
img_selected = 0;
get_covers();
break;
case 5000:
сover_info_on = !сover_info_on;
window.setProperty("сover info", сover_info_on);
break;
case 6000:
break;
////////////////////////////////////////////////////////////////////////////////////////////////////////
case 340:
copy_files(0);
break;
case 350:
copy_files(1);
break;
case 360:
save_images = !save_images;
window.SetProperty("save images", save_images);
break;
case 370:
save_images_to_artist_folder = !save_images_to_artist_folder;
window.SetProperty("save to artist folder containing track", save_images_to_artist_folder);
break
case 380:
try {
WshShell.Run("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8");
//WshShell.Run("RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2");
} catch (e) {};
break;
case 390:
help();
break;
case 510:
window.ShowProperties();
break;
case 520:
window.ShowConfigure();
break;
case 600:
main_menu_setting(x, y);
break;
}
_menu.Dispose();
_group_20.Dispose();
_group_selection_mode.Dispose();
_group_external_links.Dispose();
_group_remap.Dispose();
_group_search_by.Dispose();
_group_text.Dispose();
_group_text_alignment.Dispose();
_group_text_alignment_h1.Dispose();
_group_text_alignment_h2.Dispose();
_group_text_alignment_t.Dispose();
_group_font_style.Dispose();
_group_font_style_h1.Dispose();
_group_font_style_h2.Dispose();
_group_font_style_t.Dispose();
_group_image.Dispose();
_group_image_alignment.Dispose();
_group_download_quality.Dispose();
_group_default_img.Dispose();
_group_lastFm_logo.Dispose();
_group_covers.Dispose();
_group_copy_to.Dispose();
_group_storage.Dispose();
_group_language_selection.Dispose();
return true;
}
function download_limit(x, y){
var _menu = window.CreatePopupMenu();
_menu.AppendMenuItem(MF_ENABLED, 1, "Increase");
_menu.AppendMenuItem(MF_ENABLED, 2, "Download limit " + limit);
_menu.AppendMenuItem(MF_ENABLED, 3, "Decrease");
ret = _menu.TrackPopupMenu(x, y);
switch (ret) {
case 1:
limit = limit + 1;
window.SetProperty("img download limit", limit);
download_limit(x, y);
break;
case 2:
on_mouse_rbtn_up (x, y);
break;
case 3:
limit = limit <= 1 ? 1 : limit - 1;
window.SetProperty("img download limit", limit);
download_limit(x, y);
break;
}
_menu.Dispose();
}
function cycle_set_timer(){
cycle_timer && window.ClearInterval(cycle_timer);
cycle_timer = window.SetInterval(function() {
cycle_step = cycle_set ? 0 : cycle_step + 1;
if (cycle > 0 && cycle_step >= cycle){
if (!covers_on && images.length > 1){
if (images.length < limit) get_img_from_dir(artist_folder_path(clean(meta_artist)), meta_artist);
next_image_lastFm(1);
if (ch() == "popular_albums" || ch() == "similar"){
path = artist_folder_path(clean(meta_artist));
get_text(path, meta_artist, meta_album, meta_title);
}
//cycle_step = 0;
}
if (covers_on && covers.length > 1){
next_image_2(1);
//cycle_step = 0;
}
cycle_step = 0;
}
}, 1000);
}
function delay_1(){
delay = true;
var delay_timer = window.SetTimeout(function() {
delay = false;
window.ClearTimeout(delay_timer);
}, 200);
}
function delay_def_img_set(){
if (g_img) {
g_img = null;
window.Repaint();
}
def_fader_ini();
def_img_set && def_img_ini();
logo_img_set && logo_img_ini();
logo_img_set = false;
def_img_set = false;
var delay_timer = window.SetTimeout(function() {
if (!covers_on) images[img_selected] && next_image_lastFm(0);
if (covers_on) covers[img_selected] && next_image_2(0);
//logo_img_set = false;
//def_img_set = false;
window.ClearTimeout(delay_timer);
window.Repaint();
}, 1500);
}
function fader_timer(){
img_size = calc_img_size(g_img);
ftimer && window.ClearInterval(ftimer);
ftimer = window.SetInterval(function() {
fader = fader == 0 ? 1 : fader * 2;
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);
if (fader >= 255) {
fader = 255;
window.ClearInterval(ftimer);
}
}, 50);
}
function fader_timer_logo(){
ftimer_logo && window.ClearInterval(ftimer_logo);
ftimer_logo = window.SetInterval(function() {
logo_fader = logo_fader == 0 ? 1 : logo_fader * 2;
window.Repaint();
if (logo_fader >= logo_img_transp) {
logo_fader = logo_img_transp;
window.ClearInterval(ftimer_logo);
}
}, 50);
}
function fader_timer_def_img(){
def_img_size = calc_img_size(def_img);
ftimer_def_img && window.ClearInterval(ftimer_def_img);
ftimer_def_img = window.SetInterval(function() {
def_img_fader = def_img_fader == 0 ? 1 : def_img_fader * 2;
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);
if (def_img_fader >= def_img_transp) {
def_img_fader = def_img_transp;
window.ClearInterval(ftimer_def_img);
}
}, 50);
}
function info_tooltip() {
tooltip_on = true;
tooltip_timer && window.ClearTimeout(tooltip_timer);
tooltip_timer = window.SetTimeout(function() {
tooltip_on = false;
tooltip_text = "";
window.Repaint();
tooltip_timer && window.ClearTimeout(tooltip_timer);
}, tooltip_delay);
}
function load_lastFm_logo(){
urls = [
"https://www.last.fm/static/images/footer_logo@2x.49ca51948b0a.png",
"https://d2r1vs3d9006ap.cloudfront.net/public/uploaded_images/10596530/logo_sq_256_new_small.png", // no
"https://www.last.fm/static/images/logo_static.png?7b581436b23f",
"http://cdn.shopify.com/s/files/1/0270/7261/t/3/assets/logo.png?13435600546523064478",
"http://cdn.shopify.com/s/files/1/0270/7261/t/1/assets/logo.png?13435600546523064478"
];
for (var i = 0; i < urls.length; i++) {
file = "logo_" + (i + 1) + ".png";
if(!fso.FileExists(script_path + file)) {
var path = "\"" + script_path + file + "\"";
WshShell.Run(vbs + " " + urls[i] + " " + path, false);
}
}
url = "https://www.last.fm/static/images/marvin.05ccf89325af.png"
file = "marvin.png";
if(!fso.FileExists(script_path + file)) {
var path = "\"" + script_path + file + "\"";
WshShell.Run(vbs + " " + url + " " + path, false);
}
}
function create_download_file() {
try {
file = fso.CreateTextFile(script_path + "download.vbs" );
var text =
"If (WScript.Arguments.Count <> 2) Then" + "\n\r" +
" WScript.Quit" + "\n\r" +
"End If" + "\n\r" + "\n\r" +
"url = WScript.Arguments(0)" + "\n\r" +
"file = WScript.Arguments(1)" + "\n\r" + "\n\r" +
"Set objFSO = Createobject(" + '"Scripting.FileSystemObject"' + ")" + "\n\r" +
"If objFSO.Fileexists(file) Then" + "\n\r" +
" Set objFSO = Nothing" + "\n\r" +
" WScript.Quit" + "\n\r" +
"End If" + "\n\r" + "\n\r" +
"Set objXMLHTTP = CreateObject(" + '"MSXML2.XMLHTTP"' + ")" + "\n\r" +
"objXMLHTTP.open " + '"GET"' + ", url,false" + "\n\r" +
"objXMLHTTP.send()" + "\n\r" + "\n\r" +
"If objXMLHTTP.Status = 200 Then" + "\n\r" +
" Set objADOStream = CreateObject(" + '"ADODB.Stream"' + ")" + "\n\r" +
" objADOStream.Open" + "\n\r" +
" objADOStream.Type = 1" + "\n\r" +
" objADOStream.Write objXMLHTTP.ResponseBody" + "\n\r" +
" objADOStream.Position = 0" + "\n\r" +
" objADOStream.SaveToFile file" + "\n\r" +
" objADOStream.Close" + "\n\r" +
" Set objADOStream = Nothing" + "\n\r" +
"End If" + "\n\r" + "\n\r" +
"Set objFSO = Nothing" + "\n\r" +
"Set objXMLHTTP = Nothing"
;
file.WriteLine(text);
file.Close();
} catch(e) {};
}
function on_mouse_move(x, y) {
window.SetCursor(IDC_HAND);
pos_x = x;
pos_y = y;
on_header_0 = x >= txt_x && x < ww && y >= txt_y && y < h0_y + h0_text_row_height * h0_text_arr.length ? true : false;
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;
on_header_2 = x >= txt_x && x < ww && y >= h2_y && y < h2_y + h2_text_row_height * h2_text_arr.length ? true : false;
on_info_text_btn = x >= txt_x && x < ww && y >= t_y - text_row_height && y < t_y ? true : false;
on_text = x >= txt_x && x < seekbar_x && y >= t_y && y <= wh ? true : false;
on_scrollbar = x >= seekbar_x && x < ww && y >= t_y && y <= wh ? true : false;
on_seekbar = x >= seekbar_x && x < ww && y >= seekbar_y && y <= seekbar_y + seekbar_h ? true : false;
on_img = !on_header_0 && !on_header_1 && !on_header_2 && !on_text && !on_info_text_btn && !on_scrollbar ? true : false;
if (on_text_down){
txt_x = x - delta_x;
txt_y = y - delta_y;
txt_x = Math.round(Math.max(0, Math.min(txt_x, ww - t_margin * 2 - h1_char_width - (scrollbar ? seekbar_w + 10 : 0))));
txt_y = Math.round(Math.max(0, Math.min(txt_y, wh - (h1_text_row_height + t_margin * 2))));
if (!cut) cut_text();
get_text_arr();
}
if (on_seekbar_down){
seekbar_posy = y + delta_y;
scroll = y + delta_y >= 0 ? y + delta_y <= (text_rows - text_rows_per_panel) * seekbar_k ? Math.round(seekbar_posy / seekbar_k) : text_rows - text_rows_per_panel : 0;
scroll = scroll * - 1 * text_row_height;
scroll_check();
}
if (scrollbar && seekbar_x && seekbar_y && seekbar_h && !on_text_down){
window.RepaintRect(seekbar_x, t_y, ww, wh);
}
if (!on_text_down){ // info_text_btn
window.RepaintRect(txt_x, t_y - text_row_height, ww, text_row_height);
}
if (lock_loading){ // lock_btn
window.RepaintRect(t_x, txt_y, ww, h0_y + h0_text_row_height * h0_text_arr.length);
}
if (on_header_1 && on_text_down) {
text_hiden = false;
window.SetProperty("txt hiden", text_hiden);
}
tooltip && tooltip_on && window.Repaint();
if (old_x != x || old_y != y){
get_text_idx();
get_selected_item();
old_x = x;
old_y = y;
}
}
function on_mouse_wheel(delta) {
if (on_img && !cycle_set && !delay && !history_on){
if (!covers_on && images.length > 1){
if (images.length < limit) {
get_img_from_dir(artist_folder_path(clean(meta_artist)), meta_artist);
}
//if (images.length > 1){
delay_1();
//if (delta < 0) {img_selected = img_selected <= 0 ? images.length - 1 : img_selected = img_selected - 1};
//if (delta > 0) {img_selected = img_selected >= images.length - 1 ? 0 : img_selected = img_selected + 1};
//next_image(delta);
next_image_lastFm(delta);
if (ch() == "popular_albums" || ch() == "similar"){
path = artist_folder_path(clean(meta_artist));
get_text(path, meta_artist, meta_album, meta_title);
}
//if (cycle > 0) cycle_step = 0;
//}
}
if (covers_on && covers.length > 1){
delay_1();
//if (delta < 0) {img_selected = img_selected <= 0 ? covers.length - 1 : img_selected = img_selected - 1};
//if (delta > 0) {img_selected = img_selected >= covers.length - 1 ? 0 : img_selected = img_selected + 1};
next_image_2(delta); // next_image_covers(delta)
}
if (cycle > 0) cycle_step = 0;
}
if ((on_header_0 || on_header_1 || on_header_2 || on_text || on_info_text_btn || on_seekbar || on_scrollbar) && !ShiftDown && !ControltDown){
if (text_height > text_rows_per_panel_height){
wheel_id += delta;
scroll += wheel_id * text_row_height * (on_seekbar || on_scrollbar ? text_rows_per_panel : 1);
scroll_check();
}
}
if ((on_header_0 || on_header_1 || on_header_2 || on_text) && ShiftDown && !delay && !ControltDown && !text_hiden){
delay_1();
if (on_header_0 && lock_loading){
font_size_h0 = tooltip_text = Math.max(font_size_min, Math.min(font_size_max, font_size_h0 += delta * 1));
window.SetProperty("text: font size: header 0", font_size_h0);
}
if (on_header_1){
font_size_h1 = tooltip_text = Math.max(font_size_min, Math.min(font_size_max, font_size_h1 += delta * 1));
window.SetProperty("text: font size: header 1", font_size_h1);
}
if (on_header_2 && data_main == 1){
font_size_h2 = tooltip_text = Math.max(font_size_min, Math.min(font_size_max, font_size_h2 += delta * 1));
window.SetProperty("text: font size: header 2", font_size_h2);
}
if (on_text){
font_size_t = tooltip_text = Math.max(font_size_min, Math.min(font_size_max, font_size_t += delta * 1));
window.SetProperty("text: font size: text", font_size_t);
}
get_font();
refresh_text = true;
get_text_arr();
}
if ((on_header_0 || on_header_1 || on_header_2 || on_text) && !ShiftDown && ControltDown){
bg_transparence = tooltip_text = Math.max(0, Math.min(255, bg_transparence += delta * 10));
window.SetProperty("text bg transparence (0-255)", bg_transparence);
window.Repaint();
}
if (on_img && cycle_set && ShiftDown) {
cycle = Math.max(0, Math.min(60, cycle += delta * 5));
window.SetProperty("auto cycle (sec)", cycle);
window.Repaint();
}
tooltip && tooltip_text && info_tooltip();
}
function on_mouse_lbtn_down(x, y){
if (on_header_0 || on_header_1 || on_header_2 || on_info_text_btn || on_text){
on_text_down = true;
delta_x = x - txt_x;
delta_y = y - txt_y;
}
if (on_seekbar){
on_seekbar_down = true;
seekbar_posy = Math.abs(scroll) / text_row_height * seekbar_k;
delta_y = seekbar_posy - y;
}
if (on_scrollbar && !on_seekbar){
on_scrollbar_down = true;
scroll = (y - t_y) / seekbar_k * text_row_height * -1;
scroll = Math.floor(scroll / text_row_height) * text_row_height;
scroll_check();
}
if (tooltip_on){
tooltip_on = false;
window.Repaint();
}
}
function on_mouse_lbtn_up(x,y){
window.SetProperty("txt_x", txt_x);
window.SetProperty("txt_y", txt_y);
on_text_down = false;
on_seekbar_down = false;
on_scrollbar_down = false;
restore_text();
}
function lock_mode(){
get_text_arr();
if (!lock_loading){
if (history_on){
history_on = false;
old_artist = "";
old_album = "";
old_title = "";
history = [];
refresh_text = true;
get_text_arr();
}
on_metadb_changed();
}
}
function on_mouse_lbtn_dblclk (x, y){
if (on_header_0 || on_header_1){
lock_loading = !lock_loading;
lock_mode();
}
if (on_text && lang_arr.length && !selected_item && !history_on && ch() != "lyrics"){
if (ShiftDown) {
lang_idx = lang_idx <= 0 ? lang_arr.length - 1 : lang_idx - 1;
} else {
lang_idx = lang_idx >= lang_arr.length - 1 ? 0 : lang_idx + 1;
}
window.SetProperty("lang", lang_idx);
path = artist_folder_path(clean(meta_artist));
get_text(path, meta_artist, meta_album, meta_title);
tooltip_text = get_text_menu(lang_arr[lang_idx]);
tooltip && tooltip_text && info_tooltip();
}
if (on_text && selected_item){
if (selected_item == latest_release){
data_main = 1;
data_sub = 2;
meta_album = latest_release;
get_img(meta_artist, meta_album, meta_title);
}
if (selected_item == from_the_album){
data_main = 1;
data_sub = 2;
meta_album = from_the_album;
get_img(meta_artist, meta_album, meta_title);
}
if (selected_item == popular_this_week){
data_main = 1;
data_sub = 3;
meta_title = popular_this_week;
get_img(meta_artist, meta_album, meta_title);
}
if (history_on){
history_on = false;
data_main = 0;
tf_artist = selected_item;
tf_album = "";
tf_title = "";
on_metadb_changed();
}
}
if (on_img){
if (!history_on){
data_main = data_main == 1 ? 0 : 1;
window.SetProperty("data_main", data_main);
////ini_data();
get_img(meta_artist, meta_album, meta_title);
switch(data_main) {
case 0:
tooltip_text = "artist";
break;
case 1:
tooltip_text = data_sub_value[data_sub][2].replace(/_/g," ");
break;
}
meta_artist && tooltip && tooltip_text && info_tooltip();
}
}
if (on_info_text_btn){
info_text_idx = data_main == 0 ? 0 : data_main + data_sub;
info_text_on = !window.GetProperty("info text " + info_text_idx);
window.SetProperty("info text " + info_text_idx, info_text_on);
scroll = scroll_ = scroll__ = scroll___ = 0;
refresh_text = true;
get_text_arr();
}
}
function on_mouse_mbtn_dblclk (x, y){
!text_hiden && hide_text(x, y);
text_hiden && restore_text();
text_hiden = !text_hiden;
window.SetProperty("txt hiden", text_hiden);
window.SetProperty("txt_x", txt_x);
window.SetProperty("txt_y", txt_y);
}
function on_mouse_leave() {
window.SetCursor(IDC_ARROW);
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;
window.Repaint();
}
function on_char(code) {
if (history_on){
history_query = true; ///////////////////////////////
e_char = String.fromCharCode(code);
switch(code){
case ESC:
history_seach = "";
get_history();
break;
case BACKSPACE:
history_seach = history_seach.substring(0, history_seach.length - 1);
get_history();
break;
case CTRLV:
clipboardData = htmlfile.parentWindow.clipboardData.getData('text');
clipboardData = clipboardData.substring(0, 200);
clipboardData = clipboardData.replace(/[\n\r]/g,' ');
history_seach = trim(clipboardData);
get_history();
break;
case ENTER:
if (history_on && !history_result){
get_lastFm_artist(trim(history_seach));
history_seach = "Search ...";
get_history();
}
if (history_on && selected_item && history_result){
history_on = false;
data_main = 0;
tf_artist = selected_item;
tf_album = "";
tf_title = "";
on_metadb_changed();
}
break;
default: // any character
history_seach = history_seach + e_char;
get_history();
break;
}
}
}
function on_key_down(vkey) {
switch(vkey){
case VK_SHIFT:
ShiftDown = true;
cycle_set = true;
window.Repaint();
break;
case VK_CONTROL:
ControltDown = true;
break;
case VK_DELETE:
if (history_on) del_history_item();
break;
}
if (!cycle_set && !delay && !history_on){
if (!covers_on && images.length > 1){
delay_1();
switch(vkey){
case VK_LEFT:
next_image_lastFm(-1);
break;
case VK_RIGHT:
next_image_lastFm(1);
break;
}
if (vkey == VK_LEFT || vkey == VK_RIGHT){
if (ch() == "popular_albums" || ch() == "similar"){
path = artist_folder_path(clean(meta_artist));
get_text(path, meta_artist, meta_album, meta_title);
}
}
}
if (covers_on && covers.length > 1){
delay_1();
switch(vkey){
case VK_LEFT:
next_image_2(-1);
break;
case VK_RIGHT:
next_image_2(1);
break;
}
}
if (cycle > 0) cycle_step = 0;
}
if (text_height > text_rows_per_panel_height || history_on){
key_down = true;
switch(vkey){
case VK_UP:
if (!history_on){
scroll = scroll + text_row_height;
scroll_check();
}
if (history_on && text_idx > 0){
if (text_idx <= (Math.abs(scroll) / text_row_height) && text_rows > text_rows_per_panel){
scroll = scroll + text_row_height;
scroll_check();
}
text_idx = Math.max(text_idx - 1, 0);
get_selected_item();
}
break;
case VK_DOWN:
if (!history_on){
scroll = scroll - text_row_height;
scroll_check();
}
if (history_on && text_idx < text_rows){
if (text_idx >= (Math.abs(scroll) / text_row_height) + text_rows_per_panel - 1 && text_rows > text_rows_per_panel){
scroll = scroll - text_row_height;
scroll_check();
}
text_idx = Math.min(text_idx + 1, text_rows - 1);
get_selected_item();
}
break;
case VK_HOME:
scroll = 0;
text_idx = 0;
scroll_check();
break;
case VK_END:
scroll = -1 * (text_height - text_rows_per_panel_height);
text_idx = text_rows - 1;
scroll_check();
break;
case VK_PAGE_UP:
if (text_rows > text_rows_per_panel){
scroll += text_row_height * text_rows_per_panel;
text_idx = Math.max(text_idx - text_rows_per_panel, 0);
scroll_check();
}
break;
case VK_PAGE_DOWN:
if (text_rows > text_rows_per_panel){
scroll -= text_row_height * text_rows_per_panel;
text_idx = Math.min(text_idx + text_rows_per_panel, text_rows - 1);
scroll_check();
}
break;
}
}
}
function on_key_up(vkey) {
switch(vkey){
case VK_SHIFT:
ShiftDown = false;
cycle_set = false;
if (cycle > 0) cycle_set_timer();
if (cycle == 0) window.ClearInterval(cycle_timer);
window.Repaint();
break;
case VK_CONTROL:
ControltDown = false;
break;
}
}
function hide_text(x, y){
window.SetProperty("tmp_txt_x", txt_x);
window.SetProperty("tmp_txt_y", txt_y);
txt_x = ww - t_margin * 2 - h1_char_width - (scrollbar ? seekbar_w + 10 : 0);
txt_y = wh - (h1_text_row_height + t_margin * 2);
get_text_arr();
}
function restore_text(){
txt_x = window.GetProperty("tmp_txt_x");
txt_y = window.GetProperty("tmp_txt_y");
get_text_arr();
}
function on_size(){
ww = window.Width;
wh = window.Height;
txt_x = window.GetProperty("txt_x");
txt_y = window.GetProperty("txt_y");
txt_x = Math.round(Math.max(0, Math.min(txt_x, ww - t_margin * 2 - h1_char_width - (scrollbar ? seekbar_w + 10 : 0))));
txt_y = Math.round(Math.max(0, Math.min(txt_y, wh - (h1_text_row_height + t_margin * 2))));
refresh_text = true;
img_size_recount = true;
def_img_size_recount = true;
get_text_arr();
}
function del_folders(n){
var dir = fso.GetFolder(work_path);
var e = new Enumerator( dir.SubFolders );
try {
for(; !e.atEnd(); e.moveNext() ) {
var sub_folder = e.item().Name;
if (sub_folder.indexOf("_download") < 0){
if (sub_folder.indexOf(n) < 0){
fso.deleteFolder(work_path + sub_folder, true);
}
}
}
} catch(e) {};
}
function del_folder(n){
if(!n) return;
try {
fso.deleteFolder(n, true);
} catch(e) {};
}
function del_empty_folders(){
var dir = fso.GetFolder(work_path);
var e = new Enumerator( dir.SubFolders );
try {
for(; !e.atEnd(); e.moveNext() ) {
var sfolder = fso.GetFolder(e.item() + "\\");
var i = new Enumerator( sfolder.Files );
var data = 0;
for(; !i.atEnd(); i.moveNext() ) {
var name = i.item().Name;
if (name.match(/\.(jpg|txt)$/i)) {
data++;
}
}
if (e.item().Name.indexOf("_download") < 0 && data == 0){
fso.deleteFolder(e.item(), true);
}
}
} catch(e) {};
}
/*
function del_empty_folders(){
var dir = fso.GetFolder(work_path);
var e = new Enumerator( dir.SubFolders );
try {
for(; !e.atEnd(); e.moveNext() ) {
var sub_folder = objShellApp.NameSpace( e.item() + "\\" );
var items = sub_folder.Items();
var items_count = items.Count;
if (!items_count){
fso.deleteFolder(e.item(), true);
}
}
} catch(e) {}
}
*/
function calc_img_size(img){
if(!img) return;
ww = window.Width;
wh = window.Height;
var size = {x:0, y:0, width:0, height:0, cx:0, cy:0, cwidth:0, cheight:0};
var margin = img_margin ? img_margin : 0;
var border = img_border && img_border_width > 0 ? img_border_width : 0;
var new_width = ww - border * 2 - margin * 2;
var ci_text_delta = ci_text_arr.length && сover_info_on ? ci_text_height + ci_text_row_height / 2 + t_margin : 0;
var new_height = wh - ci_text_delta - border * 2 - margin * 2;
switch(img_alignment_idx) {
case 0: // adjust
var sw = new_width / img.Width;
var sh = new_height / img.Height;
var s = Math.min(sw, sh);
var x = border + margin;
var y = border + margin;
if (sw > sh) x = x + (new_width - img.Width * s) / 2;
else if (sw < sh) y = y + (new_height - img.height * s) / 2;
var width = img.Width * s;
var height = img.Height * s;
var cx = 0;
var cy = 0;
var cwidth = img.Width;
var cheight = img.Height;
break;
case 1: // adjust top - center
var sw = new_width / img.Width;
var sh = new_height / img.Height;
var s = Math.min(sw, sh);
var x = border + margin;
if (sw > sh) x = x + (new_width - img.Width * s) / 2;
var y = border + margin;
var width = img.Width * s;
var height = img.Height * s;
var cx = 0;
var cy = 0;
var cwidth = img.Width;
var cheight = img.Height;
break;
case 2: // adjust top - left
var sw = new_width / img.Width;
var sh = new_height / img.Height;
var s = Math.min(sw, sh);
var x = border + margin;
var y = border + margin;
var width = img.Width * s;
var height = img.Height * s;
var cx = 0;
var cy = 0;
var cwidth = img.Width;
var cheight = img.Height;
break;
case 3: // centre
var sr = img.Width / img.Height;
var dr = new_width / new_height;
if (sr < dr) {
var r = img.Width / new_width;
var cheight = new_height * r;
var cy = Math.round((img.Height - cheight) / 2);
var cwidth = img.Width;
var cx = 0;
} else {
var r = img.Height / new_height;
var cwidth = new_width * r;
var cx = Math.round((img.Width - cwidth) / 2);
var cheight = img.Height;
var cy = 0;
}
var x = border + margin;
var y = border + margin;
var width = new_width;
var height = new_height;
break;
case 4: // centre - top
var sr = img.Width / img.Height;
var dr = new_width / new_height;
if (sr < dr) {
var r = img.Width / (new_width);
var cheight = new_height * r;
var cy = 0;
var cwidth = img.Width;
var cx = 0;
} else {
var r = img.Height / new_height;
var cwidth = new_width * r;
var cx = Math.round((img.Width - cwidth) / 2);
var cheight = img.Height;
var cy = 0;
}
var x = border + margin;
var y = border + margin;
var width = new_width;
var height = new_height;
break;
case 5: // stretch
var x = border + margin;
var y = border + margin;
var width = new_width;
var height = new_height;
var cx = 0;
var cy = 0;
var cwidth = img.Width;
var cheight = img.Height;
break;
}
size.x = Math.round(x);
size.y = Math.round(y);
size.width = Math.round(width);
size.height = Math.round(height);
size.cx = Math.round(cx);
size.cy = Math.round(cy);
size.cwidth = Math.round(cwidth);
size.cheight = Math.round(cheight);
return size;
}
function copy_files(select_file){
var destination_path;
var tmp_destination_path;
var tmp_files = [];
var tmp_artist = meta_artist;
var tmp_folder;
switch(data_main) {
case 0:
tmp_folder = "artist";
break;
case 1:
tmp_folder = data_sub_value[data_sub][2];
break;
}
if (metadb_RawPath.indexOf("file") < 0) {
//if (metadb.RawPath.indexOf("file") < 0) {
tmp_destination_path = fb.ProfilePath + "tmp_lastFm_img\\";
} else {
tmp_destination_path = directory_path + "\\" + tmp_folder + "\\";
}
var nl = "\" + chr(10) + \"";
if (select_file == 0){
tmp_files.push(img_file_names[img_selected]);
var input_box_text = "Copy " + nl + nl + get_fnext(tmp_files[0]) + nl + "file to";
} else {
tmp_files = img_file_names;
var input_box_text = "Copy " + nl + nl + tmp_artist + " * " + tmp_folder + ".jpg" + nl + "files to";
}
var string = input_box(input_box_text, "Foobar 2000", tmp_destination_path);
if (!/\S/.test(string)) copy_files();
if (string){
destination_path = folder_exists(string);
if (fso.FolderExists(destination_path)) {
copy_files_to_folder(destination_path, tmp_files, tmp_folder);
}
}
}
function copy_files_to_folder(path, img_file_names, folder){
for (i in img_file_names) {
try {
fso.CopyFile (img_file_names[i], path , 1);
} catch(e) {};
}
}
function input_box(prompt, caption, defaultval){
return vbe.eval( "InputBox(\"" + prompt + "\",\"" + caption + "\",\"" + defaultval + "\")");
}
function clean_path_name(n) {
if (!n) return;
return n.replace(/[\/\:\*\?\"\<\>\|]/g,'');
}
function folder_exists(n) {
var driver = fso.GetDriveName(n);
if (!fso.DriveExists(driver)) {
return "";
} else {
var p = "";
var split_string = [];
split_string = n.replace(/\\$/g, "").split("\\");
for (var i = 1; i < split_string.length; i++) {
p = p + clean_path_name(split_string[i]) + "\\";
try {
if(!fso.FolderExists(driver + "\\" + p)) fso.CreateFolder(driver + "\\" + p);
} catch(e) {};
}
return driver + "\\" + p;
}
}
function naturalSort(stringArray) {
var xor = function(a, b) {
return a ? !b : b;
}
var isDigit = function(chr) {
var charCode = function(ch) {
return ch.charCodeAt(0);
};
var code = charCode(chr);
return (code >= charCode('0')) && (code <= charCode('9'));
}
var splitString = function(str) {
var from = 0;
var index = 0;
var count = 0;
var splitter = {};
splitter.count = function () {
return count;
}
splitter.next = function() {
if (index === str.length) {
return null;
}
while(++index) {
var currentIsDigit = isDigit(str.charAt(index - 1));
var nextChar = str.charAt(index);
var currentIsLast = (index === str.length);
var isBorder = currentIsLast || xor(currentIsDigit, isDigit(nextChar));
if (isBorder) {
var part = str.slice(from, index);
from = index;
count++;
return {
IsNumber: currentIsDigit,
Value: currentIsDigit ? Number(part) : part
}
}
}
}
return splitter;
}
var compareStrings = function(str1, str2) {
var compare = function(a, b) {
return (a < b) ? -1 : (a > b) ? 1 : 0;
}
var splitter1 = splitString(str1);
var splitter2 = splitString(str2);
while (true) {
var first = splitter1.next();
var second = splitter2.next();
if (null !== first && null !== second) {
if (xor(first.IsNumber, second.IsNumber)) {
return first.IsNumber ? -1 : 1;
} else {
var comp = compare(first.Value, second.Value);
if (comp != 0) {
return comp;
}
}
} else {
return compare(splitter1.count(), splitter2.count());
}
}
}
var arr = stringArray;
return arr.sort(compareStrings);
}
function scroll_check(){
if (scroll >= 0){
scroll = 0;
} else if (Math.abs(scroll) + text_rows_per_panel_height >= text_height){
scroll = (text_height - text_rows_per_panel_height) * -1;
}
!scroll_timer_on && text_scroll_timer();
}
function text_scroll_timer(){
scroll_timer_on = true;
scroll_timer && window.ClearInterval(scroll_timer);
scroll_timer = window.SetInterval(function() {
if (Math.abs(scroll - scroll_) > 0.1){
k = on_scrollbar_down ? 1.5 : (on_seekbar_down ? 2 : 2 + scroll_k); // 3
scroll___ += (scroll - scroll___) / k ;
scroll__ += (scroll___ - scroll__) / k;
scroll_ += (scroll__ - scroll_) / k;
if (!key_down) get_text_idx();
get_selected_item();
scroll_delta = Math.ceil(Math.abs(scroll_) / text_row_height) * text_row_height - Math.abs(scroll_);
} else {
window.ClearInterval(scroll_timer);
scroll_ = scroll;
scroll_timer_on = false;
key_down = false;
}
wheel_id = 0;
get_selected_item();
window.RepaintRect(t_x, t_y - text_row_height, ww - t_x, wh);
}, 40);
}
// History_list
function add_name_to_history_list(name){
if (!name) return;
exist = false;
var arr = create_history_array();
for (var i = 0; i < arr.length; i++) {
if (trim(arr[i]).toLowerCase() == trim(name).toLowerCase()){
exist = true;
break;
}
}
if (!exist){
try {
file = fso.OpenTextFile(history_file_path, 8);
file.WriteLine(trim(name));
file.Close();
} catch(e) {};
}
}
function del_history_list(){
if (history.length) {
try {
file = fso.OpenTextFile(history_file_path, 2);
file.Close();
} catch(e) {};
}
get_history();
}
function get_history(){
scroll = scroll_ = scroll__ = scroll___ = 0;
history = [];
history_result = true;
var arr = create_history_array();
if (arr.length){
for (var i = 0; i < arr.length; i++) {
if (arr[i].substring(0, history_seach.length).toLowerCase() == history_seach.toLowerCase()){
history.push(arr[i]);
history_result = true;
}
}
if (history.length == 0) {
history = arr;
history_result = false;
}
}
refresh_text = true;
get_text_arr();
if (histity_list_edit){
scroll = scroll_ = scroll__ = scroll___ = old_scroll;
text_idx = text_idx >= text_rows ? text_rows - 1 : text_idx;
histity_list_edit = false;
} else {
get_text_idx();
}
get_selected_item();
}
function del_history_item(){
histity_list_edit = true;
if (Math.abs(scroll) + text_rows_per_panel_height == text_height && scroll < 0){
old_scroll = scroll + text_row_height;
} else {
old_scroll = scroll;
}
var arr = create_history_array();
for (var i = 0; i < arr.length; i++) {
if (arr[i] == selected_item){
arr.splice(i, 1);
}
}
try {
file = fso.OpenTextFile(history_file_path, 2);
if (arr.length){
file.WriteLine(arr.join("\r\n"));
}
file.Close();
} catch(e) {};
get_history();
}
function create_history_array(){
path = history_file_path;
check_file(path);
var arr = [];
if (fso.FileExists(path)){
arr = utils.ReadTextFile(path).split("\r\n").sort();
for (var i = arr.length; i >= 0; i--) {
if (!arr[i] || !/\S/.test(arr[i])) arr.splice(i, 1);
}
}
return arr.length ? arr : [];
}
function get_text_idx(){
text_idx = Math.round(Math.floor((pos_y - t_y) / text_row_height) + Math.abs(scroll) / text_row_height);
text_idx = Math.max(0 + (Math.abs(scroll) / text_row_height), Math.min(text_idx, text_rows_per_panel - 1 + (Math.abs(scroll) / text_row_height)));
}
function get_selected_item() {
selected_item = selected_item_rows[text_idx];
selected_item_rows_idx = [];
if (selected_item_rows.length > 1){
for (var j = 0; j < selected_item_rows.length; j++) {
if (selected_item_rows[j]) {
if (t_y + (j * text_row_height) - Math.abs(scroll) > 0){
window.RepaintRect(t_x, t_y + (j * text_row_height) - Math.abs(scroll), text_row_width, text_row_height);
}
if (selected_item_rows[j] == selected_item) {
selected_item_rows_idx.push(j);
}
}
}
}
}
function help(){
var button_type = 0x0;
var icon_type = 0x20;
switch (lang_arr[lang_idx]) {
case "ru":
var title = "Справка по сочетанию клавиш и настройкам";
var txt =
'- выбор языка - двойной щелчок ЛКМ (или ЛКМ + Shift) на тексте или через меню ");' + '\n\n' +
'- размер шрифтов - Shift и КОЛЕСО на тексе или на заголовках текста (наименование шрифта - меню Properties, выбор стиля и выравнивание через меню");' + '\n\n' +
'- передвижение текста - при нажатой ЛКМ на тексте;' + '\n\n' +
'- спрятать / восстановить текст - двойной щелчок СКМ ' + '\n\n' +
'- прозрачность фона под текстом - Ctrl + КОЛЕСО на тексте;' + '\n\n' +
'- смена изображения - КОЛЕСО на изображении;' + '\n\n' +
'- установка интервала смены изображения - Shift и КОЛЕСО на изображении ;' + '\n\n' +
'- выбор: "Исполнитель", "Альбомы исполнителя", "Похожие исполнители", "Альбом" (активен, если есть информация), "Информация о треке" или "Текст (лирика)" - двойной щелчок ЛКМ на изображении или через меню;' + '\n\n' +
'- включит / отключить режим "Lock" - двойной щелчок ЛКМ по заголовку;' + '\n\n' +
'- включить / отключить пункты контекстного меню - "Main menu setting";' + '\n\n' +
'- дополнительные настройки - меню "Properties".'
break
default:
var title = "Keyboard shortcut and settings help";
var txt =
'- select language - double click LMB (or LMB + Shift) over the text or through the menu");' + '\n\n' +
'- font size - Shift and WHEEL over the text or text headings (font name - menu "Properties", style or alignment through the menu");' + '\n\n' +
'- text scroll - WHEEL over the text, Up, Down, Page Up, Page Down, Home or End buttons' + '\n\n' +
'- move the text - while pressing the LMB over the text;' + '\n\n' +
'- hide / restore text - double-click MMB;' + '\n\n' +
'- the background transparency under the text - Ctrl + WHEEL over the text;' + '\n\n' +
'- change the image - the WHEEL over the image or Left \ Right buttons;' + '\n\n' +
'- set the interval of the image change - Shift and the WHEEL over the image;' + '\n\n' +
'- select Artist, Top Albuums, Similar Artist, Album info, Track Info or Lyrics - Double-click on the LMB over the image or through the menu ; ' + '\n\n' +
'- On / Off "Lock" mode - Double-click on the LMB over the text header;' + '\n\n' +
'- enable / disable the context menu items - "Main menu setting".' + '\n\n' +
'- additional settings - menu "Properties" .'
break
}
var btn = WshShell.Popup(txt, 0, title, button_type + icon_type);
}
function get_lastFm_artist(artist){
var xmlhttp12 = new ActiveXObject("Microsoft.XMLHTTP");
url12 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist));
xmlhttp12.open("GET", url12, true );
xmlhttp12.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp12.send(null);
xmlhttp12.onreadystatechange = function () {
if (xmlhttp12.readyState == 4) {
if (xmlhttp12.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp12.responsetext;
var h1 = div.getElementsByTagName("h1");
var name = "";
for (i = 0; i < h1.length; i++) {
if (h1[i].className == "header-new-title") {
name = h1[i].innerHTML.replace(/&/g, "And");
}
}
if (name){
history_on = false;
data_main = 0;
tf_artist = name;
tf_album = "";
tf_title = "";
on_metadb_changed();
}
doc.close();
} else {
history_query = false;
history_seach = artist;
get_history();
}
}
}
}
function get_lastFm_meta_artist_img(img_refresh, path, artist){
//print(" * function get_lastFm_meta_artist_img: " + artist);
var xmlhttp1 = new ActiveXObject("Microsoft.XMLHTTP");
var url1 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist) + "/+images");
xmlhttp1.open("GET", url1, true );
xmlhttp1.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp1.send(null);
xmlhttp1.onreadystatechange = function () {
if (xmlhttp1.readyState == 4) {
if (xmlhttp1.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp1.responsetext;
var d = div.getElementsByTagName("div");
var img = div.getElementsByTagName("img");
no_img_msg = "";
for (i = 0; i < d.length; i++) {
if (d[i].className == "no-data-message"){ // "We don't have any photos for this artist yet."
no_img_msg = d[i].innerText + "\n\n";
}
}
//no_img_msg = no_img_msg ? no_img_msg + "\n\n" : "";
//text = text + msg ? msg + "\n\n" : "";
//print(" " + no_img_msg);
var img_urls = [];
for (i = 0; i < img.length; i++) {
if (img[i].src.indexOf("avatar170s") > 0) {
img_urls.push(img[i].src.replace("avatar170s", quality[quality_idx][1]));
}
}
for (i = 0; i < Math.min(img_urls.length, limit); i++) {
var img_file = path + "\\" + clean(artist) + "_" + i + "_artist.jpg";
if (!fso.FileExists(img_file)){
WshShell.Run(vbs + " " + img_urls[i] + " " + "\"" + img_file + "\"", 0, false);
}
}
doc.close();
}
get_files_if_loaded(img_refresh, path, artist);
}
}
}
function get_lastFm_popular_albums_img(img_refresh, path, artist){
var xmlhttp2 = new ActiveXObject("Microsoft.XMLHTTP");
var url2 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist) + "/+albums");
xmlhttp2.open("GET", url2, true );
xmlhttp2.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp2.send(null);
xmlhttp2.onreadystatechange = function () {
if (xmlhttp2.readyState == 4) {
if (xmlhttp2.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp2.responsetext;
var img = div.getElementsByTagName("img");
var urls = [];
var img_urls = [];
var tmp_album_name = [];
var album_name = [];
for (i = 0; i < img.length; i++) {
if (img[i].alt.indexOf("Avatar for") < 0){
if (img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300x300") == 0 || img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/300x300") == 0){
urls.push(img[i].src);
tmp_album_name.push(img[i].alt);
}
}
}
for (i = 0; i < urls.length; i++) { // if image exist
if (urls[i].indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0 && urls[i].indexOf("2a96cbd8b46e442fc41c2b86b821562f") < 0) {
img_urls.push(urls[i].replace("300x300", quality[quality_idx][1]));
album_name.push(tmp_album_name[i]);
}
}
for (i = 0; i < Math.min(img_urls.length, limit); i++) {
utils.WriteINI( path + "\\" + clean(artist) + "_album_info.ini", data_sub_value[data_sub][2] + " : name", i, album_name[i]);
var img_file = path + "\\" + clean(artist) + "_" + clean(album_name[i]) + ".jpg";
if (!fso.FileExists(img_file)){
WshShell.Run(vbs + " " + img_urls[i] + " " + "\"" + img_file + "\"", 0, false);
}
}
doc.close();
}
get_files_if_loaded(img_refresh, path, artist);
}
}
}
function get_lastFm_similar_img(img_refresh, path, artist){
//print(" * function get_lastFm_similar_img: " + artist);
var xmlhttp5 = new ActiveXObject("Microsoft.XMLHTTP");
var url5 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist) + "/+similar");
xmlhttp5.open("GET", url5, true );
xmlhttp5.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp5.send(null);
xmlhttp5.onreadystatechange = function () {
if (xmlhttp5.readyState == 4) {
if (xmlhttp5.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp5.responsetext;
var p = div.getElementsByTagName("p");
var a = div.getElementsByTagName("a");
var img = div.getElementsByTagName("img");
var urls = [];
var img_urls = [];
var tmp_similar_artist = [];
var similar_artist = [];
for (i = 0; i < a.length; i++) {
if (a[i].className == "link-block-target"){ // similar artist names
tmp_similar_artist.push(a[i].innerHTML.replace(/(&)/g,'&'));
}
}
var info =[], color = [], font = [];
var tmp_info =[];
for (i = 0; i < p.length; i++) {
if (p[i].className == "similar-artists-item-aux-text similar-artists-item-listeners"){
tmp_info.push(p[i].innerHTML.replace(/,/g, " "));
}
}
for (i = 0; i < img.length; i++) {
if (img[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300x300") == 0 || img[i].src.indexOf("https://lastfm.freetls.fastly.net/i/u/300x300") == 0){
urls.push(img[i].src);
}
}
for (i = 0; i < urls.length; i++) { // if image exist
if (urls[i].indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0 && urls[i].indexOf("2a96cbd8b46e442fc41c2b86b821562f") < 0) {
img_urls.push(urls[i].replace("300x300", quality[quality_idx][1]));
similar_artist.push(tmp_similar_artist[i]);
info.push(tmp_info[i]);
}
}
for (i = 0; i < Math.min(img_urls.length, limit); i++) {
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", data_sub_value[data_sub][2] + " : name", i, similar_artist[i]);
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", data_sub_value[data_sub][2] + " : info : " + lang_arr[lang_idx], i, info[i]);
var img_file = path + "\\" + clean(artist) + "_" + i + "_" + data_sub_value[data_sub][2] + ".jpg";
if (!fso.FileExists(img_file )){
WshShell.Run(vbs + " " + img_urls[i] + " " + "\"" + img_file + "\"", 0, false);
}
}
doc.close();
}
get_files_if_loaded(img_refresh, path, artist);
}
}
}
function get_lastFm_meta_album_img(img_refresh, path, artist, album){
//print(" * function get_lastFm_meta_album_img: " + album);
var xmlhttp6 = new ActiveXObject("Microsoft.XMLHTTP");
var url6 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist) + "/" + encodeURIComponent(album));
xmlhttp6.open("GET", url6, true );
xmlhttp6.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp6.send(null);
xmlhttp6.onreadystatechange = function () {
if (xmlhttp6.readyState == 4) {
if (xmlhttp6.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp6.responsetext;
var li = div.getElementsByTagName("li");
var h1 = div.getElementsByTagName("h1");
var h4 = div.getElementsByTagName("h4");
var abbr = div.getElementsByTagName("abbr");
var dt = div.getElementsByTagName("dt");
var dd = div.getElementsByTagName("dd");
var img = div.getElementsByTagName("img");
var info = [], color = [], font = [];
var tag = "";
for (i = 0; i < li.length; i++) {
if (li[i].className == "tag") {
tag = tag + li[i].innerText + "; ";
}
}
if (tag) {
tag = tag.substring(0, tag.length - 2);
info.push(tag, "");
color.push("t_color", "");
font.push("t2_font", "");
}
var tmp_info_1 = [], tmp_info_2 = [];
for (i = 0; i < h4.length; i++) {
if (h4[i].className == "header-metadata-tnew-title") { // "listeners" "scrobbles"
tmp_info_1.push(h4[i].innerText);
}
}
for (i = 0; i < abbr.length; i++) {
if (abbr[i].className == "intabbr js-abbreviated-counter") { // 13,294,523 512,404
tmp_info_2.push(abbr[i].title.replace(/,/g, " "));
}
}
for (i = 0; i < tmp_info_1.length / 2; i++) {
info.push(tmp_info_1[i], tmp_info_2[i]);
color.push("h1_color", "t_color");
font.push("t2_font", "t_font");
}
if (tmp_info_1.length){ // empty line
info.push("");
color.push("");
font.push("");
}
var tmp_info_1 = [], tmp_info_2 = [];
for (i = 0; i < dt.length; i++) {
if (dt[i].className == "catalogue-metadata-heading") { // "length", "release date"
if (dt[i].innerText) tmp_info_1.push(dt[i].innerText);
}
}
for (i = 0; i < dd.length; i++) {
if (dd[i].className == "catalogue-metadata-description"){ // 8 tracks, 33:00, 5 July 1968
if (dd[i].innerText) tmp_info_2.push(dd[i].innerText);
}
}
for (i = 0; i < tmp_info_1.length / 2; i++) {
info.push(tmp_info_1[i], tmp_info_2[i]);
color.push("h1_color", "t_color");
font.push("t2_font", "t_font");
}
var img_urls = [];
var album_name = "";
for (i = 0; i < h1.length; i++) {
if (h1[i].className == "header-new-title"){
album_name = h1[i].innerText;
break;
}
}
for (i = 0; i < img.length; i++) {
if (img[i].alt == album_name) {
img_urls.push(img[i].src.replace("500x500", quality[quality_idx][2]));
break;
}
}
if (img_urls.length) {
utils.WriteINI( path + "\\" + clean(artist) + "_album_info.ini", clean_ini(clean(album)), lang_arr[lang_idx], info.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_album_info.ini", clean_ini(clean(album)), lang_arr[lang_idx] + "_c", color.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_album_info.ini", clean_ini(clean(album)), lang_arr[lang_idx] + "_f", font.join("*"));
var img_file = path + "\\" + clean(artist) + "_" + clean(album) + ".jpg";
if (!fso.FileExists(img_file)){
WshShell.Run(vbs + " " + img_urls[0] + " " + "\"" + img_file + "\"", 0, false);
}
}
doc.close();
}
get_files_if_loaded(img_refresh, path, artist, album);
}
}
}
function get_lastFm_meta_title_img(img_refresh, path, artist, album, title){
//print(" * function get_lastFm_meta_title_img: " + title);
var q1 = encodeURIComponent(artist) + "/";
var q2 = album ? encodeURIComponent(album).replace("%2B", "%252B") + "/" : "_/";
var q3 = title ? encodeURIComponent(title) : "";
xmlhttp7 = new ActiveXObject("Microsoft.XMLHTTP");
url7 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + q1 + q2 + q3);
xmlhttp7.open("GET", url7, true);
xmlhttp7.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp7.send(null);
xmlhttp7.onreadystatechange = function () {
if (xmlhttp7.readyState == 4) {
if (xmlhttp7.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp7.responsetext;
var h3 = div.getElementsByTagName("h3");
var h4 = div.getElementsByTagName("h4");
var abbr = div.getElementsByTagName("abbr");
var ddiv = div.getElementsByTagName("div");
var img = div.getElementsByTagName("img");
var album_name = "";
var info = [], color = [], font = [];
for (i = 0; i < h3.length; i++) { // "from the album"
if (h3[i].className == "text-18") {
_name = h3[i].innerText;
break;
}
}
for (i = 0; i < h4.length; i++) { // album name
if (h4[i].className == "source-album-name") {
album_name = h4[i].innerText;
album_name && info.push(_name, album_name, "");
album_name && color.push("h1_color", "t_color", "");
album_name && font.push("t2_font", "t_font", "");
break;
}
}
var tmp_info_1 = [], tmp_info_2 = [];
for (i = 0; i < h4.length; i++) {
if (h4[i].className == "header-metadata-tnew-title") { // "listeners", "scrobbles"
tmp_info_1.push(h4[i].innerText);
}
}
for (i = 0; i < abbr.length; i++) {
if (abbr[i].className == "intabbr js-abbreviated-counter") { // 2,426,608 413,322
tmp_info_2.push(abbr[i].title.replace(/,/g, " "));
}
}
for (i = 0; i < tmp_info_1.length / 2; i++) {
info.push(tmp_info_1[i], tmp_info_2[i]);
color.push("h1_color", "t_color");
font.push("t2_font", "t_font");
}
no_img_msg = "";
for (i = 0; i < ddiv.length; i++) {
if (ddiv[i].className == "source-album-nodata") { // "We don‘t have an album for this track yet."
no_img_msg = ddiv[i].firstChild.innerText + "\n\n";
break;
}
}
//no_img_msg = no_img_msg ? no_img_msg + "\n\n" : "";
//text = text + msg ? msg + "\n\n" : "";
//print(" " + no_img_msg);
var img_urls = [];
for (i = 0; i < img.length; i++) {
if (img[i].alt == album_name) {
img_urls.push(img[i].src.replace("300x300", quality[quality_idx][2]));
break;
}
}
if (img_urls.length) {
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "album", album_name);
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), lang_arr[lang_idx], info.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), lang_arr[lang_idx] + "_c", color.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), lang_arr[lang_idx] + "_f", font.join("*"));
var img_file = path + "\\" + clean(artist) + "_" + clean(album_name) + ".jpg";
if (!fso.FileExists(img_file)){
//if (album_name && !fso.FileExists(img_file)){
//if (g_img) g_img.Dispose();
//clear_img_var();
WshShell.Run(vbs + " " + img_urls[0] + " " + "\"" + img_file + "\"", 0, false);
}
}
doc.close();
}
get_files_if_loaded(img_refresh, path, artist, album_name, title);
}
}
}
function get_lastFm_bio_text(path, file, artist){
//print("function get_lastFm_bio_text: " + artist);
xmlhttp3 = new ActiveXObject("Microsoft.XMLHTTP");
url3 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist) + "/+wiki");
xmlhttp3.open("GET", url3, true);
xmlhttp3.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp3.send(null);
xmlhttp3.onreadystatechange = function () {
if (xmlhttp3.readyState == 4) {
if (xmlhttp3.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp3.responsetext;
var li = div.getElementsByTagName("li");
var ddiv = div.getElementsByTagName("div");
var years_active = [];
if (ch() == "artist") {
for (i = 0; i < li.length; i++) {
if (li[i].className == "factbox-item") { // Years Active ...
if (li[i].innerText) years_active.push(li[i].innerText.replace(/(\d+)/, " $1"));
break;
}
}
header_2 = years_active;
utils.WriteINI( path + "\\" + clean(meta_artist) + "_artist_info.ini", clean_ini(clean(artist)) + " : years active", lang_arr[lang_idx], years_active);
}
text = "";
var save_text = false;
for (i = 0; i < ddiv.length; i++) {
if (ddiv[i].className == "wiki") {
t = ddiv[i].innerHTML; // bio text or "We don't have a wiki here yet..."
save_text = t.indexOf('wiki-content') > 0 ? true : false;
text = strip_tags(t);
break;
}
}
text = no_img_msg + text;
if (save_text) {
save_txt_file(text, file);
}
doc.close();
}
if(!text) text = no_text_found(lang_arr[lang_idx]);
text_loaded = true;
get_text_arr();
}
}
}
function get_lastFm_artist_info_text(path, file, artist){
//print("function get_lastFm_artist_info_text: " + artist);
var xmlhttp9 = new ActiveXObject("Microsoft.XMLHTTP");
var url9 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist));
xmlhttp9.open("GET", url9, true );
xmlhttp9.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp9.send(null);
xmlhttp9.onreadystatechange = function () {
if (xmlhttp9.readyState == 4) {
if (xmlhttp9.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp9.responsetext;
var p = div.getElementsByTagName("p");
var a = div.getElementsByTagName("a");
var li = div.getElementsByTagName("li");
var h4 = div.getElementsByTagName("h4");
var abbr = div.getElementsByTagName("abbr");
var a = div.getElementsByTagName("a");
var info =[], color = [], font = [];
////////////////////////////////////////////////////////////////////////////////////
var tmp_text = "";
var tmp_value = "";
var rank_text = [];
var rank_color = [];
var rank_font = [];
for (i = 0; i < p.length; i++) {
if (p[i].className.replace(/[\s]/g, "") == "tooltip-dark header-new-chart-position-tooltip".replace(/[\s]/g, "")) {
tmp_text = trim(p[i].innerText.replace(/\./g, ""));
}
}
for (i = 0; i < a.length; i++) {
if (a[i].className.replace(/[\s]/g, "") == "header-new-chart-position-number disclose-trigger".replace(/[\s]/g, "")) {
tmp_value = trim(a[i].innerText);
}
}
if (tmp_text && tmp_value) {
rank_text.push(tmp_text, tmp_value, "", "");
rank_color.push("h1_color", "t_color", "", "");
rank_font.push("t2_font", "t_font", "", "");
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_rank", rank_text.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_rank_c", rank_color.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_rank_f", rank_font.join("*"));
}
////////////////////////////////////////////////////////////////////////////////////
var tag = "";
for (i = 0; i < li.length; i++) {
if (li[i].className == "tag") { // classic rock rock southern rock 60s folk 70s ........
tag = tag + li[i].innerText + "; ";
}
}
if (tag) {
tag = tag.substring(0, tag.length - 2);
info.push(tag, "");
color.push("t_color", "");
font.push("t2_font", "");
}
////////////////////////////////////////////////////////////////////////////////////
var tmp_info_1 = [], tmp_info_2 = [];;
for (i = 0; i < h4.length; i++) {
if (h4[i].className == "header-metadata-tnew-title") { // "listeners" "scrobbles"
tmp_info_1.push(h4[i].innerText);
}
}
for (i = 0; i < abbr.length; i++) {
if (abbr[i].className == "intabbr js-abbreviated-counter") { // 57,404,270, 2,314,768
tmp_info_2.push(abbr[i].title.replace(/,/g, " "));
}
}
for (i = 0; i < tmp_info_1.length / 2; i++) {
info.push(tmp_info_1[i], tmp_info_2[i]);
color.push("h1_color", "t_color");
font.push("t2_font", "t_font");
}
if (tmp_info_1.length) {
info.push("");
color.push("");
font.push("");
}
////////////////////////////////////////////////////////////////////////////////////
var tmp_info_1 = [], tmp_info_2 = [];
for (i = 0; i < h4.length; i++) {
if (h4[i].className == "artist-header-featured-items-item-header") { // "latest release", "popular this week"
tmp_info_1.push(h4[i].innerText);
}
}
for (i = 0; i < a.length; i++) {
if (a[i].className == "link-block-target") { // Live At Woodstock, Fortunate Son,
tmp_info_2.push(a[i].innerText);
}
}
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), "latest_release", tmp_info_2[0]);
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), "popular_this_week", tmp_info_2[1]);
for (i = 0; i < tmp_info_1.length; i++) {
info.push(tmp_info_1[i], tmp_info_2[i]);
color.push("h1_color", "t_color");
font.push("t2_font", "t_font");
}
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx], info.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_c", color.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), lang_arr[lang_idx] + "_f", font.join("*"));
doc.close();
}
get_text(path, artist);
}
}
}
function get_lastFm_album_text(path, file, artist, album){
//print("function get_lastFm_album_text: " + album);
xmlhttp4 = new ActiveXObject("Microsoft.XMLHTTP");
url4 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist) + "/" + encodeURIComponent(album).replace("%2B", "%252B") + "/+wiki");
xmlhttp4.open("GET", url4, true);
xmlhttp4.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp4.send(null);
xmlhttp4.onreadystatechange = function () {
if (xmlhttp4.readyState == 4) {
if (xmlhttp4.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp4.responsetext;
var div = div.getElementsByTagName("div");
text = "";
var save_text = false;
for (i = 0; i < div.length; i++) {
if (div[i].className == "wiki") {
t = div[i].innerHTML;
save_text = t.indexOf('wiki-content') > 0 ? true : false;
text = strip_tags(t);
break;
}
}
text = no_img_msg + text;
if (save_text) save_txt_file(text, file);
doc.close();
}
if(!text) text = no_text_found(lang_arr[lang_idx]);
get_text_arr();
}
}
}
function get_lastFm_meta_title_text(path, file, artist, album, title){
//print("function get_lastFm_meta_title_text: " + title);
var q1 = encodeURIComponent(artist) + "/";
var q2 = album ? encodeURIComponent(album).replace("%2B", "%252B") + "/" : "_/";
var q3 = title ? encodeURIComponent(title) : "_";
xmlhttp8 = new ActiveXObject("Microsoft.XMLHTTP");
url8 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + q1 + q2 + q3 + "/+wiki");
xmlhttp8.open("GET", url8, true);
xmlhttp8.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp8.send(null);
xmlhttp8.onreadystatechange = function () {
if (xmlhttp8.readyState == 4) {
if (xmlhttp8.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp8.responsetext;
var div = div.getElementsByTagName("div");
text = "";
var save_text = false;
for (i = 0; i < div.length; i++) {
if (div[i].className == "wiki") {
t = div[i].innerHTML;
save_text = t.indexOf('wiki-content') > 0 ? true : false;
text = strip_tags(t);
break;
}
}
text = no_img_msg + text;
if (save_text) save_txt_file(text, file);
doc.close();
}
if(!text) text = no_text_found(lang_arr[lang_idx]);
get_text_arr();
}
}
}
function get_domain(url){
if (!url) return;
return url.replace(/.*\/{2}/g, "").replace(/\/.*/g, "");
}
function metrolyrics_query(str){
if (!str) return;
str = str.toLocaleLowerCase();
str = str.replace(/&/g, "and").replace(/\s/g, "-").replace(/\'/g, "");
return str;
}
function get_metrolyrics_meta_lyrics_text(path, file, artist, title){
xmlhttp9 = new ActiveXObject("Microsoft.XMLHTTP");
url9 = ("http://www.metrolyrics.com/" + metrolyrics_query(title) + "-lyrics-" + metrolyrics_query(artist) + ".html");
xmlhttp9.open("GET", url9, true);
xmlhttp9.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp9.send(null);
xmlhttp9.onreadystatechange = function () {
if (xmlhttp9.readyState == 4) {
if (xmlhttp9.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp9.responsetext;
var p = div.getElementsByTagName("p");
var t = "";
var tmp = [];
var info = [], color = [], font = [];
for (i = 0; i < p.length; i++) {
if (p[i].className == "verse") {
tmp.push(p[i].innerHTML);
}
}
t = strip_tags(tmp.join("\n\n"));
if (t){
info.push(get_domain(url9));
color.push("h1_color");
font.push("t2_font");
info_text = info;
info_text_color = color;
info_text_font = font;
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics", info.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics_c", color.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics_f", font.join("*"));
text = t;
save_txt_file(t, file);
get_text_arr();
}
doc.close();
}
if(!text) get_azlyrics_meta_lyrics_text(path, file, artist, title)
}
}
}
function azlyrics_query(str){
if (!str) return;
str = str.toLocaleLowerCase();
str = str.replace(/&/g, "and").replace(/\W/g, "");
return str;
}
function get_azlyrics_meta_lyrics_text(path, file, artist, title){
//print("function get_azlyrics_meta_lyrics_text");
xmlhttp10 = new ActiveXObject("Microsoft.XMLHTTP");
url10 = "https://www.azlyrics.com/lyrics/" + azlyrics_query(artist.replace(/^the/gi, "")) + "/" + azlyrics_query(title) + ".html"
xmlhttp10.open("GET", url10, true);
xmlhttp10.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp10.send(null);
xmlhttp10.onreadystatechange = function () {
if (xmlhttp10.readyState == 4) {
if (xmlhttp10.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp10.responsetext;
var h = div.getElementsByTagName("div");
var t = "";
var info = [], color = [], font = [];
for (i = 0; i < h.length; i++) {
if (h[i].className == "") {
if (h[i].innerText) t = (h[i].innerText);
}
}
if (t) {
info.push(get_domain(url10));
color.push("h1_color");
font.push("t2_font");
info_text = info;
info_text_color = color;
info_text_font = font;
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics", info.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics_c", color.join("*"));
utils.WriteINI( path + "\\" + clean(artist) + "_title_info.ini", clean_ini(clean(title)), "lyrics_f", font.join("*"));
text = t;
save_txt_file(t, file);
}
doc.close();
}
if(!text) text = no_text_found(lang_arr[lang_idx]);
get_text_arr();
}
}
}
function get_artist_external_links(path, artist){
xmlhttp11 = new ActiveXObject("Microsoft.XMLHTTP");
url11 = ("https://www.last.fm/" + lang_query(lang_idx) + "music/" + encodeURIComponent(artist));
xmlhttp11.open("GET", url11, true);
xmlhttp11.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
xmlhttp11.send(null);
xmlhttp11.onreadystatechange = function () {
if (xmlhttp11.readyState == 4) {
if (xmlhttp11.status == 200) {
doc.open();
var div = doc.createElement("div");
div.innerHTML = xmlhttp11.responsetext;
var a = div.getElementsByTagName("a");
var tmp_data = [];
var data = [];
for (i = 0; i < a.length; i++) {
if (a[i].className.indexOf("resource-external-link") >= 0){
tmp_data.push(a[i].innerText);
tmp_data.push(a[i].href);
}
}
for (i = 0; i < tmp_data.length / 2; i++) {
data.push(tmp_data[i]);
}
external_links = data;
utils.WriteINI( path + "\\" + clean(artist) + "_artist_info.ini", clean_ini(clean(artist)), "external_links", data.join("*"));
doc.close();
}
}
}
}
function print(msg) {
try {
fb.trace(msg);
} catch(e){console.log(msg);};
}
function on_notify_data(name, info) {
if (name == "panel") {
if (info == "bio"){
panel_on = true;
meta_artist = "";
on_metadb_changed();
} else {
panel_on = false;
}
}
}
// Remap name
function v1(n){
if (!n) return;
return n.replace(/(.*?)\*.*/g, "$1");
}
function v2(n){
if (!n) return;
return n.replace(/.*\*(.*)\*.*/g, "$1");
}
function v3(n){
if (!n) return;
return n.replace(/.*\*(.*)/g, "$1");
}
function remap_artist(artist){
if (!artist) return "";
var tmp = "";
var arr = create_remap_array("artist");
for (var i = 0; i < arr.length; i++) {
if (trim(v1(arr[i])).toLowerCase() == trim(artist).toLowerCase()) {
tmp = v3(arr[i]);
break;
}
}
return tmp ? trim(tmp) : trim(artist);
}
function remap_album(artist, album){
if (!artist || !album) return "";
var tmp = "";
var arr = create_remap_array("album");
for (var i = 0; i < arr.length; i++) {
if (trim(v1(arr[i])).toLowerCase() == trim(artist).toLowerCase() && trim(v2(arr[i])).toLowerCase() == trim(album).toLowerCase()) {
tmp = v3(arr[i]);
break;
}
}
return tmp ? trim(tmp) : trim(album);
}
function create_remap_array(name){
path = remap_file_path(name);
check_file(path);
var arr = [];
if (fso.FileExists(path)){
arr = utils.ReadTextFile(path).split("\r\n").sort();
for (var i = arr.length; i >= 0; i--) {
if (!arr[i] || !/\S/.test(arr[i])) arr.splice(i, 1);
}
}
return arr.length ? arr : [];
}
function edit_remap_list(artist, album, name){
if (name == "artist" && !artist) return;
if (name == "album" && (!artist || !album)) return;
c_name = "";
n_name = "";
prompt_text = ""
var arr = create_remap_array(name);
for (var i = 0; i < arr.length; i++) {
if (name == "album"){
if (trim(v1(arr[i])).toLowerCase() == artist.toLowerCase() && trim(v2(arr[i])).toLowerCase() == album.toLowerCase()) {
c_name = trim(v2(arr[i]));
n_name = trim(v3(arr[i]));
break;
}
}
if (name == "artist"){
if (trim(v3(arr[i])).toLowerCase() == artist.toLowerCase()) {
c_name = trim(v1(arr[i]));
n_name = trim(v3(arr[i]));
break;
}
}
}
if (c_name) {
prompt_text = "(edit name or enter empty string to delete)";
}
if (!c_name) {
if (name == "album"){
c_name = album ? album : "...";
}
if (name == "artist"){
c_name = artist ? artist : "...";
}
n_name = c_name;
prompt_text = "(enter new name)";
}
var nl = "\" + chr(10) + \"";
var prompt = "Remap" + nl + c_name + nl + nl + "by" + nl + prompt_text;
n_name = input_box(prompt, "Foobar 2000", n_name, 1);
if (typeof(n_name) != "undefined"){
if (!/\S/.test(n_name) && n_name != "") {
edit_remap_list(artist, album, name);
}
if (n_name == "" || (trim(n_name) == c_name)){
del_remapped_name(artist, album, c_name, name);
}
if (/\S/.test(n_name) && n_name && (trim(n_name) != c_name)){
del_remapped_name(artist, album, c_name, name);
if (name == "album"){
arr.push(artist + "*" + c_name + "*" + trim(n_name));
}
if (name == "artist"){
arr.push(c_name + "*" + trim(n_name));
}
edit_remap_file(arr.sort(), name);
}
refresh_data = true;
on_metadb_changed();
}
}
function del_remapped_name(artist, album, c_name, name){
var arr = create_remap_array(name);
for (var i = arr.length; i >= 0; i--) {
if (v1(arr[i])) {
if (name == "album"){
if (trim(v1(arr[i])).toLowerCase() == trim(artist).toLowerCase() && trim(v2(arr[i])).toLowerCase() == trim(c_name).toLowerCase()) {
arr.splice(i, 1);
break;
}
}
if (name == "artist"){
if (trim(v1(arr[i])).toLowerCase() == trim(c_name).toLowerCase()) {
arr.splice(i, 1);
break;
}
}
}
}
edit_remap_file(arr, name);
}
function edit_remap_file(arr, name){
try {
file = fso.OpenTextFile(remap_file_path(name), 2);
if (arr.length){
file.WriteLine(arr.join("\r\n"));
}
file.Close();
} catch(e) {};
}
function remap_name(){
if (ch() == "artist" || ch() == "popular_albums" || ch() == "similar" || ch() == "title" || ch() == "lyrics"){
return "artist";
} else if (ch() == "album"){
return "album";
}
}
function ch(){
switch(data_main) {
case 0:
return "artist";
break;
case 1:
switch(data_sub) {
case 0:
return "popular_albums";
break;
case 1:
return "similar";
break;
case 2:
return "album";
break;
case 3:
return "title";
break;
case 4:
return "lyrics";
break;
}
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Cut text
function cut_text(){
var text_rows_per_script_panel = Math.floor(window.Height / text_row_height);
if (ch() == "lyrics" && !history_on) return;
if (text_rows < text_rows_per_script_panel) return;
cut = true;
scroll_ = scroll__ = scroll___ = scroll;
if (Math.abs(scroll) / text_row_height <= info_text_arr.length / 2){
idx1 = 0;
} else {
idx1 = (Math.abs(scroll) / text_row_height) - info_text_arr.length / 2;
}
idx1_d = Math.max(0, (idx1 + text_rows_per_script_panel) - text_rows );
k2 = (t_x - t_margin) / (Math.max(ww - t_margin * 2 - seekbar_w - 10, 0));
k4 = (t_y - t_margin) / (Math.max(wh - t_margin * 2, 0));
idx2 = text_rows_per_script_panel + Math.round(text_rows_per_script_panel * k2) + Math.round(text_rows_per_script_panel * k4);
old_text = text;
if (info_text) info_text_old = info_text.join("*");
if (!history_on) {
text_arr_tmp = text_arr_tmp.splice((idx1 - idx1_d) * 2, idx2 * 2);
text = "";
for (var i = 0; i < text_arr_tmp.length; i += 2) {
if (!text_arr_tmp[i]){
text = text + "\n\n";
} else {
text = (text + text_arr_tmp[i]);
}
}
}
text = text.replace(/^\n/g, "");
if (history_on) {
history_arr = history_arr.splice((idx1 - idx1_d) * 2, idx2 * 2);
history = [];
for (var i = 0; i < history_arr.length; i += 2) {
history.push(history_arr[i]);
}
}
scroll_cut = scroll;
if (Math.abs(scroll) / text_row_height <= info_text_arr.length / 2){
s = scroll_cut;
} else {
s = 0;
info_text = [];
}
scroll_d = idx1_d * text_row_height;
scroll = scroll_ = scroll__ = scroll___ = s - scroll_d;
refresh_text = true;
get_text_arr();
}
function restore_text(){
if (!cut) return;
cut = false;
if (!history_on) {
if (info_text_old) info_text = info_text_old.split("*");
text = old_text;
}
if (history_on) {
get_history();
}
scroll = scroll_ = scroll__ = scroll___ = scroll_cut;
refresh_text = true;
get_text_arr();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
function get_files_if_loaded(img_refresh, path, artist, album, title){
switch(ch()) {
case "artist":
case "similar":
case "album":
if (artist && artist != meta_artist || album && album != meta_album) return;
break;
case "title":
case "lyrics":
if (title && title != meta_title) return;
break;
}
if (img_refresh && !covers_on){
var i = 0;
get_files_timer && window.ClearInterval(get_files_timer);
get_files_timer = window.SetInterval(function() {
i++;
get_img_from_dir(path, clean(artist), clean(album), clean(title));
if (images.length > 0 || i >= 20) {
//if (!img_file_names_old.length || (img_file_names_old[0] != img_file_names[0])){
next_image_lastFm(0);
//img_file_names_old.push(img_file_names[0]);
img_refresh = false;
//}
window.ClearInterval(get_files_timer);
}
}, 500);
}
get_text(path, artist, album, title);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function img_to_object(n) {
if (!n) return;
var object;
if (typeof n == 'object') {
object = resize_image(n);
} else {
object = resize_image(gdi.Image(n));
}
return object;
}
function get_embedded_covers(path) { //0 - front cover; 1 - back cover; 2 - disc; 3 - icon; 4 - artist;
embedded = [];
embedded_img_name = [];
if ( metadb ) {
for (var i = 0; i < 5; i++) {
var temp = utils.GetAlbumArtEmbedded(path, i);
//var temp = utils.GetAlbumArtEmbedded(metadb.RawPath, i);
if (temp) embedded.push(temp);
if (temp) embedded_img_name.push(attached_img_name[i]);
}
}
}
function get_external_covers(path, artist, album) {
var covers_dir = [];
var covers_root = [];
var covers_dir_subs = [];
var covers_root_subs = [];
var covers_external = [];
external = [];
try {
dir = fso.GetFolder(path);
get_covers_from_dir(covers_dir, dir);
root = dir.ParentFolder;
get_covers_from_dir(covers_root, root);
var e = new Enumerator( dir.SubFolders );
for(; !e.atEnd(); e.moveNext() ) {
get_covers_from_dir(covers_dir_subs, e.item() );
}
var e = new Enumerator( root.SubFolders );
for(; !e.atEnd(); e.moveNext() ) {
var name = e.item().Path;
var sub_root_name = name.substr(name.lastIndexOf("\\") + 1, name.length);
for (i in root_folders) {
if (sub_root_name.toLowerCase().indexOf(root_folders[i].toLowerCase()) == 0) {
get_covers_from_dir(covers_root_subs, e.item() );
}
}
}
} catch(e) {};
covers_external = covers_external.concat(covers_dir, covers_dir_subs, covers_root, covers_root_subs);
if (covers_external.length > 0) {
for (i in covers_external) {
var name = covers_external[i];
if ( name && get_fn(name).toLowerCase() == album.toLowerCase() ) {
external.push(name);
covers_external[i] = null;
}
}
for (i in covers_external) {
var name = covers_external[i];
if ( name && get_fn(name).toLowerCase() == artist.toLowerCase() ) {
external.push(name);
covers_external[i] = null;
}
}
for (i in covers_external) {
var name = covers_external[i];
try {
if ( name && (get_fn(name).toLowerCase().match(artist.toLowerCase()) && get_fn(name).toLowerCase().match(album.toLowerCase())) ) {
external.push(name);
covers_external[i] = null;
}
} catch(e) {};
}
for (i in covers_external) {
var name = covers_external[i];
if ( name && get_fnext(name).match(/.*(cover|front|folder|album).*/i) ) {
external.push(name);
covers_external[i] = null;
}
}
for (i in covers_external) {
var name = covers_external[i];
if ( name && get_fnext(name).match(/.*back.*/i) ) {
external.push(name);
covers_external[i] = null;
}
}
for (i in covers_external) {
var name = covers_external[i];
if ( name && get_fnext(name).match(/.*cd.*/i) ) {
external.push(name);
covers_external[i] = null;
}
}
for (i in covers_external) {
if (typeof(covers_external[i]) == 'string' ) external.push(covers_external[i]);
}
}
}
function get_covers_from_dir(array, dir) {
var e = new Enumerator( dir.Files );
while (!e.atEnd()) {
var name = e.item().Name;
if (name.match(/\.(jpg|jpeg|png|gif|bmp|tiff)$/i)) {
array.push( e.item().Path );
}
e.moveNext();
}
}
function get_embedded_img_name(n){
if (set_priority == 0) {
idx = n - external.length;
}
if (set_priority == 1) {
idx = n ;
}
return embedded_img_name[idx];
}
function get_fnext(p) {
if (!p) return;
return p.replace(/.*\\/g, '');
}
function get_fn(p) {
if (!p) return;
return p.replace(/.*\\|\.[^.]+$/g, '')
}
function get_fext(p) {
if (!p) return;
return p.replace(/.*\./g, '');
}
function get_dp(p) {
if (!p) return;
return p.replace(/(.*)\\.*/g, '$1');
}
function formatFileSize(b){
if (b > 1024 * 1024){
b = Math.round(b / 1024 / 1024 * 100) / 100 + " MB"
} else if (b > 1024){
b = Math.round(b / 1024 * 100) / 100 + " KB"
} else {
b = b + " Bytes";
}
return b;
}
function get_covers_info(d){
if (covers.length){
if (covers[d]) {
if (typeof covers[d] != 'object'){
if(fso.FileExists(covers[d])){
var cover_name = get_fnext(covers[d]);
var cover_width = gdi.Image(covers[d]).width;
var cover_height = gdi.Image(covers[d]).Height;
var cover_size = formatFileSize(fso.GetFile(covers[d]).size);
var cover_dim = cover_width + " x " + cover_height + ", " + cover_size;
}
}
if (typeof covers[d] == 'object'){
var cover_name = get_embedded_img_name(d);
var cover_width = covers[d].width;
var cover_height = covers[d].Height;
var cover_dim = "embedded " + cover_width + " x " + cover_height;
}
var n_imgs_1 = covers.length > 1 ? d + 1 + " " : "";
var n_imgs_2 = external.length > 0 && embedded.length > 0 ? "(" + covers.length + ") " : "";
var n_imgs_3 = external.length > 0 ? "" + (embedded.length == 0 && external.length > 1 ? "(" + external.length + ")" : external.length) + " external " : "";
var n_imgs_4 = embedded.length > 0 ? "" + (external.length == 0 && embedded.length > 1 ? "(" + embedded.length + ")" : embedded.length) + " embedded " : "";
var n_imgs = n_imgs_1 + n_imgs_2 + (set_priority == 0 ? n_imgs_3 + n_imgs_4 : n_imgs_4 + n_imgs_3);
}
}
cover_name = cover_name ? cover_name+ "\n" : "";
cover_dim = cover_dim ? cover_dim+ "\n" : "";
n_imgs = n_imgs ? n_imgs : "";
ci = cover_name + cover_dim + n_imgs;
if (set_external && !set_embedded && external.length == 0) ci = "No external covers";
if (set_embedded && !set_external && embedded.length == 0) ci = "No embedded covers";
if (set_external && set_embedded && covers.length == 0) ci = "No covers";
temp_bmp = gdi.CreateImage(1, 1);
temp_gr = temp_bmp.GetGraphics();
ci_text_row_width = Math.max(ww - t_margin * 2, 0);
var ci_text_arr_tmp = temp_gr.EstimateLineWrap(ci, t2_font, ci_text_row_width).toArray();
ci_text_arr = [];
for (var i = 0; i < ci_text_arr_tmp.length; i += 2) {
ci_text_arr.push(trim(ci_text_arr_tmp[i]));
}
ci_text_row_height = temp_gr.CalcTextHeight("Covers info", t2_font);
ci_text_height = ci_text_row_height * ci_text_arr.length;
temp_bmp.ReleaseGraphics(temp_gr);
temp_bmp.Dispose();
temp_gr = null;
temp_bmp = null;
}
function next_image_2(d){
if (d < 0) {img_selected = img_selected <= 0 ? covers.length - 1 : img_selected = img_selected - 1};
if (d > 0) {img_selected = img_selected >= covers.length - 1 ? 0 : img_selected = img_selected + 1};
var color_scheme_0 = [];
if (g_img){
try {
color_scheme_0 = g_img.GetColorScheme(100).toArray();
} catch(e) {};
try {
color_scheme_0 = JSON.parse(g_img.GetColourSchemeJSON(100));
} catch(e) {};
}
if (typeof covers[img_selected] == 'object') {
g_img = resize_image(covers[img_selected]);
} else {
g_img = resize_image(gdi.Image(covers[img_selected]));
}
if (g_img) img_size_recount = true;
var color_scheme_1 = [];
var compare = true;
if (g_img){
try {
color_scheme_1 = g_img.GetColorScheme(100).toArray();
for( var i = 0; i < Math.min(color_scheme_0.length, color_scheme_1.length); i++ ){
if (color_scheme_0[i] != color_scheme_1[i]){
compare = false;
break;
}
}
} catch(e) {};
try {
color_scheme_1 = JSON.parse(g_img.GetColourSchemeJSON(100));
for( var i = 0; i < Math.min(color_scheme_0.length, color_scheme_1.length); i++ ){
if (color_scheme_0[i].col != color_scheme_1[i].col){
compare = false;
break;
}
}
} catch(e) {};
}
if (!compare || color_scheme_1.length == 0){
fader = fade_effect ? 0 : 255;
} else {
fader = 255;
}
get_covers_info(img_selected);
def_fader_ini();
if (g_img && fade_effect) fader_timer();
window.Repaint();
}
function get_covers() {
img_selected = 0;
ci_text_arr = [];
external = set_external ? external : [];
embedded = set_embedded ? embedded : [];
covers = [];
if (set_priority == 0) {
covers = covers.concat(external, embedded);
}
if (set_priority == 1) {
covers = covers.concat(embedded, external);
}
def_img_cover = covers.length ? img_to_object(covers[0]) : null;
def_img_ini();
covers_on && next_image_2(0);
}