Формат даты %last played%

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

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

Сообщение #1 Askas » 20.05.2013, 19:23

Доброго времени суток. Хочу добавить в плейлист (EsPlaylist) колонку %last played%. По умолчанию она отображает дату и время в числовом формате, но мне нужно, чтобы в ней было, например, "5 дней назад". Каким образом можно добиться такого результата?
Askas M
Автор темы
Откуда: Новосибирск
Репутация: 0
С нами: 10 лет 10 месяцев

Сообщение #2 pois22ple » 20.05.2013, 20:21

Есть такой плагин foo_dynfil.dll
Provides global date/time-dependent fields for all tracks in ML, configured in Preferences > Dynamic Fields.
Feb 19 2011 01:46:32 <yirkha@fud.cz>

Ссылка на гидрогене - http://www.hydrogenaudio.org/forums/index.php?sho ... 53&st=50&p=744320&#entry744320

Вот мои скрипты:
%_first_played_display%
Код: Выделить всё
$puts(fp,
$if(%first_played%,$puts(x,$date_diff(%first_played%)),-1)
$ifequal($get(x),0,$if(%first_played%,
$ifequal($num($div($time_diff(%first_played%),3600),1),0,0,
$sub($mul($num($div($time_diff(%first_played%),3600),1),-1),50)
)
,),$get(x)$ifgreater($get(x),1,,))
)

$ifgreater($get(fp),-49,
$ifequal($get(fp),-1,Never,
$ifequal($get(fp),0,This Hour,
$ifequal($get(fp),1,1 Day Ago,
$ifgreater($get(fp),365,
$div($get(fp),365)'.'$num($add($div($mod($get(fp),365),30),1),2) Years Ago,
$ifgreater($get(fp),30,
$div($get(fp),30)'.'$num($add($mod($get(fp),30),1),2) Month Ago,
$get(fp) Days Ago)
)))),
$ifequal($mul(-1,$add(50,$get(fp))),1,1 Hour Ago,$mul(-1,$add(50,$get(fp))) Hours Ago)
)
%_last_played_display%
$puts(lp,
$if(%last_played%,$puts(x,$date_diff(%last_played%)),-1)
$ifequal($get(x),0,$if(%last_played%,
$ifequal($num($div($time_diff(%last_played%),3600),1),0,0,
$sub($mul($num($div($time_diff(%last_played%),3600),1),-1),50)
)
,),$get(x)$ifgreater($get(x),1,,))
)

$ifgreater($get(lp),-49,
$ifequal($get(lp),-1,Never,
$ifequal($get(lp),0,This Hour,
$ifequal($get(lp),1,1 Day Ago,
$ifgreater($get(lp),365,
$div($get(lp),365)'.'$num($add($div($mod($get(lp),365),30),1),2) Years Ago,
$ifgreater($get(lp),30,
$div($get(lp),30)'.'$num($add($mod($get(lp),30),1),2) Month Ago,
$get(lp) Days Ago)
)))),
$ifequal($mul(-1,$add(50,$get(lp))),1,1 Hour Ago,$mul(-1,$add(50,$get(lp))) Hours Ago)
)

В DUI в Playlist View определяю две новые колонки "Last Played" - %_last_played_display% и "First Played" - %_first_played_display%
pois22ple
Репутация: 10
С нами: 17 лет 7 месяцев

Сообщение #3 Askas » 21.05.2013, 04:46

pois22ple, Спасибо за ответ. Но, к сожалению, ваш вариант мне не подходит, ибо я использую Columns UI и EsPlayilst.
Askas M
Автор темы
Откуда: Новосибирск
Репутация: 0
С нами: 10 лет 10 месяцев

Сообщение #4 LUR » 21.05.2013, 05:56

Askas, это без разницы. Скрипты везде работают одинаково, бывают только исключения, если используются переменные плагинов, которые у вас не установлены. Так как переменная %last_played% вам доступна, то вы можете написать свой скрипт для анализа строки и вывода нужной вам информации, а потом вставить скрипт в качестве источника данных для столбца EsPlaylist. Если сложно со скриптами, опишите какой именно результат вы хотите получить с разными вариантами случаев, поможем. Потому что скрипт, приведенный выше у меня не то, что надо выводит. Хотя я его и не изучал.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #5 pois22ple » 21.05.2013, 07:01

Потому что скрипт, приведенный выше у меня не то, что надо выводит

Вот, что у меня (делал снимки на разных машинах, поэтому разная конфигурация плейлистов) :

Во всяком случае в пределах месяца показывает все нормально. Когда начинаю вычислять года, то считаю, что в месяце 30 дней, а в году 365 соответственно. Там естественно возможна погрешность, но не большая.

