Недавно установил сервер с Azureus Web UI для скачивания фильмов. Но осталась одна проблема — запись DVD для просмотра на домашнем кинотеатре. Немного поискав так и не нашел веб-приложения для записи дисков, ну что ж, напишем сами.
Основная идея скрипта — позволить пользователю выбрать директорию или файл на сервере и выполнить команду записи из пакета dvd+rw-tools:
Используемые возможности Django:
неиспользуемые возможности нисколько не мешают, благодаря модульной архитектуре Django.
Начнем с библиотеки-обертки над growisofs. Она достаточно простая, объект Burner в конструкторе принимающий имя записывающего устройства, пытается определить версию growisofs и если ее нет вызывает исключение. В объекте метод burndvd с параметром path, используя subprocess.Popen пытается нарезать диск. Ошибки определяются чтением stderr и отражаются вызовом нескольких исключений.
Самая интересная часть приложения — пользовательский интерфейс.
Правило формирования url:
все что начинается с /dvdburn попадает в метод index, оставшаяся часть url передается как параметр dirname.
Метод view index содержит основную часть логики скрипта.
В этом методе к полученному в url пути добавляется путь к корню хранилища фильмов, путь разбивается на составлящие для расставления ссылок на родительские директории, содержимое текущего пути передается в шаблон навигации. Если обнаружен post вызов запускается запись, в текущей версии отображение процесса не реализовано, поэтому пока идет запись страница будет грузиться, по окончании записи отображется шаблон результата.
Что хотелось бы улучшить:
Основная идея скрипта — позволить пользователю выбрать директорию или файл на сервере и выполнить команду записи из пакета dvd+rw-tools:
growisofs -dvd-compat -Z <устройство> -R -J -pad "<путь к директории для записи>"к фильмам выложенным без VIDEO_TS необходимо его добавить:
growisofs -dvd-compat -Z <устройство> -R -J -pad -graftpoints "/VIDEO_TS=<путь к директории для записи>"
Используемые возможности Django:
- Человеко-понятные урлы
- Шаблонный движок
- MVC
неиспользуемые возможности нисколько не мешают, благодаря модульной архитектуре Django.
Начнем с библиотеки-обертки над growisofs. Она достаточно простая, объект Burner в конструкторе принимающий имя записывающего устройства, пытается определить версию growisofs и если ее нет вызывает исключение. В объекте метод burndvd с параметром path, используя subprocess.Popen пытается нарезать диск. Ошибки определяются чтением stderr и отражаются вызовом нескольких исключений.
Самая интересная часть приложения — пользовательский интерфейс.
Правило формирования url:
urlpatterns = patterns('', (r'^/dvdburn$', 'default.dvdburn.views.index', {'dirname':''}), (r'^/dvdburn/(?P<dirname>[^?]+)/$', 'default.dvdburn.views.index'), )
все что начинается с /dvdburn попадает в метод index, оставшаяся часть url передается как параметр dirname.
Метод view index содержит основную часть логики скрипта.
В этом методе к полученному в url пути добавляется путь к корню хранилища фильмов, путь разбивается на составлящие для расставления ссылок на родительские директории, содержимое текущего пути передается в шаблон навигации. Если обнаружен post вызов запускается запись, в текущей версии отображение процесса не реализовано, поэтому пока идет запись страница будет грузиться, по окончании записи отображется шаблон результата.
Что хотелось бы улучшить:
- Запись DVD9 на 2 однослойных DVD при необходимости
Отображение процесса записи в процентах, получать информацию можно разбирая вывод growisofs а выводить используя ajax
исходный код скрипта