ff3cae13ee169ac172c182848b9e4e6929af141f
5 'require tools.widgets as widgets';
7 var CBIMiniDLNAStatus
= form
.DummyValue
.extend({
9 var port
= +uci
.get_first('minidlna', 'minidlna', 'port');
11 if (isNaN(port
) || port
< 0 || port
> 65535)
14 return L
.resolveDefault(fs
.exec_direct('/usr/bin/wget', [ '-q', 'http://127.0.0.1:%d/'.format(port
), '-O', '-' ]), null)
15 .then(L
.bind(function(html
) {
17 this.default = E('em', {}, [ _('The miniDLNA service is not running.') ]);
20 var audio
= html
.match(/Audio files<\/td><td>(\d+)/),
21 video
= html
.match(/Video files<\/td><td>(\d+)/),
22 image
= html
.match(/Image files<\/td><td>(\d+)/);
24 this.default = _('The miniDLNA service is active, serving %d audio, %d video and %d image files.')
25 .format(audio
? +audio
[1] : 0, video
? +video
[1] : 0, image
? +image
[1] : 0);
31 return L
.view
.extend({
35 m
= new form
.Map('minidlna', _('miniDLNA'), _('MiniDLNA is server software with the aim of being fully compliant with DLNA/UPnP-AV clients.'));
37 s
= m
.section(form
.TypedSection
);
38 s
.title
= _('Status');
40 s
.cfgsections = function() { return [ '_status' ] };
42 o
= s
.option(CBIMiniDLNAStatus
);
45 s
= m
.section(form
.TypedSection
, 'minidlna', 'miniDLNA Settings');
49 s
.tab('general', _('General Settings'));
50 s
.tab('advanced', _('Advanced Settings'));
52 o
= s
.taboption('general', form
.Flag
, 'enabled', _('Enable'));
54 o
= s
.taboption('general', form
.Value
, 'port', _('Port'),
55 _('Port for HTTP (descriptions, SOAP, media transfer) traffic.'));
58 o
= s
.taboption('general', widgets
.DeviceSelect
, 'interface', _('Interfaces'), _('Network interfaces to serve.'));
61 o
.cfgvalue = function(section_id
) {
62 return L
.toArray(uci
.get('minidlna', section_id
, 'interface')).join(',').split(/[ \t,]+/);
64 o
.write = function(section_id
, value
) {
65 return uci
.set('minidlna', section_id
, 'interface', L
.toArray(value
).join(','));
68 o
= s
.taboption('general', form
.Value
, 'friendly_name', _('Friendly name'), _('Set this if you want to customize the name that shows up on your clients.'));
70 o
= s
.taboption('general', form
.ListValue
, 'root_container', _('Root container'));
71 o
.value('.', _('Standard container'));
72 o
.value('B', _('Browse directory'));
73 o
.value('M', _('Music'));
74 o
.value('V', _('Video'));
75 o
.value('P', _('Pictures'));
77 o
= s
.taboption('general', form
.DynamicList
, 'media_dir', _('Media directories'), _('Set this to the directory you want scanned. If you want to restrict the directory to a specific content type, you can prepend the type (\'A\' for audio, \'V\' for video, \'P\' for images), followed by a comma, to the directory (eg. A,/mnt/media/Music). Multiple directories can be specified.'));
79 o
= s
.taboption('general', form
.DynamicList
, 'album_art_names', _('Album art names'), _('This is a list of file names to check for when searching for album art.'));
80 o
.cfgvalue = function(section_id
) {
81 return L
.toArray(uci
.get('minidlna', section_id
, 'album_art_names')).join('/').split(/\//);
83 o
.write = function(section_id
, value
) {
84 return uci
.set('minidlna', section_id
, 'album_art_names', L
.toArray(value
).join('/'));
87 o
= s
.taboption('advanced', form
.Value
, 'db_dir', _('Database directory'), _('Set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache.'));
89 o
= s
.taboption('advanced', form
.Value
, 'log_dir', _('Log directory'), _('Set this if you would like to specify the directory where you want MiniDLNA to store its log file.'));
91 o
= s
.taboption('advanced', form
.Flag
, 'inotify', _('Enable inotify'), _('Set this to enable inotify monitoring to automatically discover new files.'));
92 o
.default = o
.enabled
;
94 o
= s
.taboption('advanced', form
.Flag
, 'enable_tivo', _('Enable TIVO'), _('Set this to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO.'));
96 o
= s
.taboption('advanced', form
.Flag
, 'wide_links', _('Allow wide links'), _('Set this to allow serving content outside the media root (via symlinks).'));
98 o
= s
.taboption('advanced', form
.Flag
, 'strict_dlna', _('Strict to DLNA standard'), _('Set this to strictly adhere to DLNA standards. This will allow server-side downscaling of very large JPEG images, which may hurt JPEG serving performance on (at least) Sony DLNA products.'));
100 o
= s
.taboption('advanced', form
.Value
, 'presentation_url', _('Presentation URL'));
102 o
= s
.taboption('advanced', form
.Value
, 'notify_interval', _('Notify interval'), _('Notify interval in seconds.'));
103 o
.placeholder
= '900';
105 o
= s
.taboption('advanced', form
.Value
, 'serial', _('Announced serial number'), _('Serial number the miniDLNA daemon will report to clients in its XML description.'));
106 o
.placeholder
= '12345678';
108 o
= s
.taboption('advanced', form
.Value
, 'uuid', _('Announced UUID'));
109 o
.placeholder
= '019f9a56-ff60-44c0-9edc-eae88d09fa05';
111 o
= s
.taboption('advanced', form
.Value
, 'model_number', _('Announced model number'), _('Model number the miniDLNA daemon will report to clients in its XML description.'));
114 o
= s
.taboption('advanced', form
.Value
, 'minissdpsocket', _('miniSSDP socket'), _('Specify the path to the MiniSSDPd socket.'));