Работа с накопителями¶
HDD storage events
Подклчюение и отключение¶
При подключении внешнего накопителя он автоматически подключается (монтируется) в поддиректорию каталога /media. Имя директории совпадает с меткой тома данного носителя.
Например, если имя тома накопителя - My_FLASH, то она будет подключена в каталог /media/My_FLASH.
Для определения нового подключенного устройства, генерируется событие с номер 34
Отмонтирование накопителя происходит автоматически при его физическом отключении. Однако важно, чтобы в это время не было открыто с него ни одного файла, в частности, остановлено воспроизведение видео или аудио файлов)
Аналогично подключению флэшки, генерируется событие 34 и при её отключении.
Замечание: При подключении/отключении накопителя генерируется событие с одним и тем же номером 34. Поэтому, для определения, что конкретно произошло, рекомендуется смотреть за изменением содержимого папки /media
Работа с файловой системой¶
Простой список файлов¶
Для получения простого списка файлов в папке, есть метод WRT.dir, который получает строку с полным путем к папке и возвращает список файлов и папок в нем. Папки идут в списке первыми, но специально ничем не отличаются.
Например, так можно вывести в WRT_sh консоли список подключенных накопителей:
WRT.echo(WRT.dir("/media"));
Замечание: Пути к файлам составляются согласно правилам, принятым в *nix системах. В качестве разделителя используется символ /, все носители являются вложенными папками в папке /media
Свойства файла¶
Для получения информации о конкретном файле по его полному пути, существует метод WRT.getFileInfo, который возвращает объект состоящий из нескольких полей:
Поле | Описание | Примечание |
size | Размер файла | Обязательное |
filename | Имя файла | Обязательное |
filepath | Полный путь к файлу | Обязательное |
mime | MIME-тип | Обязательное |
artist | Исполнитель | только для аудио-файлов |
title | Название композиции | только для аудио-файлов |
album | Название альбома | только для аудио-файлов |
genre | Жанр композиции | только для аудио-файлов |
year | Год | только для аудио-файлов |
length | Длительность в секундах | только для аудио-файлов |
bitrate | Битрейт в кбит/сек | только для аудио-файлов |
Замечание: директория отличается от обычного файла только наличием MIME-типа application/x-directory
Подробный список файлов¶
Для получения полробного списка файлов, следует воспользоваться методом WRT.ListDir, он принимает от 1 до 3 параметров и возвращает список объектов, каждый из который аналогичен выводу getFileInfo для соответствующего файла.Параметры:
- Путь. Полный путь к папке, содержимое которое требуется получить.
- Маски файлов. Строка или массив строк с масками файлов.
Например, "*.jpg" или ["*.avi", "*.mkv"]. Маски файлов применяются только для файлов, папки выводятся все. Если этот параметр не указывается, то выводятся все файлы. - Флаг. Позволяет вывести только папки, только файлы или все вместе.
По умолчанию, выводятся и папки и файлы, что эквивалентно указанию флага 3.- Значение 1 - вывести файлы
- Значение 2 - вывести папки
В простейшем случае можно передавать в качестве параметра только путь, например:
WRT.ListDir("/media/MyFLASH");
Для получения же только mp3-файлов в папке music, можно сделать такой вызов:
WRT.ListDir("/media/MyFLASH/music", "*.mp3", 1);
Пример работы¶
Предположим, что мы хотим обрабатывать подключение единственного накопителя и при этом выводить в консоль (с помощью WRT.echo()) список файлов с указанием всех их свойств.
Во-первых, напишем функцию вывода описания всех файлов с флэшки:
function ls(path) {
var list=WRT.ListDir(path);
for (var file=0; file<list.length; file++) {
WRT.echo("Файл "+file+".\n");
for (var tag in list[file]) {
WRT.echo(tag+" - "+list[file][tag]+"\n");
}
WRT.echo("\n\n");
}
}
Дальше напишем функцию, обрабатывающую событие 34 и установим её как обработчик событий в WRT.onEvent.
function onEvent(){
if (WRT.Event == 34) {
var disks=WRT.ListDir("/media");
if (disks.length>0) {
WRT.echo("Найден накопитель: "+ disks[0].filename+"\n");
ls(disks[0].filepath);
}
}
}
WRT.onEvent=onEvent;
Теперь запускаем приставку, подключемся к WRTSH и смотрим вывод при подключении флэшки. Если предположить, что на флэшка имеет метку тома MyFLASH и содержит файлы Acdc.mp3, Sirenia.flac, recovery4x3.png, tr.png и папку directory, то вывод будет таким:
WRTSH 0.1# Найден накопитель: MyFLASH
Файл 0.
filename - directory
filepath - /media/MyFLASH/directory
mime - application/x-directory
size - 4096
Файл 1.
album -
artist - AcDc
bitrate - 128
filename - Acdc.mp3
filepath - /media/MyFLASH/Acdc.mp3
genre - Rock
length - 292
mime - audio/mpeg
size - 4676255
title - Thunderstruck
year - 0
Файл 2.
album - Sirenian Shores EP
artist - Sirenia
bitrate - 1014
filename - Sirenia.flac
filepath - /media/MyFLASH/Sirenia.flac
genre - Metal
length - 1291
mime - audio/x-flac
size - 163851363
title - Save Me From Myself (Remix)
year - 2004
Файл 3.
filename - recovery4x3.png
filepath - /media/MyFLASH/recovery4x3.png
mime - image/png
size - 51036
Файл 4.
filename - tr.png
filepath - /media/MyFLASH/tr.png
mime - image/png
size - 635389