Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #1301 MC Web » 05.11.2016, 14:16

Вышла новая версия Biography 0.2 beta для JScript Panel 1.1.0+ от WilB:

Изображение

Еще бы не мусорил, цены бы ему не было...
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #1302 kutuzof » 05.11.2016, 17:23

seriousstas, можно ли сделать так, что бы при нажатии на артиста текст с биографией открывался не на всю панель, а на определённое. А при следующем нажатии уже на всю панель.
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #1303 seriousstas » 05.11.2016, 19:58

kutuzof
Дуамаю да , но в режиме - "без кнопок" .
а на определённое.
на какое ?
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #1304 kutuzof » 05.11.2016, 20:07

seriousstas, txt_y 407
kutuzof M
Аватара
Откуда: г. Орёл, Россия
Репутация: 256
С нами: 8 лет 2 месяца

Сообщение #1305 kgena_ua » 05.11.2016, 22:54

Peak meter (balls of fire)
мелкие изменения по графике
Безымянный.png
Безымянный.png (4.35 КБ) Просмотров: 2321

Код: Выделить всё
// ==PREPROCESSOR==
// @name "Peak meter (balls of fire)"
// @author "kgena_ua"
// @version "07102016"
// ==/PREPROCESSOR==

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

DT_CENTER = 0x00000001;   
DT_VCENTER = 0x00000004;   
DT_SINGLELINE = 0x00000020;   
DT_WORD_ELLIPSIS = 0x00040000;

var ww = window.Width, wh = window.Height;
var on_mouse = false;
var color = [];
var combinedColor1 = [];
var combinedColor2 = [];
var separator;
var pos_x = 0, pos_y = 0;;
var VUMOffset_t, t_height, t_width;
var wheel = false;
var tooltip_timer;

ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,   
    background: 3,   
    selection_background: 4,   
    inactive_selection_background: 5,   
    active_item_frame: 6   
}   

function get_color(){   
   bgcolor = window.GetColorCUI(ColorTypeCUI.background);
    c1 = bgcolor;
   c2 = window.GetColorCUI(ColorTypeCUI.text);
    c3 = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);   
    c4 = window.GetColorCUI(ColorTypeCUI.selection_text);   
    color1 = [ c1, c2 ];   
    color2 = [ c3, c4 ];   
   window.Repaint();
}   

get_color();

function on_colors_changed(){
    get_color();
}

var dll;
var is_dll = utils.CheckComponent("\\user-components\\foo_vis_vumeter\\foo_vis_vumeter");
if (is_dll) {dll = false} else {dll = true};

if (dll) {VUMeter = new ActiveXObject("VUMeter")};   
if (dll) {VUMeter.RegisterWindow(window.ID)}; // do not use for transparent mode
   
function ToDB(Level){   
    return Math.round(2000*Math.log(Level)/Math.LN10)/100;   
}

var db = [-100,-90,-80,-70,-60,-55,-50,-40,-30,-20,-18,-16,-12,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10]; 

for (var i = 0; i <= db.length; i++) {   
    if (db[i] == 0) {separator = i};
}
   
var points = db.length;
var s1 = separator;
var s2 = points - s1;

for(var j = 0; j < s1; j++) {
    combinedColor1.push(combineColors(color1[0], color1[1], j / s1));
}
for(var j = 0; j < s2; j++) {
    combinedColor2.push(combineColors(color2[0], color2[1], j / s2));
}

color = combinedColor1.concat(combinedColor2);

var rLM = 0, xLM = 0, yLM = 0;
var rRM = 0, xRM = 0, yRM = 0;
var pm_row = window.GetProperty("pm row", 10);
var pm_height = window.GetProperty("pm height", 40);
var rk = window.GetProperty("radius", 0.8);

