Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #1421 seriousstas » 21.11.2016, 17:39

AHAPXICT
font size: biography
Вчера тоже заметил(чуть увеличил шрифт в режиме артист,когда только одна строка), полагал - это редактор "съел" пробел ..

Думаю, до вечера сделаю мод..
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 56
С нами: 2 года 1 месяц

Сообщение #1422 kgena_ua » 21.11.2016, 18:31

AHAPXICT,
да есть такое, не сохраняет размер шрифта. Надо убрать это значение из раздела user , стр. 34 - убрать пробел пред font:
Код: Выделить всё
var font_size_t = window.GetProperty("font size: biography", 12);
А лучше сделать отдельно Shift + колесо для текста и для артиста.

Тут проблема другая. изображения альбомов грузятся только с первой страницы, а их может быть там Page 1 of 16 для примера.
Хочу посоветоваться.
Колличество страниц я могу вытащить - написал такой скрипт
Код: Выделить всё
var albums_pages;

function get_lastFM_pic_pages(){
    xmlhttp0 = new ActiveXObject("Microsoft.XMLHTTP");   
    url0 = ("http://www.last.fm/" + lang_query[lang] + "music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a]+ "?page=1"); 
    xmlhttp0.open("GET", url0, true ); 
    xmlhttp0.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xmlhttp0.send(null);     
    xmlhttp0.onreadystatechange = function () {
        if (xmlhttp0.readyState == 4) {
            if (xmlhttp0.status == 200) { 
                doc.open();     
                var div = doc.createElement("div");
                div.innerHTML = xmlhttp0.responsetext;
                var data = div.getElementsByTagName("li");
                for (i = 0; i < data.length; i++) {
                    if (data[i].className == "pages"){
                        albums_pages = data[i].innerHTML.replace(/^\s+|\s+$/g,"").replace(/^(.*\s)/g,'');
                    }
                }
            }     
            doc.close();
            window.Repaint();
        }
    }
}     
И теперь что, через цикл запускать function get_lastFM_pic(p) с адресом

url1 = ("http://www.last.fm/" + lang_query[lang] + "music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a]+ "?page=" + номер страницы);

seriousstas, что думаете.
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 314
С нами: 3 года 11 месяцев

Сообщение #1423 seriousstas » 21.11.2016, 18:56

а их может быть там Page 1 of 16
Хорошего много не бывает , но тут есть сомнения ,что кто-то будет вписывать номер страницы ,
другое дело автопереход на следующую , после загрузки из предидущей,
но и тут спорно , как это на практике , возможно и нужно-ли (столько каверов альбомов).
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 56
С нами: 2 года 1 месяц

Сообщение #1424 MC Web » 21.11.2016, 19:18

kgena_ua, столкнулся с еще одним багом при работе Biography Text & Album Info & Picture last.fm, в имени исполнителя присутствовал знак /, соответственно папка не создастся.
Хотел сам вставить в замену, но данный формат replace для меня не понятен:
Код: Выделить всё
    return n.replace(/[^a-zA-Z0-9а-яА-Я\s-&\ёЁ.,'[]]/g,'').replace(/^\s+|\s+$/g,"").substr(0,200);
MC Web
Мастер
Репутация: 64
С нами: 3 года 7 месяцев

Сообщение #1425 kgena_ua » 21.11.2016, 19:38

seriousstas, зачем вписывать номер страниц
Вот пример для скачивания обложки:
добавил пункт в меню
Код: Выделить всё
    case 70:
    //ddd = 0;
        if (!metadb) return; 
        tf_album = Eval("%album%");
        get_lastFM_pic_pages();
        for (i = 1; i <= albums_pages; i++) {   
            get_album(i);
        }
        break;

и сам скрипт
Код: Выделить всё

function get_album(i){
    var xmlhttp3  = new ActiveXObject("Microsoft.XMLHTTP");   
    var url3 = ("http://www.last.fm/" + lang_query[lang] + "music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a] + "?page=" + i); 
    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) { 
                //ddd = ddd + 1;  window.Repaint();
                doc.open();     
                var div = doc.createElement("div");
                div.innerHTML = xmlhttp3.responsetext;
                var data = div.getElementsByTagName("img");
                var urls = [];
                for (i = 0; i < data.length; i++) {   
                    if (data[i].className == "album-grid-album-art"){ 
                        if ((data[i].src.indexOf("http://img2-ak.lst.fm/i/u/300") == 0 || data[i].src.indexOf("https://lastfm-img2.akamaized.net/i/u/300") == 0) && data[i].src.indexOf("c6f59c1e5e7240a4c0d427abd71f3dbb") < 0) {                       
                            if (data[i].alt.replace(/^(.*?)'|'$/g,'').replace(/\s/,'').toLowerCase() == tf_album.replace(/\s/,'').toLowerCase()){
                                p = tmp_b_path;
                                var url = data[i].src.replace("300x300", quality[download_quality][2]);
                                var file = "\"" + p + "\\" + artist + "_" + tf_album + ".jpg" + "\"";
                                WshShell.Run(vbs + " " + url + " " + file, 0, false);
                            }
                        }     
                    }
                }
                doc.close();
            }
        }
    }     
}

var  albums_pages;

function get_lastFM_pic_pages(){
    xmlhttp0 = new ActiveXObject("Microsoft.XMLHTTP");   
    url0 = ("http://www.last.fm/" + lang_query[lang] + "music/" + encodeURIComponent(artist) + "/+" + p_a[select_p_a]+ "?page=1"); 
    xmlhttp0.open("GET", url0, true ); 
    xmlhttp0.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
    xmlhttp0.send(null);     
    xmlhttp0.onreadystatechange = function () {
        if (xmlhttp0.readyState == 4) {
            if (xmlhttp0.status == 200) { 
                doc.open();     
                var div = doc.createElement("div");
                div.innerHTML = xmlhttp0.responsetext;
                var data = div.getElementsByTagName("li");
                for (i = 0; i < data.length; i++) {
                    if (data[i].className == "pages"){
                        albums_pages = data[i].innerHTML.replace(/^\s+|\s+$/g,"").replace(/^(.*\s)/g,'');
                    }
                }
            }     
            doc.close();
            window.Repaint();
        }
    }
}

MC Web, / = \/
только символ / не может быть в имени файла.
А вообще нужно научиться определять кодировку и отказаться от return n.replace(/[^a-zA-Z0-9а-яА-Я..........
вернуть как было - это те кракозяблики виноваты :smile: - "3>@L !0@CE0=>2-"
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 314
С нами: 3 года 11 месяцев

Сообщение #1426 MC Web » 21.11.2016, 20:03

kgena_ua, куда не вставлю \/, не работает.
kgena_ua писал(а):А вообще нужно научиться определять кодировку и отказаться от return n.replace(/[^a-zA-Z0-9а-яА-Я..........
вернуть как было - это те кракозяблики виноваты :smile: - "3>@L !0@CE0=>2-"
Данная замена работает нормально, выловить баги и все..,
Символ не в имени файла, а в теге %artist%.
Сам случайно заметил, вернее услышал по звуку "ошибка", когда слушал радио. Потом воспроизвел ошибку, прописав в тег %artist% знак /.
MC Web
Мастер
Репутация: 64
С нами: 3 года 7 месяцев

Сообщение #1427 kgena_ua » 22.11.2016, 00:05

MC Web,
вариант
return n.replace(/[^a-zA-Z0-9а-яА..........
удаляет символ /, как и должно быть.
Я вставил / в тег %artist% - файл создался.
А если так.
Код: Выделить всё
function clean_name(n) {
    if (!n) return;
    //return n.replace(/[^a-zA-Z0-9а-яА-Я\s-&\.,Ёё]/g,'').replace(/^\s+|\s+$/g,"").substr(0,200);
    return n.replace(/[\/\:\*\?\"\<\>\|]/g,'').replace(/[^\x20-\x7E]+/g,'').replace(/^\s+|\s+$/g,"").substr(0,200);
}
проверил на 3>@L !0@CE0=>2
I.m.UR5EQF.
квартет на миллион долларов
kgena_ua M
Гуру
Аватара
Возраст: 53
Откуда: Украина, Днепр
Репутация: 314
С нами: 3 года 11 месяцев

Сообщение #1428 seriousstas » 22.11.2016, 00:30

kgena_ua
добавил пункт в меню
Смысл затеи я так понимаю в загруке в tmp_Biography большего количества
каверов . Не только из первой страницы ..
Для теста я добавляю функции + пункт меню . Подскажите теперь чем вызвать case 70: ?
И что должно произойти :think: .
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 56
С нами: 2 года 1 месяц

Сообщение #1429 AHAPXICT » 22.11.2016, 03:25

MC Web писал(а):в имени исполнителя присутствовал знак /
Возьмём проще, далеко ходить не надо, AC/DC
kgena_ua, по моему это уже цугцванг и мы дальше уже нечего не решим. Об этом ximenlangzige писал в теме. Может стоит вернутся к тому как было в старой версии, иначе будет сложно добавить 40 000 иероглифов в исключение. То есть разделить поиск артиста по тегу и создание папки без запрещённых символов. Может, если не сложно, сделайте фикс для последней не тестовой версии БИО "14112016" Сам не разберусь с function on_metadb_changed(), старая версия отображала ACDC как AC/DC, но это не влияло на создание папки и поиск на last.fm. Как вы на это смотрите?
Код: Выделить всё
function clean_name(n) {
   if (!n) return;
   return n.replace(/[\/\:\*\?\"\<\>\|\s]/g,' ');
}
纯音乐
Изображение

Добавлено спустя 1 час 37 минут:
Добавлю к этому, что уж если использовать эту строку, то к ней правильно будет включить исключения для неудачных тегов, как этот: 3>@L !0@CE0=>2
Что бы не наступить на те же грабли. Как я понимаю сюда нужно поставить переключатель:
Код: Выделить всё
function check_folder(n) {
    if (!n) return; // ?????????????
    if(!fso.FolderExists(n)) {fso.CreateFolder(n)};
}
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 95
С нами: 3 года 4 месяца

Сообщение #1430 MC Web » 22.11.2016, 09:48

kgena_ua писал(а):А если так...
Проверил на скорую руку - кириллицу не выводит.

Добавлено спустя 26 минут 3 секунды:
Сделал так, пока работает, но надо тестировать:
Код: Выделить всё
    if (!n) return;
    //return n.replace(/[^a-zA-Z0-9а-яА-Я\s-&\.,Ёё]/g,'').replace(/^\s+|\s+$/g,"").substr(0,200);
    return n.replace(/[\/\:\*\?\"\<\>\|]/g,'').replace(/[^a-zA-Z0-9а-яА-Я\s-&\ёЁ.,']/g,'').replace(/^\s+|\s+$/g,"").substr(0,200);
}

Добавлено спустя 6 часов 9 минут:
Чтобы исправить недочеты связанные с заменой некоторых знаков при написании имени исполнителя в панели биографии, немного изменил следующие строки:
Код: Выделить всё
//  gr.GdiDrawText( artist, h_font, RGB(0,0,0), h_x + 1, h1_y + 2, ww - h_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX );   
//  gr.GdiDrawText( artist, h_font, h_color, h_x, h1_y, ww - h_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX );   
    gr.GdiDrawText( artist1, h_font, RGB(0,0,0), h_x + 1, h1_y + 2, ww - h_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX );   
    gr.GdiDrawText( artist1, h_font, h_color, h_x, h1_y, ww - h_x - t_margin, wh, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX );   

Код: Выделить всё
//   artist = Eval("%artist%");
     artist1 = Eval("%artist%");

Задумка была, чтобы выводилось полное имя исполнителя, как в теге %artist%, а не кастрированное.

Но надо протестировать...

Добавлено спустя 9 минут 55 секунд:
Нет не подходит, пропали некоторые функции, возможно kgena_ua поправит.

Смысл думаю понятен.
MC Web
Мастер
Репутация: 64
С нами: 3 года 7 месяцев

Сообщение #1431 vladj » 22.11.2016, 16:57

Давно пользуюсь foo_ui_hacks от Дрона, но как-то не озаботился полностью понять его преимущества в плане
создания в оперативе виртуального диска. Вопрос...а возможно-ли перенести в оперативу на этот виртуальный В:
папку LastFM_Pics в которую у нас картинки качаются-перезаписываются ? А так у нас хоть и написано в настройках
виртуального диска, что папка фубара примонтирована на драйв В:\, картинки пишутся в саму папку фубара LastFM_Pics.
HTPC Termaltake, Onkyo 525E,Yamaha 8900.
vladj M
Гуру
Аватара
Откуда: Пермский край
Репутация: 265
С нами: 7 лет 1 месяц

Сообщение #1432 MC Web » 22.11.2016, 18:43

MC Web писал(а):
Код: Выделить всё
//   artist = Eval("%artist%");
     artist1 = Eval("%artist%");

Нашел причину, первую строку не надо ремить, дописываем вторую:
Код: Выделить всё
     artist = Eval("%artist%");
     artist1 = Eval("%artist%");

Добавлено спустя 10 минут 8 секунд:
vladj писал(а):Вопрос...а возможно-ли перенести в оперативу на этот виртуальный В:
папку LastFM_Pics в которую у нас картинки качаются-перезаписываются ?

Похоже диск SSD...
Думаю все равно будет писать на диск.
MC Web
Мастер
Репутация: 64
С нами: 3 года 7 месяцев

Сообщение #1433 AHAPXICT » 23.11.2016, 08:00

В продолжение к теме:
kgena_ua писал(а):А вообще нужно научиться определять кодировку и отказаться от return n.replace(/[^a-zA-Z0-9а-яА-Я..........
вернуть как было - это те кракозяблики виноваты :smile: - "3>@L !0@CE0=>2-"
К тому что предлагал есть небольшое дополнение. Сохранять картинки в папках с названием как это сделано в строке из скрипта biography 0.3 beta by Wilb. То есть папка с картинками, да и само название группы AC/DC пишется как AC-DC. Что это даёт, а даёт то что теперь для меню Display --> Front Cover и Artist не требуется никаких дополнительных условий для отображения картинок из tmp_Biography, фубар такую замену определяет по умолчанию.
Пример:
Для артиста : B:\tmp_Biography\%artist%\%artist%_0_images.*
Для альбома(на будущее): B:\tmp_Biography\%artist%\%artist%_0_albums.*

А так же выяснил какая группа имеет самое длинное название. Информация из Википедия : Paracoccidioidomicosisproctitissarcomucosis что составляет 43 буквы. Так что ограничение в 200 символов можно ограничить до 50, думаю этого с хватит головой, а всё остальное...

Вот сама строка:
Код: Выделить всё
function clean_name(n) {
    if (!n) return;
    return n.replace(/[\/\\|:]/g, "-").replace(/\*/g, "x").replace(/"/g, "''").replace(/[<>]/g, "_").replace(/\?/g, "").replace(/^\./, "_").replace(/\.+$/, "").substr(0,50);
}

Не очень понимаю для чего все "replace", но результат (с заменой / на -) меня удовлетворил.

У кого есть возможность проверить на других скриптах, в том числе и на biography 0.3 beta by Wilb этот тег "3>@L !0@CE0=>2-", проверите если не сложно. Интересно кто то решил эту проблему если да, то каким образом?

Добавлено спустя 6 минут 44 секунды:
P.S. seriousstas, посмотри тоже по этой теме и о том что написал в ЛС.

Добавлено спустя 53 минуты 41 секунду:
P.P.S. Всё разобрался и с остальными "replace", всё правильно. То есть если бы название (к примеру) AC/DC было AC/><DC таким, то после переименования становилось таким AC-__DC, что опять же понимает фубар и прекрасно читает картинки по %artist% без каких либо дополнительных условий. Поэтому предлагаю использовать строку от Wilb как эталонную.
Остаётся защитить скрипт от падения при использовании некорректных тегов. Пока очень доволен, душа вновь обрела покой :smoke:
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 95
С нами: 3 года 4 месяца

Сообщение #1434 MC Web » 23.11.2016, 20:25

AHAPXICT писал(а):Вот сама строка:
Код: Выделить всё
function clean_name(n) {
    if (!n) return;
    return n.replace(/[\/\\|:]/g, "-").replace(/\*/g, "x").replace(/"/g, "''").replace(/[<>]/g, "_").replace(/\?/g, "").replace(/^\./, "_").replace(/\.+$/, "").substr(0,50);
}
С этой строкой и тегом "3>@L !0@CE0=>2-" при работе Biography Text & Album Info & Picture last.fm происходит ошибка.

Был один файл с китайскими тегами, попробовал добавить 丁-龻 (по аналогии с алфавитом), папку tmp_Biography\%artist% на китайском создает:
Код: Выделить всё
    if (!n) return;
    return n.replace(/[\/\:\*\?\"\<\>\|]/g,'').replace(/[^a-zA-Z0-9а-яА-Я丁-龻\s-&\ёЁ.,']/g,'').replace(/^\s+|\s+$/g,"").substr(0,200);
}
MC Web
Мастер
Репутация: 64
С нами: 3 года 7 месяцев

Сообщение #1435 seriousstas » 23.11.2016, 23:50

MC Web

То , что в цитате читается и выводится без проблем .
Дело в одном (или дабл) символе cпереди . Что-то типа : []. Добавь его и продолжай слушать музыку :dance: ..
AHAPXICT
Добавлено спустя 29 минут 22 секунды:
Вот сама строка:
Норм! :)
А так же выяснил какая группа имеет самое длинное название
В примере , что я давал ранее тег заполнен разными исполнителями через запятую ,
часто в классике ..
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 56
С нами: 2 года 1 месяц

Сообщение #1436 AHAPXICT » 24.11.2016, 02:34

seriousstas писал(а):тег заполнен разными исполнителями через запятую
seriousstas, так, а я про что? Вот зачем ты мне это опять рассказываешь, если прямо тогда в причине и разобрались. У же не помню сколько символов было - 220? Ну ты понял, короче... это всё не важно.

По моему скоро придётся возвращаться к теме радио логотипов :biggrin: . Вот почему о таких вещах нечего, нигде не написано? Намёк понимаешь?
Подсказываю:
AHAPXICT писал(а):то после переименования становилось таким AC-__DC, что опять же понимает фубар и прекрасно читает картинки по %artist% без каких либо дополнительных условий
Вот теперь вопрос, нужен ли "реплис" замена вообще? //$if(%length%,,B:\Radio Logos\$replace(%title%,<,,>,,:,,",,/,,\,,|,,?,,-,, ,).*)
После переименования *RADIO WATERPOL INTERNATIONAL* -*** HITS UIT DE JAREN 60 -70 *** при помощи эталонной строки от Wilb получаем название xRADIO WATERPOL INTERNATIONALx -xxx HITS UIT DE JAREN 60 -70 xxx Ну и заодно место танцев с бубнами нормальную строку.
$if(%length%,,B:\Radio Logos\%title%.*)
Хорошо что, об этом тебе раньше писал в ЛС, уже давно в сборке лежит файл конфигурации ELPlaylist готовый для этого случая))) Ну а скрипты и названия картинок теперь придётся переделать. И взять из WSH Radio Logo panel (CUI) by kgena_ua функцию переименования файла под новый стандарт естественно!

MC Web, при всём уважении. Бросай, эти, свои эксперименты! Всё же подробно расписано, что для чего и почему.

Добавлено спустя 8 минут 22 секунды:
P.S. И, да у чёртовой "Ватерпул" название длиннее 50 символов, при переименовании пришлось добавлять ещё, общая длина включая пробелы 64 символа. Переименовыл через БИО как вы поняли, а потом с названия папки на картинку. :biggrin:
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 95
С нами: 3 года 4 месяца

Сообщение #1437 seriousstas » 24.11.2016, 02:43

Вот зачем ты мне это опять рассказываешь
я об этом (твою строку выше):
Так что ограничение в 200 символов можно ограничить до 50
Код: Выделить всё
substr(0,50);
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 56
С нами: 2 года 1 месяц

Сообщение #1438 AHAPXICT » 24.11.2016, 02:45

Правильно до 50, а ты сколько предлагаешь оставить?

Добавлено спустя 37 секунд:
Ты мне лучше скажи, что об остальном думаешь?
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 95
С нами: 3 года 4 месяца

Сообщение #1439 seriousstas » 24.11.2016, 02:46

200
А что с .substr(0,200); не так ?
зачем менять что-то ?

Добавлено спустя 5 минут 41 секунду:
что об остальном думаешь?
нужно не думать а пробовать , но проще убрать иксы и тире ,
чем их "вычислять" при названии файла . Вспомни проблемы с лишним или недопробелом .
Из твоего примера :
60 -70 . Это нормально ? (или это INTERNATIONALx -xxx) Нет . Нормально - 60 - 70,
но так :
xRADIOWATERPOLINTERNATIONALxxxxHITSUITDEJAREN6070xxx
все вопросы отпадают :wink:

Тебе что глаз режет такое название ?
seriousstas
Мастер
Откуда: Украина , Ивано-Франковск
Репутация: 56
С нами: 2 года 1 месяц

Сообщение #1440 AHAPXICT » 24.11.2016, 02:58

Объясняю. Первое, описывал выше, групп с названиями более 50 знаков не существует. Второе, по тому названию из классики всё равно биографию не найдёт, или если есть, к примеру название "Немереный Симфонический Оркестр Датского Королевства имени Цирлих Бумберха" и про него есть материал на ластфм, то тогда да. Третье, длинные названия папок для старых систем, если к примеру фубар находится глубоко в под директориях, там есть ограничения. Сам когда то на такие грабли наступил, файлы становятся не доступны дл операционной системы.
Четвёртое, та блин, заставил меня столько писать, можно оставить сколько угодно, но до 200 :smoke:

Пойду магазин...
AHAPXICT M
Мастер
Аватара
Возраст: 46
Откуда: Киев
Репутация: 95
С нами: 3 года 4 месяца

Пред.След.

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