Project

General

Profile

Работа с накопителями

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 для соответствующего файла.
Параметры:
  1. Путь. Полный путь к папке, содержимое которое требуется получить.
  2. Маски файлов. Строка или массив строк с масками файлов.
    Например, "*.jpg" или ["*.avi", "*.mkv"]. Маски файлов применяются только для файлов, папки выводятся все. Если этот параметр не указывается, то выводятся все файлы.
  3. Флаг. Позволяет вывести только папки, только файлы или все вместе.
    По умолчанию, выводятся и папки и файлы, что эквивалентно указанию флага 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