Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #2481 kgena_ua » 17.09.2018, 14:09

"clock animation "
version "17092018"


Необходимо обновить меню "Свойства"

Код: Выделить всё
// ==PREPROCESSOR==
// @name "clock animation "
// @version "17092018"
// @author "kgena_ua"
// ==/PREPROCESSOR==

function RGB(r,g,b) {
    return (0xff000000|(r<<16)|(g<<8)|(b));
}

function getRed(color) {
   return ((color >> 16) & 0xff);
}

function getGreen(color) {
   return ((color >> 8) & 0xff);
}

function getBlue(color) {
   return (color & 0xff);
}

var ww = 0, wh = 0;

DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORDBREAK = 0x00000010;

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                  
}   

var bgcolor, color_item;

function get_color(){
    try {    
        if (window.InstanceType == 0){                     
            s_bgcolor = window.GetColorCUI(ColorTypeCUI.background);                     
            //s_color_item = window.GetColorCUI(ColorTypeCUI.text);
            s_color_item = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);      
        } else if (window.InstanceType == 1) {                      
            s_bgcolor_item = window.GetColorDUI(ColorTypeDUI.background);                     
            //s_color_item = window.GetColorDUI(ColorTypeDUI.text);
            s_color = window.GetColorDUI(ColorTypeDUI.highlight);                     
        }   
    } catch(e){};
    try {    
        if (window.InstanceType == 0){                     
            s_bgcolor = window.GetColourCUI(ColorTypeCUI.background);                     
            //s_color_item = window.GetColourCUI(ColorTypeCUI.text);
            s_color_item = window.GetColourCUI(ColorTypeCUI.inactive_selection_text);      
        } else if (window.InstanceType == 1) {                      
            s_bgcolor = window.GetColourDUI(ColorTypeDUI.background);                     
            //s_color_item = window.GetColourDUI(ColorTypeDUI.text);
            s_color_item = window.GetColourDUI(ColorTypeDUI.highlight);                     
        }   
    } catch(e){};
    window.Repaint();   
}

var c_bgcolor = customColor(window.GetProperty("color: background", "0-0-0"));
var c_color_item = customColor(window.GetProperty("color: item", "100-200-200"));

function customColor(color){
   tempc = color.split("-");
   return (0xff000000 | (tempc[0]<<16) | (tempc[1]<<8) | (tempc[2]));
}

var custom_colors = window.GetProperty("colors: custom", false);

get_color();
ini_color();

function on_colors_changed(){
    get_color();
    ini_color();
}

function ini_color(){
    bgcolor = custom_colors ? c_bgcolor : s_bgcolor;
    color_item = custom_colors ? c_color_item : s_color_item;
}

var single_line = window.GetProperty("text and clock in one line", false);
var text_left = window.GetProperty("text: left", true);
var tshow = window.GetProperty("text: show", true);
var step = 1;
var font_size_n = window.GetProperty("font size : n", 25);
var font_size_t = window.GetProperty("font size : t", 11);
var font_name_n = window.GetProperty("font name : n", "Arial");
var font_name_t = window.GetProperty("font name : t", "Arial");

var num_font = gdi.Font(font_name_n, font_size_n, 1);
var num_color = color_item;

var HSV = RGBtoHSV(getRed(num_color), getGreen(num_color), getBlue(num_color));   
var num_color_2 = HSVtoRGB(HSV.H, HSV.S, HSV.V * 0.7);

var tfont = gdi.Font(font_name_t, font_size_t, 0);
var tcolor = HSVtoRGB(HSV.H, HSV.S, HSV.V * 0.8);

var x = [];
var size = dim();
var num_imgs = [];
var num_imgs_2 = [];
var sep_img = num_img(":", num_color_2);
var st_1 = 0, st_2 = 0, st_3 = 0, st_4 = 0, st_5 = 0, st_6 = 0;
var h10 = 0, h01 = 0, m10 = 0, m01 = 0, s10 = 0, s01 = 0;
var h10_o = 0, h01_o = 0, m10_o = 0, m01_o = 0, s10_o = 0, s01_o = 0;
var timer_1, timer_2, timer_3, timer_4, timer_5, timer_6;
var m_1 = false, m_2 = false, m_3 = false, m_4 = false, m_5 = false, m_6 = false;

get_num_imgs(num_imgs, num_color);
get_num_imgs(num_imgs_2, num_color_2);

function get_num_imgs(arr, color){
    for (var i = 0; i <= 9; i++) {
        arr.push(num_img(i, color));
    }
}

var d = new Date();
var clock_timer = window.SetInterval(on_timer, 1000);

function on_timer(id) {
    d = new Date();
   
    if (d.getHours() > 9){
        h10_o = d.getHours().toString(10).replace(/.$/g, "");
        h01_o = d.getHours().toString(10).replace(/^./g, "");
    }   else {
        h10_o = 0;
        h01_o = d.getHours().toString(10);
    }
   
    if (h10_o != h10) set_timer_1();
    if (h01_o != h01) set_timer_2();
   
    if (d.getMinutes() > 9){
        m10_o = d.getMinutes().toString(10).replace(/.$/g, "");
        m01_o = d.getMinutes().toString(10).replace(/^./g, "");
    }   else {
        m10_o = 0;
        m01_o = d.getMinutes().toString(10);
    }
   
    if (m10_o != m10) set_timer_3();
    if (m01_o != m01) set_timer_4();


    if (d.getSeconds() > 9){
        s10_o = d.getSeconds().toString(10).replace(/.$/g, "");
        s01_o = d.getSeconds().toString(10).replace(/^./g, "");
    }   else {
        s10_o = 0;
        s01_o = d.getSeconds().toString(10);
    }
   
    if (s10_o != s10) set_timer_5();
    if (s01_o != s01) set_timer_6();
}

var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

function on_paint(gr) {
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
   
    w_s = gr.CalcTextWidth(":", num_font);
   
    t = days[d.getDay()] + " " + d.getDate() + " " + months[d.getMonth()] + " " + d.getYear();

    h_t = gr.CalcTextHeight(t, tfont);
    w_t = gr.CalcTextWidth(t, tfont);

    w_clock = size.width * 7 + w_s * 2;
    h_clock = size.height;
   
    w_t_w_clock = w_t + w_s + size.width * 7 + w_s * 2;
       
    if (text_left) x[1] = single_line && tshow ? (ww - w_t_w_clock) / 2 + w_t + w_s : (ww - w_clock) / 2;
   
    if (!text_left)  x[1] = single_line && tshow ? (ww - w_t_w_clock) / 2 : (ww - w_clock) / 2;
       
    x[2] = x[1] + size.width;
    x[3] = x[2] + size.width;
    x[4] = x[3] + size.width;
    x[5] = x[4] + size.width;
    x[6] = x[5] + size.width;
    x[7] = x[6] + size.width;
    x[8] = x[7] + size.width;
   
    y_clock = tshow && !single_line ? (wh - h_clock - h_t) / 2 : (wh - h_clock) / 2;

    img_1 = !m_1 ? num_imgs[h10] : num_imgs_2[h10];
    if (img_1) gr.DrawImage(img_1, x[1] + st_1 / 2, y_clock, size.width - st_1, size.height, 0, 0, size.width, size.height, 0, 255);
    img_2 = !m_2 ? num_imgs[h01] : num_imgs_2[h01];
    if (img_2) gr.DrawImage(img_2, x[2] + st_2 / 2, y_clock, size.width - st_2, size.height, 0, 0, size.width, size.height, 0, 255);
   
    if (sep_img) gr.DrawImage(sep_img, x[3], y_clock, size.width, size.height, 0, 0, size.width, size.height, 0, 255);

    img_3 = !m_3 ? num_imgs[m10] : num_imgs_2[m10];
    if (img_3) gr.DrawImage(img_3, x[4] + st_3 / 2, y_clock, size.width - st_3, size.height, 0, 0, size.width, size.height, 0, 255);
    img_4 = !m_4 ? num_imgs[m01] : num_imgs_2[m01];
    if (img_4) gr.DrawImage(img_4, x[5] + st_4 / 2, y_clock, size.width - st_4, size.height, 0, 0, size.width, size.height, 0, 255);

    if (sep_img) gr.DrawImage(sep_img, x[6], y_clock, size.width, size.height, 0, 0, size.width, size.height, 0, 255);

    img_5 = !m_5 ? num_imgs[s10] : num_imgs_2[s10];
    if (img_5) gr.DrawImage(img_5, x[7] + st_5 / 2, y_clock, size.width - st_5, size.height, 0, 0, size.width, size.height, 0, 255);
    img_6 = !m_6 ? num_imgs[s01] : num_imgs_2[s01];
    if (img_6) gr.DrawImage(img_6, x[8] + st_6 / 2, y_clock, size.width - st_6, size.height, 0, 0, size.width, size.height, 0, 255);
   
    if (text_left) x_t = single_line && tshow ? (ww - w_t_w_clock) / 2 : x_t = (ww - w_t) / 2;

    if (!text_left) x_t = single_line && tshow ? w_clock +  + w_s + (ww - w_t_w_clock) / 2 : x_t = (ww - w_t) / 2;
   
    y_t = single_line && tshow ? (wh - h_t) / 2 : y_clock + h_clock;

    tshow && gr.GdiDrawText( t, tfont, tcolor, x_t, y_t, ww *2, wh,   DT_LEFT);
}

