суббота, 30 мая 2009 г.

Amarok Batch Mode

Amarok 2.1: пакетный режим

Начиная с версии 2.1 Amarok может взаимодействовать с коллекцией в "Пакетном режиме". Не так давно в вики Amarok появилась статья по использованию этого режима, после чего я сделал русскую интерпретацию англоязычной версии: http://amarok.kde.org/wiki/Batch_Mode

Пакетный режим сканирования позволит сканировать коллекцию отдельно от основного приложения. Вместо того, чтобы запускать и держать открытым Amarok, процесс можно будет запускать из коммандной строки и сохранять вывод. А это позволит легко запускать сканирование по заданию в cron или из скриптов. Другое, огромное преимущество — если Ваша музыка расположена на удаленной машине, ее можно будет добавить в локальную коллекцию, где доступ будет быстрым, в отличии от работы через сеть.

Это изменило обычный способ упаковки Amarok. Если раньше, для сканирования коллекции необходима была полная установка приложения, то сейчас приложение поставляется с утилитами (на данный момент это только сканер коллекции, но в скоре это будут и другие) в виде отдельного пакета, скорее всего он будет называться amarok-utils или amarok-utilities. Это сделано для того, чтобы избавиться от всех KDE и X11 зависимостей для этих утилит. А это значит, что можно будет запускать режим пакетного сканирования на машине без графики!

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

Примечание: обычно $KDEHOME это .kde или .kde4, в зависимости от Вашего дистрибутива.

Полное сканирование

Необходимо запускать amarokcollectionscanner со следующими параметрами:

-b → пакетный режим — это даст узнать сканеру, что нужно запускаться в пакетном режиме.

-r → рекурсивно — скажет сканеру, чтобы тот сканировал рекурсивно. Этот параметр не обязателен, нет необходимости его использовать, если нет желания.

--rpath=<путь> → относительный путь. Этот параметр не обязателен, используйте его только если сканируете музыку не с той машины, на которой запущен Amarok.

Этот параметр нуждается в некотором пояснении. Предположим, что музыка на сервере хранится в каталоге /media/Music. Следовательно, сканер будет запущен Вами из /media, а это в свою очередь и будет путем. Однако предположим, что есть общий доступ к музыке с использованием NFS для Вашего ноутбука, на котором запускается Amarok, и на ноутбуке все смонтировано в /mnt/Music. Следовательно Вы хотите, чтобы сканер работал с /mnt вместо /media. Итак, если будет введено --rpath=«/mnt», оно заменит каталог на время сканирования на /mnt.

Итак, предположим, что имеется два сценария, первый:

  • На сервере музыка расположена в /media/Music

  • На клиенте музыка смонтирована в /mnt/Music

Выполняем следующие шаги для полного сканирования.

  1. На сервере cd /media

  2. Запускаем: amarokcollectionscanner -b -r --rpath="/mnt" Music > amarokcollectionscanner_batchfullscan.xml (примечание: это должен быть файл вывода!)

  3. Передайте этот файл на клиентскую машину. Примечание: клиент может изменить этот файл, если хотите, можете сделать резервную копию этого файла.

  4. На клиенте, переместите файл в каталог $KDEHOME/share/apps/amarok

  5. В Amarok запустите полное обновление. Amarok воспользуется файлом amarokcollectionscanner_batchfullscan.xml и будет читать его содержимое, вместо запуска своего сканера коллекции.

Другой сценарий:

  • На сервере один каталог с музыкой расположен в /media/Music, а другой в /home/jeff/Music

  • На клиентской машине как и раньше есть каталог /mnt/Music, а также есть /home/jeff/Music с сервера, смонтированный в ту же директорию на клиентской машине (т.е. /home/jeff/Music)