function on_paint(gr) {   
    gr.FillSolidRect(0, 0, ww, wh, bgcolor);

    gr.SetSmoothingMode(4);
    gr.SetInterpolationMode(7);
   
    if (dll) {       
        L = VUMeter.LeftLevel;   
        R = VUMeter.RightLevel;   
        LM = VUMeter.LeftPeak;   
        RM = VUMeter.RightPeak;   
    }

    if (fb.IsPlaying && dll) {
        for (var i = 0; i <= points; i++) { 
            rLM = i * rk;           
            xLM = getRandomArbitary(0 + rLM/2, ww / 2);
            yLM = getRandomArbitary(pm_row + rLM / 2, pm_row + pm_height - rLM / 2);
           
            if (ToDB(LM) > db[i]) {
                gr.DrawEllipse(xLM - rLM / 2, yLM - rLM / 2, rLM, rLM, 4, bgcolor);
                gr.FillEllipse(xLM - rLM / 2, yLM - rLM / 2, rLM, rLM, color[i]);
            }

            rRM = i * rk;
            xRM = getRandomArbitary(ww / 2, ww - rRM/2);
            yRM = getRandomArbitary(pm_row + rRM / 2, pm_row + pm_height - rRM / 2);
           
            if (ToDB(LM) > db[i]) {
                gr.DrawEllipse(xRM - rRM / 2, yRM - rRM / 2, rRM, rRM, 4, bgcolor);
                gr.FillEllipse(xRM - rRM / 2, yRM - rRM / 2, rRM, rRM, color[i]);
            }
        }
       
        VUMOffset_t = Math.round(VUMeter.Offset) + " db";
        t_height = gr.CalcTextHeight(VUMOffset_t, font) + 2;
        t_width = gr.CalcTextWidth(VUMOffset_t, font) + 10;
        wheel && gr.FillSolidRect(pos_x - t_width, pos_y - t_height + 0, t_width, t_height, bgcolor);
        wheel && gr.GdiDrawText(VUMOffset_t, font, color2[0], pos_x - t_width, pos_y - t_height + 0, t_width, t_height, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
    } else {
        rLM = 0; xLM = 0; yLM = 0;
        rRM = 0; xRM = 0; yRM = 0;
    }
   
    gr.GdiDrawText("", font, c4, 10, 10, ww, wh);
}

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

function on_mouse_move(x,y) {
    on_mouse = true;
    pos_x = x <= t_width ? t_width : x;
    pos_y = y <= t_height ? t_height : y;
    window.SetCursor(32649);
    window.Repaint();
}

function on_mouse_leave() {
    on_mouse = false;
    window.SetCursor(32512);
    window.Repaint();
}
 
function on_mouse_wheel(step) {
    wheel = true;
    VUMeter.Offset = VUMeter.Offset + step;
    window.Repaint();
    tooltip_timer && window.ClearTimeout(tooltip_timer);
    tooltip_timer = window.SetTimeout(function() {
        wheel = false;
        tooltip_timer && window.ClearTimeout(tooltip_timer);
    }, 2000);
}

function combineColors(c1, c2, f){ // When fraction is 0, result is 100% color1, when f is 1, result is 100% color2.
    var c1 = toRGB(c1);
    var c2 = toRGB(c2);

    var r = Math.round(c1[0] + f * (c2[0] - c1[0]));
    var g = Math.round(c1[1] + f * (c2[1] - c1[1]));
    var b = Math.round(c1[2] + f * (c2[2] - c1[2]));
   
    return (0xff000000 | (r << 16) | (g << 8) | (b));
}

function toRGB(d){ // convert back to RGB values
    var d = d-0xff000000;
    var r = d >> 16;
    var g = d >> 8 & 0xFF;
    var b = d & 0xFF;

    return [r,g,b];
}

function getRandomArbitary(min, max){
    return Math.random() * (max - min) + min;
    //return Math.floor(Math.random() * (max - min + 1)) + min;
}
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #1306 AHAPXICT » 05.11.2016, 23:32

kgena_ua, ещё с первой версии сделал скриншот. Как визуализация AVC, там можно делать нечто подобное с привязкой к BPM.
Спойлер
Peak meter.png
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #1307 kgena_ua » 06.11.2016, 10:53

Панель Get Covers (Artwork)

Отображение артиста в PSS (например под плейлистом, в моем случае ELP).

Раньше, средствами PSS, я "искал" в текущей папке изображение front, cover, folder и тд. Но изображения могут находится в других папках. Средствами PSS найти их сложно, а вернее не возможно.
Написал такой скрипт для панели Get Covers (Artwork), который находит и сохраняет изображение в определенной папке, из которой PSS его берет для отображения.
Код: Выделить всё

var set_path = fb.ProfilePath + "\\maybe\\settings\\";
var elp_bg_file = set_path + "\\elp_bg_file\\";

if (!fso.FolderExists(elp_bg_file)) {fso.CreateFolder(elp_bg_file)};

function SaveFile(){
    if (!fso.FolderExists(set_path) || !fso.FolderExists(elp_bg_file)) return;
    if (fso.FileExists(elp_bg_file + "elp.png")) fso.DeleteFile(elp_bg_file + "elp.png");

    var Img = new ActiveXObject("WIA.ImageFile.1");
    var IP = new ActiveXObject("WIA.ImageProcess.1");

     if (external.length > 0) {
        for (var i = 0; i < external.length; i++) {
            var name = external[i];
            var lc_name = get_fn(name).toLowerCase()
           
            if (lc_name.indexOf("front") >= 0  || lc_name.indexOf("cover") >= 0|| lc_name.indexOf("folder") >= 0 || name.indexOf(album) >= 0|| name.indexOf(artist) >= 0){
                Img.LoadFile(name);
                var img = gdi.Image(name);
               
                IP.Filters.Add(IP.FilterInfos("Scale").FilterID);
                IP.Filters(1).Properties("MaximumWidth") = img.Width > 500 ? 500 : img.Width;
                IP.Filters(1).Properties("MaximumHeight") = img.Height > 500 ? 500 : img.Height;
               
                Img = IP.Apply(Img);
                Img.SaveFile(elp_bg_file + "elp.png");
                break;
            }
        }
    }
    RefreshPSS();
}

function get_fn(p) {
    return p.replace(/.*\\|\..*/g,'');
}

function RefreshPSS() {
   if (fb.IsPlaying || fb.IsPaused) {
      fb.PlayOrPause();
      fb.PlayOrPause();
   } else {
      fb.Play();
      fb.Stop();
   }
}
Если будет интерес выложу весь скрипт панели Get Covers (Artwork).
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #1308 vladj » 06.11.2016, 11:59

kgena_ua:в текущей папке изображение front, cover, folder и тд. Но изображения могут находится в других папках.
Значит-ли это что сначала покажет картинки из папки с альбомом и затем уровнем выше, из папки с альбомами артиста ?
Я много раз просил такой скрипт что-бы не держать в каждой папке альбома с артистом по 15-20 одинаковых картинок.
Бывает ведь один артист с 15-20 альбомами.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 9 месяцев

Сообщение #1309 kgena_ua » 06.11.2016, 14:10

vladj, Панель Get Covers (Artwork).

Имя файла Front - для примера, а так любые графические файлы.

Безымянный.png
Безымянный.png (10.48 КБ) Просмотров: 2250


Есть папка - 0 (артист):
в папке 0 - Front 4.jpg (любые графические файлы);
в папке 0 папка artworks (или cover, covers, scan, scans, artwork, artworks, images, pic) - Front 5.jpg (любые графические файлы);

В папке 0 папка There And Back (название альбома).
в папке There And Back - Front 1.jpg (любые графические файлы);
в папке There And Back папки coversи и folder (или любые другие названия папок в которых есть картинки) - Front 2.jpg, Front 3.jpg и т.д.

Примерно так.
Я делал под возможность иметь такую структуру:

Папка артист а в ней
artworks (или cover, covers, scan, scans, artwork, artworks, images, pic)
Альбом 1
Альбом 2
Альбом 3

,,,,,,,,,,,,

т.е. на все альбомы одна папка с картинками (artworks в данном примере).
Если изображения (обложки) альбомов разные, то обложки (front или cover или ....) в папки с альбомами, а все общие в папку artworks.

Добавлено спустя 8 минут 37 секунд:
vladj:Значит-ли это что сначала покажет картинки из папки с альбомом
Сначала покажет изображение обложки выбранного альбома, независимо от того, где находится. Имя файла обложки должно быть cover.*, front.*, folder.*, album.*, %album%.*, %artist%.*.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #1310 MC Web » 07.11.2016, 21:11

kgena_ua, попался (хоть и редко) плейлист, не в кодировке UTF-8, при загрузке которого происходит сбой в работе скрипта WSH Biography Text & Picture Last.fm.

http://www.ex.ua/playlist/1217123.m3u
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #1311 AHAPXICT » 07.11.2016, 22:44

MC Web:происходит сбой в работе скрипта
Подтверждаю. Но это жесть :biggrin: : 3>@L !0@CE0=>2
У старых версий такой проблемы нет, об этом тоже хотел написать и вылетело из головы. Когда тестировал новую версию БИО(seriousstas MOD) был вылет, не помню названия исполнителя (радио играло), но в названии содержались две обратные косые \/. В старых версиях ошибка не возникает, там другие условия перебора.
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #1312 seriousstas » 08.11.2016, 00:17

Там в названии (квадрат3>@L !0@CE0=>2) есть квадрат ,может отображаться прямоугольником.
Нужно добавить в исключения (сюда к нам он даже не копируется):
стр 94
return n.replace(/[квадрат\/\:\*\?\"\<\>\|]/g,' ');
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #1313 kgena_ua » 08.11.2016, 11:38

Оказывается и такое бывает :smile:
В данный момент на плейлисте проверить не могу, но сделал такой пример.
Вверху исходный текст, внизу после обработки (замене неугодных символов).
Безымянный.png
Безымянный.png (3.63 КБ) Просмотров: 2080

Код: Выделить всё
n.replace(/[^a-zA-Z0-9а-яА-я\s-]/g,'')
т.е.нужно заменить
return n.replace(/[\/\:\*\?\"\<\>\|]/g,' ');
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #1314 MC Web » 08.11.2016, 15:26

kgena_ua, после замены на
Код: Выделить всё
n.replace(/[^a-zA-Z0-9а-яА-я\s-]/g,'')
проблем в работе скрипта нет. :clap:

Интересно в теге %album artist% (данного плейлиста) кодировка UTF-8, а в остальных, ради интереса, так и не смог определить кодировку.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #1315 AHAPXICT » 08.11.2016, 20:16

kgena_ua,
kgena_ua:n.replace(/[^a-zA-Z0-9а-яА-я\s-]/g,'')
Сижу и смеюсь с себя, вы же по этой теме всё расписали!
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 11 лет

Сообщение #1316 MC Web » 08.11.2016, 20:38

AHAPXICT, кажется это было сделано вначале в Radio Logo Script.js.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #1317 kgena_ua » 09.11.2016, 13:13

Немного изменил строку. Убрал из исключения символ &.
Код: Выделить всё
return n.replace(/[^a-zA-Z0-9а-яА-Я\s-&]/g,'')
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #1318 seriousstas » 12.11.2016, 02:51

kgena_ua
А с этим можно что-то сделать ?
Во время сбоя картинки грузит в папку, но выводит только одну (прокрутка не работает) ..

Порадовала последняя библиотека v1.2 Вильба :dance: :
http://pccar.ru/showpost.php?p=374100&postcount=2979
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #1319 MC Web » 12.11.2016, 11:10

seriousstas, значит это не у меня одного.

Думал, что это связано с моим Интернет соединением, запустил параллельно в сборке через прикрепляемую панель Biography от WilB - там картинки грузит все, когда сбоит скрипт WSH Biography Text & Picture Llast.fm.
MC Web
Репутация: 248
С нами: 11 лет 3 месяца

Сообщение #1320 seriousstas » 12.11.2016, 20:36

Я выше показывал видео , когда на диск загружается меньше файлов (в отличии от подобных скриптов) ,
чем есть на сервере, это скорей всего связано с фильтрацией,
а вот то , что не выводятся картинки , которые уже загружены , не хорошо :)
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Пред.След.

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