function on_mouse_lbtn_up(x,y) {
}

function on_mouse_lbtn_down(x,y) {
}

function on_mouse_rbtn_up(x, y){
}

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

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

function on_size(){
    ww = window.Width;
    wh = window.Height;
}

function num_img(f, c){
    var temp = gdi.CreateImage(size.width, size.height);
    var temp_gr = temp.GetGraphics();
    temp_gr.GdiDrawText( f, num_font, c, 0, 0, size.width, size.height, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
    temp.ReleaseGraphics(temp_gr);
    return temp;
    temp.Dispose();
    temp_gr = null;
    temp = null;
}

function dim() {
    var size = {width: 0, height: 0};     
    var temp = gdi.CreateImage(1, 1);
    var temp_gr = temp.GetGraphics();
    var tmp;
    w = temp_gr.CalcTextWidth("0", num_font);
    h = temp_gr.CalcTextHeight("0", num_font);
    temp.ReleaseGraphics(temp_gr);
    temp.Dispose();
    temp_gr = null;
    temp = null;
    size.width = Math.round(w + w / 10);                         
    size.height = Math.round(h);   
    return size;
}

function set_timer_1(){
    if (st_1 > 0) step = step + 1;
    timer_1 && window.ClearInterval(timer_1);
    st_1 = 0;
    var dir = 0;
    timer_1 = window.SetInterval(function() {
        if (dir == 0) st_1 = st_1 + step;
        if (dir == 1) st_1 = st_1 - step;
        if (st_1 >= size.width && dir == 0) {dir = 1; h10 = h10_o};
        m_1 = st_1 > step ? true : false;
        if (st_1 <= 0 && dir == 1) window.ClearInterval(timer_1);
        window.Repaint();
    }, 60);         
}

function set_timer_2(){
    if (st_2 > 0) step = step + 1;
    timer_2 && window.ClearInterval(timer_2);
    st_2 = 0;
    var dir = 0;
    timer_2 = window.SetInterval(function() {
        if (dir == 0) st_2 = st_2 + step;
        if (dir == 1) st_2 = st_2 - step;
        if (st_2 >= size.width && dir == 0) {dir = 1; h01 = h01_o};
        m_2 = st_2 > step ? true : false;
        if (st_2 <= 0 && dir == 1) window.ClearInterval(timer_2);
        window.Repaint();
    }, 60);         
}

function set_timer_3(){
    if (st_3 > 0) step = step + 1;
    timer_3 && window.ClearInterval(timer_3);
    st_3 = 0;
    var dir = 0;
    timer_3 = window.SetInterval(function() {
        if (dir == 0) st_3 = st_3 + step;
        if (dir == 1) st_3 = st_3 - step;
        if (st_3 >= size.width && dir == 0) {dir = 1; m10 = m10_o};
        m_3 = st_3 > step ? true : false;
        if (st_3 <= 0 && dir == 1) window.ClearInterval(timer_3);
        window.Repaint();
    }, 50);         
}

function set_timer_4(){
    if (st_4 > 0) step = step + 1;
    timer_4 && window.ClearInterval(timer_4);
    st_4 = 0;
    var dir = 0;
    timer_4 = window.SetInterval(function() {
        if (dir == 0) st_4 = st_4 + step;
        if (dir == 1) st_4 = st_4 - step;
        if (st_4 >= size.width && dir == 0) {dir = 1; m01 = m01_o};
        m_4 = st_4 > step ? true : false;
        if (st_4 <= 0 && dir == 1) window.ClearInterval(timer_4);
        window.Repaint();
    }, 40);         
}

function set_timer_5(){
    if (st_5 > 0) step = step + 1;
    timer_5 && window.ClearInterval(timer_5);
    st_5 = 0;
    var dir = 0;
    timer_5 = window.SetInterval(function() {
        if (dir == 0) st_5 = st_5 + step;
        if (dir == 1) st_5 = st_5 - step;
        if (st_5 >= size.width && dir == 0) {dir = 1; s10 = s10_o};
        m_5 = st_5 > step ? true : false;
        if (st_5 <= 0 && dir == 1) window.ClearInterval(timer_5);
        window.Repaint();
    }, 30);         
}

function set_timer_6(){
    if (st_6 > 0) step = step + 1;
    timer_6 && window.ClearInterval(timer_6);
    st_6 = 0;
    var dir = 0;
    timer_6 = window.SetInterval(function() {
        if (dir == 0) st_6 = st_6 + step;
        if (dir == 1) st_6 = st_6 - step;
        if (st_6 >= size.width && dir == 0) {dir = 1; s01 = s01_o};
        m_6 = st_6 > step ? true : false;
        if (st_6 <= 0 && dir == 1) window.ClearInterval(timer_6);
        window.Repaint();
    }, 15);         
}

function RGBtoHSV(r, g, b) {
    var HSV = {H: 0, S: 0, V: 0}; 
    var r = (r / 255);  
    var g = (g / 255);
    var b = (b / 255);

    var min = Math.min( r, g, b );    
    var max = Math.max( r, g, b );   
    var delta = max - min;             

    v = max;

    if (delta == 0) {
        h = 0;                           
        s = 0;
    } else {
        s = delta / max;

        delta_r = (((max - r) / 6) + (delta / 2)) / delta;
        delta_g = (((max - g) / 6) + (delta / 2)) / delta;
        delta_b = (((max - b) / 6) + (delta / 2)) / delta;

        if      (r == max) h = delta_b - delta_g;
        else if (g == max) h = (1 / 3) + delta_r - delta_b;
        else if (b == max) h = (2 / 3) + delta_g - delta_r;

        if ( h < 0 ) h += 1;
        if ( h > 1 ) h -= 1;
    }
   
    HSV.H = Math.round(h * 360);                     
    HSV.S = Math.round(s * 100);
    HSV.V = Math.round(v * 100);
    return HSV;
}

function HSVtoRGB(h, s, v) {
    var h = h / 360;
    var s = s / 100;
    var v = v / 100;
   
    if (s == 0) {
        var r = v * 255;
        var g = v * 255;
        var b = v * 255;
    } else {
        h = h * 6;
        if ( h == 6 ) h = 0;

        var var_i = Math.floor( h );
        var var_1 = v * (1 - s);
        var var_2 = v * (1 - s * (h - var_i));
        var var_3 = v * (1 - s * (1 - (h - var_i)));

        if      (var_i == 0) {r = v;     g = var_3; b = var_1}
        else if (var_i == 1) {r = var_2; g = v;     b = var_1}
        else if (var_i == 2) {r = var_1; g = v;     b = var_3}
        else if (var_i == 3) {r = var_1; g = var_2; b = v}
        else if (var_i == 4) {r = var_3; g = var_1; b = v}
        else                 {r = v;     g = var_1; b = var_2};

        r = r * 255;          
        g = g * 255;
        b = b * 255;
    }
   return RGB( Math.round(r), Math.round(g), Math.round(b));
}

function calcBrightness(c) {
   var r = getRed(c);
   var g = getGreen(c);
   var b = getBlue(c);
   return Math.round(Math.sqrt( 0.299*r*r + 0.587*g*g + 0.114*b*b ));
}

function print(msg) {
    try {   
        fb.trace(msg);   
    } catch(e){console.log(msg);};         
}
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 54
Откуда: Украина, Днепр
Репутация: 427
С нами: 5 лет 8 месяцев

Сообщение #2482 pois22ple » 17.09.2018, 16:21

kgena_ua,
Запускаю скрипт в WSH Panel Mod. Получаю
Error: WSH Panel Mod (clock animation v17092018 by kgena_ua): Ошибка выполнения JavaScript:
"s_bgcolor" не определено
File: <main>
Line: 95, Col: 5
<source text only available at compile time>
В jscript_panel скрипт запускается нормально.
pois22ple
Бывалый
Репутация: 9
С нами: 12 лет 4 месяца

Сообщение #2483 kgena_ua » 17.09.2018, 17:34

pois22ple, моя невнимательность. У Вас DUI, я так понимаю.
Ошибка была тут:
Код: Выделить всё
function get_color(){
    try {    
        if (window.InstanceType == 0){                     
            s_bgcolor = window.GetColorCUI(ColorTypeCUI.background);                     
            //s_color_item = window.GetColorCUI(ColorTypeCUI.text);
            s_color_item = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);      
        } else if (window.InstanceType == 1) {                      
            s_bgcolor = window.GetColorDUI(ColorTypeDUI.background);                     
            //s_color_item = window.GetColorDUI(ColorTypeDUI.text);
            s_color_item = window.GetColorDUI(ColorTypeDUI.highlight);                     
        }   
    } catch(e){};
    try {    
        if (window.InstanceType == 0){                     
            s_bgcolor = window.GetColourCUI(ColorTypeCUI.background);                     
            //s_color_item = window.GetColourCUI(ColorTypeCUI.text);
            s_color_item = window.GetColourCUI(ColorTypeCUI.inactive_selection_text);      
        } else if (window.InstanceType == 1) {                      
            s_bgcolor = window.GetColourDUI(ColorTypeDUI.background);                     
            //s_color_item = window.GetColourDUI(ColorTypeDUI.text);
            s_color_item = window.GetColourDUI(ColorTypeDUI.highlight);                     
        }   
    } catch(e){};
    window.Repaint();   
}
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 54
Откуда: Украина, Днепр
Репутация: 427
С нами: 5 лет 8 месяцев

