Инструменты пользователя

Инструменты сайта


foobar2000:tagz:tutorial:create_columns

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
foobar2000:tagz:tutorial:create_columns [2017/07/27 18:52]
5.228.8.78
foobar2000:tagz:tutorial:create_columns [2017/11/05 12:26] (текущий)
VEG старая версия восстановлена (2006/09/02 05:42)
Строка 1: Строка 1:
-Ведущая компания в России и странах СНГ по продаже авиабилетов ​«Airline» ​+====== Создание скрипта ​для столбцов ====== 
 + 
 +Красивые "​фишки"​ и "штучки"​ это конечно очень хорошо,​ но что будет представлять из себя плэйлист без текстовой информации о песнях?​ По этому мы в первую очередь позаботимся об этом. Конечно же, при создании собственного скрипта,​ мы практически никогда явно не разделяем различные стадии. Особенно это касается создания ​ скриптов для текста и скриптов для цветовых схем, процессы создания которых идут параллельно,​ по той причине,​ что большая часть описания цветовой схемы определяет как именно будет выглядеть текстовая часть. И наоборот. ​ Вот, хорошее место чтобы еще раз сказать:​ никто не заставляет Вас повторять мой дизайн буква в букву. Если что то Вас не устраивает - просто возьмите и сделайте как Вам угодно. В конце концов в том том то и прелесть Fooobar2000:​ у каждого есть свой собственный выбор, неограниченный конфигурацией из нескольких пресетов. ​  
 + 
 +Ну что-то ​я совсем заболтался ;-) Итак, идите в **Foobar2000 -> Preferences**,​ в открывшемся дереве выберите **Display -> Columns UI -> Playlist View 
 +** и перейдите на закладку **Columns**. С левой ​стороны будет список всех имеющихся столбцов. Мы собираемся ​начать с нуля, поэтому смело нажимайте кнопку **Delete** для того чтобы их все удалить. 
 + 
 +===== Столбец Artist/​Album ===== 
 + 
 +Для создания новых столбцов имеются 2 кнопки:​ **New** создает новый столбец в конце списка,​ т.е. этот столбец будет крайним справа в плэйлисте. А кнопка **Insert** вставляет новый столбец перед тем столбцом,​ который выбран в данный момент. 
 + 
 +Наш первый столбец содержит информацию о исполнителе и альбоме. Нажмите **New** для того чтобы создать столбец,​ которому автоматически присвоится имя //New column//. Замените это имя в поле **Display name** значением //​Artist/​Album//​ (или любым ​другим, которое по Вашему лучше подходит). Установите значение **width** (ширина столбца) равное **250** и **Aligment** равное **Left** (выравнивание по левому краю). Самым важным является большое поле ввода внизу. Если вкладка ​ **Display ** еще не активна,​ то щелкните на ней мышкой и приготовитесь вводить код. 
 + 
 +В большинстве столбцов мы должны делать различия между композициями принадлежащими полным альбомам (с этого момента я буду называть их '​альбомными трэками'​) и отдельными композициями (отдельными трэками). Задача скрипта будет такая: //Если работаем с альбомным трэком,​ то делаем то-то. Если же работаем с отдельным трэком,​ делаем другое//​. Конечно же для этого лучше всего подойдет конструкция ''​if''​
    