Тогда выполняем следующие шаги:

  1. На сервере cd /media

  2. Запускаем: amarokcollectionscanner -b -r --rpath="/mnt" Music > ~/amarokcollectionscanner_batchfullscan.xml (примечание: это должен быть файл вывода!)

  3. На сервере cd /home/jeff

  4. Запускаем: amarokcollectionscanner -b -r >> ~/amarokcollectionscanner_batchfullscan.xml (Да, правильным поведением в этом случае будет добавление вывода в существующий файл. Результирующий файл не будет настоящим файлом XML, но сканер знает как разделяются различные части XML)

  5. Передайте этот файл на клиентскую машину. Примечание: клиент может изменить этот файл, если хотите, можете сделать резервную копию этого файла.

  1. На клиенте, переместите файл в каталог $KDEHOME/share/apps/amarok

  2. В Amarok запустите полное обновление. Amarok воспользуется файлом amarokcollectionscanner_batchfullscan.xml и будет читать его содержимое, вместо запуска своего сканера коллекции.

Инкрементальное сканирование

Сначала необходимо ознокомиться с полным сканированием, чтобы понять, что делает Amarok. Единственное заметное различие между полным и инкрементальным пакетным сканированием в том, что инкрементальное не поддерживает параметр --rpath. А это значит, что сканер необходимо будет запускать на той же машине, где будет работать Amarok, либо должна быть абсолютно идентичная структура каталогов с музыкой.

Каждый раз, когда сканер запускается при открытом Amarok, файлом для записи является amarokcollectionscanner_batchincrementalinput.data в каталоге $KDEHOME/share/apps/amarok. Файл содержит список всех каталогов в вашей коллекции и это тот файл, который позволит выполнить инкрементальное сканирование.

Необходимо запускать amarokcollectionscanner со следующими параметрами:

-b → пакетный режим — это даст узнать сканеру, что нужно запускаться в пакетном режиме.

-i → инкрементальный режим — скажет сканеру, чтобы сканирование было инкрементальным.

-r → рекурсивно — имеет особое назначние в пакетном режиме инкрементального сканирования...

Обычно, когда выполняется инкрементальное сканирование в Amarok, создается список каталогов, которые уже содержат рекурсивно все известные каталоги и передает этот список сканеру. Если сканер не знает, что делать с новой папкой, он отправляет D-Bus запрос в Amarok для выяснения, входит ли папка в существующий обхват коллекции. Если же Amarok во время сканирования не запущен, то флаг -r будет решать, что делать в этом случае. Если параметр указан, новые папки будут прочитаны, если нет, то не будут. Запомните, что если флаг не используется, сканер каждый раз будет думать, что это новый каталог и перечитывать его снова и снова. Я не думаю, что это проблема, но и не особо тестировал. Дайте мне знать.

Ну и последнее: когда запущен пакетный режим инкрементального сканирования, не нужно определять папку для сканера. Ожидается, что первым аргументом, вместо папки, будет полностью файл amarokcollectionscanner_batchincrementalinput.data. При обычном использовании сканирование Amarok проверяет время последнего изменения (mtime) папок для того, чтобы определить нуждаются ли они в обновлении. В пакетном режиме инкрементального сканирования, сканер смотрит время последнего изменения этого файла, чтобы определить, изменилось ли что-нибудь. Итак, каждый раз когда сканирование запускается, необходимо изменить время модификации этого файла для выполнения инкрементального сканирования, вместо добавления.

Шаги по использованию:

  1. Запускаем: amarokcollectionscanner -b -i /my/home/$KDEDIR/share/apps/amarok/amarokcollectionscanner_batchincrementalinput.data >> /my/home/$KDEDIR/share/apps/amarok/amarokcollectionscanner_batchincrementalscan.xml (примечание: это должен быть файл вывода!)

  2. Запускаем: touch /my/home/kdedir/share/apps/amarok/amarokcollectionscanner_batchincrementalinput.data

  3. Повторяйте шаги 1 и 2 некоторое время...

  4. В Amarok запустите инкрементальное обновление (оно запускается автоматически при старте программы). Amarok будет читать содержимое файла amarokcollectionscanner_batchincrementalscan.xml вместо запуска своего сканера коллекции.

Post Scriptum: для любителей русского языка, я перевел справку программы amarokcollectionscanner на русский. После релиза Amarok 2.1, и упаковки соответствующих пакетов в ваших любимых дистрибутивах, можно будет использовать справку так: amarokcollectionscanner -h.
Отправить комментарий