Сообщение #2484 egiko » 18.09.2018, 20:02

kgena_ua,
Про скрипт "Get Covers (Artwork) radio logos":
Отличный скрипт. При воспроизведении альбомов находит все картинки!

У меня много треков отдельно в папках расположены. При воспроизведении отдельных треков скрипт начинает искать картинки в других папках. В итоге показывает картинки из других папок/альбомов, что меня немного смущает. Понятно, что из плюсов вышел небольшой минус, но вот хотелось бы его исправить для себя.

Я так понимаю, что поиск ведётся в любых папках, которые расположены "рядом" с воспроизводимым треком? Полагаю, что самый простой вариант - это указать список катологов, в которых будет производится поиск картинок?
Как/где можно указать имена катологов в которых следует искать изображения? Например: covers, images, artwork и т.п.
The ability to let that which does not matter truly slide.
egiko
Новичок
Аватара
Репутация: 3
С нами: 9 лет 10 месяцев

Сообщение #2485 kgena_ua » 19.09.2018, 17:40

egiko, скрипт сделан для случая, когда библиотека организована по исполнителям.
Я не знаю какая у Вас структура, вернее не совсем понимаю.

Попробуйте:
есть строка, примерно 424
Код: Выделить всё
    covers_external = covers_external.concat(covers_dir, covers_dir_subs, covers_root, covers_root_subs);
замените, например на
Код: Выделить всё
covers_external = covers_external.concat(covers_dir, covers_dir_subs);
будет брать только из папки с треком и из папок, которые находятся в этой папке.

Добавлено спустя 3 часа 51 минуту:
"clock animation"
version "19092018"


Оптимизация, чистка.
Необходимо обновить меню "Свойства".

Код: Выделить всё
// ==PREPROCESSOR==
// @name "clock animation"
// @version "19092018"
// @author "kgena_ua"
// ==/PREPROCESSOR==

function RGB(r,g,b) {
    return (0xff000000|(r<<16)|(g<<8)|(b));
}

function getRed(color) {
   return ((color >> 16) & 0xff);
}

function getGreen(color) {
   return ((color >> 8) & 0xff);
}

function getBlue(color) {
   return (color & 0xff);
}

var ww = 0, wh = 0;

DT_LEFT = 0x00000000;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORDBREAK = 0x00000010;

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                  
}   

var bgcolor, color_item;

function get_color(){
    try {    
        if (window.InstanceType == 0){                     
            s_bgcolor = window.GetColorCUI(ColorTypeCUI.background);                     
            //s_color_item = window.GetColorCUI(ColorTypeCUI.text);
            s_color_item = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);      
        } else if (window.InstanceType == 1) {                      
            s_bgcolor = window.GetColorDUI(ColorTypeDUI.background);                     
            //s_color_item = window.GetColorDUI(ColorTypeDUI.text);
            s_color_item = window.GetColorDUI(ColorTypeDUI.highlight);                     
        }   
    } catch(e){};
    try {    
        if (window.InstanceType == 0){                     
            s_bgcolor = window.GetColourCUI(ColorTypeCUI.background);                     
            //s_color_item = window.GetColourCUI(ColorTypeCUI.text);
            s_color_item = window.GetColourCUI(ColorTypeCUI.inactive_selection_text);      
        } else if (window.InstanceType == 1) {                      
            s_bgcolor = window.GetColourDUI(ColorTypeDUI.background);                     
            //s_color_item = window.GetColourDUI(ColorTypeDUI.text);
            s_color_item = window.GetColourDUI(ColorTypeDUI.highlight);                     
        }   
    } catch(e){};
    window.Repaint();   
}

var c_bgcolor = customColor(window.GetProperty("color: background", "0-0-0"));
var c_color_item = customColor(window.GetProperty("color: item", "100-200-200"));

function customColor(color){
   tempc = color.split("-");
   return (0xff000000 | (tempc[0]<<16) | (tempc[1]<<8) | (tempc[2]));
}

var custom_colors = window.GetProperty("colors: custom", false);

get_color();
ini_color();

function on_colors_changed(){
    get_color();
    ini_color();
}

function ini_color(){
    bgcolor = custom_colors ? c_bgcolor : s_bgcolor;
    color_item = custom_colors ? c_color_item : s_color_item;
}