P.S. В свойствах dinamic fields использую время перерасчета - 10 мин. Естественно, если там выбрать "never" или какой-нибудь длинный период, то вы ничего не заметите - в поля будут занесены значения, вычисленные при запуске плеера.
Вложения
playlist.jpg
first+last.jpg
pois22ple
Репутация: 10
С нами: 17 лет 7 месяцев

Сообщение #6 Askas » 21.05.2013, 11:58

LUR, С большими скриптами пока сложно, да. Меня интересует, как можно реализовать следующее: если с момента последнего прослушивания прошло мене 30 дней - то показывать <количество дней> назад (3 days ago). Если больше 30 дней - <месяц> <год> (May 2013). Как-то так. А так же интересует, куда вставлять скрипты в случае использования EsPlaylist`а.
Askas M
Автор темы
Откуда: Новосибирск
Репутация: 0
С нами: 10 лет 10 месяцев

Сообщение #7 pois22ple » 21.05.2013, 14:07

Вот код того что Вы хотите
$puts(lp,
$if(%last_played%,$puts(x,$date_diff(%last_played%)),-1)
$ifequal($get(x),0,$if(%last_played%,
$ifequal($num($div($time_diff(%last_played%),3600),1),0,0,
$sub($mul($num($div($time_diff(%last_played%),3600),1),-1),50)
)
,),$get(x)$ifgreater($get(x),1,,))
)
$ifgreater($get(lp),-49,
$ifequal($get(lp),-1,Never,
$ifequal($get(lp),0,This Hour,
$ifequal($get(lp),1,1 Day Ago,
$ifgreater($get(lp),30,
$substr(%last_played%,9,10) $select($substr(%last_played%,6,7), January, February, Mart, April, May, June, July, August, September, November, December) $substr(%last_played%,3,4),
$get(lp) Days Ago)
))),
$ifequal($mul(-1,$add(50,$get(lp))),1,1 Hour Ago,$mul(-1,$add(50,$get(lp))) Hours Ago)
)

В EsPlaylist выбираете вставить любую колонку, затем ее редактировать. Обзываете ее "Last played" с полем никаким не связываете. В значение скрипта вставляете %_Last_Played_Display%.

На приведенной картинке Esplaylist верхний.
Вложения
esplaylist+standard_playlist.jpg
pois22ple
Репутация: 10
С нами: 17 лет 7 месяцев

Сообщение #8 Askas » 21.05.2013, 14:25

pois22ple, Огромное спасибо за скрипт. Вечером дома опробую. Но у меня остался последний вопрос (прошу прощения за незнание): куда вставлять сам скрипт?
Askas M
Автор темы
Откуда: Новосибирск
Репутация: 0
С нами: 10 лет 10 месяцев

Сообщение #9 LUR » 21.05.2013, 14:56

pois22ple, все нормально, посмотрел внимательно на скрипт, там присутствуют функции $date_diff и $time_diff, которые принадлежат foo_dynfill, поэтому у меня скрипт и не работает.

Askas, оказалось фубар штатно не умеет такие вещи делать, надо через плагин. Ставьте foo_dynfil. Потом:
1. Идете в настройки Preferences > Media Library/Dynamic Fields, добавляете новую переменную с именем last_played_display, а в поле Title formatting expression для нее вставляете текст скрипта, приведенного товарищем pois22ple. Применяете настройки, фубар перезапускается.
2. Правой кнопкой мыши на шапке EsPlaylist, добавляете столбец через Insert Column. Там можете выбрать любой из имеющихся типов столбцов кроме Rating (он специальный).
3. Изменяете данные столбца: правой кнопкой мыши на шапке столбца -> Edit Column. Меняете имя как хотите в Name, а в поле Format ставите %_last_played_display%

Добавлено спустя 2 минуты 26 секунд:
pois22ple, заметил, что ваша инструкция по именованию переменной отличается, наверное версии плагинов разные у меня и у вас. Вы откуда брали?
Последний раз редактировалось LUR 21.05.2013, 15:03, всего редактировалось 2 раз(а).
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #10 t830x » 21.05.2013, 14:59

Спс, себе поставил и тож интересует вывод типа
Askas:<количество дней> назад (3 days ago). Если больше 30 дней - <месяц> <год> (May 2013)
а лучше сделать чтобы из базы lastfm брал дату первого проигрывания (для тех у кого есть там акк) а то у меня не больше года показывает
t830x M
Аватара
Откуда: Латвия
Репутация: 14
С нами: 11 лет 10 месяцев

Сообщение #11 pois22ple » 21.05.2013, 15:58

LUR

pois22ple, заметил, что ваша инструкция по именованию переменной отличается, наверное версии плагинов разные у меня и у вас. Вы откуда брали?

Не понял вопроса.

foo_dynfil.dll у меня 1.beta4 (Feb 19 2011 01:46:32)
foo_esplaylist - 0.1.3.9, вроде последний. Всегда качал его с сайта разработчика - http://foo2k.chottu.net/


Askas

Не забудьте в настройках foo_dynfil выбрать частоту обновления своих переменных, иначе будут отображаться значения, полученные при первом обращении к foo_dynfil !
pois22ple
Репутация: 10
С нами: 17 лет 7 месяцев

Сообщение #12 LUR » 21.05.2013, 16:12

pois22ple:Обзываете ее "Last played"
У меня если так назвать переменную, то она превращается в %_Last played%, но никак не в %_Last_Played_Display%. Версия плагина та же.
LUR M
Модератор
Аватара
Откуда: Минск
Репутация: 367
С нами: 11 лет 4 месяца

Сообщение #13 pois22ple » 21.05.2013, 16:29

LUR

Обзываете ее "Last played"
- я наверное не очень точно выразился, в esplaylist колонку которую редактируем обзываем Last played, т.е. вставляем два слова "Last played" в поле Name.
Значение скрипта для меня - поле Format.
Ваша инструкция по созданию колонки конечно правильней и более понятна для новичка, я же писал особо не задумываясь, просто поток сознания перекладывал в слова, не заботясь о терминологии.
pois22ple
Репутация: 10
С нами: 17 лет 7 месяцев

Сообщение #14 Askas » 21.05.2013, 16:31

Все работает отлично! Спсибо всем за помощь.
Не забудьте в настройках foo_dynfil выбрать частоту обновления своих переменных, иначе будут отображаться значения, полученные при первом обращении к foo_dynfil !
Поставил, спасибо.
У меня если так назвать переменную, то она превращается в %_Last played%, но никак не в %_Last_Played_Display%. Версия плагина та же.
У меня незвание не изменилось.
Askas M
Автор темы
Откуда: Новосибирск
Репутация: 0
С нами: 10 лет 10 месяцев

Сообщение #15 pois22ple » 21.05.2013, 16:48

Askas,

В последнем скрипте заметил ошибку - пропустил октябрь в списке. Должно быть:

$select($substr(%last_played%,6,7), January, February, Mart, April, May, June, July, August, September, October, November, December)

Название месяцев можно в принципе выводить и по русски, но я привык к тому, что foobar2000 англоязычен, поэтому использую именно английский язык.
pois22ple
Репутация: 10
С нами: 17 лет 7 месяцев

Сообщение #16 Askas » 21.05.2013, 16:51

pois22ple, Сейчас добавлю, спасибо. А названия месяцев я тоже предпочитаю на английском.
Askas M
Автор темы
Откуда: Новосибирск
Репутация: 0
С нами: 10 лет 10 месяцев

Сообщение #17 morozow-ru » 05.01.2015, 23:17

Товарищи, я наверное очень тупой, но не могу написать скрипт :(
foo_dynfil.dll - установил. Стандартный плейлист.
Создал колонку "Last Played", переменную %_last_played_display%. И мне нужно, чтобы в этой колонке отражалась просто дата и время последнего проигрывания.
morozow-ru
Аватара
Репутация: 0
С нами: 9 лет 3 месяца

Сообщение #18 t830x » 05.01.2015, 23:25

Тут ведь в этой теме есть готовые скрипты
t830x M
Аватара
Откуда: Латвия
Репутация: 14
С нами: 11 лет 10 месяцев

Сообщение #19 morozow-ru » 05.01.2015, 23:48

Вот, посмотрите пожалуйста, вроде все сделал верно:

Скрипт вставил вот этот:
==========
$puts(lp,
$if(%last_played%,$puts(x,$date_diff(%last_played%)),-1)
$ifequal($get(x),0,$if(%last_played%,
$ifequal($num($div($time_diff(%last_played%),3600),1),0,0,
$sub($mul($num($div($time_diff(%last_played%),3600),1),-1),50)
)
,),$get(x)$ifgreater($get(x),1,,))
)
$ifgreater($get(lp),-49,
$ifequal($get(lp),-1,Never,
$ifequal($get(lp),0,This Hour,
$ifequal($get(lp),1,1 Day Ago,
$ifgreater($get(lp),30,
$substr(%last_played%,9,10) $select($substr(%last_played%,6,7), January, February, Mart, April, May, June, July, August, September, November, December) $substr(%last_played%,3,4),
$get(lp) Days Ago)
))),
$ifequal($mul(-1,$add(50,$get(lp))),1,1 Hour Ago,$mul(-1,$add(50,$get(lp))) Hours Ago)
)
=============
Вложения
Untitled-1.jpg
morozow-ru
Аватара
Репутация: 0
С нами: 9 лет 3 месяца

Сообщение #20 t830x » 06.01.2015, 02:22

2.png

1.png


Надо просто начать слушать и он сам через минуту покажет.
t830x M
Аватара
Откуда: Латвия
Репутация: 14
С нами: 11 лет 10 месяцев

След.

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