Merge pull request #732 from kuoruan/aria2

luci-app-aria2: Add package
This commit is contained in:
Hannu Nyman 2016-06-02 11:53:30 +03:00
commit b6cdf3706b
7 changed files with 693 additions and 0 deletions

View file

@ -0,0 +1,15 @@
#
# Copyright (C) 2016 Openwrt.org
#
# This is free software, licensed under the Apache License, Version 2.0 .
#
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI Support for Aria2
LUCI_DEPENDS:=+aria2
include ../../luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -0,0 +1,42 @@
--[[
LuCI - Lua Configuration Interface - aria2 support
Copyright 2014-2015 nanpuyue <nanpuyue@gmail.com>
Modified by kuoruan <kuoruan@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
]]--
module("luci.controller.aria2", package.seeall)
function index()
if not nixio.fs.access("/etc/config/aria2") then
return
end
local page = entry({"admin", "services", "aria2"}, cbi("aria2"), _("Aria2 Settings"))
page.dependent = true
entry({"admin", "services", "aria2", "status"}, call("status")).leaf = true
end
function status()
local sys = require "luci.sys"
local ipkg = require "luci.model.ipkg"
local http = require "luci.http"
local uci = require "luci.model.uci".cursor()
local status = {
running = (sys.call("pidof aria2c > /dev/null") == 0),
yaaw = ipkg.installed("yaaw"),
webui = ipkg.installed("webui-aria2")
}
http.prepare_content("application/json")
http.write_json(status)
end

View file