var single_line = window.GetProperty("text and clock in one line", false);
var t_left = window.GetProperty("text: left", true);
var t_show = window.GetProperty("text: show", true);
var font_size_n = window.GetProperty("font size : n", 25);
var font_size_t = window.GetProperty("font size : t", 11);
var font_name_n = window.GetProperty("font name : n", "Arial");
var font_name_t = window.GetProperty("font name : t", "Arial");

var num_font = gdi.Font(font_name_n, font_size_n, 1);
var num_color = color_item;

var HSV = RGBtoHSV(getRed(num_color), getGreen(num_color), getBlue(num_color));   
var num_color_2 = HSVtoRGB(HSV.H, HSV.S, HSV.V * 0.7);

var t_font = gdi.Font(font_name_t, font_size_t, 0);
var t_color = HSVtoRGB(HSV.H, HSV.S, HSV.V * 0.8);

var size = dim();
var num_imgs = [];
var num_imgs_2 = [];
var sep_img = num_img(":", num_color_2);
var dw = [];
var step = [1, 1, 1, 1, 1, 1];
var dir = [];
var timer = [];
var num = [];
var num_o = [];
var img = [];

get_num_imgs(num_imgs, num_color);
get_num_imgs(num_imgs_2, num_color_2);

function get_num_imgs(arr, color){
    for (var i = 0; i <= 9; i++) {
        arr.push(num_img(i, color));
    }
}

var d = new Date();
var clock_timer = window.SetInterval(on_timer, 1000);

function on_timer(id) {
    d = new Date();

    if (d.getHours() > 9){
        num_o[0] = parseInt(d.getHours().toString(10).replace(/.$/g, ""));
        num_o[1] = parseInt(d.getHours().toString(10).replace(/^./g, ""));
    }   else {
        num_o[0] = 0;
        num_o[1] = parseInt(d.getHourss().toString(10));
    }
   
    if (num_o[0] != num[0]) set_timer(0, 60);
    if (num_o[1] != num[1]) set_timer(1, 55);
   
    if (d.getMinutes() > 9){
        num_o[2] =  parseInt(d.getMinutes().toString(10).replace(/.$/g, ""));
        num_o[3] =  parseInt(d.getMinutes().toString(10).replace(/^./g, ""));
    }   else {
        num_o[2] = 0;
        num_o[3] = parseInt(d.getMinutes().toString(10));
    }
   
    if (num_o[2] != num[2]) set_timer(2, 50);
    if (num_o[3] != num[3]) set_timer(3, 40);


    if (d.getSeconds() > 9){
        num_o[4] = parseInt(d.getSeconds().toString(10).replace(/.$/g, ""));
        num_o[5] = parseInt(d.getSeconds().toString(10).replace(/^./g, ""));
    } else {
        num_o[4] = 0;
        num_o[5] = parseInt(d.getSeconds().toString(10));
    }

    if (num_o[4] != num[4]) set_timer(4, 30);
    if (num_o[5] != num[5]) set_timer(5, 15);
}

var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

function on_paint(gr) {
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
   
    w_s = gr.CalcTextWidth(":", num_font);
   
    t = days[d.getDay()] + " " + d.getDate() + " " + months[d.getMonth()] + " " + d.getYear();

    h_t = gr.CalcTextHeight(t, t_font);
    w_t = gr.CalcTextWidth(t, t_font);

    h_c = size.height;
    w_c = size.width * 7 + w_s * 2;
   
    w_t_w_c = w_t + w_s + w_c;

    if (t_left) x = single_line && t_show ? (ww - w_t_w_c) / 2 + w_t + w_s : (ww - w_c) / 2;
    if (!t_left) x = single_line && t_show ? (ww - w_t_w_c) / 2 : (ww - w_c) / 2;
   
    y_c = t_show && !single_line ? (wh - h_c - h_t) / 2 : (wh - h_c) / 2;
   
    for (var i = 0; i <= 7; i++) {
        img[i] = dw[i] == 0 ? num_imgs[num[i]] : num_imgs_2[num[i]];
        if (img[i]) gr.DrawImage(img[i], x + dw[i] / 2, y_c, size.width - dw[i], size.height, 0, 0, size.width, size.height, 0, 255);
       
        if (i == 2 || i == 4){
            if (sep_img && num.length) gr.DrawImage(sep_img, x - size.width, y_c - size.height * 0.07, size.width, size.height, 0, 0, size.width, size.height, 0, 255);
        }
       
        x = x + size.width * (i == 1 || i == 3 ? 2 : 1);
    }
   
    if (t_left) x_t = single_line && t_show ? (ww - w_t_w_c) / 2 : x_t = (ww - w_t) / 2;
    if (!t_left) x_t = single_line && t_show ? w_c +  + w_s + (ww - w_t_w_c) / 2 : x_t = (ww - w_t) / 2;
       
    y_t = single_line && t_show ? (wh - h_t) / 2 : y_c + h_c;

    t_show && num.length && gr.GdiDrawText( t, t_font, t_color, x_t, y_t, ww *2, wh, DT_LEFT);
}

function on_mouse_lbtn_up(x,y) {
}

function on_mouse_lbtn_down(x,y) {
}

function on_mouse_rbtn_up(x, y){
}

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

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

function on_size(){
    ww = window.Width;
    wh = window.Height;
}

