diff options
author | Richard Yu <yurichard3839@gmail.com> | 2020-01-18 22:21:02 +0800 |
---|---|---|
committer | Richard Yu <yurichard3839@gmail.com> | 2020-01-19 03:01:05 +0800 |
commit | a9cff9e6314f2e2b5c3e77b6c2375bfd174e9a64 (patch) | |
tree | 54cfb5b674670f6adf48b5d2288143b22a369f03 /applications/luci-app-transmission/htdocs/luci-static/resources | |
parent | de6415af24f5759c79e621a39bd1543ca84d0030 (diff) |
luci-app-transmission: port to client side
Signed-off-by: Richard Yu <yurichard3839@gmail.com>
Diffstat (limited to 'applications/luci-app-transmission/htdocs/luci-static/resources')
-rw-r--r-- | applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js b/applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js new file mode 100644 index 0000000000..dfbd9af6cb --- /dev/null +++ b/applications/luci-app-transmission/htdocs/luci-static/resources/view/transmission.js @@ -0,0 +1,303 @@ +'use strict'; +'require fs'; +'require uci'; +'require rpc'; +'require form'; +'require tools.widgets as widgets'; + +var callServiceList = rpc.declare({ + object: 'service', + method: 'list', + params: [ 'name' ], + expect: { '': {} } +}); + +function setFlagBool(o) { + o.enabled = 'true'; + o.disabled = 'false'; +} + +return L.view.extend({ + load: function() { + return Promise.all([ + L.resolveDefault(callServiceList('transmission')), + L.resolveDefault(fs.stat('/usr/share/transmission/web/index.html')), + uci.load('transmission') + ]); + }, + render: function(res) { + var port = uci.get_first('transmission', 'transmission', 'rpc_port') || '9091'; + + var instances = {}; + try { + instances = res[0]['transmission']['instances']; + } catch (e) {} + var running = instances.length > 0; + + var webinstalled = res[1] || !!uci.get_first('transmission', 'transmission', 'web_home'); + + var button = ''; + if (running && webinstalled) + button = ' <a class="btn" href="http://' + window.location.hostname + ':' + port + '" target="_blank" rel="noreferrer noopener">' + _('Open Web Interface') + '</a>'; + + var m, s, o; + + m = new form.Map('transmission', 'Transmission', _('Transmission daemon is a simple bittorrent client, here you can configure the settings.') + button); + + s = m.section(form.TypedSection, 'transmission', _('Global settings')); + s.anonymous = true; + + o = s.option(form.Flag, 'enabled', _('Enabled')); + o.rmempty = false; + + o = s.option(form.Value, 'config_dir', _('Config file directory')); + o = s.option(widgets.UserSelect, 'user', _('Run daemon as user')); + o = s.option(widgets.GroupSelect, 'group', _('Run daemon as group')); + o = s.option(form.Value, 'web_home', _('Custom Web UI directory')); + + + s = m.section(form.TypedSection, 'transmission', _('Bandwidth settings')); + s.anonymous = true; + + o = s.option(form.Flag, 'alt_speed_enabled', _('Alternative speed enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'alt_speed_up', _('Alternative upload speed'), 'KB/s'); + o.depends('alt_speed_enabled', 'true'); + + o = s.option(form.Value, 'alt_speed_down', _('Alternative download speed'), 'KB/s'); + o.depends('alt_speed_enabled', 'true'); + + o = s.option(form.Flag, 'speed_limit_down_enabled', _('Speed limit down enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'speed_limit_down', _('Speed limit down'), 'KB/s'); + o.depends('speed_limit_down_enabled', 'true'); + + o = s.option(form.Flag, 'speed_limit_up_enabled', _('Speed limit up enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'speed_limit_up', _('Speed limit up'), 'KB/s'); + o.depends('speed_limit_up_enabled', 'true'); + + o = s.option(form.Value, 'upload_slots_per_torrent', _('Upload slots per torrent')); + + + s = m.section(form.TypedSection, 'transmission', _('Blocklists')); + s.anonymous = true; + + o = s.option(form.Flag, 'blocklist_enabled', _('Block list enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'blocklist_url', _('Blocklist URL')); + o.depends('blocklist_enabled', 'true'); + o.placeholder = 'http://www.example.com/blocklist'; + + + s = m.section(form.TypedSection, 'transmission', _('Files and Locations')); + s.anonymous = true; + + s.option(form.Value, 'download_dir', _('Download directory')); + + o = s.option(form.Flag, 'incomplete_dir_enabled', _('Incomplete directory enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'incomplete_dir', _('Incomplete directory')); + o.depends('incomplete_dir_enabled', 'true'); + + o = s.option(form.ListValue, 'preallocation', _('Preallocation')); + o.value('0', _('Off')); + o.value('1', _('Fast')); + o.value('2', _('Full')); + + o = s.option(form.Flag, 'rename_partial_files', _('Rename partial files')); + setFlagBool(o); + + o = s.option(form.Flag, 'start_added_torrents', _('Automatically start added torrents')); + setFlagBool(o); + + o = s.option(form.Flag, 'trash_original_torrent_files', _('Trash original torrent files')); + setFlagBool(o); + + o = s.option(form.Value, 'umask', 'umask'); + + o = s.option(form.Flag, 'watch_dir_enabled', _('Enable watch directory')); + setFlagBool(o); + + o = s.option(form.Value, 'watch_dir', _('Watch directory')); + o.depends('watch_dir_enabled', 'true'); + + + s = m.section(form.TypedSection, 'transmission', _('Miscellaneous')); + s.anonymous = true; + + o = s.option(form.Value, 'cache_size_mb', _('Cache size in MB')); + + o = s.option(form.Flag, 'dht_enabled', _('DHT enabled')); + setFlagBool(o); + + o = s.option(form.ListValue, 'encryption', _('Encryption')); + o.value('0', _('Prefer unencrypted')); + o.value('1', _('Prefer encrypted')); + o.value('2', _('Require encrypted')); + + o = s.option(form.Flag, 'lazy_bitfield_enabled', _('Lazy bitfield enabled')); + setFlagBool(o); + + o = s.option(form.Flag, 'lpd_enabled', _('LPD enabled')); + setFlagBool(o); + + o = s.option(form.ListValue, 'message_level', _('Message level')); + o.value('0', _('None')); + o.value('1', _('Error')); + o.value('2', _('Info')); + o.value('3', _('Debug')); + + o = s.option(form.Flag, 'pex_enabled', _('PEX enabled')); + setFlagBool(o); + + o = s.option(form.Flag, 'prefetch_enabled', _('Prefetch enabled')); + + o = s.option(form.Flag, 'scrape_paused_torrents_enabled', _('Scrape paused torrents enabled')); + setFlagBool(o); + + o = s.option(form.Flag, 'script_torrent_done_enabled', _('Script torrent done enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'script_torrent_done_filename', _('Script torrent done filename')); + o.depends('script_torrent_done_enabled', 'true'); + + o = s.option(form.Flag, 'utp_enabled', _('uTP enabled')); + setFlagBool(o); + + + s = m.section(form.TypedSection, 'transmission', _('Peer settings')); + s.anonymous = true; + + o = s.option(form.Value, 'bind_address_ipv4', _('Binding address IPv4')); + + o = s.option(form.Value, 'bind_address_ipv6', _('Binding address IPv6')); + + o = s.option(form.Value, 'peer_congestion_algorithm', _('Peer congestion algorithm'), + _('This is documented on <a href="https://www.irif.fr/~jch/software/bittorrent/tcp-congestion-control.html" target="_blank" rel="noreferrer noopener">tcp-congestion-control</a>.')); + + o = s.option(form.Value, 'peer_id_ttl_hours', _('Recycle peer id after'), _('hours')); + + o = s.option(form.Value, 'peer_limit_global', _('Global peer limit')); + + o = s.option(form.Value, 'peer_limit_per_torrent', _('Peer limit per torrent')); + + o = s.option(form.Value, 'peer_socket_tos', _('Peer socket <abbr title="Type of Service">TOS</abbr>')); + + + s = m.section(form.TypedSection, 'transmission', _('Peer Port settings')); + s.anonymous = true; + + o = s.option(form.Value, 'peer_port', _('Peer port')); + + o = s.option(form.Flag, 'peer_port_random_on_start', _('Peer port random on start')); + setFlagBool(o); + + o = s.option(form.Value, 'peer_port_random_high', _('Peer port random high')); + o.depends('peer_port_random_on_start', 'true'); + + o = s.option(form.Value, 'peer_port_random_low', _('Peer port random low')); + o.depends('peer_port_random_on_start', 'true'); + + o = s.option(form.Flag, 'port_forwarding_enabled', _('Port forwarding enabled')); + setFlagBool(o); + + + s = m.section(form.TypedSection, 'transmission', _('Queueing')); + s.anonymous = true; + + o = s.option(form.Flag, 'download_queue_enabled', _('Download queue enabled')); + setFlagBool(o); + + o = s.option(form.Flag, 'queue_stalled_enabled', _('Queue stalled enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'download_queue_size', _('Download queue size')); + o.depends('download_queue_enabled', 'true'); + + o = s.option(form.Flag, 'seed_queue_enabled', _('Seed queue enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'queue_stalled_minutes', _('Queue stalled minutes')); + o.depends('queue_stalled_enabled', 'true'); + + o = s.option(form.Value, 'seed_queue_size', _('Seed queue size')); + o.depends('seed_queue_enabled', 'true'); + + + s = m.section(form.TypedSection, 'transmission', _('RPC settings')); + s.anonymous = true; + + o = s.option(form.Flag, 'rpc_enabled', _('RPC enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'rpc_bind_address', _('RPC bind address')); + o.depends('rpc_enabled', 'true'); + + o = s.option(form.Value, 'rpc_port', _('RPC port')); + o.depends('rpc_enabled', 'true'); + + o = s.option(form.Value, 'rpc_url', _('RPC URL')); + o.depends('rpc_enabled', 'true'); + + o = s.option(form.Flag, 'rpc_host_whitelist_enabled', _('RPC host whitelist enabled')); + setFlagBool(o); + o.depends('rpc_enabled', 'true'); + + o = s.option(form.Value, 'rpc_host_whitelist', _('RPC host whitelist')); + o.depends('rpc_host_whitelist_enabled', 'true'); + + o = s.option(form.Flag, 'rpc_whitelist_enabled', _('RPC whitelist enabled')); + setFlagBool(o); + o.depends('rpc_enabled', 'true'); + + o = s.option(form.Value, 'rpc_whitelist', _('RPC whitelist')); + o.depends('rpc_whitelist_enabled', 'true'); + + o = s.option(form.Flag, 'rpc_authentication_required', _('RPC authentication required')); + setFlagBool(o); + o.depends('rpc_enabled', 'true'); + + o = s.option(form.Value, 'rpc_username', _('RPC username')); + o.depends('rpc_authentication_required', 'true'); + + o = s.option(form.Value, 'rpc_password', _('RPC password')); + o.depends('rpc_authentication_required', 'true'); + o.password = true; + + + s = m.section(form.TypedSection, 'transmission', _('Scheduling')); + s.anonymous = true; + + o = s.option(form.Flag, 'alt_speed_time_enabled', _('Alternative speed timing enabled'), _('When enabled, this will toggle the <b>alt-speed-enabled</b> setting')); + setFlagBool(o); + + o = s.option(form.Value, 'alt_speed_time_begin', _('Alternative speed time begin'), _('in minutes from midnight')); + o.depends('alt_speed_time_enabled', 'true'); + + o = s.option(form.Value, 'alt_speed_time_end', _('Alternative speed time end'), _('in minutes from midnight')); + o.depends('alt_speed_time_enabled', 'true'); + + o = s.option(form.Value, 'alt_speed_time_day', _('Alternative speed time day'), _('Number/bitfield. Start with 0, then for each day you want the scheduler enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - 8, Thursday - 16, Friday - 32, Saturday - 64')); + o.depends('alt_speed_time_enabled', 'true'); + + o = s.option(form.Flag, 'idle_seeding_limit_enabled', _('Idle seeding limit enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'idle_seeding_limit', _('Idle seeding limit')); + o.depends('idle_seeding_limit_enabled', 'true'); + + o = s.option(form.Flag, 'ratio_limit_enabled', _('Ratio limit enabled')); + setFlagBool(o); + + o = s.option(form.Value, 'ratio_limit', _('Ratio limit')); + o.depends('ratio_limit_enabled', 'true'); + + return m.render(); + } +}); |