1 <!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML
4.0//EN'
>
4 Media Server Settings - !!TB
6 For use with Tomato Firmware only.
7 No part of this file may be used without permission.
11 <meta http-equiv='content-type' content='text/html;charset=utf-
8'
>
12 <meta name='robots' content='noindex,nofollow'
>
13 <title>[<%
ident(); %>] NAS: Media Server
</title>
14 <link rel='stylesheet' type='text/css' href='tomato.css'
>
15 <link rel='stylesheet' type='text/css' href='color.css'
>
16 <script type='text/javascript' src='tomato.js'
></script>
20 <style tyle='text/css'
>
32 <script type='text/javascript' src='debug.js'
></script>
34 <script type='text/javascript'
>
36 // <% nvram("ms_enable,ms_port,ms_dirs,ms_dbdir,ms_tivo,ms_stdlna,ms_sas,cifs1,cifs2,jffs2_on"); %>
39 mdup
= parseInt('<% psup("minidlna"); %>');
41 var mediatypes
= [['', 'All Media Files'], ['A', 'Audio only'], ['V', 'Video only'], ['P', 'Images only']];
42 var msg
= new TomatoGrid();
44 msg
.dataToView = function(data
) {
48 b
.push(escapeHTML('' + data
[0]));
49 for (i
= 0; i
< mediatypes
.length
; ++i
)
50 if (mediatypes
[i
][0] == ('' + data
[1])) {
51 b
.push(mediatypes
[i
][1]);
54 if (b
.length
< 2) b
.push(mediatypes
[0][1]);
58 msg
.verifyFields = function(row
, quiet
)
62 f
= fields
.getAll(row
);
64 if (!v_nodelim(f
[0], quiet
, 'Directory', 1) || !v_path(f
[0], quiet
, 1))
71 msg
.resetNewEditor = function()
75 f
= fields
.getAll(this.newEditor
);
78 f
[1].selectedIndex
= 0;
81 msg
.setup = function()
83 this.init('ms-grid', 'sort', 50, [
84 { type
: 'text', maxlen
: 256 },
85 { type
: 'select', options
: mediatypes
}
87 this.headerSet(['Directory', 'Content Filter']);
89 var s
= ('' + nvram
.ms_dirs
).split('>');
90 for (var i
= 0; i
< s
.length
; ++i
) {
91 var t
= s
[i
].split('<');
92 if (t
.length
== 2) this.insertData(-1, t
);
97 this.resetNewEditor();
102 var s
= E('_f_loc').value
;
103 return (s
== '*user') ? E('_f_user').value
: s
;
106 function verifyFields(focused
, quiet
)
112 elem
.display('_restart_button', nvram
.ms_enable
== '1');
114 a
= E('_f_ms_enable').checked
? 1 : 0;
117 eUser
= E('_f_user');
119 eLoc
.disabled
= (a
== 0);
120 eUser
.disabled
= (a
== 0);
121 E('_f_ms_sas').disabled
= (a
== 0);
122 E('_f_ms_rescan').disabled
= (a
== 0);
123 E('_f_ms_tivo').disabled
= (a
== 0);
124 E('_f_ms_stdlna').disabled
= (a
== 0);
125 E('_restart_button').disabled
= (a
== 0);
132 elem
.display(eUser
, b
);
133 elem
.display(PR('_f_ms_sas'), (v
!= ''));
136 if (focused
!= E('_f_ms_rescan'))
141 if (!v_path(eUser
, quiet
|| !ok
, 1)) ok
= 0;
144 else if (v
== '/jffs/dlna') {
145 if (nvram
.jffs2_on
!= '1') {
146 ferror
.set(eLoc
, 'JFFS is not enabled.', quiet
|| !ok
);
149 else ferror
.clear(eLoc
);
154 else if (v
.match(/^\/cifs(1|2)\/dlna$/)) {
155 if (nvram
['cifs' + RegExp
.$1].substr(0, 1) != '1') {
156 ferror
.set(eLoc
, 'CIFS #' + RegExp
.$1 + ' is not enabled.', quiet
|| !ok
);
159 else ferror
.clear(eLoc
);
164 if (focused
!= E('_f_ms_rescan'))
171 if (msg
.isEditing()) return;
172 if (!verifyFields(null, 0)) return;
176 fom
.ms_enable
.value
= E('_f_ms_enable').checked
? 1 : 0;
177 fom
.ms_tivo
.value
= E('_f_ms_tivo').checked
? 1 : 0;
178 fom
.ms_stdlna
.value
= E('_f_ms_stdlna').checked
? 1 : 0;
179 fom
.ms_rescan
.value
= E('_f_ms_rescan').checked
? 1 : 0;
180 fom
.ms_sas
.value
= E('_f_ms_sas').checked
? 1 : 0;
182 fom
.ms_dbdir
.value
= getDbPath();
184 var data
= msg
.getAllData();
186 for (var i
= 0; i
< data
.length
; ++i
) r
.push(data
[i
].join('<'));
187 fom
.ms_dirs
.value
= r
.join('>');
192 function restart(isup
)
195 if (!confirm("Unsaved changes will be lost. Continue anyway?")) return;
197 E('_restart_button').disabled
= true;
198 form
.submitHidden('tomato.cgi', {
199 ms_rescan
: E('_f_ms_rescan').checked
? 1 : 0,
200 _reboot
: 0, _commit
: 0, _nvset
: 1,
201 _redirect
: 'nas-media.asp',
203 _service
: 'media-' + (isup
? 're' : '') + 'start'
207 function submit_complete()
214 function setNoticeText(s
)
217 s
= '<div id="notice1">' + s
.replace(/\n/g, '<br>') + '</div><br style="clear:both">';
218 elem
.setInnerHTML('notice-msg', s
);
221 function updateNotice()
226 xob
.onCompleted = function(text
, xml
) {
229 setTimeout(updateNotice
, 5000);
231 xob
.onError = function(ex
) { xob
= null; }
232 xob
.post('update.cgi', 'exec=notice&arg0=dlna');
243 <body onload=
"init()">
244 <form id='_fom' method='post' action='tomato.cgi'
>
245 <table id='container' cellspacing=
0>
246 <tr><td colspan=
2 id='header'
>
247 <div class='title'
>Tomato
</div>
248 <div class='version'
>Version <%
version(); %></div>
250 <tr id='body'
><td id='navi'
><script type='text/javascript'
>navi()</script></td>
252 <div id='ident'
><%
ident(); %></div>
256 <input type='hidden' name='_nextpage' value='nas-media.asp'
>
257 <input type='hidden' name='_service' value='media-restart'
>
259 <input type='hidden' name='ms_enable'
>
260 <input type='hidden' name='ms_dirs'
>
261 <input type='hidden' name='ms_dbdir'
>
262 <input type='hidden' name='ms_tivo'
>
263 <input type='hidden' name='ms_stdlna'
>
264 <input type='hidden' name='ms_rescan'
>
265 <input type='hidden' name='ms_sas'
>
267 <div class='section-title'
>Media / DLNA Server
</div>
268 <div class='section'
>
269 <script type='text/javascript'
>
271 switch (nvram
.ms_dbdir
) {
276 loc
= nvram
.ms_dbdir
;
283 createFieldTable('', [
284 { title
: 'Enable', name
: 'f_ms_enable', type
: 'checkbox', value
: nvram
.ms_enable
== '1' },
285 { title
: 'Database Location', multi
: [
286 { name
: 'f_loc', type
: 'select', options
: [['','RAM (Temporary)'],
288 ['/jffs/dlna','JFFS'],
292 ['/cifs1/dlna','CIFS 1'],['/cifs2/dlna','CIFS 2'],
295 ['*user','Custom Path']], value
: loc
},
296 { name
: 'f_user', type
: 'text', maxlen
: 256, size
: 60, value
: nvram
.ms_dbdir
}
298 { title
: 'Scan Media at Startup*', indent
: 2, name
: 'f_ms_sas', type
: 'checkbox', value
: nvram
.ms_sas
== '1', hidden
: 1 },
299 { title
: 'Rescan on the next run*', indent
: 2, name
: 'f_ms_rescan', type
: 'checkbox', value
: 0,
300 suffix
: '<br><small>* Media scan may take considerable time to complete.</small>' },
302 { title
: 'TiVo Support', name
: 'f_ms_tivo', type
: 'checkbox', value
: nvram
.ms_tivo
== '1' },
303 { title
: 'Strictly adhere to DLNA standards', name
: 'f_ms_stdlna', type
: 'checkbox', value
: nvram
.ms_stdlna
== '1' }
305 W('<br><input type="button" value="' + (mdup
? 'Res' : 'S') + 'tart Now" onclick="restart(mdup)" id="_restart_button">');
308 <span id=
"notice-msg"></span>
311 <div class='section-title'
>Media Directories
</div>
312 <div class='section'
>
313 <table class='tomato-grid' cellspacing=
1 id='ms-grid'
></table>
314 <script type='text/javascript'
>msg
.setup();</script>
321 <tr><td id='footer' colspan=
2>
322 <span id='footer-msg'
></span>
323 <input type='button' value='Save' id='save-button' onclick='save()'
>
324 <input type='button' value='Cancel' id='cancel-button' onclick='javascript:reloadPage();'
>
328 <script type='text/javascript'
>verifyFields(null, 1);</script>