function num_img(f, c){
    var temp = gdi.CreateImage(size.width, size.height);
    var temp_gr = temp.GetGraphics();
    temp_gr.GdiDrawText( f, num_font, c, 0, 0, size.width, size.height, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
    temp.ReleaseGraphics(temp_gr);
    return temp;
    temp.Dispose();
    temp_gr = null;
    temp = null;
}

function dim() {
    var size = {width: 0, height: 0};     
    var temp = gdi.CreateImage(1, 1);
    var temp_gr = temp.GetGraphics();
    var tmp;
    w = temp_gr.CalcTextWidth("0", num_font);
    h = temp_gr.CalcTextHeight("0", num_font);
    temp.ReleaseGraphics(temp_gr);
    temp.Dispose();
    temp_gr = null;
    temp = null;
    size.width = Math.round(w + w / 10);                         
    size.height = Math.round(h);   
    return size;
}

function set_timer(i, j){
    if (dw[i] > 0) step[i] = step[i] + 1;
    timer[i] && window.ClearInterval(timer[i]);
    dw[i] = 0;
    dir[i] = 0;
    timer[i] = window.SetInterval(function() {
        if (dir[i] == 0) dw[i] = dw[i] + step[i];
        if (dir[i] == 1) dw[i] = dw[i] - step[i];
        if (dw[i] >= size.width && dir[i] == 0) {dir[i] = 1; num[i] = num_o[i]};
        if (dw[i] <= 0 && dir[i] == 1) window.ClearInterval(timer[i]);
        window.Repaint();
    }, j);         
}

function RGBtoHSV(r, g, b) {
    var HSV = {H: 0, S: 0, V: 0}; 
    var r = (r / 255);  
    var g = (g / 255);
    var b = (b / 255);

    var min = Math.min( r, g, b );    
    var max = Math.max( r, g, b );   
    var delta = max - min;             

    v = max;

    if (delta == 0) {
        h = 0;                           
        s = 0;
    } else {
        s = delta / max;

        delta_r = (((max - r) / 6) + (delta / 2)) / delta;
        delta_g = (((max - g) / 6) + (delta / 2)) / delta;
        delta_b = (((max - b) / 6) + (delta / 2)) / delta;

        if      (r == max) h = delta_b - delta_g;
        else if (g == max) h = (1 / 3) + delta_r - delta_b;
        else if (b == max) h = (2 / 3) + delta_g - delta_r;

        if ( h < 0 ) h += 1;
        if ( h > 1 ) h -= 1;
    }
   
    HSV.H = Math.round(h * 360);                     
    HSV.S = Math.round(s * 100);
    HSV.V = Math.round(v * 100);
    return HSV;
}

function HSVtoRGB(h, s, v) {
    var h = h / 360;
    var s = s / 100;
    var v = v / 100;
   
    if (s == 0) {
        var r = v * 255;
        var g = v * 255;
        var b = v * 255;
    } else {
        h = h * 6;
        if ( h == 6 ) h = 0;

        var var_i = Math.floor( h );
        var var_1 = v * (1 - s);
        var var_2 = v * (1 - s * (h - var_i));
        var var_3 = v * (1 - s * (1 - (h - var_i)));

        if      (var_i == 0) {r = v;     g = var_3; b = var_1}
        else if (var_i == 1) {r = var_2; g = v;     b = var_1}
        else if (var_i == 2) {r = var_1; g = v;     b = var_3}
        else if (var_i == 3) {r = var_1; g = var_2; b = v}
        else if (var_i == 4) {r = var_3; g = var_1; b = v}
        else                 {r = v;     g = var_1; b = var_2};

        r = r * 255;          
        g = g * 255;
        b = b * 255;
    }
   return RGB( Math.round(r), Math.round(g), Math.round(b));
}

I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 54
Откуда: Украина, Днепр
Репутация: 427
С нами: 5 лет 8 месяцев

Сообщение #2486 egiko » 20.09.2018, 15:07

kgena_ua,
Попробовал, но не работает.
По поводу структуры:
Спойлер
-[музыка]
--[rus]
---[альбом1]
---[альбом2]
---трек1
---трек2

:smile:
И вот при воспроизведении треков скрипт тянет коверы с "соседних" альбомов.
Или проще поменять структуру музыкального каталога?
The ability to let that which does not matter truly slide.
egiko
Новичок
Аватара
Репутация: 3
С нами: 9 лет 10 месяцев

Сообщение #2487 vladj » 20.09.2018, 15:22

egiko писал(а):При воспроизведении отдельных треков скрипт начинает искать картинки в других папках. В итоге показывает картинки из других папок/альбомов...Или проще поменять структуру музыкального каталога?
Естественно нужно привести в норму папку с музыкой сначала и не забываем разницу....просто картинки исполнителя или "коврики", т.е. обложка альбома...вроде как переключатель имеется того, что требуется искать и выводить (Art-Alb)?
HTPC Termaltake, eGlobal i5-7200, Asrock Beebox J3160, Onkyo 525E, цап SMSL, фронт Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 358
С нами: 8 лет 10 месяцев

Сообщение #2488 kgena_ua » 23.09.2018, 11:30

MC Web, решил почистить и разобраться как работает мой старый скрипт "Timer & Alarm clock".
Изменил способ установки часов, минут и секунд. Удобно-ли так будет.

Код: Выделить всё
// ==PREPROCESSOR==
// @name "Timer & Alarm clock"
// @author "kgena_ua"
// ==/PREPROCESSOR==

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
var font = gdi.Font("Arial",16,1);
var font2 = gdi.Font("Arial",12,1);
var ww, wh;

DT_LEFT = 0x00000000;   
DT_RIGHT = 0x00000002;   
DT_CENTER = 0x00000001;   
DT_VCENTER = 0x00000004;   
DT_SINGLELINE = 0x00000020;    
DT_WORD_ELLIPSIS = 0x00040000;   
   
MF_ENABLED = 0x00000000;   
MF_GRAYED = 0x00000001;
MF_CHECKED = 0x00000008;    
MF_SEPARATOR = 0x00000800;
MF_MENUBREAK = 0x00000040;

var bgcolor = RGB(20,20,20);

var on_mouse = false;

var play_color = RGB(128,255,128);
var stop_color = RGB(255,175,89);

var m_off_color = RGB(180,180,180);   
var m_on_color = RGB(255,255,220);   

var current_color;   

var playback = window.GetProperty("playback", "play");
var type_of_clock = window.GetProperty("type_of_clock", "alarm");

var set_timer = 0;
var set_h = "";
var set_m = "";
var set_s = "";

var timer_started = false;
var stop_timer = false;

var current_date;   
var current_txt = "";
var text_show = true;
var text_anim = false;

var volume_txt = "";
var volume_state;       
var volume_ch = false;

var img_path = fb.ProfilePath + "\\maybe\\textures\\timer\\";

var clock_timer = window.SetInterval(on_timer, 1000);

function on_paint(gr){
    !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);

    if (timer_started || volume_ch) {
        current_color = playback == "play" ? play_color : stop_color;
    } else {
        current_color = on_mouse ? m_on_color : m_off_color;
    }
   
    if (text_show) {
        gr.GdiDrawText(current_txt, font, current_color, 0, 0, ww, wh, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
    }

    if (timer_started || volume_ch) {
        var img = gdi.Image(img_path + type_of_clock + "_" + playback + ".png");

        var txt_width = gr.CalcTextWidth(sec2time(current_date), font);
        var h_img = 16 - 2;
        var y_img = wh / 2 - h_img / 2;
        var x_img = ww / 2 - txt_width / 2 - 25;
   
        img && gr.DrawImage( img, x_img, y_img, 16, 16, 0, 0, 16, 16, 0, 255);
    }
}

function sec2time(sec) {   
    var h, m, s;   
    h = Math.floor(sec / 3600);   
    m = Math.floor((sec - h * 3600) / 60);   
    s = sec - h * 3600 - m * 60;   
    if ( h < 10 ) h = "0" + h;   
    if ( m < 10 ) m = "0" + m;   
    if ( s < 10 ) s = "0" + s;   
    return h + " : " + m +  " : " + s;   
}   
         
function on_mouse_rbtn_up (x, y){    
    var _menu = window.CreatePopupMenu();
    var _group_1 = window.CreatePopupMenu();
    var _group_2 = window.CreatePopupMenu();
    var _group_3 = window.CreatePopupMenu();

    _menu.AppendMenuItem(MF_ENABLED, 10, timer_started ? "stop timer" : sec2time(set_timer));   
   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    MF_STATE = timer_started ? MF_GRAYED : MF_ENABLED;   

    _group_1.AppendTo(_menu, MF_STATE, "hours :");
    for (var i = 20; i <= 29; i++) {
        _group_1.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 20);
    }
   
    _group_2.AppendTo(_menu, MF_STATE, "minutes :");
    for (var i = 30; i <= 39; i++) {
        _group_2.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 30);
    }
   
    _group_3.AppendTo(_menu, MF_STATE, "seconds :");
    for (var i = 40; i <= 49; i++) {
        _group_3.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 40);
    }
   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    MF_STATE3 = !timer_started ? MF_ENABLED : MF_GRAYED;    
    _menu.AppendMenuItem(MF_STATE3, 60, playback);            
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   

    MF_STATE4 = type_of_clock == "timer" && !timer_started ? MF_CHECKED : !timer_started ? MF_ENABLED : MF_GRAYED;    
    _menu.AppendMenuItem(MF_STATE4, 70, "timer"); 
    MF_STATE5 = type_of_clock == "alarm" && !timer_started ? MF_CHECKED : !timer_started ? MF_ENABLED : MF_GRAYED;    
    _menu.AppendMenuItem(MF_STATE5, 80, "alarm clock");
       
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, 200, "Properties");
    _menu.AppendMenuItem(MF_ENABLED, 210, "Configure...");

    ret = _menu.TrackPopupMenu(x + 20, y - 50);   

    switch (ret) {
    case 10:
        if (!timer_started){
            set_timer = type_of_clock == "timer" && set_timer == 0 ? 86400 : set_timer;
            timer_started = true;
        } else {
            set_timer = 0;
            set_h = "";
            set_m = "";
            set_s = "";
            timer_started = false;
        }
        break;
    }
   
    if (ret >= 20 && ret <= 49){
        if (ret >= 20 && ret <= 29){
            set_h = set_h.toString(10).length >= 2 ? "" : set_h;
            set_h = set_h.toString(10) + (ret - 20).toString(10);
            set_h = parseInt(set_h, 10)
            set_h = set_h >= 24 ?  23 : set_h;
        }

        if (ret >= 30 && ret <= 39){
            set_m = set_m.toString(10).length >= 2 ? "" : set_m;
            set_m = set_m.toString(10) + (ret - 30).toString(10);
            set_m = parseInt(set_m, 10)
            //set_m = set_m >= 60 ?  59 : set_m;
        }

        if (ret >= 40 && ret <= 49){
            set_s = set_s.toString(10).length >= 2 ? "" : set_s;
            set_s = set_s.toString(10) + (ret - 40).toString(10);
            set_s = parseInt(set_s, 10)
            //set_s = set_s >= 60 ?  59 : set_s;
        }

        set_timer =set_h * 3600 + set_m * 60 + set_s;
       
        if (set_timer >= 86400){
            set_timer = 86400;
            set_h = "";
            set_m = "";
            set_s = "";
        }
        on_mouse_rbtn_up(x, y);
    }
       
    switch (ret) {
    case 60:   
        playback = playback == "play" ? "stop" : "play";
        window.SetProperty("playback", playback);       
        on_mouse_rbtn_up(x, y);
        break;
    case 70:
        type_of_clock = "timer";
        window.SetProperty("type_of_clock", type_of_clock);
        on_mouse_rbtn_up(x, y);
        break;
    case 80:
        type_of_clock = "alarm";
        window.SetProperty("type_of_clock", type_of_clock);
        on_mouse_rbtn_up(x, y);
        break;
    case 200:
        window.ShowProperties();
        break;   
    case 210:
        window.ShowConfigure();      
        break; 
    }
    _menu.Dispose();
    _group_1.Dispose();            
    _group_2.Dispose();
    _group_3.Dispose();   
   
    if (!timer_started) {
        set_timer = 0;
        set_h = "";
        set_m = "";
        set_s = "";
    }
    return true;
}