-Крупнейшая международная компания по продаже ​А/В билетов ​ +<​html><​pre class="​code">​$if(<​b>​$get_global(isAlbum)</​b>​ 
-срочно набирает сотрудников на постоянную основу для несложной ​ + , 
-работы через интернетс ежедневными выплатами до 11 000 руб.  +// Tasks for album tracks go here 
-  +
-Работая в нашей компании Вы получаете +// Tasks for single tracks go here 
-  +)</​pre></​html>​ 
-- Соблюдение трудового кодекса ​ + 
-- Полный соцпакетоплачиваемый отпуск, больничный,​ санаторий.  +Обратите внимание на часть выделенную жирным шрифтом. Т.к. разделение альбомный/​отдельный трэк нам нужно повсеместно,​ то самым ​ эффективным решением будет выполнить такой запрос только один раз, сохранив его результат в глобальной переменной и в дальнейшем просто использовать эту переменную там где необходимо. Это спасает нас от перепечатывания ​одних и тех же строк снова и снова, и делает скрипт быстрее,​ потому что запрос фактически выполняется только один раз. 
-- Каждый наш сотрудник на дому ​гарантированно получает высокий доход. руб. в день. ​ + 
-- Гарантированные стабильные выплаты заработанных ​денег.  +{{:​foobar2000:​tagz:​tutorial:​setup_global_vars.png}} 
-Выплаты ​происходят ежедневно на банковские карты или ​электронные кошельки. ​ + 
-  +Посмотрите на закладку **General** , поставьте галочку **Use global variables for display** (использовать глобальные переменные для отображения) и активируйте закладку **Variables** внизу. Сюда мы введем код для проверки альбома. 
-Пройдите регистрацию у нас на сайте. ​> http://airline-rabota.tk<  + 
-  +  $if($and(%tracknumber%,​%album tracks%,​%album%),​ 
-Без вложений,​ опыт и профессиональные навыки не требуются!+  $set_global(isAlbum,​1) 
 +  ) 
 + 
 +В первой строке используется функция ''​$and()'' ​для того чтобы проверить наличие тэгов tracknumber,​ album tracks и album. Это выражение ​будет ​истинным только в случае когда в файле содержатся все три тэга. Говоря простыми словами,​ мы предполагаем ​что композиция является ​альбомным трэком если в ней присутствуют все эти тэги. В противном случае она рассматривается как ​отдельный ​трэк. 
 + 
 +Во второй строке ''​$set_global()''​ создает переменную с именем ''​isAlbum''​ и присваивает ей значение ''​1''​. Таким образом,​ если ​все три тэга имеются,​ то переменная ''​isAlbum''​ будет существовать. В противном ​случае этой переменной не будет.  
 + 
 +Все что определено на закладке **Global / Variables** при помощи ''​$set_global()''​ может быть получено в любом месте кода при помощи ''​$get_global()''​. И это именно то, что мы делаем ​в первом скрипте. Давайте вернемся к нему и вставим код ​для ​отдельных трэков 
 + 
 +  $if($get_global(isAlbum) 
 +  , 
 +  // Tasks for album tracks go here 
 +  , 
 +  // Tasks for single tracks go here 
 +  [%artist%] 
 +  ) 
 + 
 +Очень легко и очень ​скучно, не правда ​ли? Мы просто ищем тэг artist (не забудьте про подстановку полей, скрывающуюся за ним) и используем квадратные скобки, для того чтобы предотвратить показ знака ''?'',​ в случае отсутствия тэга.  
 +Случай с альбомным трэком более интересен. Взгляните еще раз на [[http://​wiki.foobar2000.ru/​_detail/​foobar2000:​tagz:​tutorial:​dark_connections_fb2k.png?​id=foobar2000%3Atagz%3Atutorial%3Acreate_columns&​cache=cache=cache|скриншот]] завершенного ​дизайна. На первых пяти строках альбома Вы видите текст. Чтобы добится такого результата мы использовали функцию ''​$select()''​ для фильтрации по номеру трэка (который по существу представляет собой номер строки в альбоме). 
 + 
 +  $select(%tracknumber%,​ 
 +  // Track 1 
 +  $if($strcmp(%codec%,'​ATSC A/​52'​),'​dolby digital ac3',​ 
 +  $if($info(lame_version),'​lame',​ 
 +  $lower(%codec%) 
 +  )) 
 +  ' album {', 
 +  // Track 2 
 +  ' ​  '​$if2(%album artist%,'<​no artist>'​),​ 
 +  // Track 3 
 +  ' ​  '​$if2(%album%,'<​no album>'​),​ 
 +  // Track 4 
 +  ' ​  '​['​Disc '​%disc%$tab()]$if2(%album date%,​[%date%])$tab(),​ 
 +  // Track 5 
 +  '​}'​ 
 +  ) 
 + 
 +В первую очередь обратите внимание на третью строку в секции Track 1. Она возвращает имя аудио кодека. Конечно же здесь мы делаем небольшое допущение,​ потому что ''​%codec%''​ показывает кодек только для первого трэка в альбоме. Но неужели кто-то кодирует разные трэки с одного альбома разными кодеками?​ ;-)  ''​$Lower''​ переводит имя кодека в нижний регистр
 + 
 +Поднимемся на две строчки выше. Представьте что мы работаем с альбомом в формате AC3 (что, вообще-то,​ маловероятно). В этом случае команда ''​%codec%'' ​вернет строку ‘ATSC A/52’ в качестве имени кодека,​ что с технической точки зрения совершенно верно, так как это официальное название,​ установленное [[wpru>​Международный_союз_электросвязи|МСЭ]]. Несмотря на это, с трудом верится что всем знакомо такое обозначение. Поэтому мы используем ''​$if()''​ в сочетании с ''​$strcmp()''​ (эта функция говорит нам являются две ли строки, переданные как аргументы,​ идентичными) для того чтобы перехватить ‘ATSC A/52’ и взамен вывести ‘dolby digital ac3’. 
 + 
 +Нечто подобное происходит и на следующей строке. Функция ''​$info()''​ используется ​для получения технической информации о файле. Здесь мы ищем ''​lame_version''​ для ​того чтобы определить MP3 файлы полученные при помощи кодировщика Lame. Если мы встретим подобный файл, мы покажем ‘lame’ вместо ‘MP3’, которое бы мы получили при использовании ''​%codec%''​. MP3 файлы сжатые другим кодировщиком (не-Lame) не имеют поля ''​lame_version''​ и поэтому ''​$if()''​ не сработает в этом случае. ​Поэтому для таких фалы будут отображены просто как ‘mp3’. Правда на данный ​момент все Ваши файлы сжатые Lame будут так же отображаться как '​mp3’,​ потому что Foobar2000 0.9 пока не поддерживает определения поля ''​lame_version''​. Но я абсолютно уверен,​ что в конце концов такая возможность ​появится. 
 + 
 +Итак мы посмотрели на строку ''​$lower(%codec%)''​. Последующая ​пара скобок закрывает два if. Следующая же строка добавляет статическую строку после ​информации о кодеке. 
 + 
 +Код из секции track 1 так же является нашим первым примером использования вложенных выражений, когда второе выражение ''​$if()''​ является частью //​иначе// ​первого ''​$if()''​. Как это можно перевести: //Если используемый ​кодек называется ‘ATSC A52’отобразить ​более понятное ‘dolby digital ac3'. Иначе выолнить вторую команду if: Проверить наличие поля ''​lame_version''​ и отобразить ‘lame’. Если же такого поля ​нет, использовать то что выдаст ''​%codec%''//​. И этим мы завершаем 1-ю строку альбома. 
 + 
 +Вторая строка начинается с трех знаков пробела,​ служащих для отступа в плэйлисте. ''​$if2()''​ ищет и показывает тэг ''​%album artist%''​ (и снова не забываем про подстановку полей) илиесли Ваши файлов ​не имеют правильных ​тэгов, строку ‘no-artist’. То же самое происходит и на 3-й строке,​ но уже с тэгом album
 + 
 +Строка 4 содержит информацию о номере ​диска и дате релиза. И в первую очередь мы отображаем значение поля ''​%disc%'',​ используя квадратные скобки для тоо чтобы выводить значение только в случае если это поле присутствует,​ и отображаем,​ к примеру,​ //Disc 1//. Затем идет ''​$tab()'',​ которое вставляет знак табуляции, используемый для выравнивания текста в столбце. Это работает так: 
 + 
 +  выравнивание по левому ​краю $tab() выравнивание по правому краю 
 +  ​выравнивание по левому краю $tab() выравнивание по центру $tab() ​выравнивание по правому краю 
 + 
 +Теперь для многодисковых альбомов мы выводим информацию о диске на левой стороне столбца,​ за этой ​информацией идет выравненный по правому краю последующий текстДля однодисковых альбомов эта колонка пуста, не считая трех отступов (знаков пробела). 
 + 
 + 
 +Далее наступает ​время ''​$if2()''​ позаботиться об отображении ​даты. В первую очередь мы проверяем ​наличие тэга album date и отображаем его, если он есть. Напомню что тэг album date используется в сборниках, когда дата выхода отдельного ​трэка ​отличается от даты ​выхода альбома (сборника). если же данный тэг не найден,​ то отображается тэг date, но, благодаря квадратным скобкам, опять же, только в том случае если этот есть в файле. 
 + 
 +Ну вот мы и подошли к 5-й строке. В общем-то я даже не знаю что про нее сказать :-) Просто ​напросто закрывающая скобка для нашего выражения,​ начатого на строке 1. Вот, собственно,​ и все для отображения в режиме альбома в этом столбце. Полностью это выглядит так: 
 + 
 +  $if($get_global(isAlbum) 
 +  , 
 +  // --- Album view --- 
 +  $select(%tracknumber%,​ 
 +  // Track 1 
 +  $if($strcmp(%codec%,'​ATSC A/​52'​),'​dd_ac3',​ 
 +  $if($info(lame_version),'​lame',​ 
 +  $lower(%codec%) 
 +  )) 
 +  ' album {', 
 +  // Track 2 
 +  ' ​  '​$if2(%album artist%,'<​no artist>'​),​ 
 +  // Track 3 
 +  ' ​  '​$if2(%album%,'<​no album>'​),​ 
 +  // Track 4 
 +  ' ​  '​['​Disc '​%disc%$tab()]$if2(%album date%,​[%date%])$tab(),​ 
 +  // Track 5 
 +  '​}'​ 
 +  ), 
 +  // --- Single view --- 
 +  [%artist%] 
 +  ) 
 + 
 +===== Столбец Tracknumber ===== 
 + 
 +Создайте новый столбец,​ назовите его **#**, устновите ширину (**Width**) ​равную **30** пикселей и выравнивание по центру (**Alignment** равное **Centre**). В этом столбце будет ​отображаться ​номер трэка для альбомов,​ для одиночных ​трэков мы ничего не будем отображатьСкрипт предельно прост 
 + 
 +  $if($get_global(isAlbum),​ 
 +  $ifgreater(%tracknumber%,​9,​ 
 +  %tracknumber%,​ 
 +  '​0'​$num(%tracknumber%,​1) 
 +  )) 
 + 
 +Первая строка ​Вам уже наверняка знакома,​ она выполняет остальные строки для альбомных трэков, и, естественно,​ пропускает их для ​одиночных. 
 + 
 +Строки начиная со второй являются вызовом одной команды - ''​$ifgreater()'',​ которая делает следующее: //​Если ​номер трэка больше 9 (что означает что ​он состоит из 2-х цифр), то отображать номер трэка. Иначе отобразить 0, а затем ​номер трэка, без нуля в начале.//​ 
 + 
 +Стоит отметить,​ что вы не можете не указывать часть //иначе// в коммандах ''​$ifgreater()'',​ такое ​разрешается только для обычного ''​$if()''​.  
 + 
 +Функция ''​$num(number,​length)''​ работает следующим образом:​ она берет число //number// и присоединяет нули ​к его началу до тех пор пока, пока дляна строки ​не станет равной //length//. Если же длина строки (количество цифр) в //number// уже больше //length//, то никаких действий выолняться ​ не будетЕсли же строка содержащая число //number// уже заполнена нулями спереди до длины большей чем //length//, то после выполнения функции лишние нули будут удалены. Данная возможность этой функции именно то, что нам надо в этом скрипте, потому что ее вызов с //​length// ​равной 1 всегда удаляет любые нули в начале ​строки, ​а подстановка полей foobar2000 всегда дополняет нулями номер трэка до двух ​цифр. Вы могли заметить,​ что наш вызов ''​$ifgreater()''​ сам ставит ноль в для номера трэка, если он меньше 10.  Вы спросите,​ зачем мы подставляем ноль сами, ​ хотя мы обрезали его перед этим используя ''​$num(%tracknumber%,​1)''?​ Почему не не используем стандартную подстановку полей, которая автоматически добавляет ​ноль? Так вот, далее мы планируем отображать этот ведущий ноль другим цветом,​ а используя стандартную подстановку полей это невозможно 
 + 
 +Собственно скрипт для столбца ​//Tracknumber// готов. Тем не менее мы добавим одну маленькую изюминку,​ сделав ​отображение номеров трэков в [[wpru>​Hex|шестнадцатеричной системе]]. Конвертация числа осуществляется простым вызовом функции ''​$hex()''​. Получим наш финальный скрипт:​ 
 + 
 +  $if($get_global(isAlbum), 
 +  $ifgreater(%tracknumber%,​15,​ 
 +  $hex(%tracknumber%,​1),​ 
 +  '​0'​$hex(%tracknumber%,​1) 
 +  )) 
 + 
 +Синтаксис у ''​$hex()''​ точно такой же как и у ''​$num()''​. Все что нам нужно сделать,​ это поместить все выводимые номера ​трэков в функцию ''​$hex()''​ и немного изменить код для добавления нулей, ​потому что в шестнадцатеричной системе вторая цифра появляется у числа большего F, равному 15 в десятеричной системе. Соответственно нам нужно заменить нашу 9-ку во второй строке скрипта на 15.  
 + 
 +Конечно же Вы можете отображать ​номера трэков так как Вам угодно, я же поклонник шестнадцатеричной системы, и буду использовать этот скрипт на всем протяжении этого ​ пособия. 
 + 
 +~~DISCUSSION~~
foobar2000/tagz/tutorial/create_columns.1501170775.txt.gz · Последние изменения: 2017/07/27 18:52 — 5.228.8.78