diff options
Diffstat (limited to 'applications/luci-app-hd-idle/htdocs')
-rw-r--r-- | applications/luci-app-hd-idle/htdocs/luci-static/resources/view/hd_idle.js | 82 |
1 files changed, 67 insertions, 15 deletions
diff --git a/applications/luci-app-hd-idle/htdocs/luci-static/resources/view/hd_idle.js b/applications/luci-app-hd-idle/htdocs/luci-static/resources/view/hd_idle.js index f510229523..e07413bad4 100644 --- a/applications/luci-app-hd-idle/htdocs/luci-static/resources/view/hd_idle.js +++ b/applications/luci-app-hd-idle/htdocs/luci-static/resources/view/hd_idle.js @@ -2,43 +2,95 @@ 'require form'; 'require fs'; 'require view'; +'require uci'; + +function disk(devs, options, section_id) { + var v = uci.get('hd-idle', section_id, 'disk') || ''; + var disk = devs.find(function(itm){ return itm.name == v; }); + var out = ''; + if(disk != undefined){ + out = options.map(function(opt){ return disk[opt].trim(); }); + out = out.filter(function(o){ return o != ''; }); + out = out.join(' '); + } + return E('span', out); +} + +function prettytime(section_id) { + return E('span', (uci.get('hd-idle', section_id, 'idle_time_interval') || '') + + ' ' + + (uci.get('hd-idle', section_id, 'idle_time_unit') || '')); +} return view.extend({ load: function() { - return fs.list('/dev').then(function(devs) { - return devs.filter(function(dev) { - return dev.type == 'block' ? dev.name.match(/^[sh]d[a-z]$/) : false; - }); + return fs.exec("/usr/bin/lsblk", ["-n", "-J", "-do", "NAME,TRAN,ROTA,RM,VENDOR,MODEL"]).then(function(res) { + if( res.code ) + return []; + var json = JSON.parse(res.stdout); + return ( 'blockdevices' in json ) ? json['blockdevices'] : []; }); }, render: function(devs) { var m, s, o; - m = new form.Map('hd-idle', _('HDD Idle'), _('HDD Idle is a utility program for spinning-down external disks after a period of idle time.')); + m = new form.Map('hd-idle', _('HDD Idle'), _('HDD Idle is a utility program for spinning-down disks after a period of idle time.')); - s = m.section(form.TypedSection, 'hd-idle', _('Settings')); + s = m.section(form.GridSection, 'hd-idle', _('Settings')); s.anonymous = true; s.addremove = true; + s.sortable = true; s.addbtntitle = _('Add new hdd setting...'); - o = s.option(form.Flag, 'enabled', _('Enable')); + + s.tab('general', _('Disk Settings')); + + + o = s.taboption('general', form.Flag, 'enabled', _('Enable')); o.rmempty = false; + o.editable = true; - o = s.option(form.Value, 'disk', _('Disk')); + o = s.taboption('general', form.ListValue, 'disk', _('Disk')); devs.forEach(function(dev) { - o.value(dev.name); + if( dev.rota ) { + o.value(dev.name, `/dev/${dev.name} [${dev.tran}:${dev.vendor} ${dev.model}]`); + } }); - o = s.option(form.Value, 'idle_time_interval', _('Idle time')); + + o = s.taboption('general', form.Value, '_bus', _('Bus')); + o.rawhtml = true; + o.write = function() {}; + o.remove = function() {}; + o.modalonly = false; + o.textvalue = disk.bind(o, devs, ['tran']); + + o = s.taboption('general', form.Value, '_vendorModel', _('Vendor / Model')); + o.rawhtml = true; + o.write = function() {}; + o.remove = function() {}; + o.modalonly = false; + o.textvalue = disk.bind(o, devs, ['vendor', 'model'] ); + + o = s.taboption('general', form.Value, 'idle_time_interval', _('Idle time')); + o.modalonly = true; o.default = 10; - o = s.option(form.ListValue, 'idle_time_unit', _('Idle time unit')); - o.value('seconds', _('s', 'Abbreviation for seconds')); - o.value('minutes', _('min', 'Abbreviation for minutes')); - o.value('hours', _('h', 'Abbreviation for hours')); - o.value('days', _('d', 'Abbreviation for days')); + o = s.taboption('general', form.ListValue, 'idle_time_unit', _('Idle time unit')); + o.modalonly = true; + o.value('seconds', _('seconds', 'Abbreviation for seconds')); + o.value('minutes', _('minutes', 'Abbreviation for minutes')); + o.value('hours', _('hours', 'Abbreviation for hours')); + o.value('days', _('days', 'Abbreviation for days')); o.default = 'minutes'; + o = s.taboption('general', form.Value, '_prettytime', _('Idle time')); + o.rawhtml = true; + o.write = function() {}; + o.remove = function() {}; + o.modalonly = false; + o.textvalue = prettytime.bind(o); + return m.render(); } }); |