function on_mouse_move(x, y) {
    on_mouse = true;
    window.SetCursor(32649);
    window.Repaint();
}

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

function on_size(){
    ww = window.Width;   
    wh = window.Height;
}

function text_blinking() {
    ms = 0;   
    var blinking_timer = window.SetInterval(function() {
        ms = ms + 1;

        if (ms >= 7) {text_show = false};
        if (ms >= 10) {
            text_show = true;
            ms = 0;
        }
   
        if (!timer_started) {                        
            text_show = true;
            text_anim = false;           
            window.ClearInterval(blinking_timer);   
        }     
        window.Repaint();          
    }, 100 )   
}   

function Vol(v) {
     var volume_timer = window.SetInterval(function(){
        volume_ch = true;         
        if (v == "on") {      
            fb.Volume++;        
          if (fb.Volume >= volume_state ) {
                window.ClearInterval(volume_timer);       
                volume_ch = false;      
            }      
        }       
        if (v == "off") {      
            fb.Volume--;       
          if (fb.Volume <= -100 ) {
                fb.Stop();   
                fb.Volume = volume_state;
                window.ClearInterval(volume_timer);       
                volume_ch = false;
            }
        }
    }, 50);
}

function on_timer(id) {
    d = new Date();
    current_date = (d.getHours() * 3600) + (d.getMinutes() * 60) + d.getSeconds();

    current_txt = !volume_ch ? sec2time(current_date) : volume_txt;
   
    if (timer_started) {
        if (type_of_clock == "timer") {
            set_timer = set_timer - 1;
        }
   
        current_txt = !volume_ch ? sec2time(set_timer) : volume_txt;
       
        var event_1 = type_of_clock == "timer" ? set_timer <= 10 : Math.abs(set_timer - current_date) <= 10;
       
        if (event_1 && !text_anim) {
            text_anim = true;
            text_blinking();
        }
     
        var event_2 = type_of_clock == "timer" ? set_timer <= 0 : Math.abs(set_timer - current_date) <= 0;
       
        if (event_2) {
            if (playback == "play" && !fb.IsPlaying) {
                volume_state = fb.Volume;
                fb.Volume = -100;
                fb.Play();
                volume_txt = "PLAY";
                Vol("on");
            }               
            if (playback == "stop" && fb.IsPlaying) {
                volume_state = fb.Volume;
                volume_txt = "STOP";
                Vol("off");
            }
            set_timer = 0;
            timer_started = false;
            set_h = "";
            set_m = "";
            set_s = "";
        }
    }           
    window.Repaint();
}

I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 54
Откуда: Украина, Днепр
Репутация: 427
С нами: 5 лет 8 месяцев

Сообщение #2489 MC Web » 23.09.2018, 18:02

kgena_ua, привет.
kgena_ua писал(а):Изменил способ установки часов, минут и секунд. Удобно-ли так будет.
Да, не плохо.
Не знаю получится или нет, может попробовать установку интервала времени поручить колёсику (вверх - увеличение, вниз - уменьшение от максимального значения)?
В этом скрипте та же "проблема", что и старой версии в режиме ОСТАНОВКИ. У меня громкость плавно уменьшается, а потом резкое увеличение громкости включает окончание трека. Выставление большего значения таймера не помогает. В старой версии избавлялся от этого после плавного уменьшения - плавным нарастанием громкости. Здесь сделать по быстрому такое же не получилось.
MC Web
Гуру
Аватара
Репутация: 145
С нами: 5 лет 3 месяца

Сообщение #2490 LUR » 26.09.2018, 03:27

kgena_ua, в биографии глюк после отсеивания языков в меню, если панель пуста. Всплывает сообщение "Текст не найден". Кривовато выглядит. Еще появляется auto cycle:off при клике на место, где должна быть картинка:

Снимок.PNG
Снимок.PNG (4.13 КБ) Просмотров: 883
LUR M
Модератор
Аватара
Возраст: 36
Откуда: Минск
Репутация: 229
С нами: 6 лет

Сообщение #2491 kgena_ua » 26.09.2018, 12:48

LUR, с "Текст не найден", тут понятно, уберу.
А вот с "auto cycle:off при клике на место, где должна быть картинка". Она должна появляться только при удержании SHIFT.
Не могу повторить этот глюк.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 54
Откуда: Украина, Днепр
Репутация: 427
С нами: 5 лет 8 месяцев

Сообщение #2492 seriousstas » 26.09.2018, 15:07

kgena_ua
Привет!!! Соберу по биографии все пожелания в кучу:
1. По поводу "Текст не найден" . Ранее делал автопереключение на инглиш при отсутствии текста на Русском .
Возврат - при смене трека..
Так-же можно поступать и с картинками (опционально) переключать на обложку .
2.Вывод картинки из папки в случаях, пока идет загрузка , при отсутствии на Ласте или в офлайн режиме ,через:
Код: Выделить всё
var c_img = get_album_art(fb.GetNowPlaying())
function get_album_art(metadb) {
window.ClearInterval(cycle_timer);z = 0;
if (metadb)
return utils.GetAlbumArtV2(metadb, z);       
}
Выводится одна картинка - при этом ни скрипт ни весь плеер не нагружен..
Возможно так сделано и у Вильба - не вникал.
3.Вызов-сворачивание текста в один клик.(давно просили))
4.Поддержка тачскринов (текст и картинки) опционально. Вон Вильба уболтал сделать в его библиотеке -
на днях будет релиз думаю ..
Тем более всё ведь есть ..)
Мой MOD , напомню здесь- несколько месяцев тестов - ОК..
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 97
С нами: 3 года 10 месяцев

Сообщение #2493 MC Web » 26.09.2018, 16:23

kgena_ua, приветствую.

Заметил "косяк" для пунктов Популярно на этой недели и Последние релизы при отображении иероглифов:
Русский язык
Изображение

