Просмотр полной версии : сборка/тема foobar 2000 для CarPС
Страницы :
1
2
3
4
5
6
7
[
8]
9
10
11
12
13
14
15
https://www.youtube.com/watch?v=VQ1Ap10ZuRM
Слушал, много-много раз, Всех С Великой ПОБЕДОЙ
Взаимно!!!
seriousstas
10.05.2016, 17:38
Евген_21
duzzy
Есть вопрос по запуску менеджера для JS плейлиста , как сейчас это работает без AHK ?
Так-же интересует старт (скорость) плеера - учитывая проверки тем цветов для градиентов регуляторов сик и звука и тд ..
Евген_21
еще Tы спрашивал как-то за регулировку индикаторов кнопками в 7-ке .
попробуй те файлы , что по пути:
4Icar_13_5_MPS_UNI\foobar2000\Emul\Windows_7\Wheel D.exe
4Icar_13_5_MPS_UNI\foobar2000\Emul\Windows_7\Wheel Up.exe
заметить в папку Emul
seriousstas
Только до нормального компа добрался)))
в секции преппроцессора...
pss.GetPanel(11); /*PANEL: [milk]*/// ==PREPROCESSOR==
могут возникнуть ошибки при компиляции, лучше убрать(секция препроцессора очень чувствительная штука, на глаз все может работать без проблем, но могут возникать утечки, глюки при вызовах, непонятные артефакты и другие неприятные штуки).
работает шустро, стартует тоже быстро, вроде все как должно быть...
Заметил загрузку проца примерно до 10% процентов при проигрывании и покое но это не критично с учетом кол-ва скриптов и бегущей строки.(тяжелые скрипты можно поставить в отсроченную загрузку "Delay Load" галка в редакторе скрипта)
Вопрос, а чего не сделал автопереключение по времени ? Я пробовал с Икаром работает очень даже не плохо:yes2:
Есть вопрос по запуску менеджера для JS плейлиста , как сейчас это работает без AHK ?
Работает хорошо и вроде без проблем, погонял вызовы, потыкал в менеджер)))
Расскажи плиз схему работы вызова вкратце... интересно как устроено:smile2:
seriousstas
11.05.2016, 15:08
Только до нормального компа добрался)))
отдохнули друг от друга .
в секции преппроцессора..
ага - занесло слегка ))
Вопрос, а чего не сделал автопереключение по времени ?
Ну сборку в первую очередь для себя ведь пилил - и потребности такой нет .
Экран утоплен слегка - запас яркости у этого старичка-Самсунга предостаточный,
чтоб четко видеть все элементы даже при прямом солнце .. + есть небольшой отвлекающий момент . Может со временем, когда победим рестарт .. :)
Заметил загрузку проца до 10% процентов
При старте на долю секунды ? я смотрел диспетчер в разных условиях,
получается в среднем 1-2%(проц купил 8 лет назад))), если первый запуск и состояние покоя - опускается до 0.3 иногда (если не сложно сними что-то типа ,что-б понять, где нагрузка максимальная) :feFRzimWNk0
Расскажи плиз схему работы вызова вкратце... интересно как устроено
сейчас залезу - посмотрю, что и куда..
seriousstas
11.05.2016, 16:03
На кнопке простой переключатель (два состояния) :
man++;
if (man > 1)
man = 0;
if (man == 0) {
if (Man_set_off= utils.ReadINI( set_path + 'settings.ini', 'close_man', 'man_off')==2){
utils.WriteINI( set_path + 'settings.ini', 'close_man', 'man_off', 1);
}
}
if (man == 1) {
if (Man_set_off= utils.ReadINI( set_path + 'settings.ini', 'start_man', 'man_off')==0){
utils.WriteINI( set_path + 'settings.ini', 'start_man', 'man_off', 1);
TAB_Timer = window.CreateTimerInterval(TAB_prop);
}
}
window.SetProperty("SYS.Man Switch", man);
первое положение покоя - все флаги обнулены :[
[start_man]
man_off=0
[close_man]
man_off=0
[time_man]
man_off=0
Далее в основном срипте разбил одну функцию на две :
function togglePlaylistManager_1(){
.......} и
function togglePlaylistManager_2(){
............}
Соответственно закрыть-открыть .
При вызове пишу единицу, а самой функции (JS) её обнуляю, что-б не грузить проц :
utils.WriteINI( set_path + 'settings.ini', 'start_man', 'man_off', 0);
Далее - это для кнопки "закрыть" (ты её рисовал - знешь где :) ) :
utils.WriteINI( set_path + 'settings.ini', 'close_man', 'man_off', 2); - внутри function togglePlaylistManager_2() - показываю открытую панель,
при закрытии - обнуляю .
в WSHplaylistmanager.js пишу тройку при закрытии (крестиком) :
utils.WriteINI( set_path + 'settings.ini', 'close_man', 'man_off', 3);
В МПС принимаю и обнуляю эту тройку здесь (это чтоб переключатель window.SetProperty("SYS.Man Switch", man); стал в правильное положение) :
if (TAB_set_off = utils.ReadINI( set_path + 'settings.ini', 'close_man', 'man_off')==3){
tab_switch_check()
}
Здесь смотрим за значениями в главном скрипте JS :
function on_paint(gr) {
if (utils.ReadINI( set_path + 'settings.ini', 'close_man', 'man_off')==1){
togglePlaylistManager_1();
}
if (utils.ReadINI( set_path + 'settings.ini', 'start_man', 'man_off')==1){
togglePlaylistManager_2();
}
........
Это в JS что-б сбросить таймер при одиночном клике :
p.playlistManager.check("down", x, y);
var set_path = fb.ProfilePath + "\\settings\\";
if(cPlaylistManager.visible) {
utils.WriteINI( set_path + 'settings.ini', 'time_man', 'man_off', 3);
}
В МПС принимаю и обнуляю таймер и тройку здесь :
function on_timer(id) {
if ( utils.ReadINI( set_path + 'settings.ini', 'time_man', 'man_off')==3){
tab_switch_check2()
}
Возможно что-то забыл))
seriousstas
Вот видосик (https://drive.google.com/file/d/0B60qIBsIiUkgaW9oVUczb3kxd3M/view?usp=sharing) по нагрузке в покое и без... мой проц уже стар по нынешним меркам, поэтому нагрузку видно хорошо.
И я еще повторюсь, нагрузка не критичная просто подметил что она есть... Последнее время просто стараюсь оптимизировать функции убрав лишнюю нагрузку.
Интересная схема ;)
Здесь смотрим за значениями в главном скрипте JS :
И теперь я понял откуда ноги растут))) с нагрузкой на проц...
смотри у тебя опрос стоит в on_paint(gr)... лучше заменить на интервальный таймер например с опросом каждые пять секунд, тем самым уберешь нагрузку на проц и графику и постоянный опрос файла settings.ini на диске... а в таком варианте
function on_paint(gr) {
if (utils.ReadINI( set_path + 'settings.ini', 'close_man', 'man_off')==1){
togglePlaylistManager_1();
получается постоянное чтение файла с диска из функции он_паинт что может подтормаживать графику на медленных системах... я у себя переделал по таймеру и лишняя нагрузка ушла...
Мой совет лучше сделай отдельную функцию опроса, что то вроде этой...
var time_to_refresh = window.GetProperty("Check_Pl_Manager", 5000);
var t_to_refresh = false;
function pl_manager_check() {
window.ClearInterval(t_to_refresh);
t_to_refresh = window.SetInterval(function() {
if (utils.ReadINI( set_path + 'settings.ini', 'close_man', 'man_off')==1){
togglePlaylistManager_1();
}
if (utils.ReadINI( set_path + 'settings.ini', 'start_man', 'man_off')==1){
togglePlaylistManager_2();
}
}, time_to_refresh);
};
pl_manager_check();
seriousstas
11.05.2016, 19:08
спасибо за видео - очень наглядно !
Я у себя переделал по таймеру и лишняя нагрузка ушла...
Ты имеешь ввиду DSP внутри MPS ? (function on_timer(id) )
Мой совет лучше сделай отдельную функцию опроса, что то вроде этой..
Я просто не понимаю , как это применить в моём случае (просто заменить проверку на код выше? или вниз скрипта...) .
Я ведь показываю 1-цу и сразу прячу , как-бы это работало в общей схеме ? Нажимаю - жду 5 сек - появляется менеджер ,
но даже если так, как он появится ,если я уже обнулил 1-цу) ?
Судя и по видео и по моим тестам - в покое особой нагрузки нет тк нет действий, кроме опроса ини .
Допустим если-бы при 0-ле скрипт всегда пытался закрыть панель - тогда да - растет нагрузка ..
seriousstas
Пожалуйста !
Да я имею в виду так же как я делал с панелью ДСП при переключении пресета...
Т.е. постоянно работает интервальный таймер например на на 5-ть секунд, и каждые 5-ть секунд идет опрос файла settings.ini на предмет смены флага...
т.е. по сути нужно просто заменить это в JS...
function on_paint(gr) {
if (utils.ReadINI( set_path + 'settings.ini', 'close_man', 'man_off')==1){
togglePlaylistManager_1();
}
if (utils.ReadINI( set_path + 'settings.ini', 'start_man', 'man_off')==1){
togglePlaylistManager_2();
}
........
на отдельную функцию вне фунции он_паинт на эту...(прописать можно в конец или куда удобно)
var time_to_refresh = window.GetProperty("Check_Pl_Manager", 5000);
var t_to_refresh = false;
function pl_manager_check() {
window.ClearInterval(t_to_refresh);
t_to_refresh = window.SetInterval(function() {
if (utils.ReadINI( set_path + 'settings.ini', 'close_man', 'man_off')==1){
togglePlaylistManager_1();
}
if (utils.ReadINI( set_path + 'settings.ini', 'start_man', 'man_off')==1){
togglePlaylistManager_2();
}
}, time_to_refresh);
};
pl_manager_check();
как-бы это работало в общей схеме ? Нажимаю - жду 5 сек - появляется менеджер ,
Не совсем так... например 5-ти секундный постоянный интервал, при котором происходит опрос файла по смене флагов, далее жмем кнопку закрыть, пишем флаг в файл закрыть, и в зависимости от того на сколько отсчитал таймер произойдет считывание и закрытие менеджера...
Т.е. закрытие менеджера может произойти как через 1-ну секунду может через две, три или через 5-ть... зависит от того до какого времени отмотался таймер как в примере установленный на 5-ть секунд.
По сути ты будешь делать тоже самое что было ранее в он_паинт в JS но по установленному тобой интервалу времени, а не постоянно как было в он_паинт...
Просто как мне кажется это постоянная лишняя нагрузка которой можно избежать, тем более что менеджер-плейлистов не так часто вызывается.
--------------------------------
только что проверил в твоей сборке, все работает как надо... :)
не забудь только потом проверку из он_паинт убрать
интервал 5-ть сек. и опрос итервал 5-ть сек. и опрос... и т.д.
твоя сборка в режиме стоп... ;)
http://jpegshare.net/images/a6/dd/a6ddbc94ca843b1586f628ed48866f50.png (http://jpegshare.net/)
загрузка проца 0%
seriousstas
11.05.2016, 21:16
интервал 5-ть сек. и опрос итервал 5-ть сек. и опрос... и т.д.
Верно - только придется ждать все-таки пару сек после нажатия (вызова менеджера) , при 100-200мс
мгновнно, но даже при таком опросе уже меньше грузит проц (оставлю так)...
Т.е. закрытие менеджера может произойти как через 1-ну секунду может через две, три или через 5-ть
у меня так происходит открытие (примерно на третюю секунду ) ...
Интересно , почему function on_timer(id) { в МПС
ничего не грузит (если ты заметил , там несколько проверок) , хотя так-же отслеживает изменения в ini онлайн , без таймеров
seriousstas
Верно - только придется ждать все-таки пару сек после нажатия (вызова менеджера) , при 100-200мс
мгновнно...
Ну тут как говорится, как тебе больше нравится если тех. возможности позволяют :)
Но я бы все же поставил хотя бы 3000 мс - 3 сек. потому как 100-200 мс это ооочень часто... можешь сам посмотреть в консоли трейсом --- fb.trace("тут пишем что угодно"); прописываешь трейс в функцию опроса затем открываешь консоль и видишь в ней количество вызовов этой функции...
прописать можно сюда...
...
}
fb.trace("тут пишем что угодно, текст который будет отображаться в консоли");
}, time_to_refresh);
};
у меня так происходит открытие (примерно на третюю секунду ) ...
Ну тут время тяжело предсказать, потому что интервальный таймер независимый и молотит свое установленное время постоянно, а ты при нажатии просто попадаешь в какую то часть его цикла... т.е. опишем работу интервального таймера на примере 5-ти сек. --- 5 сек. опрос, 5 сек. опрос, 5 сек. опрос... и получается что нам не известно в какую часть цикла мы попадаем при вызове/закрытии менеджера... т.е. можно попасть и в начало цикла(будем ждать 5 сек. до опроса), можно в середину(будем ждать 2,5 - 3 сек. до опроса), можно попасть в конец цикла(к примеру за 1сек. до опроса)... т.е. время до опроса будет всегда рандомное.
Интересно , почему function on_timer(id) { в МПС
ничего не грузит...
Пока сам не до конца понимаю сей процесс, но как мне кажется это что то схожее как например с запуском разных процессов в эксплорере... т.е. менеджер один а процессы в нем можно запустить разные... пример фиговенький но отображает суть.
Создаются таймеры по ID которые работают изолированно друг от друга и поэтому не оказывают влияния на другие процессы.
если ты заметил , там несколько проверок
Фигня в том что при использовании такого варианта в on_timer(id) будет обрабатываться каждое обращение к функции on_timer(id)... тут надо смотреть имеет ли смысл так делать или прописать в отдельный таймер а не в общую функцию...
И у тебя там еще window.RepaintRect(...) прописан для каких-то целей... тоже постоянно что то перерисовывающий, по хорошему его бы тоже в таймер нужно прописать а не в общую функцию, либо прописать там где нужен репаинт в зависимости от события... я бы подсказал куда прописать но не знаю для чего нужен репаинт...
:)
seriousstas
12.05.2016, 02:46
seriousstas
И у тебя там еще window.RepaintRect(...)
а где там ? если в on_timer(id) - то для перерисовки нижнего ряда кнопок и их состояний, а если где-то в JS , то это Бретт что-то "рисует" ..
Ну тут время тяжело предсказать, потому что интервальный таймер
ага - поэтому пускай опрашивает по-чаще :) подумаю с цифрой ..
seriousstas
Это я не уточнил, извини... да в on_timer(id) в самом низу в МПС скрипте... хоть зона по перерисовке и не большая но лучше убрать и перерисовывать по событию...
И всеже как не крути это тоже нагрузка на проц:)(на многоядерных нагрузки будет не видно но она на самом деле есть), причем постоянная и ее лучше делать по событию...
Например, плей/пауза --- репаинт прописываем в коллбэк function on_playback_starting(cmd, is_paused) {...}
либо например меняем картинку на кнопке --- вызываем из функции кнопки recalc_dimensions(), предварительно прописав состояния кнопки так же в recalc_dimensions() в начале функции... пример есть в моей сборке это кнопка тулбара... :)
seriousstas
13.05.2016, 02:03
либо например меняем картинку на кнопке --- вызываем из функции кнопки recalc_dimensions(),
Хорошо, попробую так.
...
ага, можно её просто убрать , я уже прописал всё ранее отдельно для каждой изменяемой кнопки , или панели (например вуметра или милкдропа ) .
Просто забыл "снести" :)
Евген_21
13.05.2016, 19:38
Евген_21
duzzy
Есть вопрос по запуску менеджера для JS плейлиста , как сейчас это работает без AHK ?
Так-же интересует старт (скорость) плеера - учитывая проверки тем цветов для градиентов регуляторов сик и звука и тд ..
Евген_21
еще Tы спрашивал как-то за регулировку индикаторов кнопками в 7-ке .
попробуй те файлы , что по пути:
4Icar_13_5_MPS_UNI\foobar2000\Emul\Windows_7\Wheel D.exe
4Icar_13_5_MPS_UNI\foobar2000\Emul\Windows_7\Wheel Up.exe
заметить в папку Emul
еще Tы спрашивал как-то за регулировку индикаторов кнопками в 7-ке .
попробуй те файлы , что по пути:
4Icar_13_5_MPS_UNI\foobar2000\Emul\Windows_7\Wheel D.exe
4Icar_13_5_MPS_UNI\foobar2000\Emul\Windows_7\Wheel Up.exe
заметить в папку Emul
Стас привет. По этому вопросу на домашнем компе работает на карпк нет
seriousstas
14.05.2016, 22:53
Стас привет. По этому вопросу на домашнем компе работает на карпк нет
Привет!
Посмотри в AutoIt3 Window Spy (из набора AutoHotkey) какой класс этого окна в авто .
Пробовал в вируалке 7x32 вижу такое значение : CalssNN: {88D33FF9-8199-4332-B69C-6B99D67A24C9}1
duzzy Привет ! можешь в "готовые" бросать, как будет время ... :
http://pccar.ru/showpost.php?p=360109&postcount=1739
Обновил ссылку - последние поправки по оптимизации +
на не используемую кнопку повесил регулировку баланса :
http://cdpos.biz/showthread.php?188-Surround-Pan-(%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5% D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%B0%D0%BD%D0%BE%D1%80%D0%B0%D0%BC%D1%8B-%D0%B1%D0%B0%D0%BB%D0%B0%D0%BD%D1%81%D0%B0)
seriousstas
Привет !
Сегодня попозже заброшу в готовые ;)
-----------------------------------------
Вопрос, Старые сборки удалять или оставить ?
И еще, Информацию по сборке заменить на новую ?
seriousstas
15.05.2016, 13:49
Вопрос, Старые сборки удалять или оставить ?
И еще, Информацию по сборке заменить на новую ?
Описание кнопок может и пригодится кому(остальное не нужно, и ссылки на прошлые также) . Эта сборка вышла меньше по размеру
и быстрее работает ..
seriousstas
Хорошо понял :)
Евген_21
15.05.2016, 15:18
seriousstas
Привет, проверил класс этого окна в авто. Результат.
CalssNN: {88D33FF9-8199-4332-B69C-6B99D67A24C9}2
На домашнем компе тоже самое, на обоих система window 7-64.
Переделал скрипт, испытал, все равно не работает.
Может это проблема только у меня?
seriousstas
15.05.2016, 15:39
seriousstas
Может это проблема только у меня?
Похоже дело не в версии а в разрядности .
2-ка стоит по умолчанию и для 64-к . Да , что-то у Тебя мешает эмуляции прокрутки колеса мыши в авто .
Я недавно "обнаружил" простой способ изменения чувствительности -
движением пальца вверх-вниз по индикаторам (см. последнее видео 5:30) - попробуй .
seriousstas
Пихнул в готовые... ;)
seriousstas
15.05.2016, 17:40
seriousstas
Пихнул в готовые... ;)
:yes4:
Krysanov
16.05.2016, 19:15
Привет, парни! По сборке от Стаса 4Icar_13_5_MPS_UNI...
Общее впечатление на отлично.. из гипера очень шустренько просыпается , да и внешний вид вроде то, что надо (имхо).
ZtyUV2a6dPQ
Однако, два момента прошу подсказать как изменить:
1. увеличить шрифт здесь...
43794
;
2. при прослушивании музыки форматов .cue .flac , другие не проверял, не отображаются треки, а только CD1, те песен исполнителя, например, 12 в реалии, а отображается все одним 28 минутным потоком... В mp3 такого нет.. картинка выше тому подтверждение
Шрифт очень просто меняется обычным способом, при зажатом CTRL колесом мыши.
По группировкам...подводишь курсор к верхней кромке окна плейлиста до момента
выезда сверху тулбарчика. Можно на время залочить что-бы не убирался, т.е. по левой
шестерёнке и лок тулбар. Там играешся с сортировкой и группировкой. Я всегда предпочитаю
сортировать по пути к файлу, т.е. file path (сортировка-группировка по правой кнопке Az).
Krysanov
16.05.2016, 21:03
Шрифт очень просто меняется обычным способом, при зажатом CTRL колесом мыши.
По группировкам...подводишь курсор к верхней кромке окна плейлиста до момента
выезда сверху тулбарчика. Можно на время залочить что-бы не убирался, т.е. по левой
шестерёнке и лок тулбар. Там играешся с сортировкой и группировкой. Я всегда предпочитаю
сортировать по пути к файлу, т.е. file path (сортировка-группировка по правой кнопке Az).
спасибо
seriousstas
16.05.2016, 21:15
Krysanov Привет!
1.
внешний вид вроде то, что надо (имхо).
Внешний вид можно изменить (4 вида) , как и размер кнопок - второй скрин , ПКМ по нижним кнопкам ..
увеличить шрифт здесь...
Шрифты меняются почти везде . Удобно двумя пальцами (мультитач) , либо одним (вверх-вниз) зажав CTRL . Почитай описание (на видео тоже) пожалуйста ..
+ в Фубаре в двух панелях есть отдельная кнопка , которая имитирует нажатие CTRL на заданное время .
2. Не относится к Фубару .(погугли "Как исправить неправильный cue")
3. :) Не пропусти возможность переключать кнопками через DSP панель - в этом случае должно пригодится :
Когда езжу по своему городу, включаю Асио , в этом случае когда играет музыка, все остальное молчит... А когда еду на дальняк - ds...
Krysanov
16.05.2016, 21:57
Krysanov Привет!
1.
Внешний вид можно изменить (4 вида) , как и размер кнопок - второй скрин , ПКМ по нижним кнопкам ..
Шрифты меняются почти везде . Удобно двумя пальцами (мультитач) , либо одним (вверх-вниз) зажав CTRL . Почитай описание (на видео тоже) пожалуйста ..
+ в Фубаре в двух панелях есть отдельная кнопка , которая имитирует нажатие CTRL на заданное время .
2. Не относится к Фубару .(погугли "Как исправить неправильный cue")
3. :) Не пропусти возможность переключать кнопками через DSP панель - в этом случае должно пригодится :
за все это спасибо, на версии фубара, что снес Duzzy недавно в первом посту все форматы читались нормально..
seriousstas
16.05.2016, 22:05
Krysanov
.......
пс. Всё - нашел ! Все-таки дело в Фубар - убери CUE из исключений в библиотеке .
Ранее стоял foo_cuefilter ...
Я проверял прямым перетягиванием CUE в плейлист - поэтому и сделал такой вывод .
......
Перезалил - поправил CUE + мелкие правки , например :
http://foobar2000.ru/forum/viewtopic.php?p=60991#p60991
Krysanov
17.05.2016, 09:39
Krysanov
.......
пс. Всё - нашел ! Все-таки дело в Фубар - убери CUE из исключений в библиотеке .
Ранее стоял foo_cuefilter ...
Я проверял прямым перетягиванием CUE в плейлист - поэтому и сделал такой вывод .
......
Перезалил - поправил CUE + мелкие правки , например :
http://foobar2000.ru/forum/viewtopic.php?p=60991#p60991
Спасибо, дружище, переустановлю ...
Насчёт Асио и переключения в ds и обратно.. Как то не получается переключаться в Асио (тупо нет звука)..
seriousstas
17.05.2016, 14:00
Как то не получается переключаться в Асио (тупо нет звука)..
Кнопку настроил ?
seriousstas
Забыл куда нажимать, как прыгающие столбики эквалайзера раздвинуть на весь экран
seriousstas
17.05.2016, 14:18
seriousstas
Забыл куда нажимать, как прыгающие столбики эквалайзера раздвинуть на весь экран
ПКМ по Пикметру >Splitter>поставь курсор на Peakmeter Spectrum>Conf
ПКМ по Пикметру >Splitter>поставь курсор на Peakmeter Spectrum>Conf
Ага...все получилось....но теперь в новой сборке пятой не могу запомнить свои настройки ДСП....вроде все делаю как в четвертой сборке...но че то не запоминает :dntknw:....может опять позабыл как правильно делать.
seriousstas
17.05.2016, 14:56
Используются(названия ) от 1-го до 11-ти .
Например Тебе нужно изменить настройки Channel Mixer 5.1 :
Смотришь в Пропертиз DSP панели, какой номер присвоен пресету:
http://rgho.st/6jrbnyfXR/image.png (http://rgho.st/6jrbnyfXR.view)
Видим 11_presets >выбираем его в настройках Фубара >кнопка Load > изменяй и Save .
Krysanov
17.05.2016, 15:02
Кнопку настроил ?
Как это?
seriousstas
17.05.2016, 15:06
Как это?
как предложено здесь (со скрином) Инсталл:
http://pccar.ru/showpost.php?p=360109&postcount=1739
Для переключения вывода звука на панели DSP добавить свое устройство CTRL+клик
И вводи своё название вместо этого ASIO4ALL v2 - my channel mapping
Krysanov
17.05.2016, 17:57
как предложено здесь (со скрином) Инсталл:
http://pccar.ru/showpost.php?p=360109&postcount=1739
И вводи своё название вместо этого ASIO4ALL v2 - my channel mapping
прочитал, буду пробовать.. спасибо
Krysanov
17.05.2016, 20:20
вот исходник (http://rutracker.org/forum/viewtopic.php?t=1040128)откуда качал
43808
43809
43810
43811
43812
Что то я не догоняю как видеть песни из сборника:dntknw:
seriousstas
17.05.2016, 21:09
Krysanov
Что то я не догоняю как видеть песни из сборника
без правки никак и ни в какой сборке ..
открой блокнотом и поправь Helene - Helene.cue :
FILE "Helene - Helene.wav" WAVE
на
FILE "Helene - Helene.ape" WAVE
Krysanov
17.05.2016, 21:12
Krysanov
открой блокнотом и поправь CUE
FILE "Helene - Helene.wav" WAVE
на
FILE "Helene - Helene.ape" WAVE
Попробую
seriousstas
18.05.2016, 03:37
Вот несколько раз пользовался балансом : http://pccar.ru/showpost.php?p=360693&postcount=1765
Удобно на тачскрине быстро поправить уровни :)
Я частенько вижу на скринах, что интерфейс предпочитаешь в серебре. Я к тому, что
у Макарыча в сборке есть стрелочный, который на стопе не жёлтенький, а чёрно-белый
и смотрится он в при таком выборе для меня офигительно.
Может сообразите с ним подобное со стрелочным для твоей сборки (вот в пайнте подредактировал)
seriousstas
18.05.2016, 15:34
Я частенько вижу на скринах, что интерфейс предпочитаешь в серебре. Я к тому, что
у Макарыча в сборке есть стрелочный, который на стопе не жёлтенький, а чёрно-белый
и смотрится он в при таком выборе для меня офигительно.
Может сообразите с ним подобное со стрелочным для твоей сборки (вот в пайнте подредактировал)
Ну если Макарыч откликнется - почему нет... Обесцветить не долго -
если у него сохранились исходники - это пара кликов .
Krysanov
19.05.2016, 21:01
I.как предложено здесь (со скрином) Инсталл:
http://pccar.ru/showpost.php?p=360109&postcount=1739
И вводи своё название вместо этого ASIO4ALL v2 - my channel mapping
Хрень какая то :shok:... Ничего не переключается
Вот видео
A04NAF9AKzk
Странное дело.. когда все записывал, то при выборе в настройках фубара режима асио, звук менялся в лучшую сторону, стрелка молчала как и должно... А при просмотре видео звука при выборе асио в настройках фубара нет..
Объясните чайнику как надо делать....
II. Сообщение от seriousstas Посмотреть сообщение
Krysanov
открой блокнотом и поправь CUE
FILE "Helene - Helene.wav" WAVE
на
FILE "Helene - Helene.ape" WAVE
Поменял, не изменилось ничего.. Наверное файл такой..
Не мой день сегодня:be:
seriousstas
19.05.2016, 22:10
Объясните чайнику как надо делать....
1. Введи точное! название (то , что после двоеточия) , например ASUS U7 ASIO или ASUS U7 ASIO - my channel mapping (там ведь был дефолтный пример : ASIO4ALL v2 - my channel mapping
ты его потёр , написал ASIO и ждешь переключения )) )
2. Все работает после правки - постараюсь сделать видео ...
Смотрим в каком формате лежит образ альбома в папке...примеры...
1.образ - The Best Of Blues - CD1.wv
в файле - CUE видим - FILE "The Best Of Blues - CD1.wv" WAVE
Т.е. расширение образа в строчке FILE и в CUE должно обязательно совпадать,
тут у нас в данном случае расширение .wv
2. у образа полное название Vaya Con Dios - Nah Neh Nah.flac и в CUE видим FILE "vcd.flac" WAVE
т.е. тут у нас формат .flac
3. образ - Y & T - In Rock We Trust.ape ,
в CUE видим FILE "Y & T - In Rock We Trust.ape" WAVE,
образ в .ape и в CUE .ape
Надеюсь сейчас понятней как проверить правильно-ли записана строка в CUE.
Krysanov
19.05.2016, 22:29
1. Введи точное! название (то , что после двоеточия) , например ASUS U7 ASIO или ASUS U7 ASIO - my channel mapping (там ведь был дефолтный пример : ASIO4ALL v2 - my channel mapping
ты его потёр , написал ASIO и ждешь переключения )) )
2. Все работает после правки - постараюсь сделать видео ...
Теперь понятнее чайнику, отпишусь
Да, заработало
Krysanov
20.05.2016, 04:48
Смотрим в каком формате лежит образ альбома в папке...примеры...
1.образ - The Best Of Blues - CD1.wv
в файле - CUE видим - FILE "The Best Of Blues - CD1.wv" WAVE
Т.е. расширение образа в строчке FILE и в CUE должно обязательно совпадать,
тут у нас в данном случае расширение .wv
2. у образа полное название Vaya Con Dios - Nah Neh Nah.flac и в CUE видим FILE "vcd.flac" WAVE
т.е. тут у нас формат .flac
3. образ - Y & T - In Rock We Trust.ape ,
в CUE видим FILE "Y & T - In Rock We Trust.ape" WAVE,
образ в .ape и в CUE .ape
Надеюсь сейчас понятней как проверить правильно-ли записана строка в CUE.
Да, вроде бы, с описанием понятно ..
seriousstas
20.05.2016, 19:15
Krysanov
Пользуй обновленную сборку . Библиотека сама удалит основной файл из списка.
после правки - всё поёт :
yOwYPx9TQ8E
Krysanov
20.05.2016, 19:17
[QUOTE=seriousstas;361052]Krysanov
Пользуй обновленную сборку . Библиотека сама удалит основной файл из списка.
после правки - всё поёт :
...
да , все так и есть.. ты опередил:pleasantry:
СПАСИБО
Krysanov
20.05.2016, 19:23
Стас, а кнопки переключения фубара как увеличить?:dntknw: А то пальцем не попадаю:wink2: Выделено зеленым..
43839
seriousstas
20.05.2016, 22:22
Стас, а кнопки переключения фубара как увеличить?:dntknw: А то пальцем не попадаю:wink2: Выделено зеленым..
43839
Судя по скрину у Тебя средний размер - выбери большой :
http://pccar.ru/showpost.php?p=360829&postcount=1776
подскажите как изменить фон
как вообще изменять фон ?
seriousstas
21.05.2016, 14:57
как вообще изменять фон ?
Убрать картинку можно CTRL+клик (на почти всех панелях) . Далее либо выбери режим отображения фона (ПКМ>фон) и задай цвет в настройках скрипта .
Либо введи путь к своей картинке вместо : .\themes\Radio3.jpg
В настройки скрипта заходи так : (Shift>ПКМ>Properties)
Еще можно просто подменить картинку на свою из 4Icar_13_5_MPS_UNI\foobar2000\themes
macarych
21.05.2016, 19:38
vladj, черно-белый хартман-и-браун.
Может сообразите с ним подобное со стрелочным для твоей сборки (вот в пайнте подредактировал)
Подскажите в какой папке найти файлы индикаторов. (хочу удалить лишние т.к. не пользуюсь):sad2:
120705, они по пути foobar2000\user-components\foo_vis_vumeter, расширение .bin
macarych, спасибо.
macarych
Привет macarych!
Может где встречал шестиканальный индикатор...может в виде стрелочных приборов или типа светодиодных полосок, а то нас многоканальшиков игнорируют с этим делом :yes2:
Есть отображение работы шести каналов только в эквалайзере...но хочется, что нить такого монументального, как полюбившееся нам пара стрелочных индикаторов.
http://s45.radikal.ru/i109/1605/03/e31ef32f1815.png (http://radikal.ru/big/07c5b219fb0d47abbd2d3b3ad2a299f9)
macarych
22.05.2016, 06:19
Darkwood Designs Multi-Channel Level Meter (http://www.darkwooddesigns.co.uk/pc2/Multi.html)
На видео бесплатное демо, софт платный, стоит $17. У меня не заработало, не определилась встроенная звуковая.
YchPn-ysXRM
Пробуйте, если завалялись лишние 17 баксов.
Darkwood Designs Multi-Channel Level Meter (http://www.darkwooddesigns.co.uk/pc2/Multi.html)
На видео бесплатное демо, софт платный, стоит $17. У меня не заработало, не определилась встроенная звуковая.
Пробуйте, если завалялись лишние 17 баксов.
А я то то думал энтузиастов больше нету в этом направлении....спасиб за наводку.
В общем поигрался...моя карта увиделась.
Только не понятно как это все срастить с фубаром?
Это отдельное приложение, а нам так я понимаю нужен файл с расширением .bin для встройки в фубар так?
/2r-5W8vLdrk
Убрать картинку можно CTRL+клик (на почти всех панелях) . Далее либо выбери режим отображения фона (ПКМ>фон) и задай цвет в настройках скрипта .
Либо введи путь к своей картинке вместо : .\themes\Radio3.jpg
В настройки скрипта заходи так : (Shift>ПКМ>Properties)
Еще можно просто подменить картинку на свою из 4Icar_13_5_MPS_UNI\foobar2000\themes
разобрался спасибо:wink2:
macarych
22.05.2016, 19:51
Только не понятно как это все срастить с фубаром?
Это отдельное приложение, а нам так я понимаю нужен файл с расширением .bin для встройки в фубар так?
foo_vis_vumeter не может работать с многоканалом, некому доработать плагин, так что про *.bin файлы придется забыть. Отдельное приложение можно запускать через Run service ( который кстати тоже DRON написал). Еще можно поискать VST индикаторы.
seriousstas
28.05.2016, 13:23
4Icar_13_6_MPS_UNI
http://pccar.ru/showthread.php?t=23702
Часы в фоне , если нет картинок на панели от Марка .(CTRL+колесо ,либо движение мыши изменяет размер, даблклик - цвета)
Автосмена фона на двойной панели .
Исправления по вызову менеджера.
Исправления по перерисовке в мод. панели // @author "kgena_ua" приводившие цикличному запросу на вывод картинок ..
Улучшил взаимодействие панелей .
https://youtu.be/t6HVlzhV5f4
4Icar_13_6_MPS_UNI
http://pccar.ru/showthread.php?t=23702
Часы в фоне , если нет картинок на панели от Марка .(CTRL+колесо ,либо движение мыши изменяет размер, даблклик - цвета)
Автосмена фона на двойной панели .
Исправления по вызову менеджера.
Исправления по перерисовке в мод. панели // @author "kgena_ua" приводившие цикличному запросу на вывод картинок ..
Улучшил взаимодействие панелей .
https://youtu.be/t6HVlzhV5f4
Чёт не нашёл там в теме ссыль на 4Icar_13_6_MPS
Евген_21
28.05.2016, 18:18
Стас привет. Не знаю что уже и сказать. Лучше подскажи как сделать авто смену тем в сборке. Побывал совет от duzzy (отправлял он мне в личку способ) это что народ не путать ,а то начнут искать. Если вручную тему включить, то переключение происходит. А повремени нет. Направь в нужное направление.
seriousstas
28.05.2016, 19:11
Евген_21
Привет ! Не вникал в этот вопрос тк пока в планах этого нет .
Gadina
Внутри архива .
Gadina
Внутри архива .
Спасибки.:yes2:
Krysanov
29.05.2016, 16:00
За часы спасибо!!
Может сделать ещё здесь же данные по скорости ... Тогда верх икара можно не использовать.. Я понимаю , что повторяюсь, но это было бы классно.. А для тех, кто икаром не пользуется и им подобным, вообще будет бонус!
Krysanov
29.05.2016, 16:15
Судя по скрину у Тебя средний размер - выбери большой :
http://pccar.ru/showpost.php?p=360829&postcount=1776
Я не нашёл как изменить кнопки на побольше.
Так он-же тебе подсказывает...ПКМ (правой кнопкой мыши) щелчёк прямо
по кнопкам, выйдет меню, где 3 размера....Small -маленькие, Middle - средние
и Big - большие. Плюс у каждого размера по 4 цвета. тут-же анимация окон
включается...правда наоборот у меня почему-то....Animation _ On, а она не работает,
Animation_Off работает (правда подглючивая, следы остаются при анимации).
Krysanov
29.05.2016, 20:39
Так он-же тебе подсказывает...ПКМ (правой кнопкой мыши) щелчёк прямо
по кнопкам, выйдет меню, где 3 размера....Small -маленькие, Middle - средние
и Big - большие. Плюс у каждого размера по 4 цвета. тут-же анимация окон
включается...правда наоборот у меня почему-то....Animation _ On, а она не работает,
Animation_Off работает (правда подглючивая, следы остаются при анимации).
Спасибо, дружище! Теперь понятно. Все получилось
kgena_ua
02.06.2016, 11:37
duzzy, я когда-то давал ссылку про Регулярные выражения. Вот еще пару ссылок, где хорошо все описывается: https://learn.javascript.ru/regular-expressions-javascript
http://www.exlab.net/tools/sheets/regexp.html
М-да...я маниакально отношусь к посторонним записям мусора в винду и вроде наконец-то поборол вчера только
запись в кэш кучи картинок, скачиваемых биографией. Искать этот мусор очень просто программой CCleaner.
Запускаем анализ и вот они...картинки в кэше. Жаль только не догадался который скрипт мусорит из двух, нужно
было после очистки погонять сначала один, затем другой скрипт био.
Или у меня так тупо система настроена, что пишет кучу мусора в папки по пути...
C:\Users\vladj\AppData\Local\Temporary Internet Files\Content.IE5
C:\Users\vladj\AppData\Local\Temporary Internet Files\IE
Ща погонял просмотр био с закачкой картинок, так там пусто совершенно, да и хрен что сейчас туда пропишется ибо
я элементарно запретил запись в эти папки. Инет работает нормально при этом, картинки фубар качает-показывает.
Для интереса...посмотрите кто-то у себя в этих папках после юзания фубара с закачкой картинок с инета...особенно
после прослушивания инет радио.
kgena_ua, спасибо большое за шпаргалки :beer:
vladj, я в машине не пользуюсь инет-картинками(особого смысла нет, монитор расположен не на уровне глаз), только дома и то редко когда интересно почитать/посмотреть на исполнителя в основном женского пола)))
Кеш IE можно указать свой в настройках, у меня сделано так... система стоит на ссд, все остальное(музыка, фильмы, и т.д.) на обычном диске.
Запрещать запись не обязательно, достаточно перенести кэш на другой носитель... запускаем IE далее в правом верхнем углу жмем шестеренку, далее в появившемся меню выбираем "Свойства браузера", откроется окно Свойств, в окне на вкладке Общие смотрим внизу "Журнал браузера", там будет две кнопки "Удалить" и "Параметры", нам нужна кнопка "Параметры", жмем ее и попадаем в настройки "Временных файлов интернета", смотрим вниз открывшегося окна там будет указана Текущая: папка временных файлов инета под ней будет кнопка "Переместить папку..." жмем кнопку, выбираем нужный диск и папку для врем.файлов инета в прошлых открытых окнах жмем Ок и перезагружаемся... теперь кэш IE в нужном нам месте.:smile2:
Есть еще вот такая UnCleaner - чистилка системного мусора (http://rgho.st/private/7w52wXqRL/514a676c3a74dbbf1390b433bca0f9d0), автор чувак с MDL его сайт http://joshcellsoftwares.com, пользовался ей еще на 7-ке(устанавливать ее не обязательно в архиве просто ехе-ха из установщика).
duzzy
Все забываю спросить...
Когда слушаю музыку по известной сборке фубара для икара по wasapi, то мы знаем, что при этом другие звуки блокируются.
При этом, когда закрываю(полностью) сборку фубара из икара, то другие звуки по прежнему молчат и только когда перегружаю сам икар, после чего другие звуки появляются...вопрос:
Как сделать чтобы после закрытия фубара, звуковой канал освобождался для других звуков.
sirota, тут думаю что по другому не выйдет... только перезапуск приложений или икара, потому как при васапи с монопольным режимом микшер блокируется а приложения которые отправляли в него сигнал продожают его отпралять... можно попробовать перезапускать службу звука в винде, но я еще это не пробовал делать...
Можно батником попробовать перезапускать службу, вот нашел для примера тему (http://forum.oszone.net/nextoldesttothread-200208.html) на осзоне как это сделать. Имя службы Audiosrv, попробуй сделать батник такого вида...
net.exe stop Audiosrv && net.exe start Audiosrv
@pause
и запускай от админа, но я не уверен поможет это или нет:dntknw: но перезапуск работает проверял только что.
Самый простой способ это использовать DS директ саунд(т.е. все гнать через микшер), если стоит нормальная акустика разница при DS и WASAPI почти не различима, при использовании нескольких приложений передающих звук удобней и практичней использовать DS(директ саунд) будет меньше гемора.
Попробую с батником.
Я разницу улучшения звучания по wasapi реально слышу, а так бы давно перешел на рекомендуемые настройки и гимор бы отпал с другими звуками, но после обычного переключением одной и той же композиции ...после wasapi друго как то не комильфо.
sirota, я попробовал перезапускать и не получается)))... служба перезапускается приложения молчат или виснут намертво... пока хз как это решить...
Я разницу улучшения звучания по wasapi реально слышу
Дело в том что я тоже слышу причем очень хорошо...:) без дсп без всего, достаточно просто переключить устройства с ds на wasapi или asio... один мой знакомый разницы не слышит вообще))) Я делаю так, когда пользуюсь нави тогда включаю ds когда не пользуюсь включаю asio, это конечно не решение проблемы но как вариант можно использовать.
А у меня сейчас другой трабл, звукавуха на кочках отваливается в слоте pci, сегодня буду вытаскивать своего старого монстра из машины, и придумывать как закрепить звук.карту... Нужно было сразу делать нормально через гибкий рейзер (http://nclabs.ru/ipc/adapter_conv/NCL-_-gh-152.html#null) убирать вибро-зависимость когда корпус делал, но поленился, теперь придется придумывать как крепить... сам себе придумал геморой :big:.
Krysanov
03.06.2016, 14:36
sirota,....
Дело в том что я тоже слышу причем очень хорошо...:) без дсп без всего, достаточно просто переключить устройства с ds на wasapi или asio... один мой знакомый разницы не слышит вообще))) Я делаю так, когда пользуюсь нави тогда включаю ds когда не пользуюсь включаю asio, это конечно не решение проблемы но как вариант можно использовать.
.
Это самый простой и надежный вариант...Пользуюсь постоянно
sirota, можно попробовать вариант со встроенной звучкой, я его уже предлагал ранее... встроенную звучку ставим звучкой по умолчанию(на нее пойдут все звуки), на внешней карте слушаем музыку через фубар...
Вывод на динамики организуем параллельно (это не совсем правильно для чистоты звука, но по другому в нашем варианте не сделать). Т.е. по простому, выводим звук с двух карт на одни и те же динамики. Возможно будет слышен фон(белый шум и т.д.), но на встроенной карте(которая по умолчанию) можно включить шумодавы как в самой винде так и в дровах.
И опять же предложенный вариант я не пробовал просто мысли были, вроде в этой теме вопрос по этой проблеме уже поднимали... даже схему подключения рисовал:)
Провести тест не сложно, нужно просто вкл. в биосе встроенную карту поставить на нее дрова поставить ее по умолчанию в винде и подлючится к усилку через переходник или подключить в разные каналы и посмотреть будут работать две карты вместе с разными режимами.
Krysanov
03.06.2016, 17:58
sirota, можно попробовать вариант со встроенной звучкой, я его уже предлагал ранее... встроенную звучку ставим звучкой по умолчанию(на нее пойдут все звуки), на внешней карте слушаем музыку через фубар...
Вывод на динамики организуем параллельно (это не совсем правильно для чистоты звука, но по другому в нашем варианте не сделать). Т.е. по простому, выводим звук с двух карт на одни и те же динамики. Возможно будет слышен фон(белый шум и т.д.), но на встроенной карте(которая по умолчанию) можно включить шумодавы как в самой винде так и в дровах.
И опять же предложенный вариант я не пробовал просто мысли были, вроде в этой теме вопрос по этой проблеме уже поднимали... даже схему подключения рисовал:)
Провести тест не сложно, нужно просто вкл. в биосе встроенную карту поставить на нее дрова поставить ее по умолчанию в винде и подлючится к усилку через переходник или подключить в разные каналы и посмотреть будут работать две карты вместе с разными режимами.
Все просто класс!! Теперь надо найти МАЛЕНЬКУЮ колонку
Krysanov
да можно и без колонки, как я писал параллельно(вместе) подключить на усилке на входе допустим на передние динамики и все... и не нужна колонка :), звук пойдет с двух карт на канал с подключенными динамиками.
seriousstas
16.06.2016, 04:27
4Icar_13_6_MPS_UNI (https://yadi.sk/d/QBslL0B8sX9Vp)
Название не менял .
Оптимизация по переключению панелей . Были случаи
наложения одной панели на другую, либо блокировка открытия тулбара .
Сейчас отключаются все таймеры закрываемой панели .
Поправил переключение времени на панели картинок от Геннадия и
два состояния картинки по двойному клику на полноэкранной панели от Марка (отличие от 4Icar_13_5) .
Krysanov
16.06.2016, 15:27
Ребята, есть ли такая возможность в фубаре....как два плейлиста... Объясню.. Езжу когда один, то слушаю те пе ни, которые нравятся мне.. Если с женой еду, то ей Ваенгу хочется послушать. :smile1:А что делать, терплю :)
Когда опять один еду, приходится открывать список и выбирать то, что нравится мне...
Было бы здорово если бы сохранялись песни... А ещё лучше, чтобы после выбора своего плейлиста, песня бы продолжалась с того места, когда я её слушал в последний раз.
Надеюсь, доходчиво объяснил:)
Есть целых 2 панели с такой возможностью в сборках сстаса. Например окно с двумя панелями (коврики слева и плейлисты справа).
Щёлкаешь по Manager и там по верхней, левой кнопке. Выходит предложение создать новый плейлист и обозвать его.
Создаёшь по очереди несколько обзывая каждый. Затем запустив на прослушивание нужный контент там-же в окне Playlist
щёлкаешь по шапке левой выделяя всё, либо по одному треку правой и Utilities > Send To Playlist и указываешь в какой из
плейлистов отправить.
Так-же можно добавлять в созданные и названные тобой плейлисты альбомы-треки из панели библиотеки, правой по контенту,
Utilities > Send To Playlist и выбираешь в какой.
seriousstas
16.06.2016, 17:17
Krysanov
Второе видео из "готовых" :
https://www.youtube.com/watch?v=TOc0pZwcvGU
начало (с 25 секунды) с создания плейлиста,
можно всё делать пальцем .
duzzy обнови ссылку в сборнике сборок) если будешь рядом..
Krysanov
Такая возможность есть уже очень давно :)
Вся суть автосборок и заключается в том чтоб не использовать контекстное меню(которое вызывается правой кнопкой мыши "Utilities > Send To Playlist" ) а упростить взаимодействие с плеером при работе пальцем...
Все проще пареной репы...
http://jpegshare.net/thumbs/df/c9/dfc99daaf6ad7552ff15c099f056360c.jpg (http://jpegshare.net/df/c9/dfc99daaf6ad7552ff15c099f056360c.png.html)
В основном плейлисте который с выезжающим менеджером-плейлистов,
- Создаешь свой плейлист для себя, например Мой Плейлист
- Создаешь плейлист для жены, например Плейлист Жены :)
http://jpegshare.net/thumbs/4b/73/4b73e5823115d3d8c7d22e692a7059e0.jpg (http://jpegshare.net/4b/73/4b73e5823115d3d8c7d22e692a7059e0.png.html)
Затем из библиотеки закидываешь то что тебе нужно выбрав перед этим либо свой плейлист либо плейлист жены в менеджере-плейлистов, и все в итоге получаем два плейлиста твой и жены которые будут наполнены разной музыкой, переключаются они в менеджере-плейлистов...
http://jpegshare.net/thumbs/5e/9e/5e9e745677bb2a92eb07204af521d8f2.jpg (http://jpegshare.net/5e/9e/5e9e745677bb2a92eb07204af521d8f2.png.html)
seriousstas
16.06.2016, 17:55
duzzy хорошая инструкция можешь "прикрепить" .
Ты где-то приводил пример по 4Icar_13_5_MPS_UNI , когда панель пикметра наползает на вуметр , посмотри , как сейчас (думаю будет норм) .
А скрин тот, так и не нашел , поэтому в личке осталось ":" )
vladj
Решил проблему с картинками (Ростелекомом) , через прокси пробовал ?
seriousstas
Спасибо, ок закину ее в готовые сборки ;)
когда панель пикметра наползает на вуметр , посмотри , как сейчас
проблема в том что у меня эта проблема вылезала только на виртуальной машине или при записи видео, при простом использовании все было норм.
Проверю и гляну как теперь.
Решил проблему с картинками (Ростелекомом)
У меня Ростелеком и проблем с ЛастФМ нет и не было, как то странно... контора то одна. Или получается что местные подразделения сами по себе что то шаманят...
----------------------------------
Обновил тему "Готовые сборки"...
Инструкцию по использованию двух плейлистов добавил в конец "Инструкций" (http://pccar.ru/showpost.php?p=346086&postcount=4).
Krysanov
16.06.2016, 18:54
Друзья! Спасибо за оперативную помощь! Все понятно, буду тренироваться
:yes2:
Пожалуйста !
---------------------
Немного пресетов для Милк-дропа (https://yadi.sk/d/Vjap6vc5sYVvg), есть новые и старые... разбирать очень лениво, думаю сами выберете то что нужно.
(не по теме)Полезная программка (http://winaero.com/comment.php?comment.news.1841) для блокировки приложения в один клик(думаю что понятно для каких целей можно использовать:)).
seriousstas
погонял панели сборки в виртуалке и при записи вот по этой проблеме...
когда панель пикметра наползает на вуметр , посмотри , как сейчас (думаю будет норм)
вроде работает как надо, наложений не было.
Krysanov
16.06.2016, 19:05
duzzy
.....
У меня Ростелеком и проблем с ЛастФМ нет и не было, как то странно... контора то одна. Или получается что местные подразделения сами по себе что то шаманят...
Так и есть местные проявляют не нужную инициативу.....Например, Ростелеком на сайт www.odin.com "не наложил :spiteful:" по разным причинам... а местная провайдерская контора "ООО Рога и копыты" уже тут как тут... Заходишь на сайт, а там БОЛЬШИМИ БУКВАМИ по центру:
РОГА и КОПЫТА в соответствие с Решением суда от ... № данный сайт .. и тд
Krysanov
Видимо выход один использовать прокси или ТОР (https://www.torproject.org/projects/torbrowser.html.en)... есть и другие способы обхода какие то проще другие сложнее.
Krysanov
16.06.2016, 19:21
Krysanov
Видимо выход один использовать прокси или ТОР (https://www.torproject.org/projects/torbrowser.html.en)... есть и другие способы обхода какие то проще другие сложнее.
А "зашить" это в сборку фубар не сложно? Типа.. не работают картинки? БАМС, нажми сюда.. и ОБА на!
Я сам напортачил очумелыми-неумелыми ручками в маниакальных попытках уменьшить
систему и кол-во процессов в ней работающих.
Сегодня утащил на пипу (которая на веранде болтается) крайнюю (4Icar_13_6_MPS_UNI)
и на пипе всё прекрасно работает-качает картинки.
Пару часов убил пытаясь пристроить Volume bar в то место, где у нас панели с картинками и
менеджером плейлистов...там ведь совершенно свободно между кнопками переключения панелей
био и плейлистов....но естественно ничего не получается. Между кнопками бэкграунд в сеточку
виден и место незаслуженно , имхо, пустует.
Krysanov
Зашить что ? ТОР браузер --- он для просмотра блоченных сайтов... или систему обхода...
Методов обхода блокировок (https://www.google.ru/?gfe_rd=cr&ei=qQ1FVaKzMcKBuAGw4oD4BQ&gws_rd=ssl#newwindow=1&q=%D0%BE%D0%B1%D1%85%D0%BE%D0%B4+%D0%B1%D0%BB%D0%B E%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D0%BA) много почитай в нете.
Смысл этих манипуляций, если в настройках фубара достаточно настроить прокси (http://www.freeproxy-list.ru/) и будут грузиться картинки.
Krysanov
16.06.2016, 19:53
Krysanov
Зашить что ? ТОР браузер --- он для просмотра блоченных сайтов... или систему обхода...
Методов обхода блокировок (https://www.google.ru/?gfe_rd=cr&ei=qQ1FVaKzMcKBuAGw4oD4BQ&gws_rd=ssl#newwindow=1&q=%D0%BE%D0%B1%D1%85%D0%BE%D0%B4+%D0%B1%D0%BB%D0%B E%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BE%D0%BA) много почитай в нете.
Смысл этих манипуляций, если в настройках фубара достаточно настроить прокси (http://www.freeproxy-list.ru/) и будут грузиться картинки.
Пройдет немного времени и по всей стране закроется доступ к картинкам... Какая разница напрямую смотрю картинки или с прокси... Подтормаживать будет? Вряд ли..
Ок... куда мне скопировать IP?
Krysanov
Пройдет немного времени и по всей стране закроется доступ к картинкам...
не думаю что так будет, это скорее инициатива местных чудиков которые блочат диапазон адресов...
Какая разница напрямую смотрю картинки или с прокси...
зависит от прокси... задержки, тормоза и т.д.
куда мне скопировать IP?
в настройки фубара...
http://jpegshare.net/thumbs/65/c9/65c91de815b32a58036041850a6a4028.jpg (http://jpegshare.net/65/c9/65c91de815b32a58036041850a6a4028.png.html)
Krysanov
16.06.2016, 20:11
Все, понял... Спасибо за терпение!
seriousstas
17.06.2016, 02:05
duzzy
ок спасибо - это радует ..
vladj
там ведь совершенно свободно между кнопками переключения панелей
не вижу смысла в двух одинаковых регуляторах , но можно сместить кнопки
по центру каждой из двух панелей CTRL + двойной клик по свободному месту(одиночный отключит фон).
пробуй , мож понравится ..
seriousstas
18.06.2016, 06:57
duzzy
ВСЁ! Порешал наконец с этим (убрал управление менеджером через сам плейлист) :
когда панель пикметра наползает на вуметр , посмотри , как сейчас
проблема в том что у меня эта проблема вылезала только на виртуальной машине или при записи видео, при простом использовании все было норм.
Проверю и гляну как теперь.
Подробнее :
http://foobar2000.ru/forum/viewtopic.php?p=61473#p61473
Теперь 4Icar_13_6_1_MPS_UNI - это примерно то,
что хотел сделать год назад, когда ни бум-бум в Фубаре был)
seriousstas, подскажи пож-та (может я не догоняю чего ?)...Если я в панели
био от Марка отключаю Ласт ФМ, отключаю закачку картинок, то при смене трека
с сервера в папке всё-равно пишется пустой файлик био артиста. Это неотключаемо?
seriousstas
ВСЁ! Порешал наконец с этим
А я тебя пытался навести на мысль сделать чуть проще :) но попробовать тоже было интересно, твоя идея очень хороша по всему особоенно для пальцевого использования, но JS скрипты слишком тормозные для этого +очень большая нагрузка, просто получается больно прожорливая схема для одной операции.
Я у себя сделал вызов менеджера-плейлистов пальцем влево(по горизонтали) и кнопкой вызова почти не пользуюсь))) автозакрытие выключил потому как шустрее крестиком закрыть +не так часто в менеджер захожу чаще бываю в библиотеке.
А в менеджере чаще всего пользую авто-плейлисты
- Loved Tracks - любимые треки(ты знаешь это что-то типо избранного, сердечко в плейлисте)
- Historic - история проигранного
- Tracks never played - треки которые не проигрывались
Рейтингом(звездочки в плейлисте) не пользоваться и смысла в нем не вижу, трек либо нравится либо не нравится...
У себя в сборке тоже много чего переделал... упрощал и отключал не используемое, поубирал некоторые кнопули, и еще кучу мелочей... авто-сохранение темы по таймеру(смысла 0 так как при хард ресете повреждаются файлы конфига, проще делать бэкап файлов конфига и темы а лучше просто иметь натроенную копию фубара), со сменой разрешения сборки тоже есть проблемы выключил и ее тоже:big:.
Перешел на 7-ку потому что дров на 8.1 на мою материнку нет... дрова от 7-ки не подходят(работает все через жопу)... и как оказалось если все более менее правильно настроить 7-ка ничем не хуже 8.1 а где-то и лучше(например в 8-ке пипец как раздрожает выключение монитора до выключения компа) +не нужно навешивать кучу всякой мути типо кнопок "старт" расширений для эксплорера и т.д. и бонусом нормальный стартовый экран с анимацией которую можно заменить на свою :smile2:
seriousstas
18.06.2016, 15:12
duzzy
Соглашусь - ну интересна была сама реализация ..
Мой прошлый AHK вариант из 13_4 работал отлично(его и вернул), но хотелось .. что-то поменять .
Нагрузки, как таковой не-было - просто в работе таймеров есть зависимости одних скриптов от других ,
в данном случае это приводило к конфликтам с MPS , как и к примеру ранее часы , которые мы скрещивали с "Марком" )
Я у себя сделал вызов менеджера-плейлистов пальцем влево(по горизонтали) и кнопкой вызова почти не пользуюсь))) автозакрытие выключил потому как шустрее крестиком закрыть +не так часто в менеджер захожу чаще бываю в библиотеке.
Да оно есть лишним , если не используешь "контроль" тк вылазит иногда самопроизвольно ..
По 7-ке - пробовал тоже её - хороша , но у меня как-раз наоборот - дрова лучше работают в 8-ке ..)
vladj Это неотключаемо?
Добавил такую возможность, проверь(на той-же кнопке, нужен рестарт) .
пишется пустой файлик био артиста
Почему пустой - это то-же био , картинки не грузит , а био можно почитать ..
seriousstas
Тему готовых обновил...
Посмотрел и оказалось есть немного обновлений ;)
- Колумнсы обновились до 0.5.0 (https://yuo.be/download/37D8CCE3-97C5-491F-B007-6A8412045BEE/foo_ui_columns-0.5.0.fb2k-component)
- Super Audio CD Decoder до 0.9.8 (https://sourceforge.net/projects/sacddecoder/files/foo_input_sacd/)
- ASIOProxyInstall-0.8.4-4 (https://sourceforge.net/projects/sacddecoder/files/interim/) --- эту штуку я еще не пробовал
- js-marc2003 v4.1 (https://github.com/19379/js-marc2003/releases) --- скрипты от Марка
- Subwoofer 1.2 (http://www.foobar2000.org/components/view/foo_dsp_subwoofer) --- дсп-ха для саба тоже обновилась
- foo_chronflow (https://hydrogenaud.io/index.php/topic,108450.0.html)(графическая библиотека с обложками) --- тоже вроде бы стабильно теперь работает, возможно на мультитаче будет крутить обложки:)
seriousstas
19.06.2016, 02:25
seriousstas
Тему готовых обновил...
Посмотрел и оказалось есть немного обновлений ;)
[/URL](графическая библиотека с обложками) --- тоже вроде бы стабильно теперь работает, возможно на мультитаче будет крутить обложки:)
:good1:
Первые две позиции обновлю, интересно, что там Марк в thumbs продвинул ...
seriousstas
;)
Ооо Марк хитрый жук:) он уже приличное время вносит изменения по нашим наброскам))) посмотри ченджлоги по тумбс... я иногда захожу на гитхаб почитать что у него нового, и на лице возникает улыбка от прочтенного...
интересно, что там Марк в thumbs продвинул ...
Больше исправлений по использованию скрипта и улучшения со стороны функций сетевых опросов и работы картинок...
Последние версии не пробовал потому как я не использую его скрипты, но судя из описанных им изменений должны работать лучше чем прошлые варианты... схема работы прилично изменена в лучшую сторону.
Немного поковырялся и сделал сборочку для тех кто пользует фубар вместо встроенного плеера... :) (ранее не так написал))))
http://jpegshare.net/thumbs/b0/f0/b0f00f01ec84d593c7c4a5d3b19c5125.jpg (http://jpegshare.net/b0/f0/b0f00f01ec84d593c7c4a5d3b19c5125.png.html) http://jpegshare.net/thumbs/99/78/9978884f7a90935b1782fda6b42be5a1.jpg (http://jpegshare.net/99/78/9978884f7a90935b1782fda6b42be5a1.png.html)
Сборка на DUI(default UI)
- Переключение пресетов 7 шт. (некоторые предустановки)
- Переключение устройств 4 шт.
- Контроль кол-ва каналов(стандартный Peak Meter его достаточно для просмотра изменения кол-ва каналов)
- сборка почти всеядная)))
Переключение и запись своих устройств в панель:
- Правая часть панели ДСП переключает устройства, четыре кнопки, для того чтобы прописать свои устройства жмем Ctrl и нужную кнопку переключения устройства, далее в появившемся окне...
http://jpegshare.net/thumbs/9a/98/9a98c651dc71bcee05aa49f1d65dfbc5.jpg (http://jpegshare.net/9a/98/9a98c651dc71bcee05aa49f1d65dfbc5.png.html)
вписываем свое устройство воспроизведения и жем ОК.
- Устройства должны быть прописаны так как они написаны в меню...
http://jpegshare.net/thumbs/85/9e/859e7ad26dbaeb9f164603e2f41892b2.jpg (http://jpegshare.net/85/9e/859e7ad26dbaeb9f164603e2f41892b2.png.html)
, например DS : Первичный звуковой драйвер
DSP-хи:
- Matrix Mixer (foo_dsp_mm) (http://skipyrich.com/wiki/Foobar2000:Matrix_Mixer) --- 18-channels matrix mixer.(пример настроек есть на пресете Matrix Mixer, и еще ранее был найден скрин с настройками на гидрогене лежит в папке themes mixer_settings.jpg)
- Subwoofer 1.2 (http://www.foobar2000.org/components/view/foo_dsp_subwoofer) --- дсп-ха для саба
- Объёмный звук DSP (https://hydrogenaud.io/index.php/topic,52235.0.html)
- Real Bass Exciter (Подчёркивание низких частот) (http://cdpos.biz/showthread.php?276-Real-Bass-Exciter-(%D0%9F%D0%BE%D0%B4%D1%87%D1%91%D1%80%D0%BA%D0%B8% D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B8%D0%B7%D0%BA%D0%B8%D1%85-%D1%87%D0%B0%D1%81%D1%82%D0%BE%D1%82)) (пример настройки по ссылке)
- Channel Mixer (http://skipyrich.com/wiki/Foobar2000:Channel_Mixer)
- EBU R128 Normalizer --- нормализатор
В сборке уже есть библиотеки для общения с Икаром !
Лишние и ненужные компоненты можно удалить.
Настройки панели(цвета элементов, шрифт, фон и т.д.) ДСП как обычно в Properties(ПКМ по панели ДСП в меню выбрать Properties)
Установка:
Сборка портабельная, достаточно просто скопировать папку foobar2000 из архива foobar2000 для iCarDS.7z в папку Program Files.
Скачать (https://yadi.sk/d/cLiUGYqmsf4gv)
Matrix Mixer (foo_dsp_mm) --- 18-channels
Это то, о чем я думаю?
sirota
:) А о чем ты думаешь ?
Это 18-ти канальный микшер с отключаемым нормализатором, на скрине можешь посмотреть пример настройки схемы 7.1(на сколько я понял)...
http://jpegshare.net/thumbs/99/78/9978884f7a90935b1782fda6b42be5a1.jpg (http://jpegshare.net/99/78/9978884f7a90935b1782fda6b42be5a1.png.html)
Расшифровка каналов(думаю что понятно про что я;))
Front Left ---> FL
Front Right ---> FR
Front Center
LFE
Back Left
Back Right
Front Center Left
Front Center Right
Back Center
Side Left
Side Right
Top Center
Top Front Left
Top Front Center
Top Front Right
Top Back Left
Top Back Center
Top Back Right
Вопрос:
"Надеюсь, что плагин получит развитие до регулировки громкости отдельных каналов."
немногословный комментарий от автора:
FL = 1
FR = 0.5
и левый канал будет в два раза громче, чем правый.
Автор skipyrich наш соотечественник, страничка с плагином на фубар.ру (http://foobar2000.ru/forum/viewtopic.php?t=1171)
Немного поковырялся и сделал сборочку для тех кто пользует фубар вместо встроенного плеера... :) (ранее не так написал))))
Скачать (https://yadi.sk/d/cLiUGYqmsf4gv)
duzzy привет, архив на вирус ругается :shok:
А о чем ты думаешь ?
Это полноценный 18 канальный микшер? или я не о том.
sirota
Это полноценный 18 канальный микшер? или я не о том.
Да это 18-ти канальный микшер :) ты все правильно понял.
Автор skipyrich тот же самый что делал и Channel Mixer... вот посмотри на страничке его произведения (http://skipyrich.com/wiki/Main_Page)
------------------------------
Вот все 18-ть каналов в работе но без правильной настройки(на некоторых каналах одинаковая громкость) настроил просто для примера как оно выглядит...(обведено красным квадратом)
http://jpegshare.net/thumbs/07/d3/07d339c83e60c4226d2ef074b5c5165b.jpg (http://jpegshare.net/07/d3/07d339c83e60c4226d2ef074b5c5165b.png.html)
dk-fsb
Привет !
На какой файл в архиве что пишет про зловреда и что за антивирус ?
На я.диск при загрузке зловредов в открытом архиве ссылку на доступ не получишь... как правило :)
dk-fsb
Привет !
На какой файл в архиве что пишет про зловреда и что за антивирус ?
На я.диск при загрузке зловредов в открытом архиве ссылку на доступ не получишь... как правило :)
пишет троян. мне его Яндекс браузер блокирует не дает скачать
dk-fsb
Ржака)))... Яндекс браузер не дает скачать с Яндекс диска.
А какой троян, название пишет?
Система чистая как и архив, перепроверил сегодня после твоего сообщения.
Скачай IE или лисой...
А в чем плюс у янд.браузера ?
dk-fsb
А в чем плюс у янд.браузера ?
Я давно на него спрыгнул с файрфокса, нравится синхронизация закладок и т.д.
на всех моих виндовых железках, нравится автоперевод на русский. Правда я работаю
на портабельном, который на обычном винте установлен. Файрфокс установлен, но не пользуюсь.
Хром от гугла полный отстой, оперой никогда не пользовался...как и родным виндовым.
dk-fsb
Ржака)))... Яндекс браузер не дает скачать с Яндекс диска.
А какой троян, название пишет?
вот глянь
dk-fsb
Гляжу, это так называемый защитник виндовс, он лома в глазу не увидит... мой тебе совет отключи его, а лучше удали от него толку ноль только ресурсы системы жрет как танк...
Если уж так нужен антивирусник, то можно пользовать вот это решение от каспера (http://www.kaspersky.ru/acq/kfa-thank-you?icid=ru_kfa-lp-dl_acq_ona_oth_onl_acqlp-button______)
Это неплохая программа Malwarebytes Anti-Malware (https://ru.malwarebytes.com/)
Как и эта тоже SUPERAntiSpyware (http://www.superantispyware.com/)
Еще есть загрузчик на вирус-тотал (https://www.virustotal.com/ru/documentation/desktop-applications/)
Если что то страшно запускать на компе, то есть песочница Sandboxie (http://www.sandboxie.com/)(платная) устанавливаешь и запускаешь приложения в ней, так же очень полезно в ней запускать браузеры для того чтоб не собирать у себя на компе кучу зверей которыми кишат некоторое сайты...
Есть еще хорошее решение Blocking Unwanted Connections with a Hosts File (http://winhelp2002.mvps.org/hosts.htm)
Защитника винды можно отключить так как описано в этой (http://winaero.com/blog/nodefender-disable-windows-defender-in-windows-10-with-few-clicks/) статье.
Что касается архива то он чистый, ложные срабатывания возможны так как авторы компонентов пакуют их по разному, так же это возможно при переводе компонента на русский язык(surround я паковал upx для уменьшения размера).
Отчеты с вирус-тотал по скану:
архив целиком (https://www.virustotal.com/ru/file/b3b4040413c64269c01ec9eccc78817ae8225b62c733cc8fc3 eb9bd05b13a1fd/analysis/1466612904/)
файл foobar2000.exe (https://www.virustotal.com/ru/file/886403c36e263d0cfe4536b3fd840da430d108e1afeb713646 f5d8a67242b47e/analysis/1465975327/)
файл dsound.dll (https://www.virustotal.com/ru/file/94b2014b97aa3349e075fd9ec8d0696fabdbc3a553ed2c5a0a c3f4feb9b63847/analysis/1466613155/) --- компонента uihacks
файл foo_dsp_eq.dll (https://www.virustotal.com/ru/file/27e177da08609500124c950a9f0075e57ecaac4f905323ab7b 2aea3684ca11ae/analysis/1460723179/) --- фубаровский эквалайзер
файл foo_dsp_std.dll (https://www.virustotal.com/ru/file/a166ee1eb21b9cd6d9b248ad9ae2e70fc677f6f9ec499c0e41 2ce31c8d2427b1/analysis/1466613420/) --- стандартный набор дсп
файл foo_icards.dll (https://www.virustotal.com/ru/file/7ed84f74dc3becfae013b3c0e3d47dadbaf757dbdee520ced7 bc42e3f3c361c7/analysis/1466613470/) --- библиотека икара
файл foo_input_std.dll (https://www.virustotal.com/ru/file/db1e24a65ab63778ba2a8080032d68c02bf88cbdea7f30d172 786870970c2f80/analysis/1461325394/)
файл foo_rgscan.dll (https://www.virustotal.com/ru/file/ea46f23d6a1b551e842d8254746665cfa83b790d51c42057fa 24aa9bef2ee26c/analysis/1460723179/)
файл foo_ui_std.dll (https://www.virustotal.com/ru/file/a210e9f7e2f0d516742fb5ce7ad9822784f4411de6cc4aa2e8 586027e3a54811/analysis/1461325391/)
файл foo_unpack.dll (https://www.virustotal.com/ru/file/c945eeb1b14c77370bdf2ee3bd616d5da5a453fdac0d5918f4 2ed0243094446f/analysis/1461325391/)
файл iCarDSClient.dll (https://www.virustotal.com/ru/file/aa6580bcdc6b20470b326a56937813348694024c32a587a78f 683ff2677bf237/analysis/1466613792/)
файл foo_ac3.dll (https://www.virustotal.com/ru/file/11a43a78f60cd4a69626f6bcae33a48efaedc53b58a8fb99be 8206cbdd3852d9/analysis/1424941560/)
файл foo_channel_mixer.dll (https://www.virustotal.com/ru/file/e8454ca5ee865a9ee3ea52fd5a10254c04afa566f6d9c219fc 0c94014cbdd8d3/analysis/1466441290/)
файл foo_cuefilter.dll (https://www.virustotal.com/ru/file/900cc3d5297934b2db7f253332451ec0550178f5dfd9a6ff79 58ea35bacaf928/analysis/1462709122/)
файл foo_dsp_BassExciter.dll (https://www.virustotal.com/ru/file/338a44f434f85353ae87c303abb34a645952d1045ba92d0fdb f09fa85c3783f8/analysis/1414140984/)
файл foo_dsp_fsurround.dll (https://www.virustotal.com/ru/file/765b8eef5e2e2727f79c023df10f05a593adb537b47ecb53f5 c8e01e02904546/analysis/1451703059/)
файл foo_dsp_mm.dll (https://www.virustotal.com/ru/file/44d4e1bec41fd3a554666516c1d4a6bea5e9ab9431df89a2ea a1de3432f596ae/analysis/1466614129/)
файл foo_dsp_resampler.dll (https://www.virustotal.com/ru/file/3d56ae30ac4db771effbe4a5324fceca4b5921c0c8cfd93b9d 4e93fc3abd4a94/analysis/1460641101/)
файл foo_dsp_resampler_mod.dll (https://www.virustotal.com/ru/file/c68a7d34d97bb41d767fe0882e32d056d4813b8a66137069e3 4a29ab1d46613b/analysis/1466614256/)
файл foo_dsp_subwoofer.dll (https://www.virustotal.com/ru/file/201b9b8ec9dd8dfd90457b0fe3c6ed943c42f378b2f31dde82 f055a425aaaf3c/analysis/1465237207/)
файл foo_hdcd.dll (https://www.virustotal.com/ru/file/1cb646ef2fa6e63c2c3b7ba737e2e2dc1b42061bbc32e1de5f 842a4627fb03a6/analysis/1466614393/)
файл foo_input_dts.dll (https://www.virustotal.com/ru/file/bee75d84e5fe20fe0e88a3768e81359bb32c3726be4fb75a40 5a867904fec65d/analysis/1458738310/)
файл foo_input_dvda.dll (https://www.virustotal.com/ru/file/9794569cc952b94d0c5d2de63f742c45f45fbbe76424c64087 69cc8b858c902e/analysis/1466614508/)
файл foo_input_monkey.dll (https://www.virustotal.com/ru/file/1731a0c36349e7f601f98bcfbd5b5149b7ebb849c5cac4947b ac37a709c17396/analysis/1465059376/)
файл foo_input_sacd.dll (https://www.virustotal.com/ru/file/997fcc37bf3a83466161b211f2699b77bcd406a467945399b1 bd1f6b9d34dfa4/analysis/1466614677/)
файл foo_jesus.dll (https://www.virustotal.com/ru/file/0826286a40edee594788d59aeb4ca66216156f9d3c87d9bd4a 0d9a7c192e2cc4/analysis/1466614731/)
файл foo_jscript_panel.dll (https://www.virustotal.com/ru/file/6c8611826e71c1ee5afbc0fa219c9e2da63cbe75e8c8a3c5ec d67eb38045336d/analysis/1466614882/)
файл foo_out_asio.dll (https://www.virustotal.com/ru/file/935250864e9a0a39ce168e14ee7563963beb4975d6828918a0 be6261a3be086b/analysis/1466614954/)
файл ASIOhost32.exe (https://www.virustotal.com/ru/file/e3fcf94f2bcdcd9cd8ea6ade9ee04b0de302bc981c32fe9038 10a314d8a4e62e/analysis/1466615078/)
файл ASIOhost64.exe (https://www.virustotal.com/ru/file/f7e3bf097d5704054049b6800699ee98b339a703fb72b16734 0573b786d8797e/analysis/1466615101/)
файл foo_out_wasapi.dll (https://www.virustotal.com/ru/file/09a0b996828619b6a58c6104fe82620c85629f5fa8786f32c8 14400f0e74e36a/analysis/1465842062/)
файл WASAPIHost32.exe (https://www.virustotal.com/ru/file/af1296e12f1ccb6ee24b1f76b7182334012f2bde330620703e 854cf7d1c9460f/analysis/1449955989/)
файл WASAPIHost64.exe (https://www.virustotal.com/ru/file/737bfcd29774c367d1df14ccf4f57517fb901e2cf7bb876eb1 1bd3bc57a0066e/analysis/1454778175/)
файл foo_r128norm.dll (https://www.virustotal.com/ru/file/93506deb1c9ad75b5d08c2a49e64ce0b4a0ba6bf627daaa2cc b1fb7d192e697a/analysis/1466615386/)
файл foo_ui_hacks.dll (https://www.virustotal.com/ru/file/370ce3c8c777a20fdd7405e3e76e177062678b17eb9752d9c3 2a439a4b1d9361/analysis/1466615470/)
В отчетах встречается PAK_Generic, Suspicious, Packer.Generic!c, все это упаковка компонента разными пакерами для уменьшения размера и т.д. и как правило реагируют на это нелепые антивирусные решения например AegisLab, можешь посмотреть сам в отчете 1 или 3 срабатывания из целой кучи продуктов... как так может быть... если бы что то было то весь отчет горел бы как новогодняя елка...:big:
По вопросу проблемы с самим фубаром есть вот такая вот публикация (http://www.foobar2000.org/fuckmicrosoft) от автора, статья маленькая и на английском языке.
---------------------------
Если страшно что то использовать и запускать в сборке, то есть варианта два. Первый не использовать. Второй скачать архив, распаковать, и взять из архива файлы конфигураций и настроек...
1. установить свой фубар в портативном режиме
2. нужны эти файлы/папки из моей сборки:
- папка configuration
- файл из корня папки фубара theme.fth
- папка buttons из корня папки фубара(если нужны кнопочки play|prev|next...)
3. перекачать самому компоненты которые лежат в папке user-components
4. скопировать с заменой в свой портативный фубар.
Можно еще импорт темы сделать, но компоненты из user-components нужно перекачивать...
файл темы (http://s4.sendfile.su/download/1244846/aOxD5F3YSPIqIgfMjUqsA5YkYS8FKBvwU2NAG1hm)
В дефолтном интерфейсе(DUI) тема импортируется вот тут...
http://jpegshare.net/thumbs/49/9d/499da3128c2e7b120feeb2cbbac76fd2.jpg (http://jpegshare.net/49/9d/499da3128c2e7b120feeb2cbbac76fd2.png.html)
-----------------------------
Добрый день. Вопрос по сборке NEON.
Когда открываешь альбомы во flac, эта сборка сортирует трэки по ко какому-то своему закону. Что бы он правильно сортировал треки, после каждой загрузке нового альбома нужно нажимать на кнопку State. как это исправить? На видео думаю понятно будет.
Спасибо.
Видео (https://cloud.mail.ru/public/2May/nGzS92GwJ)
И ещё вопрос. Как сделать что бы отображались номера треков,те ято прописаны в свойствах самого файла (трэка) как указоно в альбоме?
kaamoss
Привет !
В библиотеке по умолчанию стоит сортировка by Path(по папкам), т.е. сортировки нет, все как лежит в папке так и отправляется в плейлист. Сортировку можно настроить в плейлисте там где ты жал кнопку state(по умолчанию в плейлисте так же стоит сортировка by Path/Folder Structure).
Скрипт библиотеки настраивается по клику правой кнопки мыши...
http://jpegshare.net/thumbs/b8/94/b89466260e3efa7000f5b143c94e6678.jpg (http://jpegshare.net/b8/94/b89466260e3efa7000f5b143c94e6678.png.html)
В плейлисте можно настроить что угодно, есть три варианта настройки:
1. по верхнему бару который ты кликал по state... вызвать/убрать его можно через Ctrl + T
настройки того что отображать в плейлисте...
http://jpegshare.net/thumbs/7c/12/7c1242b03be44aaafc08182f9feba1a5.jpg (http://jpegshare.net/7c/12/7c1242b03be44aaafc08182f9feba1a5.png.html)
настройки сортировки....
http://jpegshare.net/thumbs/6e/99/6e990dbb5622a2449e966474419e5820.jpg (http://jpegshare.net/6e/99/6e990dbb5622a2449e966474419e5820.png.html)
2. в панели настроек плейлиста, вызвать ее можно нажав Shift предварительно кликнув на плейлист мышой для перевода фокуса...
http://jpegshare.net/thumbs/66/02/6602fb8f0d980567bfb186801af564dd.jpg (http://jpegshare.net/66/02/6602fb8f0d980567bfb186801af564dd.png.html)
Там много настроек пользовательская сортировка, цвет элементов, настройка колонок, вкл/откл. блюра обложек и т.д
3. через скрытые настройки в Properties, попасть в них можно через нажатие и удержание кнопки Shift + правый клик мыши...
http://jpegshare.net/thumbs/49/4e/494e542f9a2a0af47e5f415ddfef22f6.jpg (http://jpegshare.net/49/4e/494e542f9a2a0af47e5f415ddfef22f6.png.html)
само меню Properties...
http://jpegshare.net/thumbs/19/78/19783d80ae172469883be986aa34ef6d.jpg (http://jpegshare.net/19/78/19783d80ae172469883be986aa34ef6d.png.html)
То что в библиотеке стоит сортировка по папкам, это хорошо. Так и надо.
Но, открывая альбом, любой(или по другому папку с альбомом) трэки раскидывает не так как они должны идти, не по порядку. Вот в этом проблема(((( Приходится тыкать постоянно кнопку Sate, что бы они шли по порядку.
kaamoss
Вопрос, как выглядит расположение треков в скрипте библиотеки ? Можешь сделать скрин для меня чтоб мне сравнить порядок у себя... примерно такой, развернутый альбом например того же Korn в библиотеке и скрин треков в плейлисте после отправки из библиотеки
что то типо этого...
библиотека
http://jpegshare.net/thumbs/db/f9/dbf9faafe3a76d4f212bc44e7edf0702.jpg (http://jpegshare.net/db/f9/dbf9faafe3a76d4f212bc44e7edf0702.png.html)
плейлист
http://jpegshare.net/thumbs/db/06/db06896dead9d6839f80106550cf4a73.jpg (http://jpegshare.net/db/06/db06896dead9d6839f80106550cf4a73.png.html)
Можешь еще альбом скинуть если не сложно, чтоб мне можно было изучить в чем загвоздка.
У меня есть еще скрипт библиотеки другой Library Tree (https://hydrogenaud.io/index.php/topic,110938.0.html)(актуальная версия в конце темы 0.9) от другого автора(на другом компоненте JScript Panel), но я его еще обкатываю в сборке... с ним тоже есть еще вопросы но вроде бы он правильно отправляет треки по порядку... надо будет глянуть. Как его доделаю выложу для общего пользования.
----------------------------------------
С этим Приходится тыкать постоянно кнопку Sate, что бы они шли по порядку.
можешь попробовать изменить сортировку в плейлисте на альбом - артист возможно поможет...
менять тут...
сначала так
http://jpegshare.net/thumbs/03/28/03289ecb8be40c71a9bdc000280b1551.jpg (http://jpegshare.net/03/28/03289ecb8be40c71a9bdc000280b1551.png.html)
потом так
http://jpegshare.net/thumbs/6a/02/6a02d694193720664efc2222e8c2e1ef.jpg (http://jpegshare.net/6a/02/6a02d694193720664efc2222e8c2e1ef.png.html)
Да, конечно))
библиотека
http://jpegshare.net/thumbs/46/bb/46bb425c262b7088e750f540146a89b1.jpg (http://jpegshare.net/46/bb/46bb425c262b7088e750f540146a89b1.jpg.html)
Плэйлист
http://jpegshare.net/thumbs/7b/44/7b440d39ec0cb540c39f547e4e49c721.jpg (http://jpegshare.net/7b/44/7b440d39ec0cb540c39f547e4e49c721.jpg.html)
Ссылка на скачку Korn (http://oj2xi4tbmnvwk4ron5zgo.cmle.ru/forum/viewtopic.php?t=5099307)
SlipKnot (http://oj2xi4tbmnvwk4ron5zgo.cmle.ru/forum/viewtopic.php?t=5204454)
Я думаю не скрипте дело, ибо у тебя всё нормально сортируется)
С этим
можешь попробовать изменить сортировку в плейлисте на альбом - артист возможно поможет...
менять тут...
сначала так
http://jpegshare.net/thumbs/03/28/03289ecb8be40c71a9bdc000280b1551.jpg (http://jpegshare.net/03/28/03289ecb8be40c71a9bdc000280b1551.png.html)
потом так
http://jpegshare.net/thumbs/6a/02/6a02d694193720664efc2222e8c2e1ef.jpg (http://jpegshare.net/6a/02/6a02d694193720664efc2222e8c2e1ef.png.html)[/QUOTE]
это я конечно же пробовал, вообще ни чего не меняется.
kaamoss
Музло качаю уже... как скачаю посмотрю, но похоже косяк в скрипте...
Причем как то странно он проявляется не на всех альбомах, пока не пойму в чем хрень...
Походу придется вас всех пересаживать на новый компонент JScript Panel, потому как в свежих скриптах похоже все правильно отправляется в плейлист...
( я просто раньше особо отправке треков в плейлист значения не придавал, больше интересовала правильность отображения в библиотеке(кол-во треков и нет ли потерь) )
-------------------------------
в библиотеке правильно показывает как нужно в том порядке что и трек-лист, как только закидываешь в плейлист порядок сбивается... хрень(я уже наивно думал что все проблемы с библиотекой поборол)))))
Раз уж грядёт модернизация сборки NEON, то ещё вопрос.
Можно ли сделать что бы подгружались фотки для каждого исполнителя?
Как это сделано в других сборках. Только что бы интерфейс остался весь прежним.
Я пробовал подгружать инфу через функцию Tagging, но ни чего при этом не менялось.
И ещё, есть ли возможность выкинуть функции DSP или их достаточно выключить что бы они не использовались?
И появляются несколько вопросов тем кто будет переходить на JScrit Panel, так как по простому скрипты не переделать придется выбирать, использовать уже переделанный мной под палец скрипт от WilB...
либо мне придется перелопачивать под палец новый скрипт от Vo Thanh Dat что сейчас стоит в сборке(когда переделаю не знаю это очень муторный процесс а на улице лето и сидеть в духоте перелопачивать скрипт не очень хочется:)).
Так вот и вопрос, Использовать скрипт от WilB (https://hydrogenaud.io/index.php/topic,110938.0.html), либо ждать когда я перелопачу новый скрипт от Vo Thanh Dat (http://fav.me/d682ptl), либо использовать как есть ???
Но оба новых скрипта работают на JScript Panel, соответственно придется немного дорабатывать сборки для их корректной работы, либо переделывать скрипты в сборке под JScript Panel.
Выглядят они так...
Скрипт от WilB переделка от меня под палец(я уже писал про него и какое то время уже обкатываю у себя в сборке)
http://jpegshare.net/thumbs/26/a0/26a0b0c37dcf36a04ab0f218e0207e2d.jpg (http://jpegshare.net/26/a0/26a0b0c37dcf36a04ab0f218e0207e2d.png.html)
Скрипт от Vo Thanh Dat не переделанный(пальцем в таком виде пользовать не реально)
http://jpegshare.net/thumbs/bd/e5/bde5f9ce41ffb94334f6c0fb8c72ff78.jpg (http://jpegshare.net/bd/e5/bde5f9ce41ffb94334f6c0fb8c72ff78.png.html)
отличия и качество...
скрипт от WilB:
- работает как компонент библиотека Album List
- прямой доступ к индексу библиотеки(нет плейлистов и др мути, показывает содержимое как оно есть)
- куча настроек
- очень шустро работает
- бонусы от меня(обложка фоном, настройки прокрутки пальцем и т.д как обычно):smile2:
минусы --- нет инкрементного поиска, редактировать код очень сложновато писал грамотный кодер:big:, но основные вещи для использования под палец уже настроены и работают(добавление в плейлист по кнопке, проигрывание по даблу, много чего изменено по функционалу для работы пальцем)...
от себя могу добавить что мой выбор пал на него так как он почти одинаков по функциям с Album List плюс большой выбор настроек... мне он больше нравится в использовании
скрипт от Vo Thanh Dat :
- прямого доступа нет, работает через плейлист
- другие настройки вы уже видели и использовали
минусы --- нужно переделывать под палец, и опять же есть ошибки в коде(уже нашел пока быстро юзал), править его код очень геморойное занятие seriousstas знает про что я говорю...
seriousstas
23.06.2016, 17:59
seriousstas знает про что я говорю...
Знаю , привет!
Кстати первая версия от Vo Thanh Dat :
// @version "1.0"
// @author "Vo Thanh Dat moded by Terro"
на WSH 1.5.10 правильно добавляет треки .
Можно пока её вернуть (как и 1.5.10) ... С ней проблем не-было ...
ещё можно просто доставить JP вместе с WSH 1.6
kaamoss
Раз уж грядёт модернизация сборки NEON
Она у меня давно уже переделана для работы JScript Panel :) просто я ее не выкладывал, потому как скрипты для WSH Panel Mod на ней работать не будут, и будет много вопросов... "почему это вот работает а это нет".
Можно ли сделать что бы подгружались фотки для каждого исполнителя?
Ты про инет-картинки говоришь, я правильно понял...
И ещё, есть ли возможность выкинуть функции DSP или их достаточно выключить что бы они не использовались?
Панель ДСП это просто переключалка пресетов которые сохранены в фубаре, обатной связи панель ДСП с фубаром не имеет... сделана просто для упрощения переключения пресетов ДСП. Если не нужна ее можно просто удалить или заменить другим скиптом.
seriousstas
Привет ! :)
Ну а вообще ты прав можно и ее вернуть... сейчас поищу у себя в закромах(уже столько на компе скриптов и их переделок просто жесть)
Я просто полностью перешел на JScript Panel и на библиотеку от WilB она мне больше нравится.
И появляются несколько вопросов тем кто будет переходить на JScrit Panel, так как по простому скрипты не переделать придется выбирать, использовать уже переделанный мной под палец скрипт от WilB...
либо мне придется перелопачивать под палец новый скрипт от Vo Thanh Dat что сейчас стоит в сборке(когда переделаю не знаю это очень муторный процесс а на улице лето и сидеть в духоте перелопачивать скрипт не очень хочется:)).
Так вот и вопрос, Использовать скрипт от WilB (https://hydrogenaud.io/index.php/topic,110938.0.html), либо ждать когда я перелопачу новый скрипт от Vo Thanh Dat (http://fav.me/d682ptl), либо использовать как есть ???
Но оба новых скрипта работают на JScript Panel, соответственно придется немного дорабатывать сборки для их корректной работы, либо переделывать скрипты в сборке под JScript Panel.
Выглядят они так...
Скрипт от WilB переделка от меня под палец(я уже писал про него и какое то время уже обкатываю у себя в сборке)
http://jpegshare.net/thumbs/26/a0/26a0b0c37dcf36a04ab0f218e0207e2d.jpg (http://jpegshare.net/26/a0/26a0b0c37dcf36a04ab0f218e0207e2d.png.html)
Скрипт от Vo Thanh Dat не переделанный(пальцем в таком виде пользовать не реально)
http://jpegshare.net/thumbs/bd/e5/bde5f9ce41ffb94334f6c0fb8c72ff78.jpg (http://jpegshare.net/bd/e5/bde5f9ce41ffb94334f6c0fb8c72ff78.png.html)
отличия и качество...
скрипт от WilB:
- работает как компонент библиотека Album List
- прямой доступ к индексу библиотеки(нет плейлистов и др мути, показывает содержимое как оно есть)
- куча настроек
- очень шустро работает
- бонусы от меня(обложка фоном, настройки прокрутки пальцем и т.д как обычно):smile2:
минусы --- нет инкрементного поиска, редактировать код очень сложновато писал грамотный кодер:big:, но основные вещи для использования под палец уже настроены и работают(добавление в плейлист по кнопке, проигрывание по даблу, много чего изменено по функционалу для работы пальцем)...
от себя могу добавить что мой выбор пал на него так как он почти одинаков по функциям с Album List плюс большой выбор настроек... мне он больше нравится в использовании
скрипт от Vo Thanh Dat :
- прямого доступа нет, работает через плейлист
- другие настройки вы уже видели и использовали
минусы --- нужно переделывать под палец, и опять же есть ошибки в коде(уже нашел пока быстро юзал), править его код очень геморойное занятие seriousstas знает про что я говорю...
Я ни хрена не понимаю в этих скриптах и в этих панелях))))
Для меня лично лишь бы всё правильно работало и трэки правильно распологались)))
пс Мой делитантский ответ:big:
kaamoss
Ты про инет-картинки говоришь, я правильно понял....
Да, именно про них
seriousstas
23.06.2016, 18:24
kaamoss
duzzy
Предполагается, что в папке должны быть либо CUE c одним файлом либо потреково .
В KoЯn забыли удалить CUE - отсюда и проблемы ...
те нужно просто удалить CUE и проблема уйдёт ;)
seriousstas
Ты имел ввиду тот скрипт библиотеки где еще не было картинок(обложки фоном) ?
-----------------------
Ты гений спасибо тебе большое избавил от лишнего гемора :beer:...
(а я уже представил как сборку буду перелопачивать:smile1:)
Все правильно нужно куй удалить и все будет пучком... только что проверил...
вот...
http://jpegshare.net/thumbs/bc/2f/bc2f537710e850233b4fbd7f37be81be.jpg (http://jpegshare.net/bc/2f/bc2f537710e850233b4fbd7f37be81be.png.html)
-----------------------------
Скриптец (https://yadi.sk/i/eWYfp5MZsjyyp) от WilB для JSPanel на пробу... может понравится пользовать ;)
отправка(добавление треков) в плейлист работает через on_notify_data через скрипт кнопок библиотеки...
код кнопки добавления в плейлист...
new Button(0, bh*2, B.width, B.height, ANIM_BUT_L, se, function () {
try {
window.NotifyOthers("library", "send_to_pl");
WshShell.SendKeys("^");
WshShell.Run("taskkill /f /im ctrl.exe",0);
} catch(e) {};
recalc_dimensions();
window.Repaint();
})
seriousstas
23.06.2016, 18:48
duzzy
А вот с CUE на примере 1999 - Slipknot [declipped]
проблема остаётся ...
Ты имел ввиду тот скрипт библиотеки где еще не было картинок(обложки фоном) ?
Да - он справляется со всем без манипуляций (нужен WSH 1.5.10)..
ЭЭ нее, ни фига. Такой фокус выходит только с нарезанными трэками.
Проверьте вот этот (http://rutracker.org/forum/viewtopic.php?t=628215) альбом.
seriousstas
23.06.2016, 18:50
kaamoss
Почитай выше и я о том ..
У меня есть сборка фубара она всегда всё правильно отображает, но я не понима. где посмотреть прописанные скрипты.
http://jpegshare.net/thumbs/f5/20/f5207c2a95fbba66d36813c4d9541c00.jpg (http://jpegshare.net/f5/20/f5207c2a95fbba66d36813c4d9541c00.jpg.html)
kaamoss
Почитай выше и я о том ..
Я просто не успел, ты на пару секунд раньше успел отписать))))
seriousstas
23.06.2016, 18:55
У меня есть сборка фубара она всегда всё правильно отображает, но я не понима. где посмотреть прописанные скрипты.
http://jpegshare.net/thumbs/f5/20/f5207c2a95fbba66d36813c4d9541c00.jpg (http://jpegshare.net/f5/20/f5207c2a95fbba66d36813c4d9541c00.jpg.html)
Там совсем другие компоненты ..
С этим - тоже всё нормально :
// ==PREPROCESSOR==
// @name "TOUCH LIBRARY PANEL TREE mod_5"
// @version "1.0"
// @author "Vo Thanh Dat moded by Terro"
// @feature "watch-metadb"
// @tooltip "custom-paint"
// ==/PREPROCESSOR==
//
//=========================for full functionality use WSH Panel MOD 1.5.10
//================================================== ===================== Color change from line 104 - 107
function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
function test_perfomance(){
}
var slide_r = window.GetProperty("Slide_right",50)
var lbdn = 0;
var y_start = 0;
var y_end = 0;
var y_delta = 0;
var form_text = "",
form_text_b = "",
form_text_b_ = "",
form_his = [],
form_his_ = [];
var char_index = [],
playlist = [],
playlist_dr = [],
index_search = [],
index_search_ = [],
index_path = [],
list = plman.GetPlaylistItems(-1),
list_;
var m_x = 0,m_y = 0,
ww = 0,wh = 0,
bold_start = 0,bold_end = 0,
mm_x = 0,mm_y =0,m_tam = -1,
idx_idx = 0, scroll = 0,scroll_ = 0,scroll__ = 0,scroll___ = 0,
mouse_index = -1,
form_text_cusor = 0,
form_text_cusor_x = 0,
repaint_visible = 0,
time_dl = 0;
//=====================added
var g_time000 = window.SetInterval(on_timer, 16);
//=====================
var time111 = (new Date().getTime()),
time222 = time111,
time333 = time111;
var fso = new ActiveXObject("Scripting.FileSystemObject"),
WshShell = new ActiveXObject("WScript.Shell"),
htmlfile = new ActiveXObject('htmlfile'),
vbe = new ActiveXObject('ScriptControl');
var time_h = fb.CreateProfiler(),
time_repaint = fb.CreateProfiler(),
time200 = fb.CreateProfiler("aaaa"),
time_s = fb.CreateProfiler();
var mouse_l_hold = false,mouse_l_hold_f = false,
window_visible = false,on_form = false,
mouse_hold = false,mouse_drag = false,
hold_shift = false,hold_ctrl = false,
hold_scroll = false,mouse_in = false,
repaint_f1 = false,repaint_f2 = false,repaint_f = false,
repaint_main = true,repaint_main1 = true,repaint_main2 = true,
form_text_cusor_hiden = true;
var shift_index = 0,
last_choose = -1,
selected_cusor = -1;
var grouph_by = window.GetProperty("Grouph by",0),
auto_colapse = window.GetProperty("auto colapse",true),
auto_exppant = window.GetProperty("auto exppant",true),
show_scripts = window.GetProperty("show_scripts",true),
grouph_option = window.GetProperty("grouph_option",""),
search_async = window.GetProperty("search_async",true),
font_size = window.GetProperty("font_size",20),
library_path = window.GetProperty("Library path",""),
istranparent = window.GetProperty("tranparent",true),
heigh_row = window.GetProperty("heigh_row",30),
Tooltip = window.GetProperty("Tooltip",false),
Font_name = window.GetProperty("Font_name","Segoe UI"),
time_delay_search = window.GetProperty("time_delay_search",200);
var g_tooltip = window.CreateTooltip(),
time_tooltip = fb.CreateProfiler("Time tooltip"),
tooltip_state = false,time_tooltip_ = 0;
g_tooltip.Text = " ";
var qsearch = "",
qsearch_t = fb.CreateProfiler(),
qsearch_lidx = [],qsearch_idx = 0;
g_tooltip.SetDelayTime(3, 0);
var library_path_ = library_path.split(";");
var choose_playlist = plman.GetPlaylistItems(-1);
var time_debug = [],time_c = 0;
var color_text = RGB(153,141,249);//0xff998DF9; //================ Text Color
var background_color = 0xff000000;//================= Background Color
var choose_background_color = RGB(203,50,50)//0xFF8B0000;//============== Select Color
var alfa_fade_color = RGBA(40,30,20,150);//====================== Alfa fade Background (if dont need comment line 913)
var art_alb_sort = "\\%album artist%|%album%|%track number%|%title%";
var alb_sort = "\\%album%|%track number%|%title%";
var grouph_opt = grouph_option.split("|");
var g_font,g_font2,g_font3,g_font_q,g_font_marker;
var img_blend_1,img_blend_2;
var playlist_cache_name = "Media Library";
setfont();
var exppant_,
research = false,
search_done = false,
research_k = 0;
vbe.Language = 'VBScript';
window.DlgCode = 0x0081 ;
var lib_search = "";
function indexer(){
var total = list.Count;
index_search = [];
index_path = [];
index_path_ = [];
var TitleFormat = "[$if(%title%,$replace(%title%,'&','and'),'N/A')] ^^ %album artist% ^^ %album% ^^ %genre% ^^ $if(%path%,$replace(%path%,'&','and'),'N/A') ^^ %composer% ^^ %performer% ^^ %comment%";
var FoobarTitleFormat = fb.TitleFormat(TitleFormat);
var string = "", count = 0;
for(var i = 0;i < total;i++){
string = FoobarTitleFormat.EvalWithMetadb(list.Item(i));
index_search[count] = string;
index_search_[count] = string.toLowerCase();
count++;
}
switch(grouph_by){
case 0:
for(var i = 0;i < total;i++){
string = index_search[i].split(" ^^ ")[4];
for(var j = 0;j < library_path_.length;j++)
string = string.replace(library_path_[j],"");
index_path[i] = string.split("\\")[0];
}
break;
case 1:
for(var i = 0;i < total;i++){
string = index_search[i].split(" ^^ ")[1];
index_path[i] = (string.length < 2)?"Unknow Artist":string;
}
break;
case 2:
for(var i = 0;i < total;i++){
string = index_search[i].split(" ^^ ")[2];
index_path[i] = (string.length < 2)?"Unknow Album":string;
}
break;
default:
for(var i = 0;i < total;i++){
index_path[i] = fb.TitleFormat(grouph_opt[0]).EvalWithMetadb(list.Item(i));
}
break;
}
}
function get_library(reload){fb
var Time_library = fb.CreateProfiler("Time Out Refresh library");
var pl_name = "", pl_idx = -1,list_;//,sort_patten;
for(var i=0; i < plman.PlaylistCount; i++) {
pl_name = plman.GetPlaylistName(i);
if(pl_name == "Media Library") {
pl_idx = i;
break;
}
}
switch(grouph_by){
case 1:sort_patten = art_alb_sort; break;
case 2:sort_patten = alb_sort; break;
case 3:sort_patten = grouph_option; break;
}
if(pl_idx < 0) {
pl_idx = plman.PlaylistCount;
fb.CreateAutoPlaylist(pl_idx,"Media Library","ALL","");
list = plman.GetPlaylistItems(pl_idx);
(grouph_by == 0) && list.OrderByFormat(fb.TitleFormat("%path%"), 1);
(grouph_by > 0) && list.OrderByFormat(fb.TitleFormat((grouph_by == 3)?grouph_option:art_alb_sort), 1);
plman.InsertPlaylistItems(pl_idx,0,list);
}else if(reload){
fb.RemovePlaylist(pl_idx);
fb.CreateAutoPlaylist(pl_idx,"Media Library","ALL","");
list = plman.GetPlaylistItems(pl_idx);
(grouph_by == 0) && list.OrderByFormat(fb.TitleFormat("%path%"), 1);
(grouph_by > 0) && list.OrderByFormat(fb.TitleFormat((grouph_by == 3)?grouph_option:art_alb_sort), 1);
plman.InsertPlaylistItems(pl_idx,0,list);
}else
list = plman.GetPlaylistItems(pl_idx);
(grouph_by == 0) && list.OrderByFormat(fb.TitleFormat("%path%"), 1);
(grouph_by > 0) && list.OrderByFormat(fb.TitleFormat((grouph_by == 3)?grouph_option:art_alb_sort), 1);
test_perfomance();
Time_library.Print();
Time_library = fb.CreateProfiler("Time Out Indexer library");
indexer();
Time_library.Print();
}
get_library();
function match(input, str){
for(var i in str){
if(input.indexOf(str[i]) < 0)
return false;
}
return true;
}
function prcess_string(str){
str_ = [];
str = str.toLowerCase();
var str = str.split(" ").sort();
for(var i in str){
if(str[i] != "")
str_.push(str[i]);
}
return str_;
}
var timeaaaa = fb.CreateProfiler();
function get_pl_tree(start,string_,force){
var Time = fb.CreateProfiler();
if(start == null){
scroll = 0;start = 0;form_text_b_ = form_text;
string_ = form_text;
playlist = [];
list_ = plman.GetPlaylistItems(-1);
timeaaaa.Reset();
}else if(form_text_b_ != form_text){
fb.trace("Break -- -- -- -- Form text change");
return;
}
var i = playlist.length,k = start,temp = "";
str = prcess_string(form_text);
var path = "",string_add = "",temp = "",string = "",total = list.Count,count = 0;
var string_compare = (i > 0)?(playlist[i-1].name):"123456789123456789";
while(k < total){
count = 0;
while(count < 200 && k < total){
count++;
if(!match(index_search_[k],str)){
k++;continue;
}
string = index_search[k];
temp = index_path[k];
if(string_compare.toUpperCase() != temp.toUpperCase()){
string_compare = temp;
playlist[i] = new Object();
playlist[i].name = temp;
playlist[i].alpha = 0;
playlist[i].child = [];
playlist[i].pl = plman.GetPlaylistItems(-1);
playlist[i].pl.Add(list.Item(k));
i++;
}else{
playlist[i-1].pl.Add(list.Item(k));
}
k++;
}
if(!force && Time.Time > 30){
research = true;
research_k = k;
return;
}
}
repaint_main1 = repaint_main2;
//fb.trace("Timeout break : " + Time.Time);
fb.trace("Searching Done : " + timeaaaa.Time/1000);
tree_to_list(playlist,0);
if(auto_exppant && playlist.length == 1)
tree_expant(playlist[0]);
}
function tree_minimum(obj){
obj.child = [];
tree_to_list(playlist,0);
}
function tree_collasp(obj){
var child_ = 0;
if(obj.lv == 0){
for(var i = 0;i < playlist.length;i++){
child_ += playlist[i].child.length;
playlist[i].child = [];
}
}else{
var parrent = playlist_dr[obj.pr];
for(var i = 0;i < parrent.child.length;i++){
child_ += parrent.child[i].child.length;
parrent.child[i].child = [];
}
}
return child_;
}
function sorrt(a,b){
return (a.name > b.name)?1:-1;
}
function tree_expant(obj){
var i = 0,j = 0,k = 0;
var path = "",string_compare = "123456789123456798",string_add = "",temp = "",meta,album_artist = "",title = "",item__ = false,track = "";
var FoobarTitleFormat = fb.TitleFormat(" $caps([$num(%track number%,2). ] $if(%title%,$replace(%title%,'&','and'),'N/A') [- $if(%artist%,$replace(%artist%,'&','and'),'N/A')])");
while(k < obj.pl.Count){
path = get_fol_path(obj.pl.Item(k),obj.lv+1);
if(obj.leaf){
k++;
continue;
}
item__ = false;
if(path == "aaaaaa"){
path = FoobarTitleFormat.EvalWithMetadb(obj.pl.Item(k));
item__ = true;
}
if(string_compare.toUpperCase() != path.toUpperCase()){
string_compare= path;
obj.child[i] = new Object();
obj.child[i].name = path;
obj.child[i].alpha = 0;
obj.child[i].child = [];
obj.child[i].leaf = item__;
obj.child[i].pl = plman.GetPlaylistItems(-1);
obj.child[i].pl.Add(obj.pl.Item(k));
i++;
}else{
obj.child[i-1].pl.Add(obj.pl.Item(k));
}
k++;
}
obj.child.sort(sorrt);
tree_to_list(playlist,0);
if(auto_exppant && obj.child.length == 1 && !obj.child[0].leaf){
tree_expant(obj.child[0]);
}
}
function tree_to_list(obj,lv){
var parrent = playlist_dr.length - 1;
if(lv == 0)
playlist_dr = [];
for(var i = 0;i < obj.length;i++){
var idx = playlist_dr.length;
playlist_dr[idx] = obj[i];
playlist_dr[idx].lv = lv;
playlist_dr[idx].pr = parrent;
playlist_dr[idx].idx = idx;
playlist_dr[idx].choose = false;
if(exppant_ == obj[i]) //=====================change
scroll = (idx- Math.round(m_y/heigh_row-1.5))*heigh_row;//=====================change
if(obj[i].child.length > 0){
tree_to_list(obj[i].child,lv+1);
}
}
}
function get_fol_path(item,lv){
switch(grouph_by){
case 0:
var string = item.Path;
for(var i = 0;i < library_path_.length;i++)
string = string.replace(library_path_[i],"");
for(var i = 0;i < lv && string.indexOf("\\") != -1;i++)
string = string.substr(string.indexOf("\\")+1);
return (string.indexOf("\\") == -1)?("aaaaaa"):(string.substring(0,string.indexOf("\\")));
break;
case 1:
switch(lv){
case 0:
return fb.TitleFormat("$caps($if(%album artist%,%album artist%,Unknow Artist))").EvalWithMetadb(item);
case 1:
return fb.TitleFormat("$caps($if(%album%,%album%,Unknow Album))").EvalWithMetadb(item);
default:
return "aaaaaa";
}
break;
case 2:
if(lv == 0){
return fb.TitleFormat("$caps($if(%album artist%,%album artist%,Unknow Artist) - $if(%album%,%album%,Unknow Album))").EvalWithMetadb(item);
}else
return "aaaaaa";
break;
default:
if(lv < grouph_opt.length){
return fb.TitleFormat(grouph_opt[lv]).EvalWithMetadb(item);
}else
return "aaaaaa";
break;
}
}
var tmp_out;
function on_size(){
ww = window.Width;
wh = window.Height;
scroll_++;
repaint_main1 = repaint_main2;
repaint_f1 = repaint_f2;
tmp_out && window.ClearInterval(tmp_out);
tmp_out = window.SetInterval(function(){
if(window.IsVisible){
img_blend_2 = null;
create_blend();
repaint_main1 = repaint_main2;
repaint_f1 = repaint_f2;
tmp_out && window.ClearInterval(tmp_out);
}
},500);
}
function get_cusor_index(x){
var result = form_text.length;
while(char_index[result] > x )
result--;
return (result > 0)?result:0;
}
function refresh_char_index(gr){
char_index = [];
for(var i = 0;i < form_text.length + 1;i++)
char_index[i] = gr.EstimateLineWrap(form_text.substr(0,i),g_font,w w).toArray()[1];
}
//================================================== ===
function on_mouse_lbtn_up(x,y,mask){
lbdn = 0;
y_start = y;
if(mouse_drag && x > ww)
add_playlist(choose_playlist);
mouse_drag = mouse_hold = mouse_l_hold = mouse_l_hold_f = hold_scroll = false;
var tam = Math.round((y + scroll - heigh_row * 1.5)/heigh_row);
if(y > heigh_row && tam < playlist_dr.length && tam >= 0 && check_item(playlist_dr[tam],x,y)){
(mm_x == x && mm_y == y && !utils.IsKeyPressed(0x11)) && on_chose(tam,!(mm_x == x && mm_y == y));
}
}
function on_mouse_lbtn_dblclk(x,y,mask){
var tam = Math.round((y + scroll - heigh_row*1.5)/heigh_row);
if(y > heigh_row && tam < playlist_dr.length && tam >= 0 && check_item(playlist_dr[tam],x,y))
apply_playlist(playlist_dr[tam].pl);
else if(y < heigh_row)
on_mouse_lbtn_down(x,y,1.5);
else
on_mouse_lbtn_down(x,y,mask);
}
function check_item(obj,x,y){
if(!obj) return false;
return (x - slide_r > (heigh_row * (obj.lv + 1)) && x - slide_r < (heigh_row * (obj.lv + 1) + obj.rg));
}
//================================================== ====
function on_mouse_lbtn_down(x,y,mask){
lbdn = 1;
y_start = y;
g_drag = false;
mouse_l_hold_f = on_form = (y < heigh_row);
mouse_l_hold = !mouse_l_hold_f;
if(y < heigh_row){
if(x < ww - heigh_row){
form_text_cusor = get_cusor_index(x);
repaint_f1 = repaint_f2;
form_text_cusor_hiden = true;
time111 = (new Date()).getTime();
if(mask == 1.5){
bold_start = (" " + form_text + " ").lastIndexOf(" ",form_text_cusor);
bold_end = (" " + form_text + " ").indexOf(" ",form_text_cusor+1)-1;
}else
bold_start = bold_end = form_text_cusor;
}else if(x > ww - heigh_row){
bold_start = bold_end = form_text_cusor = 0;
form_text = "";
time333 = (new Date()).getTime() + 800;
}
return;
}
if(y > heigh_row ){
var tam = Math.round((y + scroll - heigh_row * 1.5)/heigh_row);
if(tam < playlist_dr.length && tam >= 0){
var playlist_tmp = playlist_dr[tam];
if(heigh_row * (playlist_tmp.lv + 1)> x - slide_r && heigh_row * playlist_tmp.lv < x - slide_r){
//TREE EXPANT OR COLAPSE
if(playlist_tmp.child.length > 0){
tree_minimum(playlist_tmp);
}else{
exppant_ = playlist_tmp;
auto_colapse && tree_collasp(playlist_tmp);
tree_expant(playlist_tmp); //tree_expant(playlist_dr[tam])
}
}else if(check_item(playlist_tmp,x,y)){
//ITEM CHOOSE
mm_x = x;mm_y = y;
mouse_drag = true;
if(!playlist_tmp.choose){
on_chose(tam,playlist_tmp.choose);
selected_cusor = tam;
mouse_hold = true;
}
else if(utils.IsKeyPressed(0x11)){
on_chose(tam,playlist_tmp.choose);
}
}else
on_chose(-1);
repaint_main1 = repaint_main2;
repaint_f1 = repaint_f2;
}else
on_chose(-1);
}
if(playlist_dr.length * heigh_row > wh && x > ww - 8){
hold_scroll = true;
scroll = Math.round((((y - heigh_row) * (playlist_dr.length * heigh_row ) / (wh - heigh_row)) - (wh - heigh_row)/2)/heigh_row-0.5)*heigh_row;
}
}
function on_chose(index,mouse_up){
repaint_main1 = repaint_main2;
if(index == -1){
for(var k = 0;k < playlist_dr.length;k++)
playlist_dr[k].choose = false;
}else if((utils.IsKeyPressed(0x10) || mouse_hold) && last_choose > -1){
choose_playlist = plman.GetPlaylistItems(-1);
var dd = (index > last_choose)?1:-1;
if(!utils.IsKeyPressed(0x11)){
for(var k = 0;k < playlist_dr.length;k++)
playlist_dr[k].choose = false;
}
for(var k = last_choose; ;k += dd){
playlist_dr[k].choose = true;
choose_playlist.AddRange(playlist_dr[k].pl);
if(k==index)
break;
}
repaint_main1 = repaint_main2;
}else if(utils.IsKeyPressed(0x11)){
playlist_dr[index].choose = !(playlist_dr[index].choose);
playlist_dr[index].choose && choose_playlist.AddRange(playlist_dr[index].pl);
last_choose = index;
}else if(!mouse_up){
choose_playlist = plman.GetPlaylistItems(-1);
for(var k = 0;k < playlist_dr.length;k++)
playlist_dr[k].choose = false;
playlist_dr[index].choose = true;
choose_playlist.AddRange(playlist_dr[index].pl);
last_choose = index;
}
}
function check_playlist(name){
var pl_name = "", pl_idx = -1;
for(var i=0; i < plman.PlaylistCount; i++) {
pl_name = plman.GetPlaylistName(i);
if(pl_name == name) {
pl_idx = i;
break;
}
}
return pl_idx;
}
function on_char(code){
time333 = (new Date()).getTime();
var input = String.fromCharCode(code);
if(on_form){
form_text_cusor_hiden = true;
selected_cusor = -1;
switch(code){
case 13://ENTER
if(form_text.length < 3)
break;
str = prcess_string(form_text);
var total = list.Count;
var pltemp = plman.GetPlaylistItems(-1);
for(var i = 0;i < total;i++)
if(match(index_search_[i],str))
pltemp.Add(list.Item(i));
apply_playlist(pltemp);
pltemp.Dispose();
break;
case 25:
form_his.push(form_text);
if(form_his.length > 30) form_his.shift();
if(form_his_.length > 0) form_text = form_his_.pop() + "";
break;
case 26:
form_his_.push(form_text);
if(form_his_.length > 30) form_his.shift();
if(form_his.length > 0) form_text = form_his.pop() + "";
break;
case 1://CTRL + A
bold_start = 0;
bold_end = form_text.length;
break;
case 3: // COPPY
(bold_start != bold_end) && htmlfile.parentWindow.clipboardData.setData('text' ,form_text.substring(bold_start,bold_end));
break;
case 24://CUT
(bold_start != bold_end) && htmlfile.parentWindow.clipboardData.setData('text' ,form_text.substring(bold_start,bold_end));
case 8://DELETE
save_form_his();
if(bold_start == bold_end){
form_text = form_text.substring(0,form_text_cusor-1) + form_text.substring(form_text_cusor,200);
if(form_text_cusor > 0)
form_text_cusor--;
bold_end = bold_start = form_text_cusor;
}else{
form_text = form_text.substring(0,bold_start) + form_text.substring(bold_end,200);
form_text_cusor = bold_start;
bold_end = bold_start;
}
break;
case 22://CTRL + V//PASTE
input = htmlfile.parentWindow.clipboardData.getData('text' );
default: //CHAR
save_form_his();
if(char_index[form_text.length] + heigh_row >= ww - 10)
break;
if(bold_start == bold_end){
form_text = form_text.substring(0,form_text_cusor) + input + form_text.substring(form_text_cusor,200);
form_text_cusor += input.length;
bold_end = bold_start = form_text_cusor;
}else{
form_text = form_text.substring(0,bold_start) + input + form_text.substring(bold_end,200);
form_text_cusor = bold_start + input.length;
bold_end = bold_start;
}
break;
}
repaint_f1 = repaint_f2;
}else{
//================================================== ==========qsearch_t
var str,end_,lg,i,search_ = true;
qsearch_t.Reset();
switch(code){
case 13://ENTER
qsearch = "";
break;
case 8://DELETE
qsearch = qsearch.substr(0,qsearch.length - 1);
break;
case 60: case 44:
qsearch_idx--;
search_ = false;
break;
case 62: case 46:
qsearch_idx++;
search_ = false;
break;
case 39 : case 37 :
search_ = false;
break;
break;
default:
qsearch += input;
break;
}
str = prcess_string(qsearch == ""?"@@@@":qsearch);
choose_playlist = plman.GetPlaylistItems(-1);
end_ = playlist_dr.length;
if(search_){
str = prcess_string(qsearch == ""?"@@@@":qsearch);
qsearch_lidx = [];
for(i = 0;i < end_;i++){//String.toLowerCase
if(match(playlist_dr[i].name.toLowerCase(),str)){
qsearch_lidx[qsearch_lidx.length] = i;
playlist_dr[i].choose = true;
choose_playlist.AddRange(playlist_dr[i].pl);
}else
playlist_dr[i].choose = false;
}
}else
for(i = 0;i < end_;i++) playlist_dr[i].choose = false;
lg = qsearch_lidx.length;
qsearch_idx += lg;
if(lg != 0){
selected_cusor = qsearch_lidx[qsearch_idx%lg];
scroll = (selected_cusor - 5) * heigh_row;
!search_ && on_chose(selected_cusor);
}
repaint_main1 = repaint_main2;
}
}
function save_form_his(){
if(time_h.Time < 100)
return;
form_his.push(form_text);
form_his_ = [];
if(form_his.length > 30) form_his.shift();
time_h.Reset();
}
function on_key_down(vkey) {
switch(vkey){
case 0x25:case 0x27:
if(on_form){
if(vkey == 0x25 && form_text_cusor > 0)
form_text_cusor--;
if(vkey == 0x27 && form_text_cusor < form_text.length)
form_text_cusor++;
if(hold_shift){
bold_start = Math.min(form_text_cusor,shift_index);
bold_end = Math.max(form_text_cusor,shift_index);
}else
bold_start = bold_end = form_text_cusor;
}else if(selected_cusor >= 0){
on_form = false;
if(vkey == 0x25){
if(playlist_dr[selected_cusor].child.length > 0){
var tmp = playlist_dr[selected_cusor];
tree_minimum(tmp);
on_chose(tmp.idx);
selected_cusor = tmp.idx;
}else try{
var tmp = playlist_dr[playlist_dr[selected_cusor].pr];
tree_minimum(tmp);
on_chose(tmp.idx);
selected_cusor = tmp.idx;
}catch(err){ };
}else{
var tmp = playlist_dr[selected_cusor];
auto_colapse && tree_collasp(tmp);
tree_expant(tmp);
on_chose(tmp.idx);
selected_cusor = tmp.idx;
}
if((selected_cusor + 1 ) * heigh_row > (scroll + wh))
scroll = (selected_cusor + 2) * heigh_row - Math.round(wh / heigh_row)* heigh_row;
else if((selected_cusor - 1) * heigh_row - scroll < 0)
scroll = (selected_cusor - 1) * heigh_row;
repaint_main1 = repaint_main2;
}
break;
case 0x10:
hold_shift = true;
shift_index = form_text_cusor;
break;
case 0x11:
hold_ctrl = true;
break;
case 13:
if(on_form)return;
if(choose_playlist.Count == 0) return;
//apply_playlist(choose_playlist);
add_playlist(choose_playlist);//================================== Add to playlist(Shift + Enter)
break;
case 40:case 38:
if(playlist_dr.length == 0)
break;
if((selected_cusor == 0 && vkey == 38)||(selected_cusor == playlist_dr.length - 1 && vkey == 40)){
repaint_main1 = repaint_main2;
form_text_cusor_hiden = !form_text_cusor_hiden;
on_form = true;
on_mouse_lbtn_down(ww - 21,10,0);
on_chose(-1);
break;
}
(vkey == 40) && selected_cusor++;
(vkey == 38) && selected_cusor--;
selected_cusor = (selected_cusor + playlist_dr.length)% playlist_dr.length;
if((selected_cusor + 2) * heigh_row - (scroll + wh - heigh_row) > 0)
scroll = (selected_cusor + 3) * heigh_row - Math.round(wh / heigh_row - 1)* heigh_row;
else if((selected_cusor - 1) * heigh_row - scroll < 0)
scroll = (selected_cusor - 1) * heigh_row;
on_chose(selected_cusor);
on_form = false;
repaint_main1 = repaint_main2;
break;
case 46:
on_key_down(39);
on_char(8);
break;
}
repaint_f1 = repaint_f2;
form_text_cusor_hiden = true;
}
function on_key_up(vkey){
switch(vkey){
case 0x10:
hold_shift = false;
shift_index = form_text_cusor;
break;
case 0x11:
hold_ctrl = false;
break;
}
}
//================================================== ====Touch mod
function on_mouse_move(x,y){
if (lbdn) {
y_end = y;
y_delta = (y_end - y_start);
if (x < ww){
if (y_delta > wh/25) {
on_mouse_wheel(1);
repaint_f1 = repaint_f2;
y_start = y_end;
}
if (y_delta < -wh/25) {
on_mouse_wheel(-1);
repaint_f1 = repaint_f2;
y_start = y_end;
};
}
scroll = check_scroll(scroll);
}
if(m_x == x && m_y == y)
return;
mouse_in = true;
if(y < heigh_row && x < ww - heigh_row)
window.SetCursor(32512);
else
window.SetCursor(32512);
if(y < heigh_row && mouse_l_hold_f){
bold_start = form_text_cusor;
bold_end = get_cusor_index(x);
if(bold_start > bold_end){
var tam = bold_start;
bold_start = bold_end;
bold_end = tam;
}
repaint_f1 = repaint_f2;
}
if(m_x > ww-heigh_row && m_y < heigh_row)
//repaint_f1 = repaint_f2;
m_x = x;m_y = y;
var tam = Math.round((y - heigh_row*1.5)/heigh_row);
if(tam < playlist_dr.length && tam >= 0){
repaint_main1 = repaint_main2;
}
if(hold_scroll){
scroll = Math.round((((y - heigh_row) * (playlist_dr.length * heigh_row ) / (wh - heigh_row)) - (wh - heigh_row)/2)/heigh_row-0.5)*heigh_row;
}
time_tooltip.Reset();
}
function on_mouse_leave(){
m_x = x_y = 0;
mouse_drag = mouse_hold = mouse_in = false;
}
//================================================== ==================APPLY & ADD TO PL
function apply_playlist(playlist){
var pl_idx = check_playlist("Library view");
if(pl_idx == -1){
pl_idx = fb.PlaylistCount;
fb.CreatePlaylist(pl_idx,"Library view");
}else{
fb.ActivePlaylist = pl_idx;
fb.RunMainMenuCommand("Edit/Clear");
}
fb.ActivePlaylist = pl_idx;
var playlist_ = playlist.Clone();
//playlist_.OrderByFormat(fb.TitleFormat("$if([%album artist%],%album artist%,zzzz)|$if([%album%],[%date%]%album%,zzzz)|$if(%track number%,%track number%,zzzz)|$sub(5,%rating%)|%title%"),1);
playlist_.OrderByFormat(fb.TitleFormat("%path%"),1);
plman.InsertPlaylistItems(pl_idx,1,playlist_);
fb.ActivePlaylist = pl_idx;
plman.ExecutePlaylistDefaultAction(pl_idx,0);
fb.RunMainMenuCommand("Edit/Remove Duplicates");
}
function add_playlist(playlist){
//playlist.OrderByFormat(fb.TitleFormat("$if([%album artist%],%album artist%,zzzz)|$if([%album%],[%date%]%album%,zzzz)|$if(%track number%,%track number%,zzzz)|$sub(5,%rating%)|%title%"),1);
playlist.OrderByFormat(fb.TitleFormat("%path%"),1);
plman.InsertPlaylistItems(fb.ActivePlaylist,plman. PlaylistItemCount(fb.ActivePlaylist),playlist);
fb.RunMainMenuCommand("Edit/Remove Duplicates");
}
function on_mouse_mbtn_down(x,y,mask){
var tam = Math.round((y + scroll - heigh_row*1.5)/heigh_row);
if(y > heigh_row && tam < playlist_dr.length && tam >= 0)
check_item(playlist_dr[tam],x,y) && add_playlist(playlist_dr[tam].pl);
}
//================================================== ===== On Paint
function on_paint(gr){
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, 0xff000000);
gr.FillSolidRect(0, 0, ww, wh, alfa_fade_color);//-----> Alfa Fade (if dont need comment//)
if(!repaint_main && !repaint_f)
repaint_main = repaint_f = true;
if(repaint_main){
repaint_main = false;
var index = 0,j = 0,start_ = 0,end_ = 0,alpha = 0;
var count_,head_,name_,width_,left_mg;
var width_aaa = gr.CalcTextWidth("(+) ",g_font);
start_ = Math.round(scroll_/heigh_row + 0.4);
end_ = Math.round((scroll_ + wh)/heigh_row - 0.5);
end_ = (playlist_dr.length < end_)?playlist_dr.length:end_;
for(var i = start_;i < end_;i++){
alpha = (playlist_dr[i].alpha<<24)|0xffffff;
count_ = (playlist_dr[i].pl.Count >1)?(" (" +playlist_dr[i].pl.Count + ")"):("");
head_ = playlist_dr[i].leaf?"• ":((playlist_dr[i].child.length < 1)?"[+] ":"[--] ");
name_= head_ + playlist_dr[i].name + count_ + "";
width_ = gr.CalcTextWidth(name_,g_font) - (playlist_dr[i].leaf?0:width_aaa) + heigh_row * 0.2;
playlist_dr[i].rg = width_ - (playlist_dr[i].leaf?heigh_row:0);
playlist_dr[i].choose ?(playlist_dr[i].alpha += time_dl * 2)
:((mouse_index != i) && (playlist_dr[i].alpha -= time_dl * 0.7));
playlist_dr[i].alpha = Math.max(0,Math.min(255,playlist_dr[i].alpha));
(playlist_dr[i].alpha % 255 !=0) && (repaint_main1 = repaint_main2);
(playlist_dr[i].alpha > 0) && gr.FillSolidRect((heigh_row * playlist_dr[i].lv) + (playlist_dr[i].leaf?0:width_aaa) + slide_r,Math.floor((i + 1)* heigh_row - scroll_ + 1),width_,Math.floor(heigh_row*0.95),(choose_backg round_color & alpha));
playlist_dr[i].choose && gr.DrawRect((heigh_row * playlist_dr[i].lv) + (playlist_dr[i].leaf?0:width_aaa) + slide_r,Math.floor((i + 1)* heigh_row - scroll_ + 1),width_, Math.floor(heigh_row*0.95 - 1),1,0x30FFFFFF);
left_mg = heigh_row * (playlist_dr[i].lv + 0.1);
gr.GdiDrawText(name_, g_font, color_text,left_mg + slide_r,heigh_row * (i + 1.1)- scroll_-5, ww - left_mg, heigh_row, 0);
}
// Draw Qsearch
gr.SetSmoothingMode(4);
if(qsearch_t.Time < 500 && qsearch != ""){
var wid = gr.CalcTextWidth(qsearch,g_font_q) + 25;
var hei = heigh_row * 1.5;
gr.DrawRoundRect(ww/2 - wid/2, wh/2 - hei/2, wid, hei, 5, 5, heigh_row * 0.1, 0xaaffffff);
gr.FillRoundRect(ww/2 - wid/2, wh/2 - hei/2, wid, hei, 5, 5, 0x77000000);
gr.GdiDrawText(qsearch, g_font_q, 0xff000000,ww/2 - wid/2 + 2, wh/2 - hei/2 + heigh_row * 0.2 + 2, wid, hei, 0x05);
gr.GdiDrawText(qsearch, g_font_q, color_text,ww/2 - wid/2, wh/2 - hei/2 + heigh_row * 0.2, wid, hei, 0x05);
}
//Draw Scoll Bar
if(playlist_dr.length * heigh_row > wh - heigh_row){
var hei = playlist_dr.length * heigh_row;
//gr.FillGradRect(ww-7,heigh_row,7,wh-heigh_row,0,0x60000000,0x60000000);
gr.FillGradRect(ww-6,heigh_row + (scroll_*(wh-heigh_row)/hei),5,((wh-heigh_row)*(wh-heigh_row)/hei)-1,0,hold_scroll ? 0xa0aaaaaa:0xa0ffffff ,hold_scroll ? 0xa0aaaaaa:0xa0ffffff);
}
//Draw Blend
if(img_blend_2)
gr.GdiAlphaBlend(img_blend_2,0,wh * 39 / 40,ww,img_blend_2.Height,0,1,ww,img_blend_2.Height - 1,255);
}
if(repaint_f){
repaint_f = false;
//!window.IsTransparent && gr.FillSolidRect(0, 0, ww, heigh_row, 0x80555555);
//!window.IsTransparent && gr.DrawRect(0, 0, ww, heigh_row, 1,0x70ffffff);
//refresh_char_index(gr);
//bold_start = Math.max(bold_start,0);
//bold_end = Math.max(bold_end,0);
//form_text_cusor = Math.max(form_text_cusor,0);
//bold_start = Math.min(bold_start,form_text.length);
//bold_end = Math.min(bold_end,form_text.length);
//form_text_cusor = Math.min(form_text_cusor,form_text.length);
//gr.DrawLine(0,heigh_row/2,ww,heigh_row/2,heigh_row,on_form?0x60222222:0x60000000);
//on_form && form_text_cusor_hiden && (bold_start == bold_end) && gr.DrawLine(char_index[form_text_cusor] + heigh_row/10,heigh_row/10,char_index[form_text_cusor] + heigh_row/10,heigh_row*0.9,1,color_text);
//bold_end = (bold_end < form_text.length)?bold_end:form_text.length;
//(bold_start != bold_end) && gr.DrawLine(char_index[bold_start] + heigh_row/10,heigh_row/2,char_index[bold_end] + heigh_row/10,heigh_row/2,heigh_row-3,choose_background_color);
//gr.GdiDrawText(form_text, g_font, color_text, heigh_row/10, heigh_row/10-5, ww, heigh_row, 0);
//(form_text == "") && gr.GdiDrawText("Search . . .", g_font3, RGB(105,105,105), heigh_row/10, heigh_row/10-5, ww, heigh_row, 0);
//gr.DrawLine(ww-heigh_row*0.8,heigh_row*0.8,ww - heigh_row*0.2,heigh_row*0.2,heigh_row/10,(m_x > ww-heigh_row && m_y < heigh_row)?0xf0ffffff:RGB(105,105,105));
//gr.DrawLine(ww-heigh_row*0.8,heigh_row*0.2,ww - heigh_row*0.2,heigh_row*0.8,heigh_row/10,(m_x > ww-heigh_row && m_y < heigh_row)?0xf0ffffff:RGB(105,105,105));
}
}
//================================================== =============ON TIMER
function on_timer(g_time333){
if(!window.IsVisible)
return;
on_timer_(g_time333);
}
function on_timer_(g_time333){
var repaint_1 = false,repaint_2 = false;
time_dl = time_s.Time;
time_s.Reset();
if(research){
research = false;
get_pl_tree(research_k,form_text);
return;
}
var d = new Date();
if(d.getTime() - time222 < 15)
return
else
time222 = d.getTime();
if(d.getTime() - time333 > time_delay_search && on_form && form_text_b != form_text){
time333 = d.getTime();
form_text_b = form_text;
lib_search = form_text;
get_pl_tree();
}
mouse_index = -1;
var tam = check_item_index(m_x,m_y);
if(tam != -1){
if(qsearch == "")
playlist_dr[tam].alpha = Math.min(playlist_dr[tam].alpha + 40,255);
if(m_tam != tam){
mouse_hold && on_chose(tam);
deactive_tooltip();
}else{
Tooltip && (time_tooltip_ += time_dl);
}
if(Tooltip && time_tooltip_ > 3000 && !tooltip_state && (heigh_row * (playlist_dr[tam].lv + 1) + playlist_dr[tam].rg) > ww && playlist_dr[tam].alpha > 250){
g_tooltip.Width = playlist_dr[tam].rg;
g_tooltip.Height = heigh_row;
active_tooltip();
g_tooltip.TrackPosition(heigh_row * (playlist_dr[tam].lv + 1), Math.floor((m_y+1) / heigh_row) * heigh_row - 1);
g_tooltip.Text = " ";
}else
deactive_tooltip();
mouse_index = tam;
m_tam = tam;
}
if(qsearch_t.Time > 1500 && qsearch != ""){
repaint_2 = true;
qsearch = "";
}
if(time_tooltip.Time > 7000){
deactive_tooltip();
}
if(d.getTime() - time111 > 600 && on_form){
form_text_cusor_hiden = !form_text_cusor_hiden;
time111 = d.getTime();
repaint_1 = true;
}
if(repaint_f1 == repaint_f2){
repaint_f2 = !repaint_f1;
repaint_1 = true;
}
if(repaint_main1 == repaint_main2){
repaint_main2 = !repaint_main1;
repaint_2 = true;
}
scroll = check_scroll(scroll);
if(Math.abs(scroll - scroll_) > 0.5){
scroll___ += (scroll - scroll___) * (1-Math.pow(0.9,time_dl/4));
scroll__ += (scroll___ - scroll__) * (1-Math.pow(0.9,time_dl/4));
scroll_ += (scroll__ - scroll_) * (1-Math.pow(0.9,time_dl/4));
time_tooltip.Reset();
repaint_2 = true;
}
if(repaint_1 && repaint_2){
time_s.Reset();
repaint_main = true;
repaint_f = true;
window.Repaint();
}else if(repaint_1){
repaint_f = true;
window.RepaintRect(0,0,ww,heigh_row,true);
}else if(repaint_2){
repaint_main = true;
time_s.Reset();
window.RepaintRect(0,heigh_row,ww,wh-heigh_row,true);
}
}
function check_item_index(x,y){
var tam = Math.round((y + scroll_ - heigh_row*1.5)/heigh_row);
if(playlist_dr.length > tam && tam >= 0 && x < ww -10 && y > heigh_row && check_item(playlist_dr[tam],x,y))
return tam;
else return -1;
}
var notifi = true;
function setfont(){
if(!utils.CheckFont(Font_name)){
notifi && fb.ShowPopupMessage("Stub image not found.\r\nGo to Properties to config Stub image path.");
notifi = false;
}
g_font = gdi.Font(Font_name, font_size, 0);
g_font2 = gdi.Font(Font_name, font_size, 1);
g_font3 = gdi.Font(Font_name, font_size, 2);
g_font_q = gdi.Font(Font_name, font_size*1.5, 2);// g_font_q = gdi.Font("Tahoma", font_size + 10, 2),
g_font_marker = gdi.Font(Font_name, font_size, 1);
}
//================================================== =Wheel step
function on_mouse_wheel(step){
if(utils.IsKeyPressed(0x11)){
font_size += step;
if(font_size > 60)
font_size = 60;
else if(font_size < 20)
font_size = 20;
window.SetProperty("font_size",font_size);
setfont();
scroll = scroll_ = scroll__ = scroll___ = scroll/heigh_row;
heigh_row = Math.floor(font_size*16/11);
scroll = scroll_ = scroll__ = scroll___ = scroll * heigh_row;
window.SetProperty("heigh_row",heigh_row);
repaint_f1 = repaint_f2;repaint_main1 = repaint_main2;
return;
}
repaint_main1 = repaint_main2;
scroll -= step*heigh_row*1;
scroll = check_scroll(scroll);
}
function check_scroll(scroll___){
scroll___ = Math.round(scroll___ / heigh_row ) * heigh_row;
if(scroll___ > ((playlist_dr.length + 2 )* heigh_row - wh ))
scroll___ = Math.round(((playlist_dr.length + 2 )* heigh_row - wh )/heigh_row - 0.5)*heigh_row;
if(playlist_dr.length*heigh_row < wh - heigh_row)
scroll___ = 0;
if(scroll___ < 0)
scroll___ = 0;
return scroll___;
}
function on_mouse_rbtn_up(x, y){
var MF_SEPARATOR = 0x00000800;
var MF_STRING = 0x00000000;
var _menu = window.CreatePopupMenu();
var _menu1 = window.CreatePopupMenu();
var Context = fb.CreateContextMenuManager();
var con_ = false,time_111,idx;
_menu1.AppendMenuItem(MF_STRING, 2, "Grouph by Path");
_menu1.AppendMenuItem(MF_STRING, 3, "Grouph by Artist - Album");
_menu1.AppendMenuItem(MF_STRING, 4, "Grouph by Album");
_menu1.AppendMenuItem(MF_STRING, 5, "Grouph by User");
_menu1.AppendMenuSeparator();
_menu1.AppendMenuItem(MF_STRING, 11, "Auto Exppant");
_menu1.AppendMenuItem(MF_STRING, 12, "Auto Collapse");
_menu1.AppendMenuItem(MF_STRING, 15, "Tooltip");
_menu1.AppendMenuSeparator();
_menu1.AppendMenuItem(MF_STRING, 9, "Reefresh Library");
_menu1.AppendMenuItem(MF_STRING, 13, "Configure Library Path");
show_scripts && _menu1.AppendMenuItem(MF_STRING, 1, "Show Configure Scripts");
_menu1.AppendMenuItem(MF_STRING, 100, "Show Properties");
_menu1.CheckMenuRadioItem(2, 5,grouph_by + 2);
_menu1.CheckMenuItem(11,auto_exppant);
_menu1.CheckMenuItem(12,auto_colapse);
_menu1.CheckMenuItem(15,Tooltip);
var tam = Math.round((y + scroll_ - heigh_row*1.5)/heigh_row);
if(y > heigh_row && playlist_dr.length > tam && tam >= 0 && x < ww - heigh_row/2 && check_item(playlist_dr[tam],x,y)){
!playlist_dr[tam].choose && on_chose(tam);
_menu.AppendMenuItem(MF_STRING, 21, "Send to Playing Playlist");
_menu.AppendMenuItem(MF_STRING, 22, "Add to Playing Playlist");
con_ = true;
} else
on_chose(-1);
_menu1.AppendTo(_menu,MF_STRING, "Preferences");
if(con_){
_menu.AppendMenuSeparator();
Context.InitContext(choose_playlist);
Context.BuildMenu(_menu, 30, -1);
}
idx = _menu.TrackPopupMenu(x,y);
switch(idx) {
case 1:
window.ShowConfigure();
break;
case 2:case 3:case 4:case 5:
grouph_by = idx-2;
window.SetProperty("Grouph by",grouph_by);
get_library(2);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
break;
case 9:
get_library(1);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
break;
case 11:
auto_exppant = !auto_exppant;
window.SetProperty("auto exppant",auto_exppant);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
break;
case 12:
auto_colapse = !auto_colapse;
window.SetProperty("auto colapse",auto_colapse);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
break;
case 13:
var lib_filter = vbe.eval("InputBox(\"Example : \" + chr(10) + \"D:\\music\\;D:\\lossless\\\" + chr(10) + \"NULL to reset default\",\"Edit library Path\",\"" + library_path + "\")");
if(lib_filter == "NULL" || lib_filter == "null")
library_path = "E:\\music\\lossless\\;E:\\music\\lossly\\320kps\\";
else if(lib_filter)
library_path = lib_filter;
library_path_ = library_path.split(";");
window.SetProperty("Library path",library_path);
get_library(1);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
break;
case 15:
Tooltip = !Tooltip;
window.SetProperty("Tooltip",Tooltip);
break;
case 21:
apply_playlist(choose_playlist);
break;
case 22:
add_playlist(choose_playlist);
break;
case 100:
window.ShowProperties();
break;
default:
con_ && Context.ExecuteByID(idx-30);
break;
}
_menu.Dispose();
_menu1.Dispose();
Context.Dispose();
return true;
}
function active_tooltip(){
if(!tooltip_state){
tooltip_state = true;
g_tooltip.Activate();
g_tooltip.TrackActivate = true;
}
}
function deactive_tooltip(){
if(tooltip_state){
tooltip_state = false;
g_tooltip.TrackActivate = false;
g_tooltip.Deactivate();
time_tooltip_ = 0;
time_tooltip.Reset();
}
}
function on_tooltip_custom_paint(gr){
var tam = check_item_index(m_x,m_y);
var dr_str = playlist_dr[tam].name + (playlist_dr[tam].leaf?(""):(" (" + playlist_dr[tam].pl.Count + ")"));
gr.GdiDrawText(dr_str, g_font, 0xaa333333,font_size * 0.2,heigh_row * 0.1,playlist_dr[tam].rg, heigh_row, 0x804);
}
function create_blend(){
ww = window.Width;
wh = window.Height;
try{
background = window.GetBackgroundImage();
x = Math.ceil(wh/40 * 39) - 1;
w = background.Height - x;
img1 = background.Clone(0,x ,ww,w);
var tmp = gdi.CreateImage(ww,w);
var gr = tmp.GetGraphics();
gr.FillGradRect(0,0,ww,wh/40,270,0xff000000,0xffffffff,1);
gr.FillGradRect(0,wh/80,ww,wh/80,270,0xaa000000,0x00ffffff,1);
tmp.ReleaseGraphics(gr);
img1.ApplyMask(tmp);
img_blend_2 = img1.CreateRawBitmap();
}catch(err){}
}
var a000001 = window.SetTimeout(function(){
get_library();
if(form_text == ""){
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
}
window.ClearTimeout(a000001);
},500);
function on_library_items_added(){
get_library(1);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
}
function on_library_items_removed(){
get_library(1);
get_pl_tree();
repaint_f1 = repaint_f2;
repaint_main1 = repaint_main2;
}
seriousstas
Там в скрипте заморочка с индексами при отправке в плейлист... отсюда и трабл... как это править не понятно...
Скрипт WilB-а (http://pccar.ru/showpost.php?p=363291&postcount=1887) посмотри плиз, как он отправляет правильно или тоже с косяками...
seriousstas
23.06.2016, 19:17
seriousstas
Там в скрипте заморочка с индексами при отправке в плейлист... отсюда и трабл... как это править не понятно...
Скрипт WilB-а (http://pccar.ru/showpost.php?p=363291&postcount=1887) посмотри плиз, как он отправляет правильно или тоже с косяками...
Отправляет хорошо, но :
WSH Panel Mod (Library Tree v0.8 by Wilb): Ошибка выполнения Microsoft JScript:
Объект не поддерживает это свойство или метод
File: <main>
Line: 2673, Col: 2
<source text only available at compile time>
И не фильтрует основной файл . Висит знак вопроса и внутри
главный файл для CUE
_________________________________
PS выяснил, что ошибка из-за параллельно установленного WSH 1.5.10
c WSH 1.6 - JS дружит , но foo_cuefilter не работает ..
kaamoss
Я ни хрена не понимаю в этих скриптах и в этих панелях))))
Для меня лично лишь бы всё правильно работало и трэки правильно распологались)))
пс Мой делитантский ответ
Вникать придется потому как почти все панели скриптовые, и так как это не домашняя сборка то всегда есть свои нюансы...
можешь глянуть видосы
- по настройкам и т.д. (https://drive.google.com/file/d/0B60qIBsIiUkgWTlmeDk3WnloMzA/view?usp=sharing)(настройки показаны не все, но их большая часть)
- добавление новой панели в сборку (https://drive.google.com/open?id=0B60qIBsIiUkgQzA3ZzJSdlJObE0)
скрипты и некоторые ответы на твои вопросы ты сможешь найти в "Готовых сборках"... ссылка в подписи.
seriousstas
WSH Panel Mod (Library Tree v0.8 by Wilb): Ошибка выполнения Microsoft JScript:
Этот скрипт Library Tree v0.8 by Wilb для JScript Panel ;)
необходимо для старта...
REQUIREMENT
JScript Panel 1.1.0+
seriousstas
23.06.2016, 19:41
Этот скрипт Library Tree v0.8 by Wilb для JScript Panel
Это я понял - он-бы вообще на WSH не запустился ;) Причина - выше :
http://pccar.ru/showpost.php?p=363301&postcount=1895
поставь рядом WSH 1.5.10 и вылезет ..
с 1.6.0 - норм
seriousstas
ага понял конфликтует с 1.5.10...:)
но foo_cuefilter не работает
и скорее всего не будет, потому как идет прямое обращение в индекс(библиотеку) фубара... т.е. показывает все как есть в папке, но при добавление в плейлист идет разбивка на треки.
------------------
Т.е. в этом варианте не используется прослойка в виде плейлиста как у вьетнамского товарища...
схема такая
библиотека ---> плейлист ---> скрипт (вьетнамский скипт)
библиотека ---> скрипт (скрипт WilB)
seriousstas
23.06.2016, 19:52
seriousstas
ага понял конфликтует с 1.5.10...:)
и скорее всего не будет, потому как идет прямое обращение в индекс(библиотеку) фубара... т.е. показывает все как есть в папке, но при добавление в плейлист идет разбивка на треки.
Ясно , думаю мож немного подковырять старую version "1.0" :
http://pccar.ru/showpost.php?p=363298&postcount=1893
С ней ведь никаких проблем вообще ..
Ну зачем нам знаки вопроса и лишние файлы в "дереве" ?
Ясно , думаю мож немного подковырять старую version "1.0" :
http://pccar.ru/showpost.php?p=363298&postcount=1893
С ней ведь никаких проблем вообще ..
Ну зачем нам знаки вопроса и лишние файлы в "дереве" ?
подковырять можно только что, я уже плохо помню что с ней было не так...
и что в нее добавлять ?
А вот про знаки вопроса не понял, где они возникают, и какие лишние файлы ?
---------------------
Я видос сейчас сниму по разнице между Album List и скриптом от WilB, и сюда сброшу.
Видос (https://drive.google.com/file/d/0B60qIBsIiUkgRmc5bjB6QmtPckk/view?usp=sharing) с разницей(звук в видео кривой не правильно настроен не обращай внимания)
---------------------
Проверил вот этот вариант что ты предложил http://pccar.ru/showpost.php?p=363298&postcount=1893 он так же не правильно отправляет в плейлист... первый трек становится не первым ;)
Ну похоже я нашел решение проблемы :)... сортировка при отправке в плейлист... при таком варианте работает и отправляет треки в правильном порядке...
т.е. если сделать дабл на папке/альбоме то будет играть первый трек в альбоме как указано в теге...
Если нужно добавлю опцию по вкл/отключению этой сортировки ?
----------------------
Короче кому нужно вот скрипт (https://yadi.sk/i/QF8kR5NbskGUo)...
Добавлена опция вкл/откл. сортировку при добавлении в плейлист находится в Properties и называется...
_SYSTEM: Sorting tracks on APPLY & ADD по умолчанию включена true(если нужно выключить сменить значение на false)
Скрипт можно просто заменить в сборке при этом настройки в Properties можно не сбрасывать.
seriousstas
23.06.2016, 23:24
А вот про знаки вопроса не понял, где они возникают
Во главе цельных файлов, что не удалены foo_cuefilter
сортировка при отправке в плейлист...
оно! , заменил в сборке .. Ранее почему-то не придавал значения,
думал в плейлисте косяк .
заодно чуть поправил Пикмерт :
http://rgho.st/7YMZhXYr2/thumb.png (http://rgho.st/7YMZhXYr2.view)
seriousstas
24.06.2016, 00:13
Видос с разницей(звук в видео кривой не правильно настроен не обращай внимания) :good:
Хорошо , что сейчас есть выбор - отличный задел на будущее .
ещё-бы br3tt чем-то порадовал ..
duzzy
а что это за механизм создания сборки с упаковкой в dll ?:
http://flipout69.deviantart.com/art/JAM-v1-5-1-407758948
Во главе цельных файлов, что не удалены foo_cuefilter
оно! , заменил в сборке .. Ранее почему-то не придавал значения,
думал в плейлисте косяк .
заодно чуть поправил Пикмерт :
http://rgho.st/7YMZhXYr2/thumb.png (http://rgho.st/7YMZhXYr2.view)
Хмм... странно... у меня все правильно показывает в скрипте Вилба
Да я тоже на это до сегодняшнего дня не обращал внимания, косяк конечно но не сильно криминальный... все треки из папки присутствуют, а это значит что почти все ровно:smile1:
Красивый Пикметр получился, жаль на моем разрешении не все правильно влезает.
:good:
Хорошо , что сейчас есть выбор - отличный задел на будущее .
ещё-бы br3tt чем-то порадовал ..
duzzy
а что это за механизм создания сборки с упаковкой в dll ?:
http://flipout69.deviantart.com/art/JAM-v1-5-1-407758948
Да сейчас есть из чего выбирать не то что раньше:big:
С Бреттом списывался не так давно, он в творческом отпуске))) за темой следит но пока отдыхает.:smile1:
Из разговора было понятно что его немного все достало.
Про упаковку в dll еще не слышал... интересно надо расковырять и посмотреть что там:spiteful:
seriousstas
Не пойму а где там и что упаковано в dll... по ссылке обычный конфиг сборки вроде, или я ошибаюсь...
seriousstas
24.06.2016, 01:35
seriousstas
Не пойму а где там и что упаковано в dll... по ссылке обычный конфиг сборки вроде, или я ошибаюсь...
По основной ссылке :
http://www.deviantart.com/download/407758948/jam___v1_5_1_by_flipout69-d6qrotg.zip?token=78b0aca20a699299692ddb8384d02626 23e914a6&ts=1466718154
но похоже это просто доп dll библиотека Фубара , а так читал ранее где-то , вот и подумал )
По основной ссылке :
http://www.deviantart.com/download/407758948/jam___v1_5_1_by_flipout69-d6qrotg.zip?token=78b0aca20a699299692ddb8384d02626 23e914a6&ts=1466718154
но похоже это просто доп dll библиотека Фубара , а так читал ранее где-то , вот и подумал )
Не там в обычной ссылке которая справа просто пустышка, на DA иначе не создать тему чтоб потом туда инфу выложить(у них очень тупо организовано создание тем/постов)...
Он про это пишет чуть ниже...
http://jpegshare.net/thumbs/02/fc/02fcbfa31f53a24b1afa00f0764f252d.jpg (http://jpegshare.net/02/fc/02fcbfa31f53a24b1afa00f0764f252d.png.html)
Сборочка на самом деле так себе, очень много цветных кнопок))) а функционала очень мало и пользоваться не удобно... пробовал мне не понравилась, мне больше Zetro (http://fav.me/d4vm1dr) нравилась я на нее мод (http://fav.me/d7lmsvj) делал:smile1:, еще CaTRoX (http://fav.me/d636na7) прикольная темка...
На DA много прикольных тем но они как правило из очень старых и не все обновляются.
Ну похоже я нашел решение проблемы :)... сортировка при отправке в плейлист... при таком варианте работает и отправляет треки в правильном порядке...
т.е. если сделать дабл на папке/альбоме то будет играть первый трек в альбоме как указано в теге...
Если нужно добавлю опцию по вкл/отключению этой сортировки ?
----------------------
Короче кому нужно вот скрипт (https://yadi.sk/i/QF8kR5NbskGUo)...
Добавлена опция вкл/откл. сортировку при добавлении в плейлист находится в Properties и называется...
_SYSTEM: Sorting tracks on APPLY & ADD по умолчанию включена true(если нужно выключить сменить значение на false)
Скрипт можно просто заменить в сборке при этом настройки в Properties можно не сбрасывать.
Объясните для одарённых. как скрипт этот добавить?:be:
seriousstas
24.06.2016, 12:15
Объясните для одарённых. как скрипт этот добавить?:be:
пкм>Preferences>Show Scripts - замени и примени скрипт .
duzzy показывал, где и что :
http://pccar.ru/showpost.php?p=363303&postcount=1896
duzzy
Красивый Пикметр получился, жаль на моем разрешении не все правильно влезает.
Уменьшить ширину можно убрав некоторые частоты в графе Spectrum Analizer. В опциях Пикметра и Анализатора есть Size - ширина колонок,
ну и шрифт (его размер) так-же влияет на ширину
Объясните для одарённых. как скрипт этот добавить?:be:
- добавление новой панели/скрипта в сборку (https://drive.google.com/open?id=0B60qIBsIiUkgQzA3ZzJSdlJObE0)
замена скрипта в панели очень простое действие, элементарное...
для этого нужно просто мышой покликать несколько раз...
правый клик на панели со скриптом, далее в меню выбрать Configure или Show Script откроется редактор скрипта, далее в редакторе выделить весь скрипт и удалить его, далее скаченный файл с новым скриптом открыть в блокноте выделить весь код скопировать, далее переходим в открытый ранее редактор скрипта и вставляем скопированный код, далее жмем кнопки Apply затем OK редактор закроется и на панели появится работающий скрипт библиотеки.
Затем нужно сбросить старые настройки(переменные) от прошлого скрипта, делаем почти тоже что и в начале... правый клик на панели со скриптом в меню выбрать Properties или Show Properties, откроется окно настроек, в верхней части окна нужно нажать кнопку Clear, затем в нижней части окна нажать кнопки Apply затем OK... тем самым мы сбросили настройки.
Эти действия действительны для каждого установленного в сборку скрипта, т.е. таким образом можно заменить/обновить скрипт в любой панели сборки.
И я настоятельно рекомендую посмотреть видео.
seriousstas
Уменьшить ширину можно убрав некоторые частоты
:) в этом то и есть фишка пикметра, хочется все частоты видеть))) а при 800х600 они получаются тонюсенькие и вся красота смазывается... блин... фубар классный плеер но с визуализацией очень серьезный напряг.
Причем нельзя сказать что ее нет, просто сделана она как то через одно место... и если разбирать сборку то можно увидеть что большая часть времени при создании сборки была потрачена именно на вкорячивание визуализации.
Уменьшить ширину можно убрав некоторые частоты
Естественно тем кто едет на стерео не нужен пикметр пятиканальный,
оставить только фронты. Больше приходится заботится не о ширине столбиков,
а о том что-бы значения не налазили друг на друга. Я в первую очередь ставлю те,
где частота с десятыми, а не с сотыми. Приходится с полчаса потыкатся.
Примерно так получается при ширине 800 ...
Спасибо всем большое. Разобрался.
Кое как допёрло что этот скрипт надо в библиотеке применить)))))))
А так вроде всё нормально открывается и определяется:)
kaamoss
Пожалуйста !
Кое как допёрло что этот скрипт надо в библиотеке применить)))))))
Смотри фубар можно рассматривать как конструктор в виде панелей, т.е. на примере библиотеки --- то что ты видишь в библиотеке, список папок в виде дерева это панель --- панель эта скриптовая, т.е. для ее работы необходим скрипт и панель которая запускает(компилит скрипт при запуске фубара), если убрать скрипт то будет просто пустая панель.
Т.е. по сути тема сборки собрана из панелей... например как кирпичный дом из кирпичей, либо конструктор лего...
Сейчас наглядно покажу чтоб ты понимал как собрана тема сборки...
http://jpegshare.net/thumbs/5d/dd/5ddd6bf9215df1248fd75cf980bfd6ac.jpg (http://jpegshare.net/5d/dd/5ddd6bf9215df1248fd75cf980bfd6ac.png.html)
http://jpegshare.net/thumbs/88/40/8840259a50f67d217dea60189aaca41c.jpg (http://jpegshare.net/88/40/8840259a50f67d217dea60189aaca41c.png.html)
Сегодня попозжей вечерком выложу скрипт Get Covers (Artwork) от kgena_ua, с модификацией под палец
Это всеядный скрипт обложек)))
http://jpegshare.net/thumbs/eb/dc/ebdc2d4b1dd4f31e961086f325ba7d9b.jpg (http://jpegshare.net/eb/dc/ebdc2d4b1dd4f31e961086f325ba7d9b.png.html)
Видос (https://drive.google.com/file/d/0B60qIBsIiUkgT3pWMXBvRXhKdUk/view?usp=sharing) как работает
(добавлю еще переключение режимов показа обложки по даблу)
seriousstas
25.06.2016, 14:43
Это всеядный скрипт обложек)))
Инет-радио картинки покажет ?
Оригинал знаю - нет , но может в Твоей редакции сможет ..
Инет-радио картинки покажет ?
Оригинал знаю - нет , но может в Твоей редакции сможет ..
Гена проводил эксперименты у него показывало... на фубар.ру кто то просил его сделать... не знаю я пробовал по его рецепту сделать не очень получилось, были затыки в отображении, тормоза а иногда все это хозяйство крашилось... попробовать попробую но не обещаю что получится.
По его схеме если все правильно помню скрипты работают в паре инет-картинки и этот.
+ я сейчас просто немного другим занят, делаю флэт темку на новых скриптах... ;)
seriousstas
Если видел или помнишь где были посты на фубар.ру по отображению инет-картинок в скрипте GetCovers, скинь мне ссылку плиз... я порылся там и не могу найти, помню что видел где то но не найти...
seriousstas
25.06.2016, 20:03
seriousstas
Если видел или помнишь где были посты на фубар.ру по отображению инет-картинок в скрипте GetCovers, скинь мне ссылку плиз... я порылся там и не могу найти, помню что видел где то но не найти...
Не видал такого , Гена лишь говорил , что - не сейчас ...
Скрипт Get Covers (Artwork) от kgena_ua, с моей модификацией под палец... :smile2:
http://jpegshare.net/thumbs/89/83/8983147bff9bd323ce7d4d1a4f59563c.jpg (http://jpegshare.net/89/83/8983147bff9bd323ce7d4d1a4f59563c.png.html)
(на скрине просто вариант настройки цвета и шрифта)
в механизме скрипта нет изменений...
- обложки прокручиваются влево вправо
- по даблу на панели меняется выравнивание обложки в панели, точно так же как и в контекстном меню по ПКМ
- при зажатом Shift и движении пальцем влево вправо меняется время цикличной смены обложек(и так же выключается)
- чувствительность прокрутки пальцем можно изменить в Properties
- цвет текста и тени в Properties
- шрифт его размеры и стиль так же в Properties
- вкл/выкл тень поверх обложки с регулировкой прозрачности(для того чтоб не светило как прожектор ночью) так же в Properties
- информацию по исполнителю и т.д. можно выключить в Properties
- так же есть и другие настройки которые можно посмотреть в Properties
Скачать (https://yadi.sk/i/4SnRJyhnsnoY2)
Скрипт Get Covers (Artwork) от kgena_ua, с моей модификацией под палец... :smile2:
http://jpegshare.net/thumbs/89/83/8983147bff9bd323ce7d4d1a4f59563c.jpg (http://jpegshare.net/89/83/8983147bff9bd323ce7d4d1a4f59563c.png.html)
(на скрине просто вариант настройки цвета и шрифта)
в механизме скрипта нет изменений...
- обложки прокручиваются влево вправо
- по даблу на панели меняется выравнивание обложки в панели, точно так же как и в контекстном меню по ПКМ
- при зажатом Shift и движении пальцем влево вправо меняется время цикличной смены обложек(и так же выключается)
- чувствительность прокрутки пальцем можно изменить в Properties
- цвет текста и тени в Properties
- шрифт его размеры и стиль так же в Properties
- вкл/выкл тень поверх обложки с регулировкой прозрачности(для того чтоб не светило как прожектор ночью) так же в Properties
- информацию по исполнителю и т.д. можно выключить в Properties
- так же есть и другие настройки которые можно посмотреть в Properties
Скачать (https://yadi.sk/i/4SnRJyhnsnoY2)
Юххуууу!!!!:drinks: Очень круто!!!!
Тока можно мне ещё одну наглость позволить?:big:
как убрать эти кнопки на фик? они очень мешают, типы эквалайзеров можно и без них переключать)))
http://jpegshare.net/thumbs/4e/50/4e506f9ada4c32bc537f6ded0c2c3f4d.jpg (http://jpegshare.net/4e/50/4e506f9ada4c32bc537f6ded0c2c3f4d.jpg.html)
kaamoss
Да прикольный скриптец :yes2:
Кнопки эти можно отключить если они не нужны(для того чтоб включить нужно будет вернуть как было).
Выключаем, делаешь правый клик по любым нижним кнопкам, появится меню...
http://jpegshare.net/thumbs/af/a0/afa01ded3973d3641532cdf703b4729e.jpg (http://jpegshare.net/af/a0/afa01ded3973d3641532cdf703b4729e.png.html)
выбираешь Configure
далее откроется редактор скрипта...
http://jpegshare.net/thumbs/b7/ba/b7bad3ef4aedbeb2df126aa2892f3311.jpg (http://jpegshare.net/b7/ba/b7bad3ef4aedbeb2df126aa2892f3311.png.html)
в редакторе скрипта прокручиваешь скрипт вниз до строки 566(как показано на скрине, номера строк на левой стороне окна),
это будет код кнопки переключения панелей плейлиста и Классик спетрума, далее идешь в строку 571 и ставишь тут(то что менять отмечено красным) ---> window.SetProperty("SYS.Milk_buttons_status", false), затем идешь в строку 585 и комментируешь эту строку двумя слэшами "//" ---> //milk_drop_btn_timer = window.CreateTimerInterval(shpeck_btns_timer);.
После произведенных изменений в скрипте сохраняем то что мы сделали, жмем кнопку Apply и OK, все кнопка выключена. Теперь можно проверить ее отключение.
seriousstas
27.06.2016, 04:48
Ну похоже я нашел решение проблемы :)... сортировка при отправке в плейлист... при таком варианте работает и отправляет треки в правильном порядке...
т.е. если сделать дабл на папке/альбоме то будет играть первый трек в альбоме как указано в теге...
Если нужно добавлю опцию по вкл/отключению этой сортировки ?
----------------------
Короче кому нужно вот скрипт (https://yadi.sk/i/QF8kR5NbskGUo)...
Добавлена опция вкл/откл. сортировку при добавлении в плейлист находится в Properties и называется...
_SYSTEM: Sorting tracks on APPLY & ADD по умолчанию включена true(если нужно выключить сменить значение на false)
Скрипт можно просто заменить в сборке при этом настройки в Properties можно не сбрасывать.
Проверь функцию - "добавить в плейлист" . Чего-то валится скрипт.
Ну и кнопка соответственно тоже не работает .
Ещё ты добавил сортировку - как она устроена ?
просто разные там various artists - то-есть сборники разбрасывает по всему списку почему-то ..
Вылазит трабл , если добавить в библиотеку фубара верхнюю папку(затем даблклик),внутри которой будет сборник.
Опять-же, тут http://pccar.ru/showpost.php?p=363298&postcount=1893 всё ОК с этим .
подковырять можно только что, я уже плохо помню что с ней было не так...
и что в нее добавлять ?
Отображение кавера с блюром и фоновой картинки ,как и в других скриптах Ты делал
seriousstas
Проверь функцию - "добавить в плейлист" . Чего-то валится скрипт.
Ну и кнопка соответственно тоже не работает .
Проверил поправил, было лишнее нижнее подчеркивание, теперь работает правильно.
Ещё ты добавил сортировку - как она устроена ?
Сортировку вынес в Properties, она отключаемая...
_SYSTEM: Sorting tracks on APPLY & ADD --- true/false (вкл/откл сортировки при добавлении проигрывании)
_SYSTEM: Sort TF on APPLY & ADD --- формат сортировки по умолчанию такой как был в скрипте...
"$if([%album artist%],%album artist%,zzzz)|$if([%album%],[%date%]%album%,zzzz)|$if(%track number%,%track number%,zzzz)|$sub(5,%rating%)|%title%"
http://jpegshare.net/thumbs/f3/8c/f38c5044178b403658dc40d8870cde92.jpg (http://jpegshare.net/f3/8c/f38c5044178b403658dc40d8870cde92.png.html)
Скачать исправленный скрипт LIBRARY_TREE_TOUCH_PANEL_with_AlbumArtView (https://yadi.sk/i/Ih465kcEspLGr)
(По сортировке если нужно:
Title Formatting Reference (http://wiki.hydrogenaud.io/index.php?title=Foobar2000:Title_Formatting_Refere nce);
Foobar2000:Query syntax (http://wiki.hydrogenaud.io/index.php?title=Foobar2000:Query_syntax);
так же и в сборках есть два файла в корне titleformat_help.html и Query Syntax Help.html;
на русском --- Foobar2000/Описание синтаксиса форматирования заголовков (https://ru.wikibooks.org/wiki/Foobar2000/%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_% D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1 %81%D0%B0_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0% B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B 7%D0%B0%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%BE% D0%B2))
А various artists страдает как правило из за неправильных тегов и нумерации, просто народ обычно в VA пихают все подряд и теги не правят или правят но криво(А потом когда скачаешь такую кашу долго голову ломаешь править или нет). Я почему и использую %path%, $directory(%path%) .
например:
папка VA
номера треков
-1
-2
-3
-13
-16
-25
-5
-7
название альбома может быть вообще разное и VA и название тех альбомов откуда их брали и самодеятельность в разнобой:yes2:
В VA нужно править либо Album Title или Album Artist с тегом Various Artists, либо не заморачиваться и использовать просто режим %path%.
Опять-же, тут http://pccar.ru/showpost.php?p=363298&postcount=1893 всё ОК с этим .
Да нет не ок :), в некоторых случаях как и с Korn такая же белеберда с треками... не 12345678 а 32567814... некоторые папки загоняются правильно по порядку, а некоторые со сбоем в нумерации(я про № треков).
Я поэтому и ушел на JScript Panel для того чтоб пользоваться скриптом WilB-а, у меня с его скриптом вообще нет проблем, работает почти идентично Album list.
seriousstas
27.06.2016, 15:17
А various artists страдает как правило из за неправильных тегов и нумерации, просто народ обычно в VA пихают все подряд и теги не правят или правят но криво
Ок, но пускай это нумерация будет проблемой для отображения внутри оглавления
(названия сборника под своей одной картинкой) .
Последний скрипт разбрасывает треки сборников по всему плейлисту групками по несколько
треков . С первой версией такого нет . Сейчас сделаю видео..
seriousstas
Сортировка при ADD и APPLY которую я добавил отключается в Properties...
опция _SYSTEM: Sorting tracks on APPLY & ADD поставь false и все будет как раньше :)
------------------------
Смотри вот давным давно скачанный сборник...
http://jpegshare.net/thumbs/bb/4d/bb4dde4de959efab47a484fefde213f5.jpg (http://jpegshare.net/bb/4d/bb4dde4de959efab47a484fefde213f5.png.html)
настройки в Properties...
http://jpegshare.net/thumbs/00/91/0091004fa983d1d172f73099748886e5.jpg (http://jpegshare.net/00/91/0091004fa983d1d172f73099748886e5.png.html)
видос (https://drive.google.com/file/d/0B60qIBsIiUkgeUZOQUZza2UxQ2c/view?usp=sharing) о том как все это хозяйство работает(только загрузил наверно еще в обработке):smile2:
seriousstas
27.06.2016, 15:59
Сравнение двух версий :
y7ITs0E2jj4
seriousstas
когда делаешь замену скриптов лучше настройки сбрасывать ;)
повторюсь из прошлого моего коммента,
настройки в Properties...
http://jpegshare.net/thumbs/00/91/0091004fa983d1d172f73099748886e5.jpg (http://jpegshare.net/00/91/0091004fa983d1d172f73099748886e5.png.html)
видос (https://drive.google.com/file/d/0B60qIBsIiUkgeUZOQUZza2UxQ2c/view?usp=sharing) о том как все это хозяйство работает(только загрузил наверно еще в обработке):smile2:
seriousstas
27.06.2016, 16:41
duzzy
Sorting tracks on APPLY & ADD поставь false и все будет как раньше
Получается , чтоб-ы грузить сборники , я каждый должен отключать
сортировку, а что-бы правильно сортировало треки внутри альбома,
как в случаях с Корн и Slipknot - я её должен включать ?
Тогда - точно выбираю 1-ю версию - она с этим справляется без манипуляций и доп. сортировок .
по скорости - тоже всё быстро грузит ..
seriousstas
Да нет, нужно просто теги в сборниках прописать правильно и все будет гуд :) и можно пользовать с сортировкой.
Либо настроить сортировку для себя, я так и не настроил ее для своих нужд, да и особо не вникал в этот вопрос... пользовался просто видом "Папки"(%path%)... ну а не так давно заинтересовался скриптом от WilB и понял что мне даже менять ни чего не нужно, просто устанавливаешь его и пользуешься точно так же как и Album list.
Тогда - точно выбираю 1-ю версию
Первая версия работает не правильно, те же проблемы, я проверял...
Ты думаешь я просто так перешел на JSPanel и отказался от скрипта вьетнамца ?
Скрипт вьетнамца мне больше нравится и по оформлению и по функционалу +столько время на него потрачено просто охренеть... но есть косяки которые мне не нравятся, он их не исправляет, сам я их не исправлю, поддержки и обновлений в скрипте нет. В последней обнове он его просто перегнал на JSPanel и все, все старые косяки и все что я правил в отправленной ему версии так и не изменилось.
Если сильно не придираться то скрипт работает очень даже нормально в режиме Папок(%path%), нумерация треков сбивается но не всегда, с чем связана неправильная нумерация треков не совсем понятно... при добавлении каким то образом сбивается индекс треков, почему и от чего не понятно... видимо не спроста он в своем скрипте использовал сортировку по дефолту.
seriousstas
27.06.2016, 17:17
Да нет, нужно просто теги в сборниках прописать правильно и все будет гуд
Я как-то натягал с https://what.cd/ несколько террабайт гигабиткой, до того как
меня забанили ) - там процентов 30 сборники - переделывать теги на неделю работы..
Первая версия работает не правильно, те же проблемы, я проверял...
я тоже проверил. KoЯn и Slipknot правильно отображает. Сборники не разбрасывает .
Приведи плиз пример - где есть какие-то траблы с :
// @name "TOUCH LIBRARY PANEL TREE mod_5"
// @version "1.0"
// @author "Vo Thanh Dat moded by Terro"
когда делаешь замену скриптов лучше настройки сбрасывать
Сбрасываю конечно . Здесь по инерции и совету (понятно , что для разный версий нужно сбросить :blush:):
Скрипт можно просто заменить в сборке при этом настройки в Properties можно не сбрасывать.
seriousstas
переделывать теги на неделю работы..
я вот по этому и заморачиваться не стал с сортировкой, смысла просто нет...:smile2:
Приведи плиз пример
да тот же самый Korn(по ссылке с прошлых постов), пройди по альбомам, треки будут с неправильной нумерацией, если сравнивать с трек листом и библиотекой...
Сборники не расбрасывает .
Сборники и не будет разбрасывать потому как они не сортируются при добавлении... в этом скрипте как и следующих сортировка просто убрана, стоит просто playlist_.OrderByFormat(fb.TitleFormat("%path%"), 1);.
--------------------------
А чем тебе скрипт WilB-a (https://hydrogenaud.io/index.php/topic,110938.0.html) не нравится ?
(в сборку нужно просто добавить JScript Panel, и заменить две панели с WSH на JScript Panel --- панель библиотеки и панель кнопок для библиотеки)
seriousstas
27.06.2016, 17:41
да тот же самый Korn(по ссылке с прошлых постов), пройди по альбомам, треки будут с неправильной нумерацией, если сравнивать с трек листом и библиотекой...
Сравниваю - все ОК (на последнем v3.0 да - неправильно):) :
seriousstas
27.06.2016, 17:59
А чем тебе скрипт WilB-a не нравится ?
1.Нужно поставить доп коппонент
в сборку нужно просто добавить JScript Panel
ради одного скрипта ..
2.Получаем список из папок с CUE с двойниками (во главе дерева) и знаками вопросов :
http://rgho.st/6xjSVxdYN/thumb.png (http://rgho.st/6xjSVxdYN.view)
3. Ну и не вижу смысла что-то менять если есть хорошо работающий скрипт,
поэтому и прошу скрины или названия конкретных альбомов, где есть проблемы из v 1.0 Vo Thanh Dat
seriousstas
Ну если очень очень очень нужно могу этот переделать который ты сравнивал. Проверь его точней у меня на этом компе толком проверять не на чем, я на нем музло не слушаю...
Просто переделка занимает кучу время... из старого в новый проще чем из нового в старый(просто я им уже не пользуюсь).
Как проверишь пиши, подойдет этот старый вариант скрипта или нет... не охота в пустую гемороем этим заниматься.
seriousstas
27.06.2016, 18:11
duzzy
Нужно на данном этапе , когда ещё пока остаёмся на WSH .
Вот Ты про какую-то сборку говорил на JP, с которой работаешь сейчас,
что это будет ?
проверил сто раз когда писал о нём пару страниц назад .
Работает так-же ,как от WilB - только без двойников(фильтрует) ..
Ещё интересно Vo Thanh Dat есть v 1.0 и v 3.0, была-ли 2.0 ?
1.Нужно поставить доп коппонент
ради одного скрипта ..
2.Получаем список из папок с CUE с двойниками (во главе дерева) и знаками вопросов :
http://rgho.st/6xjSVxdYN/thumb.png (http://rgho.st/6xjSVxdYN.view)
3. Ну и не вижу смысла что-то менять если есть хорошо работающий скрипт,
поэтому и прошу скрины или названия конкретных альбомов, где есть проблемы из v 1.0
Ну я только из за этого скрипта и перегнал все на JS :wink2: как по мне так библиотека один из важных компонентов сборки...
Получаем список из папок с CUE с двойниками
Видимо скрипт косячно работает, скачался криво или я сохранил его не правильно в текстовом файле... Попробуй скачай оргинал (https://hydrogenaud.io/index.php/topic,110938.0.html)(последняя версия в конце темы) и посмотри будет разница.
так у меня показывает...
http://jpegshare.net/thumbs/df/9c/df9c9bc957583c2ea0f6bd0fe8eed450.jpg (http://jpegshare.net/df/9c/df9c9bc957583c2ea0f6bd0fe8eed450.png.html)
и плюс ко всему правильно формирует список библиотеки, не делает разбивку(на скрине список из двух источников)...
http://jpegshare.net/thumbs/ac/fd/acfda0391390090c27873c6fef896661.jpg (http://jpegshare.net/ac/fd/acfda0391390090c27873c6fef896661.png.html)
seriousstas
27.06.2016, 18:23
(последняя версия в конце темы) и посмотри будет разница.
Попробовал (настройки сбросил, стоит foo_jscript_panel-v1.1.4):
http://rgho.st/8LWHlqZJR/thumb.png (http://rgho.st/8LWHlqZJR.view)
Ну я только из за этого скрипта и перегнал все на JS как по мне так библиотека один из важных компонентов сборки...
потому-что забыл про Vo Thanh Dat v 1.0 :)
Видимо скрипт косячно работает
предположу - из-за установленного рядом 1.5.10
seriousstas
:) а теперь попробуй включить вид папками...
ПКМ и...
http://jpegshare.net/thumbs/10/76/1076309b4ad229c44a3acbb0f91c1125.jpg (http://jpegshare.net/10/76/1076309b4ad229c44a3acbb0f91c1125.png.html)
потому-что забыл про Vo Thanh Dat v 1.0
:) ))) да нет не забыл он меня просто утомил мелкими косяками, я уже собрался перейти на скрипт Бретта графический последний, там есть вариант почти похожий на нормальную библиотеку, как вдруг подвернулся этот новый скриптец и я его стал потрошить под палец...
предположу - из-за установленного рядом 1.5.10
он работает со всеми версиями WSH без конфликтов так как это совершенно другой компонент...
А вот Mc.Web думает что WSH 1.5.6 оригинальная версия:big: работает лучше всего... а то что почти все скрипто-кодеры на JS перешли:spiteful: так это просто попробовать наверно.
(из известных косяков не убран только один в графике... артефакты появляются при использовании ректов вместе и под определенными углами... Марк хоть и говнюк но очень много чего исправил из того что было, а некоторые там на забугорном форуме до сих пор ноют... взяли бы да переделали... кодеров там тьма, а взял и переделал только один:smile2:)
seriousstas
27.06.2016, 18:35
и плюс ко всему правильно формирует список библиотеки, не делает разбивку(на скрине список из двух источников)...
Для меня это наоборот фича . Я четко знаю - где и что лежит .
он меня просто утомил мелкими косяками
какими ?
Он ранее проработал без проблем на старой версии сборки. Косяков ведь не-было ..
Вспомни причину обновления - у 3.0 якобы большая скорость обработки - хотя я разницы не заметил .
на 1.0 никто не жаловался ..
Для меня это наоборот фича . Я четко знаю - где и что лежит .
какими ?
Он ранее проработал без проблем на старой версии сборки. Косяков ведь не-было ..
Вспомни причину обновления - у 3.0 якобы большая скорость обработки - хотя я разницы не заметил .
на 1.0 никто не жаловался ..
))) так тут и знать не надо все и так видно в списке и в правильном порядке...
Работал то он работал, и жалоб не было потому что пользователи его не ковыряли:smile2:
Ну причина обновления была не только в скорости... почитай комменты на странице скрипта, там народ только и жалуется на косяки, а автор фиксы в комментах отправляет... причем они все разные:big:
И про это он в ченджлоге не пишет)))
А проблем у меня было много с ним:
- криво работающие таймеры(так и не победил)
- система выделения треков работает через ж...
- неправильно работающий механизм прокрутки при убранной строке поиска
- косяки при смещении списка
- косяки при зуме
- многократное дублирование источников при обновлении
- не показывает некоторые форматы в списке
- работает через прокладку(тогда не было выбора поэтому смирился)
- кривое формирование списка при слиянии
- перелопачивание названий на свой манер(пытался править, более менее вышло что то нормальное)
- проблемы с сортировкой, множественные....
- затыки при отправке треков в плейлист, а иногда полный зависон(возможно из за таймеров с этим не разбирался поставил обход потому что хз куда вообще капать не понятно)
... и т.д.
все что выкладывалось уже более менее подправленный вариант, с обходами и т.д. но мне от этого не легче :be:
--------------------
Ты попробовал вариант View by Folder Structure в скрипте от WilB ?
До скрипта от WilB хотел использовать вот такой вот вид скрипта от Бретта JSSBrowser...
http://jpegshare.net/thumbs/15/68/1568d476cb5b597e45222f0093a17d81.jpg (http://jpegshare.net/15/68/1568d476cb5b597e45222f0093a17d81.png.html)
переделанный под отображение папок... пока допиливал появился нормальный скрипт библиотеки.
seriousstas
27.06.2016, 19:40
Список большой , но я многого не замечал )
Ты попробовал вариант View by Folder Structure в скрипте от WilB ?
Нет - полагал это по дефолту в Твоей редакции - смотрю это убирает дубли - тогда ещё
покатаюсь сегодня с ней :)
duzzy
Нужно на данном этапе , когда ещё пока остаёмся на WSH .
Вот Ты про какую-то сборку говорил на JP, с которой работаешь сейчас,
что это будет ?
проверил сто раз когда писал о нём пару страниц назад .
Работает так-же ,как от WilB - только без двойников(фильтрует) ..
Ещё интересно Vo Thanh Dat есть v 1.0 и v 3.0, была-ли 2.0 ?
Ну как хочешь, мое дело предложить...
Переделаю эту правильную версию))) только потом чур не жаловаться что что то работает через ж...
По сборкам,
1. просто мой клон NEON на JScript Panel уже давно ее сделал просто не выкладывал, потому как будет куча вопросов по переделке скриптов с WSH на JP...
2. новая сборка ну не сборка наверно правильнее тема сборки:smile1: с плоским интерфейсом без файло-графики будут только шрифты, простой набор без наворотов несколько панелей...
Показывать смысла нет там только разметка еще, и есть проблемы с кнопками, очень фиговый косяк который не понятно как исправить(когда прячешь кнопки зона обработки остается и нажатия проходят:shok:)
Работает так-же ,как от WilB - только без двойников(фильтрует) ..
Где ты там двойников нашел... у меня все работает и показывает точно также как и Album List(нужно просто в скрипте включить режим отображения папками)... я же уже показывал сравнения между ними вот глянь (https://drive.google.com/file/d/0B60qIBsIiUkgRmc5bjB6QmtPckk/view?usp=sharing) разницы нет... компонент Album List и скрипт считывают одинаково индекс фубара...
Ещё интересно Vo Thanh Dat есть v 1.0 и v 3.0, была-ли 2.0 ?
Он не меняет версии... а версий у него было уже куча как и модификаций, и Бретт ему помогал и выкладывал переделку и из других источников тоже были переделанные...
seriousstas
27.06.2016, 20:03
Переделаю эту правильную версию))) только потом чур не жаловаться что что то работает через ж...
Давай я вначале нормально потестю WilB в авто .
рядом с WSH 1.6 она не уживается , попробую с 1.5.10
По остальному - понял , спасибо за пояснения!
Список большой , но я многого не замечал )
Нет - полагал это по дефолту в Твоей редакции - смотрю это убирает дубли - тогда ещё
покатаюсь сегодня с ней :)
Я же не какую то муть предлагаю, стал бы я себе ее ставить:big:, а наоборот вариант который работает лучше чем эта вьетнамская муть написанная на коленке...
И потом скрипт написан настоящим кодером... таких очень мало кто пишет для фубара и выкладывает в сеть... и это не единственная его работа вот например YouTube Track Manager (https://hydrogenaud.io/index.php/topic,105522.0.html)... поверь чувачек шарит в этом и очень не плохо.
По дефолту там Album Artist... я изменял другие вещи, прокрутку, Феньки и удобство использования :smile1: потому как пользоваться дефолтным скриптом под палец не удобно, можно сравнить оригинал и мою переделку если интересно в чем разница.
Давай я вначале нормально потестю WilB в авто .
рядом с WSH 1.6 она не уживается , попробую с 1.5.10
По остальному - понял , спасибо за пояснения!
Попробуй, разницу в качестве почуешь сразу:wink2:
Странно я со всеми последними пробовал 1.6.0, 1.6.3, 1.5.10, 1.5.12 на тестовой сборке все гуд и на специальной сборке помойке:big: где куча хлама стоит, возможно идет конфликт с другим компонентом... проверь.
Пожалуйста :wink2:
-------------------------------------
Вот попробуй еще прошлую версию v1.1.3 (https://yadi.sk/d/js7HXsGMspz6L) хз может не будет конфликта...
seriousstas
27.06.2016, 21:33
Попробуй, разницу в качестве почуешь сразу
хорошо,а как добавить сразу все папки?
И где поиск отключить ?
С первым разобрался :) есть включатель All Musik
Ещё посмотрю, как там область раскрытия дерева увеличить (крестик) , что-б под палец было
хорошо,а как добавить сразу все папки?
И где поиск отключить ?
С первым разобрался :) есть включатель All Musik
Ещё посмотрю, как там область раскрытия дерева увеличить (крестик) , что-б под палец было
Вот примерный перевод настроек из Properties :wink2:
http://jpegshare.net/thumbs/a7/e9/a7e9cbe9cac944ed5e6a3007e127e649.jpg (http://jpegshare.net/a7/e9/a7e9cbe9cac944ed5e6a3007e127e649.png.html)
настройки по нумерации из скрина:
1.авто-подгон
2.действие по даблу 0-как в эксплорере 1-проигрывание
3.обновление библиотеки 0-авто 1-при старте
4.отступ
5.авто-сворачивание
6.свои символы сворачивания/разворачивания папок вкл/выкл
7.свои символы [-][+]
8.линии папок 0-спрятать 1-серые 2-смешанные 3-как текст
9.показать пункт вся музыка
10.счетчик треков
11.показать треки
12.название рабочего плейлиста
13.авто-проигрывание при отправке в плейлист
14.полосы на строках
15.отступ между строками
16.прокрутка страницы колесом мыши вкл/выкл
17.шаг колеса мыши
18.чувствительность прокрутки пальцем
19.плавная прокрутка вкл/выкл
20.таймер плавной прокрутки
21.показать скролбар
22.ширина скролбара
23.стиль поиска 0-затемненный 1-смешанный 2-нормальный 3-подсвеченный
24.поиск 0-спрятать 1-только поиск 2-поиск и фильтр
25.цвет линии поиска 0-серый 1-смешанный 2-как текст
26.всплывающие подсказки вкл/выкл
...
...далее идет сортировка и ее варианты настройки
...затем фильтры и их варианты настройки
...затем цвет элементов
...затем настройки фона/обложки
при зажатом Ctrl + палец вверх/вниз(колесо мыши) зумим текст панели.
Ещё посмотрю, как там область раскрытия дерева увеличить (крестик) , что-б под палец было
Зумишь текст на панели до нужного размера, затем увеличиваешь интервал между строками пункт 15 на скрине выше...
должно получится примерно так как ниже на скрине...
http://jpegshare.net/thumbs/d2/c7/d2c716ba809c620b62e7f4437450a2e2.jpg (http://jpegshare.net/d2/c7/d2c716ba809c620b62e7f4437450a2e2.png.html)
seriousstas
28.06.2016, 04:05
duzzy
Попробуй мои ковыряния (внутри и файл настроек):
http://rgho.st/6QQLMHRXS
Отключил поиск, поднял, настроил.
Увеличил отступ от текста до креста - теперь область раскрытия больше (дуамю и пальцем будет удобно , завтра испытаю) ..
seriousstas
28.06.2016, 04:14
Сегодня, 02:58
и
Сегодня, 03:05
:pleasantry:
Вот примерный перевод настроек из Properties
Благодарю - будет полезным !
24.поиск 0-спрятать 1-только поиск 2-поиск и фильтр
Круть ,а я вручную делал - зато немного разобрался в скрипте ))
нтервал между строками пункт 15 на скрине выше...
должно получится примерно так как ниже на скрине...
попробуй из this.calc_text = function () {
замени например на 17 здесь :
this.symbol_w = this.node_style ? 17
307 строка
seriousstas
С режимом нод http://jpegshare.net/images/79/ec/79ec7b4b65eb44a7c091e45357b4bf2d.png (http://jpegshare.net/)(маленькие крестики как в Album List) не удобно уже пробовал в машине, на 7" монике их почти не видно и пальцем очень сложно попасть... самый лучший вариант этот http://jpegshare.net/images/94/f0/94f027fc5272836fd4998b593ce84658.png (http://jpegshare.net/) в настройках можно свои символы подставить...так [-] [+] или так (-) (+) их видно лучше...
-----------------------
моя сборка с твоими настройками(настройки не менял сфоткал как есть) размер окна 800х600...
http://jpegshare.net/thumbs/bc/50/bc50545acdff9c0e084ae68c7afc717b.jpg (http://jpegshare.net/bc/50/bc50545acdff9c0e084ae68c7afc717b.png.html)
как и говорил выше эти символы просто будут смазываться, будешь видеть точку на экране, сравни с этим...
http://jpegshare.net/thumbs/a7/07/a7071b9ebb3691186b3487865d453529.jpg (http://jpegshare.net/a7/07/a7071b9ebb3691186b3487865d453529.png.html)
seriousstas
28.06.2016, 04:38
[-] [+] или так (-) (+) их видно лучше...
Смотрю они уже прописаны - нужно лишь включить
кастомные символы - они вырублены по-дефолту. А вообще мощьный скрипт - хоть и есть лишнее,
Зачем мне к примеру вызов помощи по синтаксису :
}, function () {
browser("\"" + fb.FoobarPath + "Query Syntax Help.html");
}, "", "Open Query Syntax Help");
будешь видеть точку на экране, сравни с этим...
Согласен, но и в линиях есть свой феншуй :)
seriousstas
Благодарю - будет полезным !
Пожалуйста ! ;)
Круть ,а я вручную делал - зато немного разобрался в скрипте ))
Молодцом уже потрошишь скриптец :moil: :whistle:
Этот скрипт у меня развернут, оригинальный вариант скрипта сжатый jsmin так что там ручками не подправить... код выглядит примерно так....
http://jpegshare.net/thumbs/59/f5/59f5c15c9f97c8df453419da4c733891.jpg (http://jpegshare.net/59/f5/59f5c15c9f97c8df453419da4c733891.png.html)
Смотрю они уже прописаны - нужно лишь включить
кастомные символы - они вырублены по-дефолту. А вообще мощьный скрипт - хоть и есть лишнее,
Зачем мне к примеру вызов помощи по синтаксису :
Согласен, но и в линиях есть свой феншуй :)
:smile2: про что я и писал... я прежде чем потрошить в настройки смотрю что там есть:wink2:
Скрипт очень хорош, жаль что он раньше не появился, избавил бы меня от кучи лишнего гемора и ночных посиделок уткнувшись в монитор...
Зачем мне к примеру вызов помощи по синтаксису
А оно тебе мешает))) ?
Это функция от кнопки в строке поиска, и она не активна... если убрать плюсов не будет... смысла в ее удалении нет. Если ты имеешь ввиду сокращение кол-ва строк в коде, то это тоже не даст плюсов потому как код не такой уж и большой скорости от этого не прибавится...
Я уже занимался этим, уменьшением кол-ва строк, сжатием кода и другими фишками:fuck2: по увеличению производительности скриптов... результат на 2 мс быстрее загрузка:big:... а гемора по убиранию и чистке кода от не используемых функций на пару дней, а то и больше, потому как некоторые функции с привязками и чтоб их отвязать иногда приходится по всему коду пройтись... так что кол-во затраченных нервов, сил и посаженного зрения от моника этого не стоят:smile2:
Согласен с фэншуем) и красиво и наглядно и удобно, но как показала практика использования в авто, на эти линии просто не смотришь и их как правило не видно... зато они очень удобны в домашних условиях.
seriousstas
28.06.2016, 14:21
))
будешь видеть точку на экране, сравни с этим
А если их(точки) вручную увеличить ? При зумировании будет тупо,
но можно настроить под себя :
seriousstas
28.06.2016, 16:41
duzzy
Залил , попробуй, можно-ли пользовать ? :
http://rgho.st/6yhFtvBWh
Настройки уже прописаны.
seriousstas
Залил , попробуй, можно-ли пользовать ? :
Попробовал, можно и так пользовать... Просто прикинь ты на 7" экране их будешь видеть и пальцем в них попадать ?
Как мне кажется они мелковаты под палец... или нет...
---------------------------
Мне просто вариант со скобками больше нравится, не выбивается из общей массы))), при взгляде на панель не сосредотачиваешь внимание на них, а при варианте "точек":) не произвольно переводишь на них зрение...
Можешь попробовать еще вариант, добавить в скрипт новый символьный шрифт например Segoe UI Symbol и на месте скобок [+][-] использовать что то типо открытой http://jpegshare.net/images/f0/06/f006080897d229843545dba40f64bb0c.png (http://jpegshare.net/) и закрытой http://jpegshare.net/images/ab/75/ab752267729f7bd83687cae4e52240eb.png (http://jpegshare.net/) папки.
seriousstas
28.06.2016, 17:06
seriousstas
Попробовал, можно и так пользовать... Просто прикинь ты на 7" экране их будешь видеть и пальцем в них попадать ?
Как мне кажется они мелковаты под палец... или нет...
Область попадания прибавляется расстоянием до текста .
"их" я увеличил в пару раз - можно и 10 раз увеличить
Можешь попробовать еще вариант
Также можно и в дефолтном варианте с линиями заделать , попробую
Область попадания прибавляется расстоянием до текста .
"их" я увеличил в пару раз - можно и 10 раз увеличить
Ну можно и больше сделать, надо в машине смотреть как оно будет с пальцем:smile2:
Сделай проще вынеси настройки зон и "точки" в Properties, будет проще настраивать.
например:
(переменные можешь обозвать как тебе нужно, ниже просто пример)
var click_expand_zone = window.GetProperties("Зона кнопки Развернуть", 30);
var btn_expand_size = window.GetProperties("Кнопка Развернуть размер ", 30);
и прописываешь эти переменные click_expand_zone, btn_expand_size в то место где ты цифры меняешь... бонус в том чтоб в редактор не лазить без конца при подгоне:wink2:
Забыл сказать, у тебя прокрутка страницы целиком включена, т.е. постраничная прокрутка. Ее можно отключить в настройках.
--------------------------------
обманул тебя))) шрифт не Segoe UI Symbol а Wingdings для этих папочек...открытой http://jpegshare.net/images/f0/06/f006080897d229843545dba40f64bb0c.png (http://jpegshare.net/) и закрытой http://jpegshare.net/images/ab/75/ab752267729f7bd83687cae4e52240eb.png (http://jpegshare.net/) папки.
seriousstas
28.06.2016, 17:39
Сделай проще
Думал, но ..
Все не так просто - там по линиям ещё несколько параметров,
отдельно настраивается "+" и отдельно "-" и тд..
Выйдет около 10-ка настроек - проще сноски сделать и быстро подогнать в скрипте ..
Забыл сказать, у тебя прокрутка страницы целиком включена
Я думал прокрутка взбесилась :)
не выбивается из общей массы))), при взгляде на панель не сосредотачиваешь внимание на них
Ну хорошо , а как Тебе такой вариант с полупрозрачними "точками" )
:
// ==PREPROCESSOR==
// @name "Library Tree"
// @author "Wilb"
// @version "0.8"
// ==/PREPROCESSOR==
//if (!("GetQueryItems" in fb))
//fb.ShowPopupMessage("Library Tree requires:\n\nJScript Panel 1.1.0+\n\n(https://github.com/19379/foo-jscript-panel/releases)");
String.prototype.trim = function () {
return this.replace(/^\s+|[\n\s]+$/g, "");
}
//============================
var g_color_normal_bg = 0;
ppt = {
showwallpaper : window.GetProperty("_DISPLAY: Show Wallpaper", true),
wallpaperblurred : window.GetProperty("_DISPLAY: Wallpaper Blurred", true),
wallpaperblurvalue : window.GetProperty("_DISPLAY: Wallpaper Blur value", 2.00) / 1.6,
wallpapermode : window.GetProperty("_DISPLAY: Wallpaper Mode", false),
wallpaperpath : window.GetProperty("_DISPLAY: Default Wallpaper Path", ".\\wsh_br3tt\\jsplaylist\\images\\default.jpg"),
wallpaperalfa : window.GetProperty("_DISPLAY: Wallpaper Alfa", 150),
wallpaperoverlayalfa : window.GetProperty("_DISPLAY: Wallpaper Overlay Alfa", 50),
};
var brw = null;
var wpp_img_info = {
orient : 0,
cut : 0,
cut_offset : 0,
ratio : 0,
x : 0,
y : 0,
w : 0,
h : 0
};
var g_wallpaperImg = null;
//===================================
function userinterface() {
var blend = "",
custom_col = window.GetProperty("_CUSTOM COLOURS: USE", false),
linecol = window.GetProperty(" Node: Lines: Hide-0 Grey-1 Blend-2 Text-3", 3),
mix = 0,
orig_font_sz = 16,
s_col = window.GetProperty(" Search Style: Fade-0 Blend-1 Norm-2 Highlight-3", 1),
s_linecol = window.GetProperty(" Search: Line Colour: Grey-0 Blend-1 Text-2", 2),
sp = 6,
sp1 = 6,
sp2 = 6,
sum = 0,
sy = window.GetProperty(" Node: Custom Symbols: Collapse|Expand", "[-]|[+]").split("|"),
zoom_font_sz = 16,
zoom = 100;
this.b1 = 0x04ffffff;
this.b2 = 0x04000000;
this.backcol = "";
this.backcol_h = "";
this.backcolsel = "";
this.backcoltrans = "";
this.bg = false;
this.collapse = sy[0].trim();
this.dui = window.InstanceType;
this.expand = sy[1].trim();
this.fill = 0;
this.font;
this.framecol = "";
this.h = 0;
this.j_font;
this.linecol = "";
this.pen = 1;
this.pen_c = 0x55888888;
this.row_h = 20;
this.s_font;
this.s_linecol = "";
this.searchcol = "";
this.sel = 3;
this.symbol_w = 17;
this.textcol = "";
this.textcol_h = "";
this.textselcol = "";
this.textsymbcol = "";
this.txt_box = "";
this.w = 0;
this.alternate = window.GetProperty(" Row Stripes", false);
this.local = typeof conf === 'undefined' ? false : true;
this.margin = window.GetProperty(" Margin", 8);
this.node_style = !window.GetProperty(" Node: Custom Symbols (No Lines)", false);
this.pad = window.GetProperty(" Tree Indent", 19);
this.scrollbar_show = window.GetProperty(" Scrollbar Show", true);
this.scr_w = this.scrollbar_show ? window.GetProperty(" Scrollbar Width", 12) : 0;
window.SetProperty("_CUSTOM COLOURS: EMPTY = DEFAULT", "R-G-B (any) or R-G-B-A (not Text...), e.g. 255-0-0");
var R = function (c) {
return c >> 16 & 0xff;
};
var G = function (c) {
return c >> 8 & 0xff;
};
var B = function (c) {
return c & 0xff;
}
var get_blend = function (c1, c2, f) {
var nf = 1 - f,
r = (R(c1) * f + R(c2) * nf),
g = (G(c1) * f + G(c2) * nf),
b = (B(c1) * f + B(c2) * nf);
return RGB(r, g, b);
}
var set_custom_col = function (c, t) {
if (!custom_col)
return "";
try {
var cc = "",
col = [];
col = c.split("-");
if (col.length != 3 && col.length != 4)
return "";
switch (t) {
case 0:
cc = RGB(col[0], col[1], col[2]);
break;
case 1:
switch (col.length) {
case 3:
cc = RGB(col[0], col[1], col[2]);
break;
case 4:
cc = RGBA(col[0], col[1], col[2], col[3]);
break;
}
break;
}
return cc;
} catch (e) {
return ""
};
}
this.get_textselcol = function (c) {
var cc = [R(c), G(c), B(c)];
var ccc = [];
for (var i = 0; i < cc.length; i++) {
ccc[i] = cc[i] / 255;
ccc[i] = ccc[i] <= 0.03928 ? ccc[i] / 12.92 : Math.pow(((ccc[i] + 0.055) / 1.055), 2.4);
}
var L = 0.2126 * ccc[0] + 0.7152 * ccc[1] + 0.0722 * ccc[2];
if (L > 0.31)
return RGB(0, 0, 0);
else
return RGB(255, 255, 255);
}
this.outline = function (c, but) {
if (but) {
if (window.IsTransparent || R(c) + G(c) + B(c) > 30)
return RGBA(0, 0, 0, 36);
else
return RGBA(255, 255, 255, 36);
} else if (R(c) + G(c) + B(c) > 255 * 1.5)
return RGB(30, 30, 10);
else
return RGB(225, 225, 245);
}
this.reset_colors = function () {
this.backcol = "";
this.backcol_h = "";
this.backcolsel = "";
this.backcoltrans = "";
this.framecol = "";
this.linecol = "";
this.s_linecol = "";
this.searchcol = "";
this.textcol = "";
this.textcol_h = "";
this.textselcol = "";
this.textsymbcol = "";
this.txt_box = "";
}
this.get_colors = function () {
this.backcol = set_custom_col(window.GetProperty("_Custom.Colour Background", ""), 1);
this.backcol_h = set_custom_col(window.GetProperty("_Custom.Colour Background Highlight", ""), 1);
this.backcolsel = set_custom_col(window.GetProperty("_Custom.Colour Background Selected", ""), 1);
this.linecol = set_custom_col(window.GetProperty("_Custom.Colour Node Lines", ""), 1);
this.txt_box = set_custom_col(window.GetProperty("_Custom.Colour Search Name", ""), 0);
this.s_linecol = set_custom_col(window.GetProperty("_Custom.Colour Search Line", ""), 1);
this.searchcol = set_custom_col(window.GetProperty("_Custom.Colour Search Text", ""), 0);
this.framecol = set_custom_col(window.GetProperty("_Custom.Colour Frame Highlight", ""), 1);
this.textcol = set_custom_col(window.GetProperty("_Custom.Colour Text", ""), 0);
this.textcol_h = set_custom_col(window.GetProperty("_Custom.Colour Text Highlight", ""), 0);
this.textselcol = set_custom_col(window.GetProperty("_Custom.Colour Text Selected", ""), 0);
this.textsymbcol = set_custom_col(window.GetProperty("_Custom.Colour Node Symbol", ""), 0);
this.backcoltrans = set_custom_col(window.GetProperty("_Custom.Colour Transparent Fill", ""), 1);
if (this.dui) { // custom colour mapping: DUI colours can be remapped by changing the numbers (0-3)
if (this.textcol === "")
this.textcol = window.GetColorDUI(0);
if (this.backcol === "")
this.backcol = window.GetColorDUI(1);
if (this.textcol_h === "")
this.textcol_h = window.GetColorDUI(2);
if (this.backcolsel === "")
this.backcolsel = window.GetColorDUI(3);
} else { // custom colour mapping: CUI colours can be remapped by changing the numbers (0-6)
if (this.textcol === "")
this.textcol = window.GetColorCUI(0);
if (this.backcol === "")
this.backcol = window.GetColorCUI(3);
if (this.textcol_h === "")
this.textcol_h = window.GetColorCUI(2);
if (this.backcolsel === "")
this.backcolsel = window.GetColorCUI(4);
if (this.textselcol === "")
this.textselcol = window.GetColorCUI(1);
}
if (this.backcol_h === "")
this.backcol_h = 0x1E30AFED;
if (s_linecol == 1 && window.IsTransparent && !this.dui)
s_linecol = 0;
if (this.framecol === "")
this.framecol = 0xA330AFED;
var blend = get_blend(this.backcol == 0 ? 0xff000000 : this.backcol, this.textcol, 0.75);
var ln_col = [0, RGBA(136, 136, 136, 85), blend, this.textcol];
if (this.linecol === "")
this.linecol = ln_col[linecol];
if (this.searchcol === "")
this.searchcol = s_col < 3 ? this.textcol : this.textcol_h;
if (this.textselcol === "")
this.textselcol = this.get_textselcol(this.backcolsel);
blend = get_blend(this.backcol == 0 ? 0xff000000 : this.backcol, !s_col || s_col == 2 ? this.textcol : this.textcol_h, 0.75);
if (this.txt_box === "")
this.txt_box = s_col < 2 ? get_blend(!s_col ? this.textcol : this.textcol_h, this.backcol == 0 ? 0xff000000 : this.backcol, !s_col ? 0.65 : 0.7) : s_col == 2 ? this.textcol : this.textcol_h;
if (!this.node_style && this.textsymbcol === "")
this.textsymbcol = this.textcol;
if (this.s_linecol === "")
this.s_linecol = s_linecol == 0 ? RGBA(136, 136, 136, 85) : s_linecol == 1 ? blend : this.txt_box;
if (window.IsTransparent && this.backcoltrans) {
this.bg = true;
this.backcol = this.backcoltrans
}
if (!window.IsTransparent || this.dui) {
this.bg = true;
if ((R(this.backcol) + G(this.backcol) + B(this.backcol)) > 759)
this.b2 = 0x06000000;
}
if (this.local) {
this.textcol = c_textcol;
this.textcol_h = c_textcol_h;
this.textselcol = c_textselcol;
this.backcolsel = c_backcolsel;
this.alternate = c_alternate;
this.fill = c_fill;
this.pen = c_pen;
this.pen_c = c_pen_c;
this.searchcol = this.txt_box = c_txt_box;
this.b1 = c_b1;
this.b2 = c_b2;
}
this.ibeamcol1 = window.IsTransparent ? 0xffe1e1f5 : this.outline(this.backcol);
this.ibeamcol2 = window.IsTransparent || !this.backcolsel ? 0xff0099ff : this.backcolsel != this.searchcol ? this.backcolsel : 0xff0099ff;
}
this.get_colors();
this.get_font = function () {
if (this.dui)
this.font = window.GetFontDUI(2);
else
this.font = window.GetFontCUI(0);
try {
this.font.Name;
this.font.Size;
this.font.Style;
} catch (e) {
this.font = gdi.Font("Segoe UI", 16, 0);
p.trace("JScript Panel is unable to use your default font. Using Segoe UI at default size & style instead");
}
orig_font_sz = window.GetProperty("SYSTEM.Font Size", 18);
if (this.font.Size != orig_font_sz)
window.SetProperty(" Zoom Font Size (%)", 225);
orig_font_sz = this.font.Size;
window.SetProperty("SYSTEM.Font Size", this.font.Size)
zoom = window.GetProperty(" Zoom Font Size (%)", 100);
zoom_font_sz = Math.max(Math.round(orig_font_sz * zoom / 100), 1);
this.font = gdi.Font(this.font.Name, zoom_font_sz, this.font.Style);
window.SetProperty(" Zoom Font Size (%)", Math.round(zoom_font_sz / orig_font_sz * 100));
this.s_font = gdi.Font(this.font.Name, this.font.Size, 2);
this.j_font = gdi.Font(this.font.Name, this.font.Size * 1.5, 1);
if (this.local) {
this.font = c_font;
this.s_font = c_s_font;
this.j_font = gdi.Font(this.font.Name, this.font.Size * 1.5, 1);
this.margin = c_margin;
this.pad = c_pad;
this.row_h = c_row_h;
this.scr_w = c_scr_w;
}
this.calc_text();
}
this.calc_text = function () {
var i = gdi.CreateImage(1, 1),
g = i.GetGraphics();
this.row_h = Math.round(g.CalcTextHeight("String", this.font)) + window.GetProperty(" Row Vertical Item Padding", 3);
sp = Math.round(g.CalcTextWidth(" ", this.font));
sp1 = Math.max(Math.round(sp * 1.5), 6);
sp2 = Math.round(g.CalcTextWidth(this.expand, this.font));
this.symbol_w = this.node_style ? 22 + sp1 : sp + sp2;
this.sel = (this.node_style ? sp1 : sp) / 2;
this.tt = this.node_style ? -Math.ceil(sp1 / 2 - 3) + sp1 : sp;
i.ReleaseGraphics(g);
i.Dispose();
}
this.wheel = function (step) {
if (p.m_y > p.s_h) {
zoom_font_sz += step;
zoom_font_sz = Math.max(zoom_font_sz, 1);
this.font = gdi.Font(this.font.Name, zoom_font_sz, this.font.Style);
this.s_font = gdi.Font(this.font.Name, this.font.Size, 2);
this.j_font = gdi.Font(this.font.Name, this.font.Size * 1.5, 1);
this.calc_text();
p.on_size();
jS.on_size();
pop.create_tooltip();
if (p.s_show || this.scrollbar_show)
but.refresh(true);
sbar.reset();
window.Repaint();
window.SetProperty(" Zoom Font Size (%)", Math.round(zoom_font_sz / orig_font_sz * 100));
} else {
if (p.scale < 0.7)
return;
p.scale += step * 0.1;
p.scale = Math.max(p.scale, 0.7);
p.f_font = gdi.Font("segoe ui", p.scale > 1.05 ? Math.floor(11 * p.scale) : 11 * p.scale, 1);
p.f_but_ft = gdi.Font("segoe ui", p.scale > 1.05 ? Math.floor(9 * p.scale) : 9 * p.scale, 1);
p.calc_text();
but.refresh(true);
window.SetProperty(" Zoom Filter Size (%)", Math.round(p.scale * 100));
p.search_paint();
}
}
}
var ui = new userinterface();
function on_colors_changed() {
ui.reset_colors();
ui.get_colors();
if (p.s_show) {
but.create_images();
but.refresh();
}
window.Repaint();
}
function on_font_changed() {
ui.get_font();
sbar.reset();
p.on_size();
pop.create_tooltip();
if (p.s_show || ui.scrollbar_show)
but.refresh(true);
window.Repaint();
}
function scrollbar() {
var smoothness = 0.3439;
this.count = -1;
this.draw_timer = false;
this.hover = false;
this.s1 = 0;
this.s2 = 0;
this.scroll_step = window.GetProperty(" Scroll - Mouse Wheel: Page Scroll", false);
this.scroll_step_mouse = window.GetProperty(" Scroll - Mouse Wheel: Step", 1);
this.smooth = window.GetProperty(" Scroll: Smooth Scroll", true);
this.smooth_scroll_interval = window.GetProperty(" Scroll: Smooth Scroll Interval", 30);
this.timer_but = false;
this.x;
this.y;
this.w;
this.h;
this.bar_ht = 0;
this.but_h;
this.bar_y = 0;
this.row_count = 0;
this.scroll = 0;
this.delta = 0;
this.ratio = 1;
this.rows_drawn = 0;
this.row_h;
this.scrollbar_height = 0;
this.scrollable_lines = 0;
this.scrollbar_travel = 0;
this.b_is_dragging = false;
this.drag_distance_per_row;
this.initial_drag_y = 0; // dragging
this.draw = function (gr) {
if (this.scrollable_lines > 0) {
try {
gr.FillSolidRect(this.x, this.y + this.bar_y, this.w, this.bar_ht, RGBA(200, 200, 200, !this.hover && !this.b_is_dragging ? 75 : 192));
} catch (e) {}
}
}
this.leave = function () {
if (this.b_is_dragging)
return;
this.hover = false;
this.hover_o = false;
window.RepaintRect(this.x, this.y, this.w, this.h);
}
this.nearest = function (y) {
y = (y - this.but_h) / this.scrollbar_height * this.scrollable_lines * this.row_h;
y = y / this.row_h;
y = Math.round(y) * this.row_h;
return y;
}
this.reset = function () {
this.delta = this.scroll = this.s1 = this.s2 = 0;
this.metrics(this.x, this.y, this.w, this.h, this.rows_drawn, this.row_h);
}
this.scroll_timer = function () {
var that = this;
this.draw_timer = window.SetInterval(function () {
if (p.w < 1 || !window.IsVisible)
return;
that.smooth_scroll();
}, this.smooth_scroll_interval);//smooth_scroll_interval def 16
}
this.set_rows = function (row_count) {
this.row_count = row_count;
this.metrics(this.x, this.y, this.w, this.h, this.rows_drawn, this.row_h);
}
this.wheel = function (step) {
this.check_scroll(this.scroll + step * - (this.scroll_step ? this.rows_drawn : this.scroll_step_mouse) * this.row_h);
}
this.metrics = function (x, y, w, h, rows_drawn, row_h) {
this.x = x;
this.y = Math.round(y);
this.w = w;
this.h = h;
this.rows_drawn = rows_drawn;
if (!p.autofit)
this.rows_drawn = Math.floor(this.rows_drawn);
this.row_h = row_h;
this.but_h = ui.scr_w;
// draw info
this.scrollbar_height = this.h - this.but_h * 2;
this.bar_ht = Math.max(Math.round(this.scrollbar_height * this.rows_drawn / this.row_count), 12);
this.scrollbar_travel = this.scrollbar_height - this.bar_ht;
// scrolling info
this.scrollable_lines = this.row_count - this.rows_drawn;
this.ratio = this.row_count / this.scrollable_lines;
this.bar_y = this.but_h + this.scrollbar_travel * (this.delta * this.ratio) / (this.row_count * this.row_h);
this.drag_distance_per_row = this.scrollbar_travel / this.scrollable_lines;
}
this.lbtn_up = function (p_x, p_y) {
var x = p_x - this.x;
var y = p_y - this.y;
if (this.b_is_dragging)
this.b_is_dragging = false;
this.initial_drag_y = 0;
if (this.timer_but) {
window.ClearInterval(this.timer_but);
this.timer_but = false;
};
this.count = -1;
}
this.lbtn_dn = function (p_x, p_y) {
var x = p_x - this.x;
var y = p_y - this.y;
if (x < 0 || x > this.w || y < 0 || y > this.h || this.row_count <= this.rows_drawn)
return;
if (y < this.but_h || y > this.h - this.but_h)
return;
if (y < this.bar_y)
var dir = 1; // above bar
else if (y > this.bar_y + this.bar_ht)
var dir = -1; // below bar
if (y < this.bar_y || y > this.bar_y + this.bar_ht)
this.check_scroll(this.nearest(y));
else { // on bar
this.b_is_dragging = true;
this.initial_drag_y = y - this.bar_y;
}
}
this.move = function (p_x, p_y) {
var x = p_x - this.x;
var y = p_y - this.y;
if (x < 0 || x > this.w || y > this.bar_y + this.bar_ht || y < this.bar_y)
this.hover = false;
else
this.hover = true;
if (this.hover != this.hover_o)
window.RepaintRect(this.x, this.y, this.w, this.h);
this.hover_o = this.hover;
if (!this.b_is_dragging || this.row_count <= this.rows_drawn)
return;
this.check_scroll(Math.round((y - this.initial_drag_y - this.but_h) / this.drag_distance_per_row) * this.row_h);
}
this.check_scroll = function (new_scroll) {
var s = Math.max(0, Math.min(new_scroll, this.scrollable_lines * this.row_h));
if (s == this.scroll)
return;
this.scroll = s;
if (this.smooth) {
if (!this.draw_timer)
this.scroll_timer();
} else {
this.delta = this.scroll;
this.bar_y = this.but_h + this.scrollbar_travel * (this.delta * this.ratio) / (this.row_count * this.row_h);
p.tree_paint();
}
}
this.smooth_scroll = function () {
if (Math.abs(this.scroll - this.delta) > 0.5) {
this.s1 += (this.scroll - this.s1) * smoothness;
this.s2 += (this.s1 - this.s2) * smoothness;
this.delta += (this.s2 - this.delta) * smoothness;
this.bar_y = this.but_h + this.scrollbar_travel * (this.delta * this.ratio) / (this.row_count * this.row_h);
p.tree_paint();
} else if (this.draw_timer) {
window.ClearTimeout(this.draw_timer);
this.draw_timer = false;
}
}
this.but = function (dir) {
this.check_scroll(this.scroll + (dir * -this.row_h));
if (!this.timer_but) {
var that = this;
this.timer_but = window.SetInterval(function () {
if (that.count > 6) {
that.check_scroll(that.scroll + (dir * -that.row_h));
} else
that.count++;
}, 40);
}
}
}
var sbar = new scrollbar();
function panel_operations() {
var def_ppt = window.GetProperty(" View by Folder Structure: Name // Pattern", "View by Folder Structure // Pattern Not Configurable");
var DT_LEFT = 0x00000000,
DT_CENTER = 0x00000001,
DT_RIGHT = 0x00000002,
DT_VCENTER = 0x00000004,
DT_SINGLELINE = 0x00000020,
DT_CALCRECT = 0x00000400,
DT_NOPREFIX = 0x00000800,
DT_END_ELLIPSIS = 0x00008000,
grps = [],
i = 0,
sort = "";
var view_ppt = [
window.GetProperty(" View 01: Name // Pattern", "View by Artist // %artist%|%album%|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title%"),
window.GetProperty(" View 02: Name // Pattern", "View by Album Artist // %album artist%|%album%|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title%"),
window.GetProperty(" View 03: Name // Pattern", "View by Album Artist - Album // [%album artist% - ]['['%date%']' ]%album%|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title%"),
window.GetProperty(" View 04: Name // Pattern", "View by Album // %album%[ '['%album artist%']']|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title%"),
window.GetProperty(" View 05: Name // Pattern", "View by Genre // %<genre>%|[%album artist% - ]%album%|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title%"),
window.GetProperty(" View 06: Name // Pattern", "View by Year // %date%|[%album artist% - ]%album%|[[%discnumber%.]%tracknumber%. ][%track artist% - ]%title%")
];
var nm = "",
ppt_l = view_ppt.length + 1;
for (i = ppt_l; i < ppt_l + 93; i++) {
nm = window.GetProperty(" View " + (i < 10 ? "0" + i : i) + ": Name // Pattern");
if (nm && nm != " // ")
view_ppt.push(window.GetProperty(" View " + (i < 10 ? "0" + i : i) + ": Name // Pattern"));
}
var filter_ppt = [
window.GetProperty(" View Filter 01: Name // Query", "Filter // Query Not Configurable"),
window.GetProperty(" View Filter 02: Name // Query", "Lossless // \"$info(encoding)\" IS lossless"),
window.GetProperty(" View Filter 03: Name // Query", "Lossy // \"$info(encoding)\" IS lossy"),
window.GetProperty(" View Filter 04: Name // Query", "Missing Replaygain // %replaygain_track_gain% MISSING"),
window.GetProperty(" View Filter 05: Name // Query", "Never Played // %play_count% MISSING"),
window.GetProperty(" View Filter 06: Name // Query", "Played Often // %play_count% GREATER 9"),
window.GetProperty(" View Filter 07: Name // Query", "Recently Added // %added% DURING LAST 2 WEEKS"),
window.GetProperty(" View Filter 08: Name // Query", "Recently Played // %last_played% DURING LAST 2 WEEKS"),
window.GetProperty(" View Filter 09: Name // Query", "Top Rated // rating IS 5")
];
var filt_l = filter_ppt.length + 1;
for (i = filt_l; i < filt_l + 90; i++) {
nm = window.GetProperty(" View Filter " + (i < 10 ? "0" + i : i) + ": Name // Query");
if (nm && nm != " // ")
filter_ppt.push(window.GetProperty(" View Filter " + (i < 10 ? "0" + i : i) + ": Name // Query"));
}
this.cc = DT_CENTER | DT_VCENTER | DT_CALCRECT | DT_NOPREFIX;
this.l = DT_LEFT | DT_VCENTER | DT_SINGLELINE | DT_CALCRECT | DT_NOPREFIX;
this.lc = DT_VCENTER | DT_CALCRECT | DT_NOPREFIX | DT_END_ELLIPSIS;
this.rc = DT_RIGHT | DT_VCENTER | DT_CALCRECT | DT_NOPREFIX;
this.f_w = [];
this.f_h = 0;
this.f_x1 = 0;
this.filt = [];
this.folder_view = 10;
this.grp = [];
this.grp_sort = "";
this.grp_split = [];
this.grp_split_clone = [];
this.grp_split_orig = [];
this.f_menu = [];
this.menu = [];
this.multi_value = [];
this.m_x = 0;
this.m_y = 0;
this.pos = -1;
this.s_cursor = false;
this.s_search = false;
this.s_txt = "";
this.s_x = 0;
this.s_h = 0;
this.s_w1 = 0;
this.s_w2 = 0;
this.single_br = false;
this.statistics = false;
this.tf = "";
this.view = "";
this.autofit = window.GetProperty(" Auto Fit", true);
this.syncType = window.GetProperty(" Library Sync: Auto-0, Initialisation Only-1", 0);
this.base = window.GetProperty(" Node: Show All Music", true);
this.s_show = window.GetProperty(" Search: Hide-0, SearchOnly-1, Search+Filter-2", 0);
if (!this.s_show)
this.autofit = true;
this.scale = Math.max(window.GetProperty(" Zoom Filter Size (%)", 100) / 100, 0.7);
window.SetProperty(" Zoom Filter Size (%)", this.scale * 100);
this.f_font = gdi.Font("segoe ui", this.scale > 1.05 ? Math.floor(11 * this.scale) : 11 * this.scale, 1);
this.f_but_ft = gdi.Font("segoe ui", this.scale > 1.05 ? Math.floor(9 * this.scale) : 9 * this.scale, 1);
this.filter_by = window.GetProperty("SYSTEM.Filter By", 0);
this.items = function () {
return plman.GetPlaylistItems(-1);
};
this.list = this.items();
this.reset = window.GetProperty("SYSTEM.Reset Tree", false);
this.search_paint = function () {
window.RepaintRect(ui.margin, 0, ui.w - ui.margin, this.s_h);
}
this.set_statistics_mode = function () {
this.statistics = false;
var chk = this.grp[this.view_by].name + this.grp[this.view_by].type + this.filt[this.filter_by].name + this.filt[this.filter_by].type;
chk = chk.toUpperCase();
if (chk.indexOf("ADD") != -1 || chk.indexOf("PLAY") != -1 || chk.indexOf("RATING") != -1)
this.statistics = true;
}
this.show_tracks = window.GetProperty(" Node: Show Tracks", true);
this.sort = function (li) {
switch (this.view_by) {
case this.folder_view:
li.OrderByPath();
lib.it = li.Clone();
li.OrderByRelativePath();
break;
default:
var tfs = fb.TitleFormat(this.grp_sort);
li.OrderByFormat(fb.TitleFormat(this.grp_sort), 1);
break;
}
}
this.tooltip = window.GetProperty(" Tooltips", false);
this.trace = function (message) {
var trace = true;
if (trace)
fb.trace("Library Tree: " + message);
} // true enables fb.trace
this.tree_paint = function () {
window.RepaintRect(0, Math.floor(this.s_h), ui.w, Math.round(ui.h - this.s_h) + 1);
}
this.view_by = window.GetProperty("SYSTEM.View By", 6);
this.calc_text = function () {
this.f_w = [];
var im = gdi.CreateImage(1, 1),
g = im.GetGraphics();
for (i = 0; i < this.filt.length; i++) {
this.f_w[i] = g.CalcTextWidth(this.filt[i].name, this.f_font);
if (!i)
this.f_h = g.CalcTextHeight("String", this.f_font);
}
this.f_sw = g.CalcTextWidth(" Ў", this.f_but_ft);
this.f_x1 = ui.w - ui.margin - this.f_w[this.filter_by] - this.f_sw;
this.s_w2 = this.s_show > 1 ? this.f_x1 - this.s_x - 11 : this.s_w1 - Math.round(ui.row_h * 0.75) - this.s_x + 1;
im.ReleaseGraphics(g);
im.Dispose();
}
this.fields = function (view, filter) {
this.filt = [];
this.folder_view = 10;
this.grp = [];
this.grp_sort = "";
this.multi_process = false;
this.filter_by = filter;
this.view_by = view;
for (i = 0; i < view_ppt.length; i++) {
if (view_ppt[i].indexOf("//") != -1) {
grps = view_ppt[i].split("//");
this.grp[i] = {
name : grps[0].trim(),
type : grps[1].replace(/\|\]/g, " - ]").replace(/\[\|/g, "[ - ").trim()
}
}
}
grps = [];
for (i = 0; i < filter_ppt.length; i++) {
if (filter_ppt[i].indexOf("//") != -1) {
grps = filter_ppt[i].split("//");
this.filt[i] = {
name : grps[0].trim(),
type : grps[1].trim()
}
}
}
i = this.grp.length;
while (i--)
if (!this.grp[i] || this.grp[i].name == "" || this.grp[i].type == "")
this.grp.splice(i, 1);
i = this.filt.length;
while (i--)
if (!this.filt[i] || this.filt[i].name == "" || this.filt[i].type == "")
this.filt.splice(i, 1);
this.grp[this.grp.length] = {
name : def_ppt.split("//")[0].trim(),
type : ""
}
this.folder_view = this.grp.length - 1;
this.filter_by = Math.min(this.filter_by, this.filt.length - 1);
this.view_by = Math.min(this.view_by, this.grp.length - 1);
if (this.view_by != this.folder_view) {
this.grp_split = this.grp[this.view_by].type.split("|");
this.single_br = !this.base && (this.grp_split.length == 1 || this.grp_split.length == 2 && !this.show_tracks);
this.tf = this.grp_split.length > 1 ? this.grp_split.pop() : this.grp_split[0];
for (i = 0; i < this.grp_split.length; i++) {
this.grp_split[i] = this.grp_split[i].trim();
this.multi_value[i] = this.grp_split[i].indexOf("%<") != -1 ? true : false;
if (this.grp_split[i].indexOf("%<") != -1)
this.multi_process = true;
if (this.multi_value[i]) {
this.grp_split_orig[i] = this.grp_split[i].slice();
this.grp_split[i] = this.grp_split[i].replace(/%<album artist>%/i, "$if3(%<album artist>%,%<artist>%,%<composer>%,%<performer>%)").replace(/%<album>%/i, "$if2(%<album>%,%<venue>%)").replace(/%<artist>%/i, "$if3(%<artist>%,%<album artist>%,%<composer>%,%<performer>%)");
this.grp_split_clone[i] = this.grp_split[i].slice();
this.grp_split[i] = this.grp_split_orig[i].replace(/[<>]/g, "");
}
this.grp_sort += (this.grp_split[i] + "|");
if (this.multi_value[i])
this.grp_split[i] = this.grp_split_clone[i].replace(/%</g, "#!#$meta_sep(").replace(/>%/g, "," + "|)#!#");
}
this.grp_sort = this.grp_sort + this.tf;
this.view = this.grp_split[0];
}
this.set_statistics_mode();
window.SetProperty("SYSTEM.Filter By", filter);
window.SetProperty("SYSTEM.View By", view);
this.f_menu = [];
this.menu = [];
for (i = 0; i < this.grp.length; i++)
this.menu.push(this.grp[i].name);
for (i = 0; i < this.filt.length; i++) {
this.f_menu.push(this.filt[i].name);
}
this.menu.splice(this.menu.length, 0, "Panel Properties");
if (this.syncType)
this.menu.splice(this.menu.length, 0, "Refresh");
this.menu.splice(this.menu.length, 0, "Configure...");
this.calc_text();
}
this.fields(this.view_by, this.filter_by);
var k = 1;
for (i = 0; i < 100; i++) {
nm = window.GetProperty(" View " + (i < 10 ? "0" + i : i) + ": Name // Pattern");
if (nm && nm != " // ") {
window.SetProperty(" View " + (k < 10 ? "0" + k : k) + ": Name // Pattern", nm);
k += 1
} else
window.SetProperty(" View " + (i < 10 ? "0" + i : i) + ": Name // Pattern", null);
}
for (i = k; i < k + 5; i++)
window.SetProperty(" View " + (i < 10 ? "0" + i : i) + ": Name // Pattern", " // ");
k = 1;
for (i = 0; i < 100; i++) {
nm = window.GetProperty(" View Filter " + (i < 10 ? "0" + i : i) + ": Name // Query");
if (nm && nm != " // ") {
window.SetProperty(" View Filter " + (k < 10 ? "0" + k : k) + ": Name // Query", nm);
k += 1
} else
window.SetProperty(" View Filter " + (i < 10 ? "0" + i : i) + ": Name // Query", null);
}
for (i = k; i < k + 5; i++)
window.SetProperty(" View Filter " + (i < 10 ? "0" + i : i) + ": Name // Query", " // ");
this.on_size = function () {
this.f_x1 = ui.w - ui.margin - this.f_w[this.filter_by] - this.f_sw;
this.s_x = Math.round(ui.margin + ui.row_h);
this.s_w1 = ui.w - ui.margin;
this.s_w2 = this.s_show > 1 ? this.f_x1 - this.s_x - 11 : this.s_w1 - Math.round(ui.row_h * 0.75) - this.s_x + 1;
this.ln_sp = this.s_show && !ui.local ? ui.row_h * 0.1 : 0;
this.s_h = this.s_show ? ui.row_h + (!ui.local ? this.ln_sp * 2 : 0) : ui.margin;
this.s_sp = this.s_h - this.ln_sp;
this.sp = ui.h - this.s_h - (this.s_show ? 0 : ui.margin);
this.rows = this.sp / ui.row_h;
if (this.autofit) {
this.rows = Math.floor(this.rows);
this.sp = ui.row_h * this.rows;
}
this.node_y = Math.round((ui.row_h - 11) / 2);
var scr_w = ui.scr_w;
if (this.scrollbar_show)
scr_w += 5;
this.r_mg = Math.max(ui.margin, scr_w);
sbar.metrics(ui.w - ui.scr_w, this.s_h, Math.max(ui.scr_w - 1, 0), this.sp - (this.autofit ? 0 : 4), this.rows, ui.row_h);
}
}
var p = new panel_operations();
window.DlgCode = 0x004;
function v_keys() {
this.selAll = 1;
this.copy = 3;
this.back = 8;
this.enter = 13;
this.shift = 16;
this.paste = 22;
this.cut = 24;
this.redo = 25;
this.undo = 26;
this.pgUp = 33;
this.pgDn = 34;
this.end = 35;
this.home = 36;
this.left = 37;
this.up = 38;
this.right = 39;
this.dn = 40;
this.del = 46;
this.k = function (n) {
switch (n) {
case 0:
return utils.IsKeyPressed(0x10);
break;
case 1:
return utils.IsKeyPressed(0x11);
break;
}
}
}
var v = new v_keys();
function library_manager() {
var exp = [],
expanded_items = [],
lib_paths = [],
lib_update = false,
name_idx = [],
name_ix = [],
node = [],
node_s = [],
process = false,
scr = [],
sel = [];
this.allmusic = [];
this.get_paths = true;
this.it = p.items();
this.list;
this.none = "";
this.pth_sort = "";
this.node = [];
this.root = [];
this.time = fb.CreateProfiler();
this.upd = false,
this.upd_search = false;
var tr_sort = function (data) {
data.sort(function (a, b) {
return parseFloat(a.tr) - parseFloat(b.tr)
});
return data;
}
this.update = function () {
if (ui.w < 1 || !window.IsVisible)
this.upd = true;
else {
this.refresh();
this.upd = false;
}
}
this.refresh = function (b) {
if (this.upd) {
p.search_paint();
p.tree_paint();
}
var ix = -1,
tr = 0;
process = false;
if (pop.tree.length && (!b || b && !p.reset)) {
tr = 0;
expanded_items = [];
process = true;
scr = [];
sel = [];
for (var i = 0; i < pop.tree.length; i++) {
tr = !p.base ? pop.tree[i].tr : pop.tree[i].tr - 1;
if (pop.tree[i].child.length)
expanded_items.push({
tr : tr,
a : tr < 1 ? pop.tree[i].name : pop.tree[pop.tree[i].par].name,
b : tr < 1 ? "" : pop.tree[i].name
});
tr = pop.tree[i].tr;
if (pop.tree[i].sel == true)
sel.push({
tr : tr,
a : pop.tree[i].name,
b : tr != 0 ? pop.tree[pop.tree[i].par].name : "",
c : tr > 1 ? pop.tree[pop.tree[pop.tree[i].par].par].name : ""
});
}
var l = Math.min(Math.floor(p.rows), pop.tree.length);
ix = pop.get_ix(0, p.s_h + ui.row_h / 2, true, false);
tr = 0;
for (var i = ix; i < ix + l; i++) {
tr = pop.tree[i].tr;
scr.push({
tr : tr,
a : pop.tree[i].name,
b : tr != 0 ? pop.tree[pop.tree[i].par].name : "",
c : tr > 1 ? pop.tree[pop.tree[pop.tree[i].par].par].name : ""
})
}
exp = JSON.parse(JSON.stringify(tr_sort(expanded_items)) );
}
lib_update = true;
this.get_library();
this.rootNodes();
}
this.get_library = function () {
if (this.list)
this.list.Dispose();
if (p.list)
p.list.Dispose();
this.time.Reset();
this.none = "";
this.list = fb.GetLibraryItems();
if (!this.list.Count) {
pop.tree = [];
pop.line_l = 0;
sbar.set_rows(0);
this.none = "Nothing to show\n\nConfigure Media Library first\n\nFile>Preferences>Media library";
p.tree_paint();
return;
}
if (p.filter_by > 0 && p.s_show > 1)
try {
this.list = fb.GetQueryItems(this.list, p.filt[p.filter_by].type)
} catch (e) {};
if (!this.list.Count) {
pop.tree = [];
pop.line_l = 0;
sbar.set_rows(0);
this.none = "Nothing found";
p.tree_paint();
return;
}
this.rootNames("", 0);
}
this.rootNames = function (li, search) {
var i = 0,
name = "",
search_name = "",
tf = fb.TitleFormat(p.view),
total;
switch (search) {
case 0:
p.sort(this.list);
li = p.list = this.list;
name_idx = [];
break;
case 1:
name_ix = [];
break;
}
total = li.Count;
var tree_type = !search ? p.view_by != p.folder_view ? !p.base ? 0 : 1 : !p.base ? 2 : 3 : p.view_by != p.folder_view ? !p.base ? 4 : 7 : !p.base ? 5 : 6;
switch (tree_type) {
case 0:
for (i = 0; i < total; i++) {
name = tf.EvalWithMetadb(li.Item(i));
name_idx[i] = !name.length || name == "#!##!#" ? "?" : name;
};
break;
case 1:
for (i = 0; i < total; i++) {
this.allmusic[i] = tf.EvalWithMetadb(li.Item(i));
};
break;
case 2:
for (i = 0; i < total; i++) {
node[i] = fb.GetLibraryRelativePath(li.Item(i)).split("\\");
name_idx[i] = node[i][0];
};
break;
case 3:
for (i = 0; i < total; i++) {
node[i] = fb.GetLibraryRelativePath(li.Item(i)).split("\\");
};
break;
case 4:
for (i = 0; i < total; i++) {
name = tf.EvalWithMetadb(li.Item(i));
name_ix[i] = !name.length || name == "#!##!#" ? "?" : name;
};
break
case 5:
for (i = 0; i < total; i++) {
node_s[i] = fb.GetLibraryRelativePath(li.Item(i)).split("\\");
name_ix[i] = node_s[i][0];
};
break;
case 6:
for (i = 0; i < total; i++) {
node_s[i] = fb.GetLibraryRelativePath(li.Item(i)).split("\\");
};
break;
}
}
this.rootNodes = function () {
this.root = [];
var i = 0,
j = 1,
h = 0,
l = 0,
n = "";
if (p.s_txt && (this.upd_search || lib_update)) {
if (!this.list.Count)
return;
this.none = "";
try {
p.list = fb.GetQueryItems(this.list, p.s_txt)
} catch (e) {};
if (!p.list.Count) {
pop.tree = [];
pop.line_l = 0;
sbar.set_rows(0);
this.none = "Nothing found";
p.tree_paint();
return;
}
this.rootNames(p.list, 1);
this.node = node_s.slice();
this.upd_search = false;
} else if (!p.s_txt) {
p.list = this.list;
this.node = node.slice()
};
var arr = !p.s_txt ? name_idx : name_ix,
n_o = "#get_node#",
nU = "",
total = p.list.Count;
if (!p.base)
for (l = 0; l < total; l++) {
n = arr[l];
nU = n.toUpperCase();
if (nU != n_o) {
n_o = nU;
this.root[i] = {
name : n,
sel : false,
child : [],
item : []
};
this.root[i].item.push(l);
i++;
} else
this.root[i - 1].item.push(l);
}
else {
this.root[0] = {
name : "All Music",
sel : false,
child : [],
item : []
};
for (l = 0; l < total; l++)
this.root[0].item.push(l);
}
if (!lib_update)
sbar.reset();
/* Draw tree -> */
if (!p.base || p.s_txt)
pop.buildTree(this.root, 0);
if (p.base)
pop.branch(this.root[0], true);
p.trace("populated in: " + this.time.Time / 1000 + " seconds");
var gp = p.grp_split.length,
tot = this.list.Count;
if (gp > 1 && !p.s_txt && p.view_by != p.folder_view) {
this.node = [];
for (h = 0; h < gp; h++)
this.node[h] = [];
var tf_gr = [];
for (j = 1; j < gp; j++)
tf_gr[j] = fb.TitleFormat(p.grp_split[j])
for (i = 0; i < tot; i++)
for (j = 1; j < gp; j++)
this.node[j][i] = tf_gr[j].EvalWithMetadb(this.list.Item(i));
}
if (lib_update && process) {
try {
var exp_l = exp.length,
scr_l = scr.length,
sel_l = sel.length,
tree_l = pop.tree.length;
for (h = 0; h < exp_l; h++) {
if (exp[h].tr == 0) {
for (j = 0; j < tree_l; j++)
if (pop.tree[j].name.toUpperCase() == exp[h].a.toUpperCase()) {
pop.branch(pop.tree[j]);
break;
}
} else if (exp[h].tr > 0) {
for (j = 0; j < tree_l; j++)
if (pop.tree[j].name.toUpperCase() == exp[h].b.toUpperCase() && pop.tree[pop.tree[j].par].name.toUpperCase() == exp[h].a.toUpperCase()) {
pop.branch(pop.tree[j]);
break;
}
}
}
for (h = 0; h < sel_l; h++) {
if (sel[h].tr == 0) {
for (j = 0; j < tree_l; j++)
if (pop.tree[j].name.toUpperCase() == sel[h].a.toUpperCase()) {
pop.tree[j].sel = true;
break;
}
} else if (sel[h].tr == 1) {
for (j = 0; j < tree_l; j++)
if (pop.tree[j].name.toUpperCase() == sel[h].a.toUpperCase() && pop.tree[pop.tree[j].par].name.toUpperCase() == sel[h].b.toUpperCase()) {
pop.tree[j].sel = true;
break;
}
} else if (sel[h].tr > 1) {
for (j = 0; j < tree_l; j++)
if (pop.tree[j].name.toUpperCase() == sel[h].a.toUpperCase() && pop.tree[pop.tree[j].par].name.toUpperCase() == sel[h].b.toUpperCase() && pop.tree[pop.tree[pop.tree[j].par].par].name.toUpperCase() == sel[h].c.toUpperCase()) {
pop.tree[j].sel = true;
break;
}
}
}
var scr_pos = false;
h = 0;
while (h < scr_l && !scr_pos) {
if (scr[h].tr == 0) {
for (j = 0; j < tree_l; j++)
if (pop.tree[j].name.toUpperCase() == scr[h].a.toUpperCase()) {
sbar.check_scroll(!h ? j * ui.row_h : (j - 3) * ui.row_h);
scr_pos = true;
break;
}
} else if (scr[h].tr == 1 && !scr_pos) {
for (j = 0; j < tree_l; j++)
if (pop.tree[j].name.toUpperCase() == scr[h].a.toUpperCase() && pop.tree[pop.tree[j].par].name.toUpperCase() == scr[h].b.toUpperCase()) {
sbar.check_scroll(!h ? j * ui.row_h : (j - 3) * ui.row_h);
scr_pos = true;
break;
}
} else if (scr[h].tr > 1 && !scr_pos) {
for (j = 0; j < tree_l; j++)
if (pop.tree[j].name.toUpperCase() == scr[h].a.toUpperCase() && pop.tree[pop.tree[j].par].name.toUpperCase() == scr[h].b.toUpperCase() && pop.tree[pop.tree[pop.tree[j].par].par].name.toUpperCase() == scr[h].c.toUpperCase()) {
sbar.check_scroll(!h ? j * ui.row_h : (j - 3) * ui.row_h);
scr_pos = true;
break;
}
}
h++;
}
if (!scr_pos) {
sbar.reset();
p.tree_paint();
}
} catch (e) {};
}
if (lib_update && !process) {
sbar.reset();
p.tree_paint();
}
if (p.view_by == p.folder_view && (this.get_paths || lib_update)) {
var f = "",
f_o = "",
it_l = this.it.Count;
this.pth_sort = "";
for (var b = 0; b < it_l; b++) {
f = this.it.Item(b).Path.replace(fb.GetLibraryRelative Path(this.it.Item(b)), "");
if (f != f_o) {
f_o = f;
lib_paths.push(f_o);
}
}
var pth_l = lib_paths.length;
for (b = 0; b < pth_l; b++) {
if (!b)
this.pth_sort = lib_paths[0] + ",";
else
this.pth_sort += ("," + lib_paths[b] + ",");
}
this.pth_sort = "$replace(%path%," + this.pth_sort + ")";
}
this.get_paths = false;
lib_update = false;
}
}
var lib = new library_manager();
function populate() {
var get_pos = -1,
ix_o = 0,
last_sel = -1,
m_i = -1,
tt = "",
tooltip = false,
tt_c = 0,
tt_h = 20,
tt_id = -1;
var dbl_action = window.GetProperty(" Double-Click Action: ExplorerStyle-0 Play-1", 1);
var auto = window.GetProperty(" Node: Auto Collapse", false);
var autoplay = window.GetProperty(" Playlist: Autoplay On Send", false);
var lib_playlist = window.GetProperty(" Playlist", "Library view");
var show_counts = window.GetProperty(" Node: Show Item Counts", true);
var symb = window.CreateThemeManager("TREEVIEW");
var im = gdi.CreateImage(11, 11),
g = im.GetGraphics(),
symb_style = 0;
if (ui.node_style)
try {
symb.SetPartAndStateId(2, 1);
symb.SetPartAndStateId(2, 2);
symb.DrawThemeBackground(g, 0, 0, 11, 11);
} catch (e) {
symb_style = 1;
}
im.ReleaseGraphics(g);
im.Dispose();
var sy_font = gdi.Font("Segoe UI", 24, 1),// font symb
symb_style = 0;
this.line_l = 0;
this.sel_items = [];
this.tree = [];
if (!window.GetProperty("SYSTEM.Playlist Checked", false))
fb.ShowPopupMessage("Library Tree uses the following playlist by default:\n\nLibrary view\n\nIf you wish to use a different playlist, change the one used by Library Tree in properties.", "Library Tree");
window.SetProperty("SYSTEM.Playlist Checked", true);
var arr_contains = function (arr, item) {
var n = false;
for (var i = 0; i < arr.length; i++)
if (arr[i] == item) {
n = true;
break;
}
return n;
}
var arr_index = function (arr, item) {
var n = -1;
for (var i = 0; i < arr.length; i++)
if (arr[i] == item) {
n = i;
break;
}
return n;
}
var check_node = function (gr) {
if (sbar.draw_timer || !ui.node_style)
return;
symb_style = 0;
try {
symb.SetPartAndStateId(2, 1);
symb.SetPartAndStateId(2, 2);
symb.DrawThemeBackground(gr, -11, -11, 11, 11);
} catch (e) {
symb_style = 1;
}
}
var draw_node = function (gr, parent, x, y) {
switch (symb_style) {
case 1:
symb.SetPartAndStateId(2, parent ? 1 : 2);
symb.DrawThemeBackground(gr, x, y, 11, 11);
break;
case 0:
gr.FillSolidRect(x+0.5, y-2, 17, 17, RGBA(226, 226, 226 ,100));
gr.DrawRect(x+0.5, y-2, 16, 17, 2, RGB(163, 163, 163));
if (parent) {
gr.GdiDrawText("+" , sy_font, RGB(0, 0, 0), x, y-12 , 26, 26)
}
else
gr.GdiDrawText("-" , sy_font, RGB(0, 0, 0), x+4, y-12 , 26, 26)
break;
}
}
var num_sort = function (a, b) {
return a - b;
}
var plID = function (Playlist_Name) {
for (var i = 0; i < plman.PlaylistCount; i++)
if (plman.GetPlaylistName(i) == Playlist_Name)
return i;
plman.CreatePlaylist(plman.PlaylistCount, Playlist_Name);
return i;
}
var searchBranches = function (item, tr) {
var nn = "",
tf_l = fb.TitleFormat("[" + p.grp_split[tr] + "]");
if (tr < p.grp_split.length) {
nn = tf_l.EvalWithMetadb(p.list.Item(item));
if (!nn || nn == "#!##!#")
nn = "?";
return nn;
} else
return "#get_track#";
}
var sort = function (c, d) {
a = c.name.toUpperCase().replace(/^\?/, "");
b = d.name.toUpperCase().replace(/^\?/, "");
if (a < b)
return -1;
if (a > b)
return 1;
return 0;
}
var uniq = function (a) {
var j = 0,
len = a.length,
out = [],
seen = {};
for (var i = 0; i < len; i++) {
var item = a[i];
if (seen[item] !== 1) {
seen[item] = 1;
out[j++] = item;
}
}
return out.sort(num_sort);
}
this.branch_chg = function (br) {
var new_br = 0;
if (br.tr == 0) {
for (var i = 0; i < lib.root.length; i++) {
new_br += lib.root[i].child.length;
lib.root[i].child = [];
}
} else {
var par = this.tree[br.par];
for (var i = 0; i < par.child.length; i++) {
new_br += par.child[i].child.length;
par.child[i].child = [];
}
}
return new_br;
}
this.clear = function () {
for (var i = 0; i < this.tree.length; i++)
this.tree[i].sel = false;
}
this.clear_child = function (br) {
br.child = [];
this.buildTree(lib.root, 0, true, true);
}
this.deactivate_tooltip = function () {
tt_c = 0;
tt.Text = "";
tt.TrackActivate = false;
tt.Deactivate();
}
this.mbtn_dn = function (x, y) {
if (y < p.s_h)
return;
var ix = this.get_ix(x, y, true, false);
p.pos = ix;
if (ix < this.tree.length && ix >= 0)
if (this.check_ix(this.tree[ix], x, y, true)) {
this.load(this.tree[ix].item, true, true, false, false);
this.tree[ix].sel = true;
}
}
this.create_tooltip = function () {
if (!p.tooltip)
return;
if (tt)
tt.Dispose();
tt = window.CreateTooltip(ui.font.Name, ui.font.Size, ui.font.Style);
tt_h = ui.row_h - window.GetProperty(" Row Vertical Item Padding", 3);
tt.SetDelayTime(0, 500);
tt.Text = "";
}
this.activate_tooltip = function (ix, row) {
if (tt_c == 2) {
tt_id = ix;
return;
}
tt_c += 1;
tt.Activate();
tt.TrackActivate = true;
tt.Text = this.tree[ix].name + ((this.tree[ix].track && p.show_tracks) ? ("") : (" (" + this.tree[ix].item.length + ")"));
tt.TrackPosition(Math.round(ui.pad * this.tree[ix].tr + ui.margin) + (!ui.node_style && this.tree[ix].track ? 0 : ui.symbol_w) - ui.tt, row * ui.row_h + p.s_h - Math.floor((ui.row_h - tt_h) / 2));
timer.tooltip();
}
this.branch = function (br, base, node) {
if (!br)
return;
var br_l = br.item.length,
branch = false,
folderView = p.view_by == p.folder_view ? true : false,
i = 0,
k = 0,
isTrack = false,
l = base ? 0 : p.base ? br.tr : br.tr + 1,
n = "",
n_o = "#get_branch#",
nU = "",
tf = fb.TitleFormat(p.tf),
treatAsTrack = !folderView && l < p.grp_split.length - 1 ? true : false;
if (folderView)
base = false;
if (base)
node = false;
if (!folderView && l < p.grp_split.length)
branch = true;
if (!folderView && !branch && !p.show_tracks)
return;
for (k = 0; k < br_l; k++) {
var get_track = true,
pos = br.item[k];
if (folderView && l == lib.node[pos].length - 1 && !p.show_tracks)
get_track = false;
if (get_track) {
if (base) {
n = lib.allmusic[pos];
if (!n || n == "#!##!#")
n = "?";
}
if (!p.s_txt && !base) {
if (branch || folderView && l < lib.node[pos].length - 1) {
n = (!folderView ? lib.node[l][pos] : lib.node[pos][l]);
if (!n || n == "#!##!#")
n = "?";
} else
n = "#get_track#";
} else if (p.s_txt) {
if (folderView && l < lib.node[pos].length - 1) {
n = lib.node[pos][l];
if (!n || n == "#!##!#")
n = "?";
} else
n = searchBranches(pos, l);
}
if (br.track)
continue;
isTrack = p.show_tracks ? false : treatAsTrack || folderView && l < lib.node[pos].length - 2 ? false : true;
if (n == "#get_track#") {
n = !folderView ? tf.EvalWithMetadb(p.list.Item(pos)) : lib.node[pos][l];
isTrack = true;
}
nU = n.toUpperCase();
if (n_o != nU) {
n_o = nU;
br.child[i] = {
name : n,
sel : false,
child : [],
track : isTrack,
item : []
};
br.child[i].item.push(pos);
i++;
} else
br.child[i - 1].item.push(pos);
}
}
this.buildTree(lib.root, 0, node, true);
}
var getAllCombinations = function (n) {
var combinations = [],
divisors = [],
nn = [],
arraysToCombine = [];
nn = n.split("#!#");
for (var i = 0; i < nn.length; i++) {
nn[i] = nn[i].split("|");
if (nn[i] != "")
arraysToCombine.push(nn[i]);
}
for (var i = arraysToCombine.length - 1; i >= 0; i--)
divisors[i] = divisors[i + 1] ? divisors[i + 1] * arraysToCombine[i + 1].length : 1;
function getPermutation(n, arraysToCombine) {
var result = [],
curArray;
for (var i = 0; i < arraysToCombine.length; i++) {
curArray = arraysToCombine[i];
result.push(curArray[Math.floor(n / divisors[i]) % curArray.length]);
}
return result;
}
var numPerms = arraysToCombine[0].length;
for (var i = 1; i < arraysToCombine.length; i++)
numPerms *= arraysToCombine[i].length;
for (var i = 0; i < numPerms; i++)
combinations.push(getPermutation(i, arraysToCombine));
return combinations;
}
this.buildTree = function (br, tr, node, full) {
var br_l = br.length,
i = 0,
j = 0,
l = !p.base ? tr : tr - 1;
if (p.multi_process) {
var simple = l == p.grp_split.length ? true : false;
var h = -1,
multi = [],
multi_cond = [],
multi_obj = [],
multi_rem = [],
n = "",
n_o = "#condense#",
nm_arr = [],
nU = "";
if (!simple) {
for (i = 0; i < br_l; i++) {
if (br[i].name.indexOf("|") != -1) {
multi = getAllCombinations(br[i].name);
multi_rem.push(i);
for (var m = 0; m < multi.length; m++)
multi_obj.push({
name : multi[m].join(""),
item : br[i].item.slice()
});
}
}
i = multi_rem.length;
while (i--)
br.splice(multi_rem[i], 1);
br_l = br.length;
multi_obj.sort(sort);
i = 0;
while (i < multi_obj.length) {
n = multi_obj[i].name;
nU = n.toUpperCase();
if (n_o != nU) {
n_o = nU;
multi_cond[j] = {
name : n,
item : multi_obj[i].item.slice()
};
j++
} else
multi_cond[j - 1].item.push.apply(multi_cond[j - 1].item, multi_obj[i].item.slice());
i++
}
for (i = 0; i < br_l; i++) {
br[i].name = br[i].name.replace(/#!#/g, "");
nm_arr.push(br[i].name);
}
for (i = 0; i < multi_cond.length; i++) {
h = arr_index(nm_arr, multi_cond[i].name);
if (h != -1) {
br[h].item.push.apply(br[h].item, multi_cond[i].item.slice());
multi_cond.splice(i, 1);
}
}
for (i = 0; i < multi_cond.length; i++)
br.splice(i + 1, 0, {
name : multi_cond[i].name,
sel : false,
track : false,
child : [],
item : multi_cond[i].item.slice()
});
}
if (!node || node && !full)
br.sort(sort);
i = br.length;
while (i--) {
if (i != 0 && br[i].name.toUpperCase() == br[i - 1].name.toUpperCase()) {
br[i - 1].item.push.apply(br[i - 1].item, br[i].item.slice());
br.splice(i, 1);
}
}
}
var par = this.tree.length - 1;
if (tr == 0)
this.tree = [];
br_l = br.length;
for (i = 0; i < br_l; i++) {
j = this.tree.length;
this.tree[j] = br[i];
this.tree[j].top = !i ? true : false;
this.tree[j].bot = i == br_l - 1 ? true : false;
if (tr == (p.base ? 1 : 0) && i == br_l - 1)
this.line_l = j;
this.tree[j].tr = tr;
this.tree[j].par = par;
this.tree[j].ix = j;
if (p.single_br)
this.tree[j].track = true;
if (!p.base && p.view_by == p.folder_view && !p.show_tracks) {
var n_id = this.tree[j].item[0];
if (lib.node[n_id].length == 1 || lib.node[n_id].length == 2 && !p.show_tracks)
this.tree[j].track = true;
}
if (br[i].child.length > 0)
this.buildTree(br[i].child, tr + 1, node, p.base && tr == 0 ? true : false);
}
if (p.base && this.tree.length == 1)
this.line_l = 0;
sbar.set_rows(this.tree.length);
p.tree_paint();
}
this.load = function (list, type, add, send, sort) {
var i = 0,
np_item = -1,
pid = -1,
pln = plID(lib_playlist);
plman.ActivePlaylist = pln;
if (type) {
var items = p.items();
for (var i = 0; i < list.length; i++)
items.Add(p.list.Item(list[i]));
} else
var items = list.Clone();
if (fb.IsPlaying && !add && fb.GetNowPlaying()) {
for (i = 0; i < items.Count; i++)
if (fb.GetNowPlaying().Compare(items.Item(i))) {
np_item = i;
break;
}
if (np_item != -1) {
var np = plman.GetPlayingItemLocation();
if (np.IsValid && np.PlaylistIndex == pln)
pid = np.PlaylistItemIndex;
}
if (np_item != -1 && pid == -1 && items.Count < 5000) {
if (ui.dui)
plman.SetActivePlaylistContext();
for (i = 0; i < 20; i++) {
fb.RunMainMenuCommand("Edit/Undo");
var np = plman.GetPlayingItemLocation();
if (np.IsValid && lib_playlist == plman.GetPlaylistName(np.PlaylistIndex)) {
pid = np.PlaylistItemIndex;
if (pid != -1)
break;
}
}
}
if (np_item != -1 && pid != -1) {
plman.SetPlaylistSelectionSingle(pln, pid, true);
plman.RemovePlaylistSelection(pln, true);
var it = items.Clone();
items.RemoveRange(np_item, items.Count);
it.RemoveRange(0, np_item + 1);
plman.UndoBackup(pln);
plman.InsertPlaylistItems(pln, 0, items);
plman.InsertPlaylistItems(pln, plman.PlaylistItemCount(pln), it);
} else {
plman.UndoBackup(pln);
plman.ClearPlaylist(pln);
plman.InsertPlaylistItems(pln, 0, items);
}
} else if (!add) {
plman.UndoBackup(pln);
plman.ClearPlaylist(pln);
plman.InsertPlaylistItems(pln, 0, items);
} else {
if (items.Count < 5000 && plman.PlaylistItemCount(pln) < 5000 && sort) {
plman.UndoBackup(pln);
plman.InsertPlaylistItems(pln, plman.PlaylistItemCount(pln), items);
if (ui.dui)
plman.SetActivePlaylistContext();
fb.RunMainMenuCommand("Edit/Remove Duplicates");
plman.SortByFormat(pln, p.view_by != p.folder_view ? p.grp_sort : lib.pth_sort);
} else {
plman.UndoBackup(pln);
plman.InsertPlaylistItems(pln, plman.PlaylistItemCount(pln), items);
}
}
if (autoplay && send) {
var c = (plman.PlaybackOrder == 3 || plman.PlaybackOrder == 4) ? Math.ceil(plman.PlaylistItemCount(pln) * Math.random() - 1) : 0;
plman.ExecutePlaylistDefaultAction(pln, c);
}
}
this.draw = function (gr) {
if (!pop.tree.length)
return gr.GdiDrawText(lib.none, ui.font, ui.textcol, ui.margin, p.s_h, ui.w - p.r_mg, ui.row_h * (lib.none.length > 14 ? 5 : 1), 0x00000004 | 0x00000400);
var item_x = 0,
item_y = 0,
item_w = 0,
ln_x = ui.margin + 5 + (p.base ? ui.pad : 0),
nm = "",
s = Math.round(sbar.delta / ui.row_h + 0.4),
e = s + p.rows;
e = this.tree.length < e ? this.tree.length : e,
sel_x = 0,
sel_w = 0,
y1 = p.s_h - sbar.delta + p.node_y;
check_node(gr);
for (var i = s; i < e; i++) {
item_y = ui.row_h * i + p.s_h - sbar.delta;
if (ui.alternate) {
if (i % 2 == 0)
gr.FillSolidRect(0, item_y + 1, ui.w, ui.row_h - 2, ui.b1);
else
gr.FillSolidRect(0, item_y, ui.w, ui.row_h, ui.b2);
}
if (ui.node_style && ui.linecol) {
var end_br = [],
j = this.tree[i].tr,
l_x = 0,
l_y = item_y + ui.row_h / 2;
if (p.base)
j -= 1;
var h1 = this.tree[i].top ? ui.row_h / 4 : ui.row_h;
if (this.tree[i].tr != 0) {
var par = this.tree[i].par,
pr_pr = [];
for (var m = 1; m < j + 1; m++) {
if (m == 1)
pr_pr[m] = par;
else
pr_pr[m] = this.tree[pr_pr[m - 1]].par
if (this.tree[pr_pr[m]].bot)
end_br[m] = true;
else
end_br[m] = false;
}
}
for (var k = 0; k < j + 1; k++) {
if (this.tree[i].top && !k && !this.tree[i].track)
h1 = ui.row_h / 2;
else
h1 = ui.row_h;
if (!k && !j && this.tree[i].top && !this.tree[i].track)
h1 = -ui.row_h / 4;
if (this.tree[i].track && !k && this.tree[i].top)
h1 = ui.row_h / 2
if (!end_br[k] && k == 1)
h1 = ui.row_h;
if (end_br[k])
h1 = 0;
var h3 = l_y - h1;
if (h3 < p.s_h)
h1 = p.s_h - h3;
l_x = (Math.round(ui.pad * this.tree[i].tr + ui.margin) + 5) - ui.pad * k;
var h2 = ((!this.tree[i].bot && !k && this.tree[i].track && i == Math.ceil(e - 1)) ||
(!this.tree[i].bot && !end_br[k] && !this.tree[i].track && i == Math.ceil(e - 1)) ||
(k && !end_br[k] && i == e - 1)) ? ui.row_h / 2 : 0;
if (k != j)
gr.FillSolidRect(l_x+2.5, l_y+3 - h1, 1, h1 + h2, ui.linecol);// ___Y_LINE___
}
}
}
if (ui.node_style && ui.linecol) {
var top = p.base ? p.s_h + ui.row_h * 3 / 4 : p.s_h;
var ln_y = sbar.scroll == 0 ? top + p.node_y : p.s_h;
var ln_h = Math.min(this.line_l * ui.row_h - sbar.delta + (sbar.scroll == 0 ? (p.base ? -ui.row_h * 3 / 4 : 0) : p.node_y), ui.row_h * Math.ceil(p.rows) - (sbar.scroll == 0 ? (p.node_y + (p.base ? ui.row_h * 3 / 4 : 0)) : 0));
if (e == this.tree.length)
ln_h += ui.row_h / 4;
if (this.line_l)
{}
gr.FillSolidRect(ln_x+3, ln_y, 1, ln_h, ui.linecol);// ___X_LINE___
}
for (i = s; i < e; i++) {
if (this.tree[i].sel && ui.backcolsel != 0) {
item_y = ui.row_h * i + p.s_h - sbar.delta;
nm = this.tree[i].name + (show_counts && (!this.tree[i].track || !p.show_tracks) ? " (" + this.tree[i].item.length + ")" : "");
item_w = gr.CalcTextWidth(nm, ui.font) + ui.row_h * 0.2;
item_x = Math.round(ui.pad * this.tree[i].tr + ui.margin);
if (ui.node_style || !this.tree[i].track)
item_x = item_x + ui.symbol_w;
sel_x = item_x - ui.sel;
sel_w = Math.min(item_w, ui.w - sel_x - 1 - p.r_mg)
{}
gr.FillSolidRect(sel_x, item_y, sel_w, ui.row_h, ui.backcolsel);
}
}
for (i = s; i < e; i++) {
item_y = ui.row_h * i + p.s_h - sbar.delta;
nm = this.tree[i].name + (show_counts && (!this.tree[i].track || !p.show_tracks) ? " (" + this.tree[i].item.length + ")" : "");
item_w = gr.CalcTextWidth(nm, ui.font) + ui.row_h * 0.2;
this.tree[i].w = item_w;
item_x = Math.round(ui.pad * this.tree[i].tr + ui.margin);
if (ui.node_style) {
var y2 = ui.row_h * i + y1 + 5;
if (!this.tree[i].track) {
if (ui.linecol)
gr.FillSolidRect(item_x + 25, y2+1, 4, 1, ui.linecol); // X_LINE
draw_node(gr, this.tree[i].child.length < 1, item_x, item_y + p.node_y);
} else if (ui.linecol)
gr.FillSolidRect(item_x + 9, y2, 7, 1, ui.linecol);// X_LINE
} else if (!this.tree[i].track)
gr.GdiDrawText(this.tree[i].child.length < 1 ? ui.expand : ui.collapse, ui.font, ui.textsymbcol, item_x, item_y, ui.w - item_x - p.r_mg, ui.row_h, p.lc);
if (ui.node_style || !this.tree[i].track)
item_x = item_x + ui.symbol_w;
if (m_i == i) {
sel_x = item_x - ui.sel;
sel_w = Math.min(item_w, ui.w - sel_x - 1 - p.r_mg);
gr.FillSolidRect(sel_x, item_y, sel_w, ui.row_h, ui.backcol_h);
gr.DrawRect(sel_x, item_y, sel_w, ui.row_h, 1, ui.framecol);
}
var txt_c = this.tree[i].sel ? ui.textselcol : m_i == i ? ui.textcol_h : ui.textcol;
gr.GdiDrawText(nm, ui.font, txt_c, item_x, item_y, ui.w - item_x - p.r_mg, ui.row_h, p.lc);
}
}
this.lbtn_dn = function (x, y) {
if (y < p.s_h)
return;
var ix = this.get_ix(x, y, true, false);
p.pos = ix;
if (ix < this.tree.length && ix >= 0) {
var item = this.tree[ix],
mode = x > Math.round(ui.pad * item.tr + ui.margin) && x < Math.round(ui.pad * item.tr) + ui.symbol_w + ui.margin ? 0 : this.check_ix(item, x, y, false) ? 1 : 2,
xp = item.child.length > 0 ? 0 : 1;
switch (mode) {
case 0:
switch (xp) {
case 0:
this.clear_child(item);
break;
case 1:
if (auto)
this.branch_chg(item, false, true);
var row = Math.round((y - p.s_h - ui.row_h * 0.5) / ui.row_h);
this.branch(item, !p.base || ix ? false : true, true);
if (auto)
ix = item.ix
if (row + 1 + item.child.length > sbar.rows_drawn) {
if (item.child.length > (sbar.rows_drawn - 2))
sbar.check_scroll(ix * ui.row_h);
else
sbar.check_scroll(Math.min(ix * ui.row_h, (ix + 1 - sbar.rows_drawn + item.child.length) * ui.row_h));
}
break;
}
if (sbar.scroll > ix * ui.row_h)
sbar.check_scroll(ix * ui.row_h);
break;
case 1:
if (!v.k(1))
this.clear();
if (!item.sel)
this.get_selection(ix, item.sel);
else if (v.k(1))
this.get_selection(ix, item.sel);
p.tree_paint();
break;
}
if (this.check_ix(item, x, y, false)) { // on mouse lbn down sel
/*if (v.k(1))
this.load(item.item, true, true, false, true);
else if (v.k(0))
this.load(this.sel_items, true, false, false, true);
else
this.load(item.item, true, false, false, true);*/ // send to pl on left mouse btn
}
} else
this.get_selection(-1);
}
this.lbtn_dblclk = function (x, y) {
if (y < p.s_h)
return;
var ix = this.get_ix(x, y, true, false);
if (ix >= this.tree.length || ix < 0)
return;
var item = this.tree[ix];
if (!this.check_ix(item, x, y, false))
return;
var mp = 1;
if (!dbl_action) {
if (item.child.length)
mp = 0;
switch (mp) {
case 0:
this.clear_child(item);
break;
case 1:
if (auto)
this.branch_chg(item, false, true);
var row = Math.round((y - p.s_h - ui.row_h * 0.5) / ui.row_h);
this.branch(item, !p.base || ix ? false : true, true);
if (auto)
ix = item.ix
if (row + 1 + item.child.length > sbar.rows_drawn) {
if (item.child.length > (sbar.rows_drawn - 2))
sbar.check_scroll(ix * ui.row_h);
else
sbar.check_scroll(Math.min(ix * ui.row_h, (ix + 1 - sbar.rows_drawn + item.child.length) * ui.row_h));
}
break;
}
if (sbar.scroll > ix * ui.row_h)
sbar.check_scroll(ix * ui.row_h);
}
if (dbl_action || !dbl_action && mp == 1 && !item.child.length) {
this.load(item.item, true, false, false, true);/// add??? //send to pl on mouse double clk
var pln = plID(lib_playlist);
plman.ActivePlaylist = pln;
var c = (plman.PlaybackOrder == 3 || plman.PlaybackOrder == 4) ? Math.ceil(plman.PlaylistItemCount(pln) * Math.random() - 1) : 0;
plman.ExecutePlaylistDefaultAction(pln, c);
}
}
this.get_selection = function (idx, state, add, bypass) {
var sel_type = idx == -1 && !add ? 0 : v.k(0) && last_sel > -1 && !bypass ? 1 : v.k(1) && !bypass ? 2 : !state ? 3 : 0;
switch (sel_type) {
case 0:
this.clear();
this.sel_items = [];
break;
case 1:
this.sel_items = [];
var direction = (idx > last_sel) ? 1 : -1;
if (!v.k(1))
this.clear();
for (var i = last_sel; ; i += direction) {
this.tree[i].sel = true;
this.sel_items.push.apply(this.sel_items, this.tree[i].item);
if (i == idx)
break;
}
this.sel_items = uniq(this.sel_items);
p.tree_paint();
break;
case 2:
this.tree[idx].sel = !this.tree[idx].sel;
this.tree[idx].sel && this.sel_items.push.apply(this.sel_items, this.tree[idx].item);
this.sel_items = uniq(this.sel_items);
last_sel = idx;
break;
case 3:
this.sel_items = [];
if (!add)
this.clear();
if (!add)
this.tree[idx].sel = true;
this.sel_items.push.apply(this.sel_items, this.tree[idx].item);
this.sel_items = uniq(this.sel_items);
last_sel = idx;
break;
}
}
this.move = function (x, y) {
var ix = -1;
m_i = -1;
get_pos = -1;
ix = this.get_ix(x, y, false, false);
if (ix != -1) {
m_i = ix;
get_pos = ix;
if (p.tooltip && tt_id != ix && Math.round(ui.pad * this.tree[ix].tr + ui.margin) + (!ui.node_style && this.tree[ix].track ? 0 : ui.symbol_w) + this.tree[ix].w - ui.row_h * 0.2 > ui.w - p.r_mg) {
var row = Math.round((y - p.s_h - ui.row_h * 0.5) / ui.row_h);
this.activate_tooltip(ix, row);
}
} else
get_pos = this.get_ix(x, y, true, false);
if (ix == ix_o)
return;
tt_id = -1;
if (p.tooltip && tt.Text)
this.deactivate_tooltip();
if (!sbar.draw_timer)
p.tree_paint();
ix_o = ix;
}
this.get_ix = function (x, y, simple, type) {
var ix;
if (y > p.s_h)
ix = Math.round((y + (simple ? sbar.scroll : sbar.delta) - p.s_h - ui.row_h * 0.5) / ui.row_h);
else
ix = -1;
if (simple)
return ix;
if (this.tree.length > ix && ix >= 0 && x < ui.w - 10 && y > p.s_h && this.check_ix(this.tree[ix], x, y, type))
return ix;
else
return -1;
}
this.check_ix = function (br, x, y, type) {
if (!br)
return false;
return type ? (x > Math.round(ui.pad * br.tr + ui.margin) && x < Math.round(ui.pad * br.tr + ui.margin) + br.w + ui.symbol_w)
: (x > Math.round(ui.pad * br.tr + ui.margin) + (!ui.node_style && br.track ? 0 : ui.symbol_w)) && x < Math.min(Math.round(ui.pad * br.tr + ui.margin) + (!ui.node_style && br.track ? 0 : ui.symbol_w) + br.w, ui.w - Math.max(ui.scr_w, ui.margin));
}
this.on_key_down = function (vkey) {
if (p.s_search)
return;
switch (vkey) {
case v.left:
if (!(p.pos >= 0) && get_pos != -1)
p.pos = get_pos
else
p.pos = p.pos + this.tree.length % this.tree.length;
p.pos = Math.max(Math.min(p.pos, this.tree.length - 1), 0);
get_pos = -1;
m_i = -1;
if (this.tree[p.pos].child.length > 0) {
var item = this.tree[p.pos];
this.clear_child(item);
this.get_selection(item.ix);
m_i = p.pos = item.ix;
} else {
try {
var item = this.tree[this.tree[p.pos].par];
this.clear_child(item);
this.get_selection(item.ix);
m_i = p.pos = item.ix;
} catch (e) {
return;
};
}
p.tree_paint();
this.load(this.sel_items, true, false, false, true);
sbar.set_rows(this.tree.length);
if (sbar.scroll > p.pos * ui.row_h)
sbar.check_scroll(p.pos * ui.row_h);
break;
case v.right:
if (!(p.pos >= 0) && get_pos != -1)
p.pos = get_pos
else
p.pos = p.pos + this.tree.length % this.tree.length;
p.pos = Math.max(Math.min(p.pos, this.tree.length - 1), 0);
get_pos = -1;
m_i = -1;
var item = this.tree[p.pos];
if (auto)
this.branch_chg(item, false, true);
this.branch(item, p.base && p.pos == 0 ? true : false, true);
this.get_selection(item.ix);
p.tree_paint();
m_i = p.pos = item.ix;
this.load(this.sel_items, true, false, false, true);
sbar.set_rows(this.tree.length);
var row = (p.pos * ui.row_h - sbar.scroll) / ui.row_h;
if (row + item.child.length > sbar.rows_drawn) {
if (item.child.length > (sbar.rows_drawn - 2))
sbar.check_scroll(p.pos * ui.row_h);
else
sbar.check_scroll(Math.min(p.pos * ui.row_h, (p.pos + 1 - sbar.rows_drawn + item.child.length) * ui.row_h));
}
break;
case v.pgUp:
if (this.tree.length == 0)
break;
p.pos = Math.round(sbar.scroll / ui.row_h + 0.4) - Math.floor(p.rows);
p.pos = Math.max(!p.base ? 0 : 1, p.pos);
sbar.wheel(1);
this.get_selection(this.tree[p.pos].ix);
p.tree_paint();
this.load(this.sel_items, true, false, false, true);
break;
case v.pgDn:
if (this.tree.length == 0)
break;
p.pos = Math.round(sbar.scroll / ui.row_h + 0.4);
p.pos = p.pos + Math.floor(p.rows) * 2 - 1;
p.pos = this.tree.length < p.pos ? this.tree.length - 1 : p.pos;
sbar.wheel(-1);
this.get_selection(this.tree[p.pos].ix);
p.tree_paint();
this.load(this.sel_items, true, false, false, true);
break;
case v.home:
if (this.tree.length == 0)
break;
p.pos = !p.base ? 0 : 1;
sbar.check_scroll(0);
this.get_selection(this.tree[p.pos].ix);
p.tree_paint();
this.load(this.sel_items, true, false, false, true);
break;
case v.end:
if (this.tree.length == 0)
break;
p.pos = this.tree.length - 1;
sbar.check_scroll((this.tree.length) * ui.row_h);
this.get_selection(this.tree[p.pos].ix);
p.tree_paint();
this.load(this.sel_items, true, false, false, true);
break;
case v.enter:
if (!this.sel_items.length)
return;
//this.load = function (list, type, add, send, sort)
/*this.load(this.sel_items, true, false, false, true); /// --->send to pl on enter down
var pln = plID(lib_playlist);
plman.ActivePlaylist = pln;
var c = (plman.PlaybackOrder == 3 || plman.PlaybackOrder == 4) ? Math.ceil(plman.PlaylistItemCount(pln) * Math.random() - 1) : 0;
plman.ExecutePlaylistDefaultAction(pln, c);*/
//list, type, add, send, sort
this.load(this.sel_items, true, true, false, false); /// --->add to pl on enter down
var pln = plID(lib_playlist);
plman.ActivePlaylist = pln;
//var c = (plman.PlaybackOrder == 3 || plman.PlaybackOrder == 4) ? Math.ceil(plman.PlaylistItemCount(pln) * Math.random() - 1) : 0;
//plman.ExecutePlaylistDefaultAction(pln, c);
//p.update;
fb.RunMainMenuCommand("Edit/Remove Duplicates");
break;
case v.dn:
case v.up:
if (this.tree.length == 0)
break;
if ((p.pos == 0 && get_pos == -1 && vkey == v.up) || (p.pos == this.tree.length - 1 && vkey == v.dn)) {
this.get_selection(-1);
break;
}
if (get_pos != -1)
p.pos = get_pos;
else
p.pos = p.pos + this.tree.length % this.tree.length;
get_pos = -1;
m_i = -1;
if (vkey == v.dn)
p.pos++;
if (vkey == v.up)
p.pos--;
p.pos = Math.max(Math.min(p.pos, this.tree.length - 1), 0);
var row = (p.pos * ui.row_h - sbar.scroll) / ui.row_h;
if (sbar.rows_drawn - row < 3)
sbar.check_scroll((p.pos + 3) * ui.row_h - sbar.rows_drawn * ui.row_h);
else if (row < 2 && vkey == v.up)
sbar.check_scroll((p.pos - 1) * ui.row_h);
m_i = p.pos;
this.get_selection(p.pos);
p.tree_paint();
this.load(this.sel_items, true, false, false, true);
break;
}
}
}
var pop = new populate();
function on_size() {
ui.w = window.Width;
ui.h = window.Height;
ww = window.Width;
wh = window.Height;
if (!ui.w || !ui.h)
return;
// set wallpaper
if (fb.IsPlaying) {
g_wallpaperImg = setWallpaperImg(ppt.wallpaperpath, fb.GetNowPlaying());
};
else {
//g_wallpaperImg = null;
g_wallpaperImg = setWallpaperImg(ppt.wallpaperpath, fb.GetNowPlaying());
};
ui.get_font();
p.on_size();
pop.create_tooltip();
if (p.s_show || ui.scrollbar_show)
but.refresh(true);
jS.on_size();
}
function searchLibrary() {
var cx = 0,
doc = new ActiveXObject('htmlfile'),
e = 0,
i = 0,
lbtn_dn = false,
lg = [],
log = [],
offset = 0,
s = 0,
shift = false,
shift_x = 0,
txt_w = 0;
var calc_text = function () {
var im = gdi.CreateImage(1, 1),
g = im.GetGraphics();
txt_w = g.CalcTextWidth(p.s_txt.substr(offset), ui.font);
im.ReleaseGraphics(g);
im.Dispose();
}
var drawcursor = function (gr) {
if (p.s_search && p.s_cursor && s == e && cx >= offset) {
var x1 = p.s_x + get_cursor_x(cx),
x2 = x1;
gr.DrawLine(x1, p.s_sp * 0.1, x2, p.s_sp * 0.85, 1, ui.textcol);
}
}
var drawsel = function (gr) {
if (s == e)
return;
var clamp = p.s_x + p.s_w2;
gr.DrawLine(Math.min(p.s_x + get_cursor_x(s), clamp), p.s_sp / 2, Math.min(p.s_x + get_cursor_x(e), clamp), p.s_sp / 2, ui.row_h - 3, ui.ibeamcol2);
}
var get_cursor_pos = function (x) {
var im = gdi.CreateImage(1, 1),
g = im.GetGraphics(),
nx = x - p.s_x,
pos = 0;
for (i = offset; i < p.s_txt.length; i++) {
pos += g.CalcTextWidth(p.s_txt.substr(i, 1), ui.font);
if (pos >= nx + 3)
break;
}
im.ReleaseGraphics(g);
im.Dispose();
return i;
}
var get_cursor_x = function (pos) {
var im = gdi.CreateImage(1, 1),
g = im.GetGraphics(),
x = 0;
if (pos >= offset)
x = g.CalcTextWidth(p.s_txt.substr(offset, pos - offset), ui.font);
im.ReleaseGraphics(g);
im.Dispose();
return x;
}
var get_offset = function (gr) {
var t = gr.CalcTextWidth(p.s_txt.substr(offset, cx - offset), ui.font);
while (t >= p.s_w2) {
offset++;
t = gr.CalcTextWidth(p.s_txt.substr(offset, cx - offset), ui.font);
}
}
var record = function () {
lg.push(p.s_txt);
log = [];
if (lg.length > 30)
lg.shift();
}
this.clear = function () {
lib.time.Reset();
offset = s = e = cx = 0;
p.s_cursor = false;
p.s_search = false;
p.s_txt = "";
p.search_paint();
timer.reset(timer.search_cursor, 4);
lib.rootNodes();
}
this.on_key_up = function (vkey) {
if (!p.s_search)
return;
if (vkey == v.shift) {
shift = false;
shift_x = cx;
}
}
this.lbtn_up = function (x, y) {
if (s != e)
timer.reset(timer.search_cursor, 4);
lbtn_dn = false;
}
this.move = function (x, y) {
if (y > p.s_h || !lbtn_dn)
return;
var t = get_cursor_pos(x),
t_x = get_cursor_x(t);
calc_text();
if (t < s) {
if (t < e) {
if (t_x < p.s_x)
if (offset > 0)
offset--;
} else if (t > e) {
if (t_x + p.s_x > p.s_x + p.s_w2) {
var l = (txt_w > p.s_w2) ? txt_w - p.s_w2 : 0;
if (l > 0)
offset++;
}
}
e = t;
} else if (t > s) {
if (t_x + p.s_x > p.s_x + p.s_w2) {
var l = (txt_w > p.s_w2) ? txt_w - p.s_w2 : 0;
if (l > 0)
offset++;
}
e = t;
}
cx = t;
p.search_paint();
}
this.rbtn_up = function (x, y) {
men.search_menu(x, y, s, e, doc.parentWindow.clipboardData.getData('text') ? true : false)
}
this.lbtn_dn = function (x, y) {
p.search_paint();
lbtn_dn = p.s_search = (y < p.s_h && x > ui.margin + ui.row_h * 0.6 && x < p.s_x + p.s_w2);
if (!lbtn_dn) {
offset = s = e = cx = 0;
timer.reset(timer.search_cursor, 4);
return;
} else {
if (shift) {
s = cx;
e = cx = get_cursor_pos(x);
} else {
cx = get_cursor_pos(x);
s = e = cx;
}
timer.reset(timer.search_cursor, 4);
p.s_cursor = true;
timer.search_cursor = window.SetInterval(function () {
p.s_cursor = !p.s_cursor;
p.search_paint();
}, 530);
}
p.search_paint();
}
this.on_char = function (code, force) {
var text = String.fromCharCode(code);
if (force)
p.s_search = true;
if (!p.s_search)
return;
p.s_cursor = false;
p.pos = -1;
switch (code) {
case v.enter:
if (p.s_txt.length < 3)
break;
var items = fb.GetQueryItems(lib.list, p.s_txt);
pop.load(items, false, false, false, true);
items.Dispose();
break;
case v.redo:
lg.push(p.s_txt);
if (lg.length > 30)
lg.shift();
if (log.length > 0) {
p.s_txt = log.pop() + "";
cx++
}
break;
case v.undo:
log.push(p.s_txt);
if (log.length > 30)
lg.shift();
if (lg.length > 0)
p.s_txt = lg.pop() + "";
break;
case v.selAll:
s = 0;
e = p.s_txt.length;
break;
case v.copy:
if (s != e)
doc.parentWindow.clipboardData.setData('text', p.s_txt.substring(s, e));
break;
case v.cut:
if (s != e)
doc.parentWindow.clipboardData.setData('text', p.s_txt.substring(s, e));
case v.back:
record();
if (s == e) {
if (cx > 0) {
p.s_txt = p.s_txt.substr(0, cx - 1) + p.s_txt.substr(cx, p.s_txt.length - cx);
if (offset > 0)
offset--;
cx--;
}
} else {
if (e - s == p.s_txt.length) {
p.s_txt = "";
cx = 0;
} else {
if (s > 0) {
var st = s,
en = e;
s = Math.min(st, en);
e = Math.max(st, en);
p.s_txt = p.s_txt.substring(0, s) + p.s_txt.substring(e, p.s_txt.length);
cx = s;
} else {
p.s_txt = p.s_txt.substring(e, p.s_txt.length);
cx = s;
}
}
}
calc_text();
offset = offset >= e - s ? offset - e + s : 0;
s = cx;
e = s;
break;
case v.del:
record();
if (s == e) {
if (cx < p.s_txt.length) {
p.s_txt = p.s_txt.substr(0, cx) + p.s_txt.substr(cx + 1, p.s_txt.length - cx - 1);
}
} else {
if (e - s == p.s_txt.length) {
p.s_txt = "";
cx = 0;
} else {
if (s > 0) {
var st = s,
en = e;
s = Math.min(st, en);
e = Math.max(st, en);
p.s_txt = p.s_txt.substring(0, s) + p.s_txt.substring(e, p.s_txt.length);
cx = s;
} else {
p.s_txt = p.s_txt.substring(e, p.s_txt.length);
cx = s;
}
}
}
calc_text();
offset = offset >= e - s ? offset - e + s : 0;
s = cx;
e = s;
break;
case v.paste:
text = doc.parentWindow.clipboardData.getData('text');
default:
record();
if (s == e) {
p.s_txt = p.s_txt.substring(0, cx) + text + p.s_txt.substring(cx);
cx += text.length;
e = s = cx;
} else {
p.s_txt = p.s_txt.substring(0, s) + text + p.s_txt.substring(e);
cx = s + text.length;
e = s;
}
break;
}
if (!timer.search_cursor)
timer.search_cursor = window.SetInterval(function () {
p.s_cursor = !p.s_cursor;
p.search_paint();
}, 530);
p.search_paint();
lib.upd_search = true;
timer.reset(timer.search, 3);
timer.search = window.SetTimeout(function () {
lib.time.Reset();
lib.rootNodes();
timer.reset(timer.search, 3);
}, 160);
}
this.on_key_down = function (vkey) {
if (!p.s_search)
return;
switch (vkey) {
case v.left:
case v.right:
if (vkey == v.left) {
if (offset > 0) {
if (cx <= offset) {
offset--;
cx--;
} else
cx--;
} else if (cx > 0)
cx--;
s = e = cx
}
if (vkey == v.right && cx < p.s_txt.length)
cx++;
s = e = cx;
if (shift) {
s = Math.min(cx, shift_x);
e = Math.max(cx, shift_x);
}
p.s_cursor = true;
timer.reset(timer.search_cursor, 4);
timer.search_cursor = window.SetInterval(function () {
p.s_cursor = !p.s_cursor;
p.search_paint();
}, 530);
break;
case v.home:
case v.end:
if (vkey == v.home)
offset = s = e = cx = 0;
else
s = e = cx = p.s_txt.length;
p.s_cursor = true;
timer.reset(timer.search_cursor, 4);
timer.search_cursor = window.SetInterval(function () {
p.s_cursor = !p.s_cursor;
p.search_paint();
}, 530);
break;
case v.shift:
shift = true;
shift_x = cx;
break;
case v.del:
this.on_char(v.del);
break;
}
p.search_paint();
}
this.draw = function (gr) {
s = Math.min(Math.max(s, 0), p.s_txt.length);
e = Math.min(Math.max(e, 0), p.s_txt.length);
cx = Math.min(Math.max(cx, 0), p.s_txt.length);
if (ui.fill)
gr.FillSolidRect(0, 1, ui.w, ui.row_h - 4, 0x60000000);
if (ui.pen == 1)
gr.DrawLine(ui.margin, p.s_sp, p.s_w1, p.s_sp, 1, ui.s_linecol);
if (ui.pen == 2)
gr.DrawRoundRect(0, 2, ui.w - 1, ui.row_h - 4, 4, 4, 1, ui.pen_c);
if (p.s_txt) {
e = (e < p.s_txt.length) ? e : p.s_txt.length;
drawsel(gr);
get_offset(gr);
gr.GdiDrawText(p.s_txt.substr(offset), ui.font, ui.searchcol, p.s_x, 0, p.s_w2, p.s_sp, p.l);
} else
gr.GdiDrawText("Search", ui.s_font, ui.txt_box, p.s_x, 0, p.s_w2, p.s_sp, p.l);
drawcursor(gr);
if (p.s_show > 1) {
var l_x = p.f_x1 - 9,
l_h = Math.round(p.s_sp / 2);
gr.gdiDrawText(p.filt[p.filter_by].name, p.f_font, ui.txt_box, p.f_x1, 0, p.f_w[p.filter_by], p.s_sp, p.cc);
gr.FillGradRect(l_x, 0, 1, l_h, 90, RGBA(0, 0, 0, 0), ui.s_linecol);
gr.FillGradRect(l_x, l_h, 1, l_h, 90, ui.s_linecol, RGBA(0, 0, 0, 0));
}
}
}
if (p.s_show)
var sL = new searchLibrary();
var j_Search = function () {
var j_x = 5,
j_h = 30,
j_y = 5,
jSearch = "",
jump_search = true,
rs1 = 5,
rs2 = 4;
this.on_size = function () {
j_x = Math.round(ui.w / 2),
j_h = Math.round(ui.row_h * 1.5),
j_y = Math.round((ui.h - j_h) / 2);
rs1 = Math.min(5, j_h / 2);
rs2 = Math.min(4, (j_h - 2) / 2);
}
this.on_char = function (code) {
var text = String.fromCharCode(code);
if (!p.s_search) {
var found = false,
i = 0,
pos = -1;
switch (code) {
case v.back:
jSearch = jSearch.substr(0, jSearch.length - 1);
break;
case v.enter:
jSearch = "";
return;
default:
jSearch += text;
break;
}
var l = pop.tree.length;
for (i = 0; i < l; i++)
pop.tree[i].sel = false;
if (!jSearch)
return;
pop.sel_items = [];
jump_search = true;
window.RepaintRect(0, j_y, ui.w, j_h + 1);
timer.reset(timer.jsearch, 2);
timer.jsearch = window.SetTimeout(function () {
for (i = 0; i < l; i++) {
if (pop.tree[i].name.substring(0, jSearch.length).toLowerCase() == jSearch.toLowerCase()) {
found = true;
pos = i;
pop.tree[i].sel = true;
pop.sel_items.push.apply(pop.sel_items, pop.tree[i].item);
break;
}
}
if (!found)
jump_search = false;
p.tree_paint();
sbar.check_scroll((pos - 5) * ui.row_h);
timer.reset(timer.jsearch, 2);
}, 500);
timer.reset(timer.clear_jsearch, 0);
timer.clear_jsearch = window.SetTimeout(function () {
if (found)
pop.load(pop.sel_items, true, false, false, true);
jSearch = "";
window.RepaintRect(0, j_y, ui.w, j_h + 1);
timer.reset(timer.clear_jsearch, 0);
}, 5000);//1200 jump search timer
}
}
this.draw = function (gr) {
if (jSearch) {
gr.SetSmoothingMode(4);
var j_w = gr.CalcTextWidth(jSearch, ui.j_font) + 25;
gr.FillRoundRect(j_x - j_w / 2, j_y, j_w, j_h, rs1, rs1, 0x96000000);
gr.DrawRoundRect(j_x - j_w / 2, j_y, j_w, j_h, rs1, rs1, 1, 0x64000000);
gr.DrawRoundRect(j_x - j_w / 2 + 1, j_y + 1, j_w - 2, j_h - 2, rs2, rs2, 1, 0x28ffffff);
gr.GdiDrawText(jSearch, ui.j_font, RGB(0, 0, 0), j_x - j_w / 2 + 1, j_y + 1, j_w, j_h, p.cc);
gr.GdiDrawText(jSearch, ui.j_font, jump_search ? 0xfffafafa : 0xffff4646, j_x - j_w / 2, j_y, j_w, j_h, p.cc);
}
}
}
var jS = new j_Search();
function on_paint(gr) {
if (ui.bg)
gr.FillSolidRect(0, 0, ui.w, ui.h, ui.backcol);
if (fb.IsPlaying && g_wallpaperImg && ppt.showwallpaper) {
gr.GdiDrawBitmap(g_wallpaperImg, 0, 0, ww, wh, 0, 0, g_wallpaperImg.Width, g_wallpaperImg.Height);
gr.FillSolidRect(0, 0, ww, wh, g_color_normal_bg & RGBA(255, 255, 255, ppt.wallpaperalpha));
};
else {
gr.FillSolidRect(0, 0, ww, wh, g_color_normal_bg);
if (g_wallpaperImg && ppt.showwallpaper) {
gr.GdiDrawBitmap(g_wallpaperImg, 0, 0, ww, wh, 0, 0, g_wallpaperImg.Width, g_wallpaperImg.Height);
gr.FillSolidRect(0, 0, ww, wh, g_color_normal_bg & RGBA(255, 255, 255, ppt.wallpaperalpha));
};
else {
gr.FillSolidRect(0, 0, ww, wh, g_color_normal_bg);
};
};
if (lib.upd) {
lib.refresh();
lib.upd = false;
return;
}
if (p.s_show)
sL.draw(gr);
pop.draw(gr);
if (p.s_show || ui.scrollbar_show)
but.draw(gr);
if (ui.scrollbar_show)
sbar.draw(gr);
jS.draw(gr);
}
function button_manager() {
var b_x,
b_h,
but_tt = window.CreateTooltip("Segoe UI", 15, 0),
bx,
by,
bh,
byDn,
byUp,
fw,
i,
qx,
qy,
qh,
s_img = [],
scr = [];
this.btns = [];
this.b = null;
var browser = function (c) {
if (!run(c))
fb.ShowPopupMessage("Unable to launch your default browser.", "Library Tree");
}
var run = function (c) {
try {
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run(c);
return true;
} catch (e) {
return false;
}
}
var tooltip = function (n) {
if (but_tt.text == n)
return;
but_tt.text = n;
but_tt.activate();
}
this.lbtn_dn = function (x, y) {
if (!this.b)
return false;
this.btns[this.b].lbtn_dn(x, y);
return true;
}
this.lbtn_up = function (x, y) {
if (!this.b)
return false;
this.btns[this.b].lbtn_up(x, y);
return true;
}
this.leave = function () {
if (this.b)
this.btns[this.b].changestate("normal");
this.b = null;
tooltip("");
}
this.create_images = function () {
var c,
g;
for (var j = 0; j < 2; j++) {
c = j ? 0xe4ffffff : 0x99ffffff;
s_img[j] = gdi.CreateImage(100, 100);
g = s_img[j].GetGraphics();
g.SetSmoothingMode(2);
if (!ui.local) {
g.DrawLine(69, 71, 88, 90, 12, ui.txt_box & c);
g.DrawEllipse(8, 11, 67, 67, 10, ui.txt_box & c);
} else {
g.DrawLine(69, 71, 88, 90, 12, ui.txt_box);
g.DrawEllipse(8, 11, 67, 67, 10, ui.txt_box);
}
g.FillEllipse(15, 17, 55, 55, 0x0AFAFAFA);
g.SetSmoothingMode(0);
s_img[j].ReleaseGraphics(g);
}
for (var j = 0; j < 2; j++) {
scr[j] = gdi.CreateImage(100, 100);
g = scr[j].GetGraphics();
g.SetSmoothingMode(2);
g.FillPolygon(RGBA(200, 200, 200, j ? 192 : 75), 1, [50, 0, 93, 76, 6, 76]);
g.SetSmoothingMode(0);
scr[j].ReleaseGraphics(g);
}
};
this.create_images();
this.draw = function (gr) {
for (i in this.btns) {
if ((p.s_show == 1 || p.s_show > 1 && !p.s_txt) && i == "s_img")
this.btns[i].draw(gr);
if (p.s_show == 1 && i == "cross1")
this.btns[i].draw(gr);
if (p.s_show > 1 && p.s_txt && i == "cross2")
this.btns[i].draw(gr);
if (p.s_show > 1 && i == "filter")
this.btns[i].draw(gr);
if (i == "scrollUp" || i == "scrollDn")
this.btns[i].draw(gr);
}
}
this.move = function (x, y) {
var b = null,
hand = false;
for (i in this.btns) {
if ((p.s_show == 1 || p.s_show > 1 && !p.s_txt) && i == "s_img" && this.btns[i].trace(x, y)) {
b = i;
hand = true;
}
if (p.s_show == 1 && i == "cross1" && this.btns[i].trace(x, y)) {
b = i;
hand = true;
}
if (p.s_show > 1 && p.s_txt && i == "cross2" && this.btns[i].trace(x, y)) {
b = i;
hand = true;
}
if (p.s_show > 1 && i == "filter" && this.btns[i].trace(x, y)) {
b = i;
hand = true;
}
if ((i == "scrollUp" || i == "scrollDn") && this.btns[i].trace(x, y))
b = i;
}
window.SetCursor(hand ? 32649 : y < p.s_h && p.s_show && x > qx + qh ? 32513 : 32512);
if (this.b == b)
return this.b;
if (b)
this.btns[b].changestate("hover");
if (this.b)
this.btns[this.b].changestate("normal");
this.b = b;
if (!this.b)
tooltip("");
return this.b;
}
var btn = function (x, y, w, h, type, ft, txt, stat, img_src, l_dn, l_up, tooltext) {
this.draw = function (gr) {
switch (type) {
case 3:
gr.SetInterpolationMode(2);
if (this.img)
gr.DrawImage(this.img, this.x, this.y, this.w, this.h, 0, 0, this.img.Width, this.img.Height);
gr.SetInterpolationMode(0);
break;
case 4:
gr.DrawLine(Math.round(this.x + bh * 0.67), Math.round(this.y + bh * 0.67), Math.round(this.x + bh * 0.27), Math.round(this.y + bh * 0.27), Math.round(bh / 10), RGBA(136, 136, 136, this.img));
gr.DrawLine(Math.round(this.x + bh * 0.67), Math.round(this.y + bh * 0.27), Math.round(this.x + bh * 0.27), Math.round(this.y + bh * 0.67), Math.round(bh / 10), RGBA(136, 136, 136, this.img));
break;
case 5:
gr.SetTextRenderingHint(3);
gr.DrawString(txt, ft, this.img, this.x, this.y - 1, this.w, this.h, StringFormat(2, 1));
break;
default:
if (this.img && sbar.scrollable_lines > 0)
gr.DrawImage(this.img, this.x, this.y, this.w, this.h, 0, 0, this.img.Width, this.img.Height, type == 1 ? 0 : 180);
break;
}
}
this.trace = function (x, y) {
return x > this.x && x < this.x + this.w && y > this.y && y < this.y + this.h;
}
this.lbtn_dn = function () {
this.l_dn && this.l_dn(x, y);
}
this.lbtn_up = function () {
this.l_up && this.l_up(x, y);
}
this.changestate = function (state) {
if (state == "hover") {
this.img = this.img_hover;
tooltip(this.tooltext);
} else {
this.img = this.img_normal;
}
try{
window.RepaintRect(this.x, this.y, this.w, this.h);
}catch(e){}
}
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.l_dn = l_dn;
this.l_up = l_up;
this.tooltext = tooltext;
this.img_normal = img_src.normal;
this.img_hover = img_src.hover || this.img_normal;
this.img = this.img_normal;
}
this.refresh = function (upd) {
if (upd) {
bx = p.s_w1 - Math.round(ui.row_h * 0.75);
bh = ui.row_h;
by = Math.round((p.s_sp - bh * 0.4) / 2 - bh * 0.27);
b_x = ui.w - ui.scr_w - 1;
byUp = p.s_h;
byDn = sbar.y + sbar.h - ui.scr_w;
fw = p.f_w[p.filter_by] + p.f_sw + 12;
qx = ui.margin;
qy = (p.s_sp - ui.row_h * 0.6) / 2;
qh = ui.row_h * 0.6;
}
if (ui.scrollbar_show) {
this.btns.scrollUp = new btn(b_x, byUp, ui.scr_w, ui.scr_w, 1, "", "", "", {
normal : scr[0],
hover : scr[1]
}, function () {
sbar.but(1);
}, "", "");
this.btns.scrollDn = new btn(b_x, byDn, ui.scr_w, ui.scr_w, 2, "", "", "", {
normal : scr[0],
hover : scr[1]
}, function () {
sbar.but(-1);
}, "", "");
}
if (p.s_show) {
this.btns.s_img = new btn(qx, qy, qh, qh, 3, "", "", "", {
normal : s_img[0],
hover : s_img[1]
}, function () {
browser("\"" + fb.FoobarPath + "Query Syntax Help.html");
}, "", "Open Query Syntax Help");
this.btns.cross1 = new btn(bx, by, bh, bh, 4, "", "", "", {
normal : "85",
hover : "192"
}, "", function () {
sL.clear();
}, "Clear Search Text");
this.btns.cross2 = new btn(qx - bh * 0.2, by, bh, bh, 4, "", "", "", {
normal : "85",
hover : "192"
}, "", function () {
sL.clear();
}, "Clear Search Text");
this.btns.filter = new btn(p.f_x1 - 12, 0, fw, p.s_sp, 5, p.f_but_ft, "Ў", "", {
normal : !ui.local ? ui.txt_box & 0x99ffffff : ui.txt_box,
hover : ui.txt_box & 0xe4ffffff
}, "", function () {
men.button(p.f_x1, p.s_h);
but.refresh(true)
}, "Filter");
}
}
}
var but = new button_manager();
function menu_object() {
var i = 0,
MenuMap = [],
MF_GRAYED = 0x00000001,
MF_POPUP = 0x00000010,
MF_SEPARATOR = 0x00000800,
MF_STRING = 0x00000000;
this.NewMenuItem = function (index, type, value) {
MenuMap[index] = [{
type : ""
}, {
value : 0
}
];
MenuMap[index].type = type;
MenuMap[index].value = value;
}
this.PlaylistTypeMenu = function (Menu, StartIndex) {
var Index = StartIndex,
n = ["Send to Current Playlist", "Add to Current Playlist"];
for (i = 0; i < 2; i++) {
this.NewMenuItem(Index, "Playlist", i + 1);
Menu.AppendMenuItem(MF_STRING, Index, n[i]);
Index++;
}
return Index;
}
this.OptionsTypeMenu = function (Menu, StartIndex) {
var Index = StartIndex,
mt = p.syncType ? 1 : 0;
for (i = 0; i < p.menu.length; i++) {
this.NewMenuItem(Index, "Options", i + 1);
if (i < p.menu.length - 1 || i == p.menu.length - 1 && v.k(0))
Menu.AppendMenuItem(MF_STRING, Index, p.menu[i]);
if (i < p.menu.length - 2 - mt)
Menu.CheckMenuItem(Index++, p.view_by == i);
else
Index++;
if (i == p.menu.length - 3 - mt || i == p.menu.length - 4 - mt)
Menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
}
return Index;
}
this.FilterMenu = function (Menu, StartIndex) {
var Index = StartIndex;
for (i = 0; i < p.f_menu.length + 1; i++) {
this.NewMenuItem(Index, "Filter", i + 1);
Menu.AppendMenuItem(MF_STRING, Index, i != p.f_menu.length ? (!i ? "No " : "") + p.f_menu[i] : "Always Reset Scroll");
Menu.CheckMenuItem(Index++, i < p.f_menu.length ? i == p.filter_by : p.reset);
if (i == p.f_menu.length - 1)
Menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
}
return Index;
}
this.button = function (x, y) {
var menu = window.CreatePopupMenu(),
idx,
Index = 1;
Index = this.FilterMenu(menu, Index);
idx = menu.TrackPopupMenu(x, y);
if (idx >= 1 && idx <= Index) {
i = MenuMap[idx].value;
switch (i) {
case p.f_menu.length + 1:
p.reset = !p.reset;
if (p.reset) {
p.search_paint();
lib.refresh(true);
}
window.SetProperty("SYSTEM.Reset Tree", p.bypass);
break;
default:
p.filter_by = i - 1;
p.set_statistics_mode();
p.calc_text();
p.search_paint();
lib.refresh(true);
window.SetProperty("SYSTEM.Filter By", p.filter_by);
break;
}
}
menu.Dispose();
}
this.search = function (Menu, StartIndex, s, e, paste) {
var Index = StartIndex,
n = ["Copy", "Cut", "Paste"];
for (i = 0; i < 3; i++) {
this.NewMenuItem(Index, "Search", i + 1);
Menu.AppendMenuItem(s == e && i < 2 || i == 2 && !paste ? MF_GRAYED : MF_STRING, Index, n[i]);
Index++;
if (i == 1)
Menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
}
return Index;
}
this.search_menu = function (x, y, s, e, paste) {
var menu = window.CreatePopupMenu(),
idx,
Index = 1;
Index = this.search(menu, Index, s, e, paste);
idx = menu.TrackPopupMenu(x, y);
if (idx >= 1 && idx <= Index) {
i = MenuMap[idx].value;
switch (i) {
case 1:
sL.on_char(v.copy);
break;
case 2:
sL.on_char(v.cut);
break;
case 3:
sL.on_char(v.paste, true);
break;
}
}
menu.Dispose();
}
this.rbtn_up = function (x, y) {
var Context = fb.CreateContextMenuManager(),
FilterMenu = window.CreatePopupMenu(),
idx,
Index = 1,
menu = window.CreatePopupMenu(),
new_sel = false,
OptionsMenu = window.CreatePopupMenu(),
PlaylistMenu = window.CreatePopupMenu(),
show_context = false;
var ix = Math.round((y + sbar.delta - p.s_h - ui.row_h * 0.5) / ui.row_h);
if (y > p.s_h && pop.tree.length > ix && ix >= 0 && x < p.s_w1 && pop.check_ix(pop.tree[ix], x, y, true)) {
if (!pop.tree[ix].sel) {
new_sel = true;
pop.get_selection(ix, "", true, true);
}
Index = this.PlaylistTypeMenu(menu, Index);
menu.AppendMenuSeparator();
show_context = true;
}
if (show_context) {
Index = this.OptionsTypeMenu(OptionsMenu, Index);
OptionsMenu.AppendTo(menu, MF_STRING | MF_POPUP, "Options");
menu.AppendMenuSeparator();
var items = p.items();
for (var l in pop.sel_items)
items.Add(p.list.Item(pop.sel_items[l]));
Context.InitContext(items);
Context.BuildMenu(menu, 5000, -1);
} else
Index = this.OptionsTypeMenu(menu, Index);
idx = menu.TrackPopupMenu(x, y);
if (idx >= 1 && idx <= Index) {
i = MenuMap[idx].value;
switch (MenuMap[idx].type) {
case "Playlist":
switch (i) {
case 1:
if (new_sel)
for (var k = 0; k < pop.tree.length; k++)
pop.tree[k].sel = false;
pop.tree[ix].sel = true;
pop.load(pop.sel_items, true, false, true, true);
p.tree_paint();
break;
case 2:
pop.tree[ix].sel = true;
pop.load(pop.sel_items, true, true, false, true);
break;
}
break;
case "Options":
var mtt = i == p.menu.length - 2 && p.syncType ? 1 : i == p.menu.length - 1 ? 2 : i == p.menu.length ? 3 : 4;
switch (mtt) {
case 1:
window.ShowProperties();
break;
case 2:
p.syncType ? lib.update() : window.ShowProperties();
break;
case 3:
window.ShowConfigure();
break;
case 4:
lib.time.Reset();
if (p.s_txt)
lib.upd_search = true;
p.fields(i < p.grp.length + 1 ? i - 1 : p.view_by, i - 1 < p.grp.length ? p.filter_by : i - 1 - p.grp.length);
if (i == p.folder_view + 1)
lib.get_paths = true;
lib.get_library();
lib.rootNodes();
break;
}
break;
}
}
if (idx >= 5000 && idx <= 5800) {
show_context && Context.ExecuteByID(idx - 5000);
}
Context.Dispose();
FilterMenu.Dispose();
menu.Dispose();
OptionsMenu.Dispose();
PlaylistMenu.Dispose();
}
}
var men = new menu_object();
function timers() {
var timer_arr = ["clear_jsearch", "init", "jsearch", "search", "search_cursor", "tt", "update"];
for (var i = 0; i < timer_arr.length; i++)
this[timer_arr[i]] = false;
this.reset = function (timer, n) {
if (timer)
window.ClearTimeout(timer);
this[timer_arr[n]] = false;
}
this.lib = function () {
this.init = window.SetTimeout(function () {
lib.get_library();
lib.rootNodes();
timer.reset(timer.init, 1);
}, 5);
}
this.tooltip = function () {
this.reset(this.tt, 6);
this.tt = window.SetTimeout(function () {
pop.deactivate_tooltip();
timer.reset(timer.tt, 5);
}, 5000);
}
this.lib_update = function () {
this.reset(this.update, 6);
this.update = window.SetTimeout(function () {
lib.update();
timer.reset(timer.update, 6);
}, 500);
}
}
var timer = new timers();
timer.lib();
this.touch_sens = window.GetProperty(" Scroll - Touch Mouse Sensitive: Step", 24);
var lbtn_touch_dn = 0;
var y_start = 0;
var y_end = 0;
var y_delta = 0;
function on_char(code) {
if (!p.s_show)
return;
sL.on_char(code);
jS.on_char(code)
}
function on_key_down(vkey) {
pop.on_key_down(vkey);
if (!p.s_show)
return;
sL.on_key_down(vkey);
}
function on_key_up(vkey) {
if (!p.s_show)
return;
sL.on_key_up(vkey)
}
function on_library_items_added() {
if (p.syncType)
return;
timer.lib_update();
}
function on_library_items_removed() {
if (p.syncType)
return;
timer.lib_update();
}
function on_library_items_changed() {
if (p.syncType || !p.statistics && fb.PlaybackTime > 59 && fb.PlaybackTime < 65)
return;
timer.lib_update();
}
function on_mouse_lbtn_dblclk(x, y) {
but.lbtn_dn(x, y);
pop.lbtn_dblclk(x, y);
}
function on_mouse_lbtn_down(x, y) {
lbtn_touch_dn = 1;
y_start = y;
if (p.s_show || ui.scrollbar_show)
but.lbtn_dn(x, y);
if (p.s_show)
sL.lbtn_dn(x, y);
pop.lbtn_dn(x, y);
sbar.lbtn_dn(x, y);
}
function on_mouse_lbtn_up(x, y) {
lbtn_touch_dn = 0;
y_start = y;
if (p.s_show) {
sL.lbtn_up();
but.lbtn_up(x, y);
}
sbar.lbtn_up(x, y);
}
function on_mouse_leave() {
if (p.s_show || ui.scrollbar_show)
but.leave();
sbar.leave();
}
function on_mouse_mbtn_down(x, y) {
pop.mbtn_dn(x, y);
}
function on_mouse_move(x, y) {
if (p.m_x == x && p.m_y == y)
return;
if (p.s_show || ui.scrollbar_show)
but.move(x, y);
if (p.s_show)
sL.move(x, y);
pop.move(x, y);
sbar.move(x, y);
p.m_x = x;
p.m_y = y;
if (lbtn_touch_dn) {
//mouse_drag = false;
y_end = y;
y_delta = (y_end - y_start);
if (x < ww) {
if (y_delta > ui.h / this.touch_sens) {
on_mouse_wheel(1);
y_start = y_end;
};
if (y_delta < -ui.h / this.touch_sens) {
on_mouse_wheel(-1);
y_start = y_end;
};
};
};
}
function on_mouse_rbtn_up(x, y) {
if (y < p.s_h && x > p.s_x && x < p.s_x + p.s_w2) {
sL.rbtn_up(x, y);
return true;
} else {
men.rbtn_up(x, y);
return true;
}
}
function on_mouse_wheel(step) {
if (!v.k(1))
sbar.wheel(step);
else
ui.wheel(step);
}
function RGB(r, g, b) {
return 0xff000000 | r << 16 | g << 8 | b;
}
function RGBA(r, g, b, a) {
return a << 24 | r << 16 | g << 8 | b;
}
function StringFormat() {
var a = arguments,
h_align = 0,
v_align = 0,
trimming = 0,
flags = 0;
switch (a.length) {
case 3:
trimming = a[2];
case 2:
v_align = a[1];
case 1:
h_align = a[0];
break;
default:
return 0;
}
return (h_align << 28 | v_align << 24 | trimming << 20 | flags);
}
window.SetProperty("_Custom.Colour Filter Line", null);
window.SetProperty("_Custom.Colour Filter Name", null);
window.SetProperty("_Custom.Colour Filter Search Text", null);
window.SetProperty(" DblClick Action: Expand/Collapse-0 Send&Play-1", null);
window.SetProperty(" DblClick: Expand-0 Play-1 Expand&Play-2", null);
window.SetProperty(" Filter Show", null);
window.SetProperty(" Filter Style: Fade-0 Blend-1 Normal-2 Highlight-3", null);
window.SetProperty(" Filter: Line Colour: Grey-0 Blend-1 Text-2", null);
function setWallpaperImg(path, metadb) {
var fmt_path = fb.TitleFormat(path).Eval(true);
var fmt_path_arr = utils.Glob(fmt_path).toArray();
if (fmt_path_arr.length > 0) {
var final_path = fmt_path_arr[0];
};
else {
var final_path = null;
};
if (metadb && ppt.wallpapermode == 0) {
var tmp_img = utils.GetAlbumArtV2(metadb, ppt.wallpapermode);
};
else {
if (final_path) {
tmp_img = gdi.Image(final_path);
};
else {
tmp_img = null;
};
};
if (!tmp_img) {
if (final_path) {
tmp_img = gdi.Image(final_path);
};
else {
tmp_img = null;
};
};
g_wallpaperImg = null;
var img = FormatWallpaper(tmp_img, ww, wh, 2, 0, 0, "", true);
return img;
};
function draw_blurred_image(image, ix, iy, iw, ih, bx, by, bw, bh, blur_value, overlay_color) {
var blurValue = blur_value;
var imgA = image.Resize(iw * blurValue / 100, ih * blurValue / 100, 2);
var imgB = imgA.resize(iw, ih, 2);
var overlay_color = RGBA(0, 0, 0, ppt.wallpaperoverlayalfa); //50);
var bbox = gdi.CreateImage(bw, bh);
// Get graphics interface like "gr" in on_paint
var gb = bbox.GetGraphics();
var offset = 90 - blurValue;
gb.DrawImage(imgB, 0 - offset, 0 - (ih - bh) - offset, iw + offset * 2, ih + offset * 2, 0, 0, imgB.Width, imgB.Height, 0, 255);
bbox.ReleaseGraphics(gb);
var newImg = gdi.CreateImage(iw, ih);
var gb = newImg.GetGraphics();
if (ix != bx || iy != by || iw != bw || ih != bh) {
gb.DrawImage(image, ix, iy, iw, ih, 0, 0, image.Width, image.Height, 0, 255);
gb.FillSolidRect(bx, by, bw, bh, 0xffffffff);
};
gb.DrawImage(bbox, bx, by, bw, bh, 0, 0, bbox.Width, bbox.Height, 0, 255);
// overlay
if (overlay_color != null) {
gb.FillSolidRect(bx, by, bw, bh, overlay_color);
};
// top border of blur area
if (ix != bx || iy != by || iw != bw || ih != bh) {
gb.FillSolidRect(bx, by, bw, 1, 0x22ffffff);
gb.FillSolidRect(bx, by - 1, bw, 1, 0x22000000);
};
newImg.ReleaseGraphics(gb);
return newImg;
};
function FormatWallpaper(image, iw, ih, interpolation_mode, display_mode, angle, txt, rawBitmap) {
if (!image || !iw || !ih)
return image;
var i,
j;
var panel_ratio = iw / ih;
wpp_img_info.ratio = image.Width / image.Height;
wpp_img_info.orient = 0;
if (wpp_img_info.ratio > panel_ratio) {
wpp_img_info.orient = 1;
// 1/3 : default image is in landscape mode
switch (display_mode) {
case 0: // Filling
//wpp_img_info.w = iw * wpp_img_info.ratio / panel_ratio;
wpp_img_info.w = ih * wpp_img_info.ratio;
wpp_img_info.h = ih;
wpp_img_info.cut = wpp_img_info.w - iw;
wpp_img_info.x = 0 - (wpp_img_info.cut / 2);
wpp_img_info.y = 0;
break;
case 1: // Adjust
wpp_img_info.w = iw;
wpp_img_info.h = ih / wpp_img_info.ratio * panel_ratio;
wpp_img_info.cut = ih - wpp_img_info.h;
wpp_img_info.x = 0;
wpp_img_info.y = wpp_img_info.cut / 2;
break;
case 2: // Stretch
wpp_img_info.w = iw;
wpp_img_info.h = ih;
wpp_img_info.cut = 0;
wpp_img_info.x = 0;
wpp_img_info.y = 0;
break;
};
};
else if (wpp_img_info.ratio < panel_ratio) {
wpp_img_info.orient = 2;
// 2/3 : default image is in portrait mode
switch (display_mode) {
case 0: // Filling
wpp_img_info.w = iw;
//wpp_img_info.h = ih / wpp_img_info.ratio * panel_ratio;
wpp_img_info.h = iw / wpp_img_info.ratio;
wpp_img_info.cut = wpp_img_info.h - ih;
wpp_img_info.x = 0;
wpp_img_info.y = 0 - (wpp_img_info.cut / 4);
break;
case 1: // Adjust
wpp_img_info.h = ih;
wpp_img_info.w = iw * wpp_img_info.ratio / panel_ratio;
wpp_img_info.cut = iw - wpp_img_info.w;
wpp_img_info.y = 0;
wpp_img_info.x = wpp_img_info.cut / 2;
break;
case 2: // Stretch
wpp_img_info.w = iw;
wpp_img_info.h = ih;
wpp_img_info.cut = 0;
wpp_img_info.x = 0;
wpp_img_info.y = 0;
break;
};
};
else {
// 3/3 : default image is a square picture, ratio = 1
wpp_img_info.w = iw;
wpp_img_info.h = ih;
wpp_img_info.cut = 0;
wpp_img_info.x = 0;
wpp_img_info.y = 0;
};
var tmp_img = gdi.CreateImage(iw, ih);
var gp = tmp_img.GetGraphics();
gp.SetInterpolationMode(interpolation_mode);
gp.DrawImage(image, wpp_img_info.x, wpp_img_info.y, wpp_img_info.w, wpp_img_info.h, 0, 0, image.Width, image.Height, angle, ppt.wallpaperalfa); //255);
tmp_img.ReleaseGraphics(gp);
// blur it!
if (ppt.wallpaperblurred) {
var blur_factor = ppt.wallpaperblurvalue; // [1-90]
tmp_img = draw_blurred_image(tmp_img, 0, 0, tmp_img.Width, tmp_img.Height, 0, 0, tmp_img.Width, tmp_img.Height, blur_factor, 0x00ffffff);
};
CollectGarbage();
if (rawBitmap) {
return tmp_img.CreateRawBitmap();
};
else {
return tmp_img;
};
};
function on_playback_new_track(metadb) {
g_metadb = metadb;
if (ppt.showwallpaper) {
g_wallpaperImg = setWallpaperImg(ppt.wallpaperpath, metadb);
};
on_size();
window.Repaint();
};
function on_notify_data(name, info) {
if (name == "library" && info == "send_to_pl") {
on_key_down(v.enter);
//window.Repaint();
window.NotifyOthers("lib_btns", "send_to_pl_ok");
};
};
?
seriousstas
29.06.2016, 06:53
duzzy
проверь такой вариант по :
// @author "Wilb"
// @version "0.8"
Если добавить одну или несколько папок треками (без подпапок) -
в режиме View by Folder Structure папок не будет - только треки вперемешку .
seriousstas
Думал, но ..
Все не так просто - там по линиям ещё несколько параметров,
Ааа... много параметров менять, если разные значения то вариант с Пропертис не подойдет.
Ну хорошо , а как Тебе такой вариант с полупрозрачними "точками" )
Такой вариант уже лучше :)
Я просто не большой фанат UI элементов, с ними бывают проблемы в скриптах... в скрипты можно подтягивать виндовые кнопки, скролбары, прогрессбары и т.д.
Если добавить одну или несколько папок треками (без подпапок) -
в режиме View by Folder Structure папок не будет - только треки вперемешку .
У меня нормально папки с треками добавляет... как при Add так и при Send
Может я что не так добавляю ?
Я давно с ним езжу пока проблем не было :)
seriousstas
29.06.2016, 15:46
seriousstas
Ааа... много параметров менять, если разные значения то вариант с Пропертис не подойдет.
Такой вариант уже лучше :)
Я просто не большой фанат UI элементов, с ними бывают проблемы в скриптах... в скрипты можно подтягивать виндовые кнопки, скролбары, прогрессбары и т.д.
У меня нормально папки с треками добавляет... как при Add так и при Send
Может я что не так добавляю ?
Я давно с ним езжу пока проблем не было :)
Смотри (я про отображение в самой библиотеке) :
https://hydrogenaud.io/index.php/topic,111060.msg924563.html#msg924563
Пробовал и сборку для crc - она чистая почти со скриптом дефолным.
+ ошибка эта вылазит если попытаться развернуть этот одиночный трек,что на втором скрине (Library Tree 0.9)
Такой вариант уже лучше
Я ещё увеличил - на нём и остановлюсь ..
seriousstas
Мои папки в экплорере и в скрипте
http://jpegshare.net/thumbs/af/bc/afbc5be74eadeeddd1a4d416819be0d5.jpg (http://jpegshare.net/af/bc/afbc5be74eadeeddd1a4d416819be0d5.png.html)
-------------------------------
Я понял про что ты говоришь, до меня только что дошло...
просто какой смысл отдельные папки добавлять... логично что покажет треки внутри папки отдельно... точно так же работает и Album List
вот смотри скрины...
http://jpegshare.net/thumbs/b3/f5/b3f59b76c0f8d724b0dbf3daf5c1c9d6.jpg (http://jpegshare.net/b3/f5/b3f59b76c0f8d724b0dbf3daf5c1c9d6.png.html) http://jpegshare.net/thumbs/71/0f/710f1d4e8a8362ac7f3f0e9769bc8ccf.jpg (http://jpegshare.net/71/0f/710f1d4e8a8362ac7f3f0e9769bc8ccf.png.html)
seriousstas
29.06.2016, 16:43
посмотри скрины добавь просто 2 3 папки с треками
посмотри скрины добавь просто 2 3 папки с треками
Я понял про что ты говоришь, до меня только что дошло...
просто какой смысл отдельные папки добавлять... логично что покажет треки внутри папки отдельно... точно так же работает и Album List
вот смотри скрины...
http://jpegshare.net/thumbs/b3/f5/b3f59b76c0f8d724b0dbf3daf5c1c9d6.jpg (http://jpegshare.net/b3/f5/b3f59b76c0f8d724b0dbf3daf5c1c9d6.png.html) http://jpegshare.net/thumbs/71/0f/710f1d4e8a8362ac7f3f0e9769bc8ccf.jpg (http://jpegshare.net/71/0f/710f1d4e8a8362ac7f3f0e9769bc8ccf.png.html)
--------------------------
Смысл в том что используешь одну папку как Медиатеку --- допустим Music и поехали дальше...
Например:
Music
|
|--------- CD
|
|---------- FLAC
|
|---------- MP3
...
Либо использовать как общее хранилище для всех форматов и качества...
Music
|--------- AC/DC
|--------- Korn
|--------- ZZ Top
-----------------------------------------------------------------------
По вопросу вылетающей ошибки, можно просто попробовать поставить обход ошибки в этом случае при развороте трека в треке,
таким вот образом...
try{......тут ловишь ошибку, прописываешь ту строку что выбивает..............}catch(error){.......тут на что то меняешь или оставляешь просто пустоту........};
в 0.9 версии строка 472 (0.9 не развернута после сжатия, поэтому ошибку будет проблематично искать)
в 0.8 версии строка 1469
После применения процедуры обхода получится вот такой вариант при развороте трека в треке...
http://jpegshare.net/thumbs/2d/61/2d615a6abe55a618e214d2025602179c.jpg (http://jpegshare.net/2d/61/2d615a6abe55a618e214d2025602179c.png.html)
можно еще так сделать и получим пустоту вместо undefined....
try{
nU = n.toUpperCase();
}catch(e){n = "";};
http://jpegshare.net/thumbs/ed/2f/ed2fb3abc83b6c8fbe2c512d7274f39a.jpg (http://jpegshare.net/ed/2f/ed2fb3abc83b6c8fbe2c512d7274f39a.png.html)
seriousstas
29.06.2016, 17:40
Ну это типа - мелочь , но неприятно :)
[QUOTE=duzzy;363698
Смысл в том что используешь одну папку как Медиатеку --- допустим Music
[/QUOTE]
Пишешь одно , а на скрине в путях три папки, у меня всегда только две прописаны...
Music на харде внутреннем и Music на любой флешке присоединённой в машине.
Дома всегда (как ты и пишешь) только один путь Music.
vladj
Разговор совершенно про другое... прочти другие сообщения а не только последнее...
Я понял про что ты говоришь, до меня только что дошло...
просто какой смысл отдельные папки добавлять... логично что покажет треки внутри папки отдельно... точно так же работает и Album List
вот смотри скрины...
http://jpegshare.net/thumbs/b3/f5/b3f59b76c0f8d724b0dbf3daf5c1c9d6.jpg (http://jpegshare.net/b3/f5/b3f59b76c0f8d724b0dbf3daf5c1c9d6.png.html) http://jpegshare.net/thumbs/71/0f/710f1d4e8a8362ac7f3f0e9769bc8ccf.jpg (http://jpegshare.net/71/0f/710f1d4e8a8362ac7f3f0e9769bc8ccf.png.html)
Ну это типа - мелочь , но неприятно :)
Багулины всегда неприятны :smile2:
Я просто и не пробовал в библиотеку отдельные папки добавлять, у меня всегда свалка, все в одной папке.
vladj
Разговор совершенно про другое.
Сорри, не до понял что речь о скрипте Wilb
В JSPlaylist (сборка seriousstas) всё как и положено открывается из LIBRARY_TREE .
Папки потрековые это ведь сборники и если они правильно прописаны,
всё работает чудесно. В плейлисте играющий сборник открыт, остальные
под шапкой. Добавляемый не открыт потреково, свёрнут под шапкой.
Помогите пожалуйста разобраться в проблеме.
Скачал сборку от seriousstas 4Icar_13_6_1_MPS_UNI, от 18.06.16г. при добавлении в новый плей лист треков через библиотеку выкидывает вот такое окно WSH Panel Mod
http://s016.radikal.ru/i335/1606/2d/81e32251943c.jpg
WSH Panel Mod (LIBRARY_TREE_TOUCH_PANEL_with_AlbumArtView v3.0 by Vo Thanh Dat mod by___Terro): Ошибка выполнения Microsoft JScript:
'playlist_' - определение отсутствует
File: <main>
Line: 1176, Col: 9
<source text only available at compile time>
Все остальное в фубаре работает хорошо.
ОС Windows 7 32бит.
при добавлении в новый плей лист треков через библиотеку
Как можно что-то добавить а плейлист которого ещё нет ? Ты двойным тычком по папке - альбому
запусти что-то на проигрывание, автоматом создастся плейлист и начнёт играть и потом уже если
есть надобность можно в библиотеке отмечая другой контент можно добавить в играющему плейлисту.
Ну или не добавляй в несуществующий, а отправляй (Send)...имхо.
Как можно что-то добавить а плейлист которого ещё нет ? Ты двойным тычком по папке - альбому
запусти что-то на проигрывание, автоматом создастся плейлист и начнёт играть и потом уже если
есть надобность можно в библиотеке отмечая другой контент можно добавить в играющему плейлисту.
Ну или не добавляй в несуществующий, а отправляй (Send)...имхо.
Я создавал новый плей лист(пустой), потом 2м щелчком по нем и шел в библиотеку за треками. Получается так нельзя, понял спасибо!!!
Если хочешь создать свой плейлист, то иди в панель разделённую надвое,
там в правой панели менеджер плейлистов, создавай новый, обзывай и затем
можешь в него добавлять треки из играющего. Плейлист сохранится и будет
лежать рядом с плейлистами инет станций.
makcc
У тебя все нормально и ты все правильно делал.
В скрипте ошибка, мой косяк... нужно скрипт библиотеки заменить и все будет гуд.
Скачай вот тут (http://pccar.ru/showpost.php?p=363518&postcount=1926) исправленную версию, и замени ее в панели.
Заменить скрипт в панели можно так (http://pccar.ru/showpost.php?p=363364&postcount=1912)...
К тебе тоже вопрос, вот это лого...http://jpegshare.net/images/53/e1/53e1b19d88399542627f790e998cc359.png (http://jpegshare.net/) откуда у тебя на скрине ?
У меня сборка от 18 числа нормально работает. Кстати неподготовленный пользователь может
попасть в тупик после такого, имхо, ...
"Инсталл в корень диска...
Начинать с добавления верхней папки с альбомами в разделе настроек Фубара "Media Library" ."
На чистом фубаре нет ни верхних, ни нижних папок, там пока пусто.
Начинать нужно находясь в опции настройки Media Library, щёлкаем справа Add...
в вышедшем оконце проводника указываем путь к папке с музыкой. Если музыка есть и на других
хардах так-же добавляем. Затем внизу справа щёлкаем Apply (т.е. Применить).
Не стоит сравнивать свои познания в терминах на английском и совсем начинающего юзверя.
Многие скачав сборку англоязычную не знают что такое Add, Apply и проч. термины.
seriousstas
30.06.2016, 01:34
На чистом фубаре нет ни верхних, ни нижних папок, там пока пусто.
Я там про папки на ПК (+ со ссылкой на видео, где все наглядно). Если к примеру просто набросать (под)папок , то в библиотеке от Wilb будет каша ..
seriousstas
30.06.2016, 01:39
makcc
Да с ней не только эти проблемы, предлагаю обновление :
4Icar_13_6_2_MPS_UNI (http://pccar.ru/showthread.php?t=23702)
- Новый вид у Peakmeter Spectrum
- Библиотека заменена на Library Tree от WilB (лучшая на сегодня ) с моими правками для "Node" режима (увеличены и сделаны полупрозрачными элементы + - "дерева") .
В прошлой от Vo Thanh Dat есть некоторые проблемы с сортировкой .
- Убрал autobackup .
- Правки по смене иконок, обнуление таймера DSP при переходе на другие панели .
http://rgho.st/6FKQ77sSR/thumb.png (http://rgho.st/6FKQ77sSR.view)
9PhzOFIdV_E
seriousstas
30.06.2016, 03:38
duzzy
Ещё по библиотеке :
Если на только созданный (Library view) двойным кликом добавить все треки,
затем очистить и добавить выборочно через "Enter" - будут вместо выбранных - вновь добавлятся все треки .. Следующий выбор - уже норм, но если удалить и создать - тот-же глюк .
makcc
У тебя все нормально и ты все правильно делал.
В скрипте ошибка, мой косяк... нужно скрипт библиотеки заменить и все будет гуд.
Скачай вот тут (http://pccar.ru/showpost.php?p=363518&postcount=1926) исправленную версию, и замени ее в панели.
Заменить скрипт в панели можно так (http://pccar.ru/showpost.php?p=363364&postcount=1912)...
К тебе тоже вопрос, вот это лого...http://jpegshare.net/images/53/e1/53e1b19d88399542627f790e998cc359.png (http://jpegshare.net/) откуда у тебя на скрине ?
Я с начала не мог отписаться на этом форуме (забыл пороль) и написал на магнитоле, потом когда вспомнил пароль написал здесь, оригинал скрина я удалил, и что бы здесь выложить скрин ошибки скачал с магнитолы его, думаю от туда логотип как то прилип.
makcc
У тебя все нормально и ты все правильно делал.
В скрипте ошибка, мой косяк... нужно скрипт библиотеки заменить и все будет гуд.
Скачай вот тут (http://pccar.ru/showpost.php?p=363518&postcount=1926) исправленную версию, и замени ее в панели.
Заменить скрипт в панели можно так (http://pccar.ru/showpost.php?p=363364&postcount=1912)...
К тебе тоже вопрос, вот это лого...http://jpegshare.net/images/53/e1/53e1b19d88399542627f790e998cc359.png (http://jpegshare.net/) откуда у тебя на скрине ?
вот здесь я написал (пост 209 и 210) и потом скачал свой же скрин, видимо отсюда прилип логотип.
http://magnitola.org/audio-carpc/182614-foobar2000-dlya-carpc-21.html
когда сюда картинку закинул не обратил внимание.
seriousstas
30.06.2016, 15:22
makcc
Ошибка на твоём скрине исправимая, но это пока полностью не побороть (нужно включать сортировку ..) :
http://pccar.ru/showpost.php?p=363266&postcount=1874 ,
поэтому пробуй другую библиотеку, в обновленной сборке .
seriousstas
30.06.2016, 15:39
duzzy
просто какой смысл отдельные папки добавлять... логично что покажет треки внутри папки отдельно..
Смысл в том что используешь одну папку как Медиатеку --- допустим Music и поехали дальше...
В авто не всегда есть время перемещать файлы в отдельную папку ,
Я впихаю SD карту или флешку, а там зачастую просто все папки в корне .
На мониторе получаем набор файлов ..
Vo Thanh Dat - тут все правильно делает - показывает полный путь каждой папки .
+ с добавлением у него нет проблем .
Ты с ним болтал как-то , попроси вернуть (поправить) сортировку , как в первой версии .
makcc
Я тебя понял... Просто в следующий раз когда будут вопросы давай просто ссыль на проблему, или сразу тут пиши. ;)
seriousstas
В авто не всегда есть время перемещать файлы в отдельную папку ,
:) можно на флехе сделать папку "Музыка" добавить ее в фубар и будет почти полноценная синхронизация...
Либо как вариант использовать скрипт Эксплорера и оттуда подгружать папки в плейлист.
Есть такой вариант...(но с ним есть проблема, при портабл режиме скрипт падает, почему хз)
http://jpegshare.net/thumbs/43/b2/43b2efc4545747fe05c281ef23ff969d.jpg (http://jpegshare.net/43/b2/43b2efc4545747fe05c281ef23ff969d.png.html)
И еще есть вариант эксплорера от Бретта...(нашел)
http://jpegshare.net/thumbs/01/c5/01c5451e8725c4d69d2d39c3c7912a67.jpg (http://jpegshare.net/01/c5/01c5451e8725c4d69d2d39c3c7912a67.png.html)
Vo Thanh Dat - тут все правильно делает - показывает полный путь каждой папки .
Его скрипт работает через прокладку в виде плейлиста и поэтому нет проблем с добавлением треков... работает так формируется авто-плейлист со всеми треками указанными по пути, затем идет разбивка на папки и отображение на экране списка в виде дерева. Это можно делать и без скрипта вьетнамца, у Бретта в плейлисте 1.3.2также создается авто-плейлист со всем контентом и можно его использовать в виде библиотеки, просто не в таком удобном виде.
Ты с ним болтал как-то , попроси вернуть (поправить) сортировку , как в первой версии .
Болтал то болтал только толку от этого ноль, я с ним и по Album Library болтал(там тоже есть косяки) результат тот же... И видео снимал с пояснениями и скрины и описание проблем и то как хотелось бы это видеть... результат тишина... Зато на всякие нелепые вопросы он отвечает... типо как сделать чтоб скрипт показывал символ "&" вместо "_"...
Что касается скрипта Вилба, то работает он почти идентично Album List там будет тоже самое что и в скрипте... набор треков в таком виде...
http://jpegshare.net/thumbs/7f/39/7f39496baf36ed301245937bab773e44.jpg (http://jpegshare.net/7f/39/7f39496baf36ed301245937bab773e44.png.html)
120705
Сохрани в файл скрипт МПС панели и сюда скинь, я тебе поправлю.
ПКМ по нижним кнопкам, выбрать Configure..., откроется редактор скрипта, выделяешь и копируешь скрипт затем вставляешь в блокнот сохраняешь его и заливаешь на файлообменник.
120705
Сохрани в файл скрипт МПС панели и сюда скинь, я тебе поправлю.
duzzy. Здесь лежит скрипт https://yadi.sk/i/VEimOCchsumYo
seriousstas
30.06.2016, 20:17
120705
увеличить время авто-закрытия не подходит ?
Секунд 30-60
120705
увеличить время авто-закрытия не подходит ?
Секунд 30-60
Не желательно...
duzzy. Здесь лежит скрипт https://yadi.sk/i/VEimOCchsumYo
Дело не в скрипте МПС. Скорее всего в скрипте плейлиста.
Упакуй сборку в архив и залей на файлообменник, ссылку кинь мне.
Дело не в скрипте МПС. Скорее всего в скрипте плейлиста.
Упакуй сборку в архив и залей на файлообменник, ссылку кинь мне.
Залил https://yadi.sk/d/W5ya3b5csuxXv
Залил https://yadi.sk/d/W5ya3b5csuxXv
Забрал, сейчас гляну и перезалью.
120705
Убрал, и да дело было в плейлисте.
Вообще конечно лучше бы ты на что то посвежее перешел, это уж очень древний вариант... она в состоянии покоя ест проц примерно 8-11%.
качай... (http://rgho.st/private/6xmySLHZS/34ad1b3e5aee8a60a60c781c452ad08c)
120705
Вообще конечно лучше бы ты на что то посвежее перешел, это уж очень древний вариант... она в состоянии покоя ест проц примерно 8-11%.
Твоя последняя сборка мне нравится, ноо.. я консерватор и в этой сборке хотелось оставить расположение и количество кнопок, как в моей. Просить переделать.. как то не удобно просить.
120705
качай... (http://rgho.st/private/6xmySLHZS/34ad1b3e5aee8a60a60c781c452ad08c)
НЕ качается. Какой то глюк на скачку. Доходит до 10% и стоит...
120705
А почему сам не хочешь попробовать, там не так уж все сложно... я про убрать, подвинуть, переместить кнопки... видос есть по редактированию скрипта МПС, хоть и старый уже но основные моменты там есть.
Твоя последняя сборка мне нравится,
:)... та что здесь лежит уже далеко не последняя))) я в ней уже много чего изменил и переделал... +еще одну делаю с плоским интерфейсом и возможно с новыми скриптами от Бретта. Дизайн честно спер у Lexins :), но тема собрана с нуля...
наброски пока выглядят так... но это только начало)))
http://jpegshare.net/thumbs/63/02/6302fb601734b6d16125d4c6b3487421.jpg (http://jpegshare.net/63/02/6302fb601734b6d16125d4c6b3487421.png.html) http://jpegshare.net/thumbs/05/42/0542e96073960c31d5ffed9e6c887a16.jpg (http://jpegshare.net/05/42/0542e96073960c31d5ffed9e6c887a16.png.html) http://jpegshare.net/thumbs/4b/c8/4bc8d0eeb65e7a10f38ff92c6240c385.jpg (http://jpegshare.net/4b/c8/4bc8d0eeb65e7a10f38ff92c6240c385.png.html)
--------------------------------------------------------
НЕ качается. Какой то глюк на скачку. Доходит до 10% и стоит...
качай тогда тут (https://yadi.sk/d/YL7ibrU6sv7TS)...
120705
А почему сам не хочешь попробовать, там не так уж все сложно... я про убрать, подвинуть, переместить кнопки... видос есть по редактированию скрипта МПС, хоть и старый уже но основные моменты там есть.
Большущее СПАСИБО за помощь
Пробовал потрошить сборку, что то получается. , но не глобально , как у Вас. Вот хочу сборку 4Icar_13_6_2_MPS_UNI подогнать к моим хотелкам, т.е функционалу приблизить к "моей". Но это у меня быстро не получается, пока разбираюсь что к чему проходит много времени....
Работает на vBulletin® версия 3.8.4. Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot