Начиная с версии 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.
Передайте этот файл на клиентскую машину. Примечание: клиент может изменить этот файл, если хотите, можете сделать резервную копию этого файла.
6.
На клиенте, переместите файл в каталог $KDEHOME/share/apps/amarok
7.
В 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.