На сайте LAST.FM
Изображение
Английский язык
Изображение
Японский язык
Изображение

seriousstas писал(а):Ранее делал автопереключение на инглиш при отсутствии текста на Русском .
Тут вопрос спорный. Лично для меня в этом нет никакой необходимости - пусть лучше ничего не будет...
seriousstas писал(а):Вывод картинки из папки в случаях, пока идет загрузка , при отсутствии на Ласте или в офлайн режиме
seriousstas писал(а):Выводится одна картинка - при этом ни скрипт ни весь плеер не нагружен..
Что то мудрёно ты объяснил. А чем default img в данном скрипте не устраивает?
Отображение выбранного изображения по умолчанию
Изображение
Слушаю в основном офлайн-плейлисты, папок с обложками нет, кроме Logos, из которой берутся изображения в панель обложек плюс что скачал скрипт Биографии. В моем случае отображается в основном то, что скачено с Интернет, а не из папок...
Последний раз редактировалось MC Web 26.09.2018, 17:38, всего редактировалось 1 раз.
MC Web
Гуру
Аватара
Репутация: 145
С нами: 5 лет 3 месяца

Сообщение #2494 LUR » 26.09.2018, 17:15

MC Web писал(а):Тут вопрос спорный. Лично для меня в этом нет никакой необходимости - пусть лучше ничего не будет...
Да, реально спорный. Ведь плагин иногда тупит и не подгружает инфу сразу и непонятно ждать или успокоиться)
LUR M
Модератор
Аватара
Возраст: 36
Откуда: Минск
Репутация: 229
С нами: 6 лет

Сообщение #2495 MC Web » 26.09.2018, 17:49

LUR, что имеешь ввиду:
- По поводу "Текст не найден" - он выводится, если нет Исполнителя и это логично.
- По поводу
LUR писал(а):Ведь плагин иногда тупит и не подгружает инфу сразу и непонятно ждать или успокоиться)
Насчет тупит - не замечал. У меня 1 - 4 сек. задержка и то из за загрузки фото (Качество загружаемого изображения - Среднее), далее текст:
Если нет биографии
Изображение
Компонент foo_uie_biography, по моему тупил больше. К хорошему быстро привыкаешь... :smile:
MC Web
Гуру
Аватара
Репутация: 145
С нами: 5 лет 3 месяца

Сообщение #2496 kgena_ua » 26.09.2018, 18:37

MC Web писал(а):при отображении иероглифов:
MC Web, проблему знаю.
Эти данные так записываются в файл ini. Как решить не знаю. Может при записи в ini как-то указывать кодировку, не знаю.

Изменил скрипт "таймер". Время выставляется не через меню, а в самом окне колесом мыши (+Shift). По поводу глюков при автоизменении громкости подробнее.
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Timer & Alarm clock"
// @author "kgena_ua"
// ==/PREPROCESSOR==

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
var font = gdi.Font("Arial",16,1);
var font2 = gdi.Font("Arial",10,1);
var ww, wh;

DT_LEFT = 0x00000000;   
DT_RIGHT = 0x00000002;   
DT_CENTER = 0x00000001;   
DT_VCENTER = 0x00000004;   
DT_SINGLELINE = 0x00000020;    
DT_WORD_ELLIPSIS = 0x00040000;   
   
MF_ENABLED = 0x00000000;   
MF_GRAYED = 0x00000001;
MF_SEPARATOR = 0x00000800;
MF_MENUBREAK = 0x00000040;

VK_SHIFT = 0x10;
VK_CONTROL = 0x11;


var bgcolor = RGB(20,20,20);

var on_mouse = false;

var play_color = RGB(128,255,128);
var stop_color = RGB(255,175,89);

var m_on_color = RGB(255,255,220);   
var m_off_color = RGB(180,180,180);   

var current_color;   

var playback = window.GetProperty("playback", "play");
var type_of_clock = window.GetProperty("type_of_clock", "alarm");

var timer_date = 0;
var timer_started = false;
var timer_set = false;

var current_date;   
var current_txt = "";
var text_show = true;
var text_anim = false;

var volume_txt = "";
var volume_state;       
var volume_ch = false;

var sep = " : ";
var tiw = 0;
var siw = 0;
var tx1 = 0;
var tx2 = 0;
var tx3 = 0;

var on_h = false;
var on_m = false;
var on_s = false;

var img_path = fb.ProfilePath + "\\maybe\\textures\\timer\\";

var clock_timer = window.SetInterval(on_timer, 1000);

function on_paint(gr){
    !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
   
    tiw = gr.CalcTextWidth("00", font);
    siw = gr.CalcTextWidth(sep, font);
    th = gr.CalcTextHeight("0", font);
   
    tw = tiw * 3 + siw * 2;
    tx1 = (ww - tw) / 2;
    tx2 = tx1 + tiw + siw;
    tx3 = tx2 + tiw + siw;
    ty = (wh - th) / 2;

    if (timer_started || volume_ch) {
        color = playback == "play" ? play_color : stop_color;
    } else {
        color = on_mouse ? m_on_color : m_off_color;
    }
       
    if (timer_set) {
        color = m_off_color;
    }
   
    if (text_show && !volume_ch){
        gr.GdiDrawText( sep, font, color, tx1 + tiw, ty, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );
        gr.GdiDrawText( sep, font, color, tx2 + tiw, ty, ww, wh, DT_LEFT | DT_WORD_ELLIPSIS );

        var d = timer_set ? timer_date : current_txt;

        gr.GdiDrawText( sec_time(d).h, font, on_h ? m_on_color : color, tx1, ty, tiw, th, DT_LEFT | DT_WORD_ELLIPSIS );
        gr.GdiDrawText( sec_time(d).m, font, on_m ? m_on_color : color, tx2, ty, tiw, th, DT_LEFT | DT_WORD_ELLIPSIS );
        gr.GdiDrawText( sec_time(d).s, font, on_s ? m_on_color : color, tx3, ty, tiw, th, DT_LEFT | DT_WORD_ELLIPSIS );
    }
   
    if (volume_ch) {
        gr.GdiDrawText( volume_txt, font, color, 0, 0, ww, wh, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
    }
   
    if (timer_started || volume_ch) {
        var img = gdi.Image(img_path + type_of_clock + "_" + playback + ".png");
       
        if (img){
            y_img = (wh - img.Height) / 2;
            x_img = tx1 - img.Width * 1.5;
            gr.DrawImage( img, x_img, y_img, 16, 16, 0, 0, 16, 16, 0, 255);
        }
    }
}

function sec_time(sec) {
    var time = {t: 0, h: 0, m: 0, s: 0};     
    var h, m, s;   
    h = Math.floor(sec / 3600);   
    m = Math.floor((sec - h * 3600) / 60);   
    s = sec - h * 3600 - m * 60;   
    if ( h < 10 ) h = "0" + h;   
    if ( m < 10 ) m = "0" + m;
    if ( s < 10 ) s = "0" + s;   

    time.t = h + sep + m + sep + s;
    time.h = h;
    time.m = m;
    time.s = s;
    return time;   
}   

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

    if (!timer_set && !timer_started){
        _menu.AppendMenuItem(MF_ENABLED, 10, "set timer" );
    }

    if (timer_set && !timer_started){
        _menu.AppendMenuItem(MF_ENABLED, 20, "start timer" );
        _menu.AppendMenuItem(MF_ENABLED, 30, "reset timer" );
    }

    if (!timer_set && timer_started){
        _menu.AppendMenuItem(MF_ENABLED, 30, "stop timer" );
    }

    MF_STATE = !timer_started ? MF_ENABLED : MF_GRAYED;
   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_STATE, 60, playback);
   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    text = type_of_clock == "alarm" && timer_started ? " at " + sec_time(timer_date).t : "";
    _menu.AppendMenuItem(MF_STATE, 70, type_of_clock + text);

    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, 200, "Properties");
    _menu.AppendMenuItem(MF_ENABLED, 210, "Configure...");

    ret = _menu.TrackPopupMenu(x + 20, y - 50);   

    switch (ret) {
    case 10:
        timer_date = 0;
        timer_set = true;
        break;
    case 20:
        timer_set = false;
        timer_date = type_of_clock == "timer" && timer_date == 0 ? 86400 : timer_date;
        timer_started = true;
        break;
    case 30:
        timer_set = false;
        timer_started = false;
        break;
    case 60:   
        playback = playback == "play" ? "stop" : "play";
        window.SetProperty("playback", playback);       
        on_mouse_rbtn_up(x, y);
        break;
    case 70:   
        type_of_clock = type_of_clock == "timer" ? "alarm" : "timer";
        window.SetProperty("type_of_clock", type_of_clock);       
        on_mouse_rbtn_up(x, y);
        break;
    case 200:
        window.ShowProperties();
        break;   
    case 210:
        window.ShowConfigure();      
        break; 
    }
    _menu.Dispose();
    return true;
}