@ -0,0 +1,196 @@
--[[
LuCI - Lua Configuration Interface - Aria2 support
Copyright 2014-2016 nanpuyue <nanpuyue@gmail.com>
Modified by maz-1 <ohmygod19993@gmail.com>
Modified by kuoruan <kuoruan@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
]]--
local sys = require "luci.sys"
local util = require "luci.util"
local uci = require "luci.model.uci".cursor()
local cfgbtn = "<input type=\"button\" value=\"" .. translate("Generate Randomly") .. "\" onclick=\"randomSecret(32);\" />"
local sessionbtn = "<input class=\"cbi-button mar-10\" type=\"button\" value=\"" .. translate("View Json-RPC URL") .. "\" onclick=\"showRPCURL();\" />"
local aria2rpctxt = "<input class=\"mar-10\" id=\"aria2rpcpath\" onmouseover=\"obj=document.getElementById(this.id);obj.focus();obj.select()\" />"
local use_websocket = "<input id=\"use_websocket\" type=\"checkbox\" /><label for=\"use_websocket\">" .. translate("Use WebSocket") .. "</label>"
function ipkg_ver(pkg)
local version = nil
local control = io.open("/usr/lib/opkg/info/%s.control" % pkg, "r")
if control then
local ln
repeat
ln = control:read("*l")
if ln and ln:match("^Version: ") then
version = ln:gsub("^Version: ", ""):gsub("-%d", "")
break
end
until not ln
control:close()
end
return version
end
function ipkg_ver_lined(pkg)
return ipkg_ver(pkg):gsub("%.", "-")
end
m = Map("aria2", translate("Aria2"), translate("Aria2 is a multi-protocol &amp; multi-source download utility, here you can configure the settings."))
m:section(SimpleSection).template = "aria2/web_script"
s = m:section(TypedSection, "aria2", translate("Aria2 Settings"))
s.addremove = false
s.anonymous = true
s:tab("general", translate("General Settings"))
s:tab("file", translate("Files and Locations"))
s:tab("task", translate("Task Settings"))
s:tab("bittorrent", translate("BitTorrent Settings"))
o = s:taboption("general", Flag, "enabled", translate("Enabled"))
o.rmempty = false
user = s:taboption("general", ListValue, "user", translate("Run daemon as user"))
local p_user
for _, p_user in util.vspairs(util.split(sys.exec("cat /etc/passwd | cut -f 1 -d :"))) do
user:value(p_user)
end
o = s:taboption("general", Value, "rpc_listen_port", translate("RPC port"))
o.datatype = "port"
o.placeholder = "6800"
rpc_auth_method = s:taboption("general", ListValue, "rpc_auth_method", translate("RPC authentication method"))
rpc_auth_method:value("none", translate("No Authentication"))
rpc_auth_method:value("user_pass", translate("Username & Password"))
rpc_auth_method:value("token", translate("Token"))
o = s:taboption("general", Value, "rpc_user", translate("RPC username"))
o:depends("rpc_auth_method", "user_pass")
o.rmempty = false
o = s:taboption("general", Value, "rpc_passwd", translate("RPC password"))
o:depends("rpc_auth_method", "user_pass")
o.password = true
o.rmempty = false
o = s:taboption("general", Value, "rpc_secret", translate("RPC Token"), "<br/>" .. cfgbtn)
o:depends("rpc_auth_method", "token")
o.rmempty = false
o = s:taboption("file", Value, "config_dir", translate("Config file directory"))
o.placeholder = "/var/etc/aria2"
o = s:taboption("file", Value, "dir", translate("Default download directory"))
o.rmempty = false
s:taboption("file", Value, "disk_cache", translate("Disk cache"), translate("in bytes, You can append K or M."))
o = s:taboption("file", ListValue, "file_allocation", translate("Preallocation"), translate("\"Falloc\" is not available in all cases."))
o:value("none", translate("Off"))
o:value("prealloc", translate("Prealloc"))
o:value("trunc", translate("Trunc"))
o:value("falloc", translate("Falloc"))
overall_speed_limit = s:taboption("task", Flag, "overall_speed_limit", translate("Overall speed limit enabled"))
o = s:taboption("task", Value, "max_overall_download_limit", translate("Overall download limit"), translate("in bytes/sec, You can append K or M."))
o:depends("overall_speed_limit", "1")
o = s:taboption("task", Value, "max_overall_upload_limit", translate("Overall upload limit"), translate("in bytes/sec, You can append K or M."))
o:depends("overall_speed_limit", "1")
task_speed_limit = s:taboption("task", Flag, "task_speed_limit", translate("Per task speed limit enabled"))
o = s:taboption("task", Value, "max_download_limit", translate("Per task download limit"), translate("in bytes/sec, You can append K or M."))
o:depends("task_speed_limit", "1")
o = s:taboption("task", Value, "max_upload_limit", translate("Per task upload limit"), translate("in bytes/sec, You can append K or M."))
o:depends("task_speed_limit", "1")
o = s:taboption("task", Value, "max_concurrent_downloads", translate("Max concurrent downloads"))
o.placeholder = "5"
o = s:taboption("task", Value, "max_connection_per_server", translate("Max connection per server"), "1-16")
o.datetype = "range(1, 16)"
o.placeholder = "1"
o = s:taboption("task", Value, "min_split_size", translate("Min split size"), "1M-1024M")
o.placeholder = "20M"
o = s:taboption("task", Value, "split", translate("Max number of split"))
o.placeholder = "5"
o = s:taboption("task", Value, "save_session_interval", translate("Autosave session interval"), translate("Sec"))
o.default = "30"
o = s:taboption("task", Value, "user_agent", translate("User agent value"))
o.placeholder = "aria2/" .. ipkg_ver("aria2")
o = s:taboption("bittorrent", Flag, "enable_dht", translate("<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"))
o.enabled = "true"
o.disabled = "false"
o = s:taboption("bittorrent", Flag, "bt_enable_lpd", translate("<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"))
o.enabled = "true"
o.disabled = "false"
o = s:taboption("bittorrent", Flag, "follow_torrent", translate("Follow torrent"))
o.enabled = "true"
o.disabled = "false"
o = s:taboption("bittorrent", Value, "listen_port", translate("BitTorrent listen port"))
o.placeholder = "6881-6999"
o = s:taboption("bittorrent", Value, "bt_max_peers", translate("Max number of peers per torrent"))
o.placeholder = "55"
bt_tracker_enable = s:taboption("bittorrent", Flag, "bt_tracker_enable", translate("Additional Bt tracker enabled"))
bt_tracker = s:taboption("bittorrent", DynamicList, "bt_tracker", translate("List of additional Bt tracker"))
bt_tracker:depends("bt_tracker_enable", "1")
bt_tracker.rmempty = true
function bt_tracker.cfgvalue(self, section)
local rv = {}
local val = Value.cfgvalue(self, section)
if type(val) == "table" then
val = table.concat(val, ",")
elseif not val then
val = ""
end
for v in val:gmatch("[^,%s]+") do
rv[#rv+1] = v
end
return rv
end
function bt_tracker.write(self, section, value)
local rv = {}
for v in util.imatch(value) do
rv[#rv+1] = v
end
Value.write(self, section, table.concat(rv, ","))
end
o = s:taboption("bittorrent", Value, "peer_id_prefix", translate("Prefix of peer ID"))
o.placeholder = "A2-" .. ipkg_ver_lined("aria2") .. "-"
s = m:section(TypedSection, "aria2", translate("Extra Settings"))
s.addremove = false
s.anonymous = true
o = s:option(DynamicList, "extra_settings", translate("List of extra settings"))
o.placeholder = "option=value"
o.rmempty = true
m:section(SimpleSection, nil, sessionbtn .. use_websocket .. aria2rpctxt)
return m

View file

@ -0,0 +1,77 @@
<script type="text/javascript">//<![CDATA[
XHR.poll(5, '<%=url([[admin]], [[services]], [[aria2]], [[status]])%>', null,
function(x, data) {
var tb = document.getElementById('aria2_status');
if (data && tb) {
if (data.running) {
var links = '<em><%:The Aria2 service is running.%></em>';
if (data.yaaw) {
links += '<input class="cbi-button mar-10" type="button" value="<%:Open YAAW%>" onclick="openWebUI(\'yaaw\');" />';
}
if (data.webui) {
links += '<input class="cbi-button mar-10" type="button" value="<%:Open WebUI-Aria2%>" onclick="openWebUI(\'webui-aria2\');" />';
}
tb.innerHTML = links;
} else {
tb.innerHTML = '<em><%:The Aria2 service is not running.%></em>';
}
}
}
);
function randomString(len) {
len = len || 32;
var $chars = 'abcdefghijklmnopqrstuvwxyz1234567890';
var maxPos = $chars.length;
var pwd = '';
for (i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
};
function randomSecret() {
var Token = document.getElementById("cbid.aria2.main.rpc_secret");
Token.value = randomString(32);
};
function showRPCURL() {
var websocket = document.getElementById("use_websocket");
var protocol = (websocket.checked) ? "ws" : "http";
var newTextNode = document.getElementById("aria2rpcpath");
var auth_method = document.getElementById("cbid.aria2.main.rpc_auth_method");
var auth_port = document.getElementById("cbid.aria2.main.rpc_listen_port");
if (auth_port.value == "") {
auth_port_value = "6800"
} else {
auth_port_value = auth_port.value
};
if (auth_method.value == "token") {
var auth_token = document.getElementById("cbid.aria2.main.rpc_secret");
newTextNode.value = protocol + "://token:" + auth_token.value + "@" + document.domain + ":" + auth_port_value + "/jsonrpc";
} else if (auth_method.value == "user_pass") {
var auth_user = document.getElementById("cbid.aria2.main.rpc_user");
var auth_passwd = document.getElementById("cbid.aria2.main.rpc_passwd");
newTextNode.value = protocol + "://" + auth_user.value + ":" + auth_passwd.value + "@" + document.domain + ":" + auth_port_value + "/jsonrpc";
} else {
newTextNode.value = protocol + "://" + document.domain + ":" + auth_port_value + "/jsonrpc";
}
};
function openWebUI(path) {
var curWwwPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curWwwPath.indexOf(pathName);
var localhostPath = curWwwPath.substring(0, pos);
var url = "http:" + localhostPath.substring(window.location.protocol.length) + "/" + path;
window.open(url)
};
//]]>
</script>
<style>.mar-10 {margin-left: 10px; margin-right: 10px;}</style>
<fieldset class="cbi-section">
<legend><%:Aria2 Status%></legend>
<p id="aria2_status">
<em><%:Collecting data...%></em>
</p>
</fieldset>

View file

@ -0,0 +1,176 @@
msgid "Aria2"
msgstr ""
msgid "Aria2 is a multi-protocol &amp; multi-source download utility, here you can configure the settings."
msgstr ""
msgid "Aria2 Status"
msgstr ""
msgid "Open YAAW"
msgstr ""
msgid "Open WebUI-Aria2"
msgstr ""
msgid "The Aria2 service is running."
msgstr ""
msgid "The Aria2 service is not running."
msgstr ""
msgid "Aria2 Settings"
msgstr ""
msgid "General settings"
msgstr ""
msgid "Files and Locations"
msgstr ""
msgid "Enabled"
msgstr ""
msgid "Task Settings"
msgstr ""
msgid "BitTorrent Settings"
msgstr ""
msgid "Run daemon as user"
msgstr ""
msgid "RPC port"
msgstr ""
msgid "RPC authentication method"
msgstr ""
msgid "No Authentication"
msgstr ""
msgid "Username & Password"
msgstr ""
msgid "Token"
msgstr ""
msgid "RPC username"
msgstr ""
msgid "RPC password"
msgstr ""
msgid "RPC Token"
msgstr ""
msgid "Generate Randomly"
msgstr ""
msgid "Config file directory"
msgstr ""
msgid "Default download directory"
msgstr ""
msgid "Disk cache"
msgstr ""
msgid "in bytes, You can append K or M."
msgstr ""
msgid "Preallocation"
msgstr ""
msgid "Off"
msgstr ""
msgid "Prealloc"
msgstr ""
msgid "Trunc"
msgstr ""
msgid "Falloc"
msgstr ""
msgid "\"Falloc\" is not available in all cases."
msgstr ""
msgid "Overall speed limit enabled"
msgstr ""
msgid "Overall download limit"
msgstr ""
msgid "in bytes/sec, You can append K or M."
msgstr ""
msgid "Overall upload limit"
msgstr ""
msgid "Per task speed limit enabled"
msgstr ""
msgid "Per task download limit"
msgstr ""
msgid "Per task upload limit"
msgstr ""
msgid "Max concurrent downloads"
msgstr ""
msgid "Max connection per server"
msgstr ""
msgid "Min split size"
msgstr ""
msgid "Max number of split"
msgstr ""
msgid "Autosave session interval"
msgstr ""
msgid "Sec"
msgstr ""
msgid "User agent value"
msgstr ""
msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
msgstr ""
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
msgstr ""
msgid "Follow torrent"
msgstr ""
msgid "BitTorrent listen port"
msgstr ""
msgid "Max number of peers per torrent"
msgstr ""
msgid "Additional Bt tracker enabled"
msgstr ""
msgid "List of additional Bt tracker"
msgstr ""
msgid "Prefix of peer ID"
msgstr ""
msgid "Extra Settings"
msgstr ""
msgid "List of extra settings"
msgstr ""
msgid "View Json-RPC URL"
msgstr ""
msgid "Use WebSocket"
msgstr ""

View file

@ -0,0 +1,176 @@
msgid "Aria2"
msgstr ""
msgid "Aria2 is a multi-protocol &amp; multi-source download utility, here you can configure the settings."
msgstr "Aria2 是一个支持多协议多线程的下载器, 你可以在这里对其进行配置."
msgid "Aria2 Status"
msgstr "Aria2 状态"
msgid "Open YAAW"
msgstr "打开YAAW"
msgid "Open WebUI-Aria2"
msgstr "打开WebUI-Aria2"
msgid "The Aria2 service is running."
msgstr "Aria2 正在运行"
msgid "The Aria2 service is not running."
msgstr "Aria2 未运行"
msgid "Aria2 Settings"
msgstr "Aria2 配置"
msgid "General settings"
msgstr "一般设置"
msgid "Files and Locations"
msgstr "文件和目录"
msgid "Enabled"
msgstr "启用"
msgid "Task Settings"
msgstr "任务设置"
msgid "BitTorrent Settings"
msgstr "BT设置"
msgid "Run daemon as user"
msgstr "以此用户权限运行"
msgid "RPC port"
msgstr "RPC端口"
msgid "RPC authentication method"
msgstr "RPC认证方式"
msgid "No Authentication"
msgstr "无认证"
msgid "Username & Password"
msgstr "用户名与密码"
msgid "Token"
msgstr "令牌"
msgid "RPC username"
msgstr "RPC用户名"
msgid "RPC password"
msgstr "RPC密码"
msgid "RPC Token"
msgstr "RPC令牌"
msgid "Generate Randomly"
msgstr "随机生成"
msgid "Config file directory"
msgstr "配置文件目录"
msgid "Default download directory"
msgstr "默认下载目录"
msgid "Disk cache"
msgstr "磁盘缓存"
msgid "in bytes, You can append K or M."
msgstr "单位 B, 你可以在数字后跟上 K 或 M."
msgid "Preallocation"
msgstr "磁盘预分配"
msgid "Off"
msgstr "关闭"
msgid "Prealloc"
msgstr ""
msgid "Trunc"
msgstr ""
msgid "Falloc"
msgstr ""
msgid "\"Falloc\" is not available in all cases."
msgstr "\"Falloc\" 并不是在所有情况下都可用."
msgid "Overall speed limit enabled"
msgstr "启用全局限速"
msgid "Overall download limit"
msgstr "全局下载限速"
msgid "in bytes/sec, You can append K or M."
msgstr "单位 B/s, 你可以在数字后跟上 K 或 M."
msgid "Overall upload limit"
msgstr "全局上传限速"
msgid "Per task speed limit enabled"
msgstr "启用单任务限速"
msgid "Per task download limit"
msgstr "单任务下载限速"
msgid "Per task upload limit"
msgstr "单任务上传限速"
msgid "Max concurrent downloads"
msgstr "最大同时下载任务数"
msgid "Max connection per server"
msgstr "单服务器最大连接数"
msgid "Min split size"
msgstr "最小文件分片大小"
msgid "Max number of split"
msgstr "单文件最大线程数"
msgid "Autosave session interval"
msgstr "定时保存会话间隔"
msgid "Sec"
msgstr "秒"
msgid "User agent value"
msgstr "用户代理(UA)"
msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
msgstr "启用<abbr title=\"分布式哈希表\">DHT</abbr>"
msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
msgstr "启用<abbr title=\"本地节点发现\">LPD</abbr>"
msgid "Follow torrent"
msgstr "自动添加下载的种子"
msgid "BitTorrent listen port"
msgstr "BT监听端口"
msgid "Max number of peers per torrent"
msgstr "单个种子最大连接数"
msgid "Additional Bt tracker enabled"
msgstr "添加额外的Tracker"
msgid "List of additional Bt tracker"
msgstr "附加Tracker列表"
msgid "Prefix of peer ID"
msgstr "Peer ID前缀"
msgid "Extra Settings"
msgstr "附加选项"
msgid "List of extra settings"
msgstr "附加选项列表"
msgid "View Json-RPC URL"
msgstr "查看 Json-RPC URL"
msgid "Use WebSocket"
msgstr "使用WebSocket"

View file

@ -0,0 +1,11 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@aria2[-1]
add ucitrack aria2
set ucitrack.@aria2[-1].init=aria2
commit ucitrack
EOF
rm -f /tmp/luci-indexcache
exit 0