function on_mouse_move(x, y) {
    on_h = false;
    on_m = false;
    on_s = false;
   
    switch (true) {
    case (x > tx1 && x < tx1 + tiw + siw / 2 && timer_set):
        on_h = true;
        break;
    case (x > tx2 - siw / 2 && x < tx2 + tiw + siw / 2 && timer_set):
        on_m = true;
        break;
    case (x > tx3 - siw / 2 && x < tx3 + tiw + siw / 2 && timer_set):
        on_s = true;
        break;
    }
   
    on_mouse = true;
    window.SetCursor(32649);
    window.Repaint();
}

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

function on_size(){
    ww = window.Width;   
    wh = window.Height;
}

function text_blinking() {
    ms = 0;   
    var blinking_timer = window.SetInterval(function() {
        ms = ms + 1;

        if (ms >= 7) {text_show = false};
        if (ms >= 10) {
            text_show = true;
            ms = 0;
        }
   
        if (!timer_started) {                        
            text_show = true;
            text_anim = false;           
            window.ClearInterval(blinking_timer);   
        }     
        window.Repaint();          
    }, 100 )   
}   

function Vol(v) {
     var volume_timer = window.SetInterval(function(){
        if (v == "on") {      
            fb.VolumeUp();
          if (fb.Volume >= volume_state ) {
                window.ClearInterval(volume_timer);       
                volume_ch = false;
            }      
        }       
        if (v == "off") {      
            fb.VolumeDown();
          if (fb.Volume <= -100 ) {
                fb.Stop();   
                fb.Volume = volume_state;
                window.ClearInterval(volume_timer);       
                volume_ch = false;
            }
        }
    }, 40);
}

function on_timer(id) {
    d = new Date();
    current_date = (d.getHours() * 3600) + (d.getMinutes() * 60) + d.getSeconds();

    current_txt = current_date;

    while (true) {
        if (timer_started && (playback == "play" && fb.IsPlaying || playback == "stop" && !fb.IsPlaying)) {
            timer_date = 0;
            timer_started = false;
            break;   
        }
        if (timer_started) {
            if (type_of_clock == "timer") {
                timer_date = timer_date - 1;
            }
   
            if (type_of_clock == "timer"){
                current_txt = timer_date;
            } else {
                if (timer_date > current_date){
                    current_txt = current_date;
                } else {
                    current_txt = current_date;
                }
            }
 
            var event_1 = type_of_clock == "timer" ? timer_date <= 10 : Math.abs(timer_date - current_date) <= 10;
       
            if (event_1 && !text_anim) {
                text_anim = true;
                text_blinking();
            }
     
            var event_2 = type_of_clock == "timer" ? timer_date <= 0 : Math.abs(timer_date - current_date) <= 0;
       
            if (event_2) {
                volume_ch = true;   
                if (playback == "play" && !fb.IsPlaying) {
                    volume_state = fb.Volume;
                    fb.Volume = -100;
                    fb.Play();
                    volume_txt = "PLAY";
                    Vol("on");
                }               
                if (playback == "stop" && fb.IsPlaying) {
                    volume_state = fb.Volume;
                    volume_txt = "STOP";
                    Vol("off");
                }
                timer_date = 0;
                timer_started = false;
            }
        }
        break;
    }
    window.Repaint();
}

function on_mouse_wheel(delta) {
    if (timer_set){
        shiftDown = utils.IsKeyPressed(VK_SHIFT) ? true : false;
       
        switch (true) {
        case on_h:
            timer_date = timer_date + (shiftDown ? 3600 : 3600) * delta;
            break;
        case on_m:
            timer_date = timer_date + (shiftDown ? 600 : 60) * delta;
            break;
        case on_s:
            timer_date = timer_date + (shiftDown ? 10 : 1) * delta;
            break;
        }

        timer_date = timer_date > 86400 ?  timer_date - 86400 : timer_date;
        timer_date = timer_date < 0 ? Math.abs(timer_date + 86400) : timer_date;
   
        window.Repaint();
    } 
}

I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 54
Откуда: Украина, Днепр
Репутация: 427
С нами: 5 лет 8 месяцев

Сообщение #2497 LUR » 26.09.2018, 18:44

MC Web писал(а):По поводу "Текст не найден" - он выводится, если нет Исполнителя и это логично.
Мне тоже не нужна надпись. Но эта надпись, если я правильно понял, появляется, когда нет контента с вики, если нет, то тоже самое, что если нет исполнителя.
LUR M
Модератор
Аватара
Возраст: 36
Откуда: Минск
Репутация: 229
С нами: 6 лет

Сообщение #2498 MC Web » 26.09.2018, 19:10

LUR писал(а):Но эта надпись, если я правильно понял, появляется, когда нет контента с вики
Если нет на вики - пишется "Вики-статьи нет пока...".

kgena_ua писал(а):Эти данные так записываются в файл ini. Как решить не знаю. Может при записи в ini как-то указывать кодировку
Понятно, там должна осуществляться запись в кодировке UTF-8.
kgena_ua писал(а):По поводу глюков при автоизменении громкости подробнее.
У меня такие настройки по выводу звука для плавного перехода
Изображение
т.к. размер буфера большой, то после остановки слышу окончание трека.
В старом скрипте был
Код: Выделить всё
window.GetProperty("fading",40)
и при данном значении я не слышал окончания трека. Т.е. когда срабатывал ТАЙМЕР на остановку происходило плавное уменьшение громкости до нуля, остановка и затем плавное увеличение регулятора громкости до нужного значения.
MC Web
Гуру
Аватара
Репутация: 145
С нами: 5 лет 3 месяца

Сообщение #2499 LUR » 26.09.2018, 19:17

MC Web писал(а):Если нет на вики - пишется "Вики-статьи нет пока...".
И где вы это увидели?
LUR M
Модератор
Аватара
Возраст: 36
Откуда: Минск
Репутация: 229
С нами: 6 лет

Сообщение #2500 MC Web » 26.09.2018, 19:24

kgena_ua писал(а):Изменил скрипт "таймер". Время выставляется не через меню, а в самом окне колесом мыши (+Shift).
Классно получилось, по "фирменному". :clap: :clap: :clap:
Только выставлять время надо справа - налево (сек. > мин. > час.), а то при прокрутке колесом может сбиться значение которое слева.

Добавлено спустя 2 минуты 16 секунд:
LUR писал(а):И где вы это увидели?
Я даже привел скриншот в данном сообщении...
MC Web
Гуру
Аватара
Репутация: 145
С нами: 5 лет 3 месяца

Пред.След.

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