mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
luci-app-qbittorrent: update luci
This commit is contained in:
parent
6dcd971195
commit
c4ba9eb960
@ -1,16 +1,15 @@
|
||||
# Copyright (C) 2019 Openwrt.org
|
||||
#
|
||||
# This is a free software, use it under Apache Licene 2.0 & GNU General Public License v3.0.
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=qbittorrent-nox for LuCI
|
||||
LUCI_TITLE:=LuCI support for qBittorrent
|
||||
LUCI_DEPENDS:=+qBittorrent +python
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_NAME:=luci-app-qbittorrent
|
||||
PKG_VERSION=1.0
|
||||
PKG_RELEASE:=9
|
||||
PKG_RELEASE:=13
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
|
2
package/lean/luci-app-qbittorrent/luasrc/controller/qbittorrent.lua
Executable file → Normal file
2
package/lean/luci-app-qbittorrent/luasrc/controller/qbittorrent.lua
Executable file → Normal file
@ -13,4 +13,4 @@ function act_status()
|
||||
e.running=luci.sys.call("pgrep qbittorrent-nox >/dev/null")==0
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(e)
|
||||
end
|
||||
end
|
372
package/lean/luci-app-qbittorrent/luasrc/model/cbi/qbittorrent.lua
Executable file → Normal file
372
package/lean/luci-app-qbittorrent/luasrc/model/cbi/qbittorrent.lua
Executable file → Normal file
@ -1,5 +1,5 @@
|
||||
local e=require"luci.model.uci".cursor()
|
||||
local o=e:get_first("qbittorrent","Preferences","port") or 8080
|
||||
local o=e:get_first("qbittorrent","main","Port") or 8080
|
||||
|
||||
local a=(luci.sys.call("pidof qbittorrent-nox > /dev/null")==0)
|
||||
|
||||
@ -8,25 +8,365 @@ if a then
|
||||
t="<br /><br /><input class=\"cbi-button cbi-button-apply\" type=\"submit\" value=\" "..translate("Open Web Interface").." \" onclick=\"window.open('http://'+window.location.hostname+':"..o.."')\"/>"
|
||||
end
|
||||
|
||||
function titlesplit(Value)
|
||||
return "<p style=\"font-size:20px;font-weight:bold;color: DodgerBlue\">" .. translate(Value) .. "</p>"
|
||||
end
|
||||
|
||||
m = Map("qbittorrent", translate("qBittorrent"), translate("qBittorrent is a cross-platform free and open-source BitTorrent client")..t)
|
||||
|
||||
m:section(SimpleSection).template="qbittorrent/qbittorrent_status"
|
||||
s = m:section(NamedSection, "main", "qbittorrent")
|
||||
|
||||
s_basic = m:section(TypedSection, "basic", translate("Basic Settings"))
|
||||
s_basic.anonymous = true
|
||||
s:tab("basic", translate("Basic Settings"))
|
||||
|
||||
enable = s_basic:option(Flag, "enable", translate("Enable"))
|
||||
profile_dir = s_basic:option(Value,"profile_dir",translate("profile_dir"),translate("Store configuration files in the Path"))
|
||||
profile_dir.default = "/root"
|
||||
o = s:taboption("basic", Flag, "enabled", translate("Enabled"))
|
||||
o.default = "1"
|
||||
|
||||
s_download = m:section(TypedSection, "Preferences", translate("Download Settings"))
|
||||
s_download.anonymous = true
|
||||
download_dir = s_download:option(Value,"download_dir",translate("download_dir"),translate("Store download files in the Path"))
|
||||
download_dir.default = "/root/download"
|
||||
o = s:taboption("basic", ListValue, "user", translate("Run daemon as user"))
|
||||
local u
|
||||
for u in luci.util.execi("cat /etc/passwd | cut -d ':' -f1") do
|
||||
o:value(u)
|
||||
end
|
||||
|
||||
s_webui = m:section(TypedSection, "Preferences", translate("WEBUI Settings"))
|
||||
s_webui.anonymous = true
|
||||
port = s_webui:option(Value,"port",translate("port"),translate("WEBUI listening port"))
|
||||
port.default = "8080"
|
||||
o = s:taboption("basic", Value, "profile", translate("Parent Path for Profile Folder"), translate("The path for storing profile folder using by command: <b>--profile [PATH]</b>."))
|
||||
o.default = '/tmp'
|
||||
|
||||
return m
|
||||
o = s:taboption("basic", Value, "configuration", translate("Profile Folder Suffix"), translate("Suffix for profile folder, for example, <b>qBittorrent_[NAME]</b>."))
|
||||
|
||||
o = s:taboption("basic", Value, "Locale", translate("Locale Language"))
|
||||
o:value("en", translate("English"))
|
||||
o:value("zh", translate("Chinese"))
|
||||
o.default = "en"
|
||||
|
||||
o = s:taboption("basic", Flag, "Enabled", translate("Enable Log"), translate("Enable logger to log file."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("basic", Value, "Path", translate("Log Path"), translate("The path for qbittorrent log."))
|
||||
o:depends("Enabled", "true")
|
||||
|
||||
o = s:taboption("basic", Flag, "Backup", translate("Enable Backup"), translate("Backup log file when oversize the given size."))
|
||||
o:depends("Enabled", "true")
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("basic", Flag, "DeleteOld", translate("Delete Old Backup"), translate("Delete the old log file."))
|
||||
o:depends("Enabled", "true")
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("basic", Value, "MaxSizeBytes", translate("Log Max Size"), translate("The max size for qbittorrent log (Unit: Bytes)."))
|
||||
o:depends("Enabled", "true")
|
||||
o.placeholder = "66560"
|
||||
|
||||
o = s:taboption("basic", Value, "SaveTime", translate("Log Saving Period"), translate("The log file will be deteted after given time. 1d -- 1 day, 1m -- 1 month, 1y -- 1 year"))
|
||||
o:depends("Enabled", "true")
|
||||
o.datatype = "string"
|
||||
|
||||
s:tab("connection", translate("Connection Settings"))
|
||||
|
||||
o = s:taboption("connection", Flag, "UPnP", translate("Use UPnP for Connections"), translate("Use UPnP/ NAT-PMP port forwarding from my router. Refer to the "
|
||||
.. "<a href='https://en.wikipedia.org/wiki/Port_forwarding' target='_blank'>wiki</a>."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("connection", Flag, "UseRandomPort", translate("Use Random Port"), translate("Use different port on each startup voids the first"
|
||||
.. " option, and randomly assigns a different port every time qBittorrent starts up."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("connection", Value, "PortRangeMin", translate("Connection Port"), translate("Generate Randomly"))
|
||||
o:depends("UseRandomPort", false)
|
||||
o.datatype = "range(1024,65535)"
|
||||
o.template = "qbittorrent/qbt_value"
|
||||
o.btnclick = "randomToken();"
|
||||
|
||||
o = s:taboption("connection", Value, "GlobalDLLimit", translate("Global Download Speed"), translate("Global Download Speed Limit(KiB/s)."))
|
||||
o.datatype = "float"
|
||||
o.placeholder = "0"
|
||||
|
||||
o = s:taboption("connection", Value, "GlobalUPLimit", translate("Global Upload Speed"), translate("Global Upload Speed Limit(KiB/s)."))
|
||||
o.datatype = "float"
|
||||
o.placeholder = "0"
|
||||
|
||||
o = s:taboption("connection", Value, "GlobalDLLimitAlt", translate("Alternative Download Speed"), translate("Alternative Download Speed Limit(KiB/s)."))
|
||||
o.datatype = "float"
|
||||
o.placeholder = "10"
|
||||
|
||||
o = s:taboption("connection", Value, "GlobalUPLimitAlt", translate("Alternative Upload Speed"), translate("Alternative Upload Speed Limit(KiB/s)."))
|
||||
o.datatype = "float"
|
||||
o.placeholder = "10"
|
||||
|
||||
o = s:taboption("connection", ListValue, "BTProtocol", translate("Enabled protocol"), translate("The protocol that was enabled."))
|
||||
o:value("Both", translate("TCP and UTP"))
|
||||
o:value("TCP", translate("TCP"))
|
||||
o:value("UTP", translate("UTP"))
|
||||
o.default = "Both"
|
||||
|
||||
o = s:taboption("connection", Value, "InetAddress", translate("Inet Address"), translate("The address that respond to the trackers."))
|
||||
|
||||
s:tab("downloads", translate("Downloads Settings"))
|
||||
|
||||
o = s:taboption("downloads", Flag, "CreateTorrentSubfolder", translate("Create Subfolder"), translate("Create subfolder for torrents with multiple files."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("downloads", Flag, "StartInPause", translate("Start In Pause"), translate("Do not start the download automatically."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("downloads", Flag, "AutoDeleteAddedTorrentFile", translate("Auto Delete Torrent File"), translate("The .torrent files will be deleted afterwards."))
|
||||
o.enabled = "IfAdded"
|
||||
o.disabled = "Never"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("downloads", Flag, "PreAllocation", translate("Pre Allocation"), translate("Pre-allocate disk space for all files."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("downloads", Flag, "UseIncompleteExtension", translate("Use Incomplete Extension"), translate("The incomplete task will be added the extension of !qB."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("downloads", Value, "SavePath", translate("Save Path"))
|
||||
o.placeholder = "/tmp/download"
|
||||
|
||||
o = s:taboption("downloads", Flag, "TempPathEnabled", translate("Temp Path Enabled"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("downloads", Value, "TempPath", translate("Temp Path"), translate("The absolute and relative path can be set."))
|
||||
o:depends("TempPathEnabled", "true")
|
||||
o.placeholder = "temp/"
|
||||
|
||||
o = s:taboption("downloads", Value, "DiskWriteCacheSize", translate("Disk Cache Size (MiB)"), translate("The value -1 is auto and 0 is disable. In default, it is set to 64MiB."))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "64"
|
||||
|
||||
o = s:taboption("downloads", Value, "DiskWriteCacheTTL", translate("Disk Cache TTL (s)"), translate("In default, it is set to 60s."))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "60"
|
||||
|
||||
o = s:taboption("downloads", DummyValue, "Saving Management", titlesplit("Saving Management"))
|
||||
|
||||
o = s:taboption("downloads", ListValue, "DisableAutoTMMByDefault", translate("Default Torrent Management Mode"))
|
||||
o:value("true", translate("Manual"))
|
||||
o:value("false", translate("Automaic"))
|
||||
o.default = "true"
|
||||
|
||||
o = s:taboption("downloads", ListValue, "CategoryChanged", translate("Torrent Category Changed"), translate("Choose the action when torrent category changed."))
|
||||
o:value("true", translate("Switch torrent to Manual Mode"))
|
||||
o:value("false", translate("Relocate torrent"))
|
||||
o.default = "false"
|
||||
|
||||
o = s:taboption("downloads", ListValue, "DefaultSavePathChanged", translate("Default Save Path Changed"), translate("Choose the action when default save path changed."))
|
||||
o:value("true", translate("Switch affected torrent to Manual Mode"))
|
||||
o:value("false", translate("Relocate affected torrent"))
|
||||
o.default = "true"
|
||||
|
||||
o = s:taboption("downloads", ListValue, "CategorySavePathChanged", translate("Category Save Path Changed"), translate("Choose the action when category save path changed."))
|
||||
o:value("true", translate("Switch affected torrent to Manual Mode"))
|
||||
o:value("false", translate("Relocate affected torrent"))
|
||||
o.default = "true"
|
||||
|
||||
o = s:taboption("downloads", Value, "TorrentExportDir", translate("Torrent Export Dir"), translate("The .torrent files will be copied to the target directory."))
|
||||
|
||||
o = s:taboption("downloads", Value, "FinishedTorrentExportDir", translate("Finished Torrent Export Dir"), translate("The .torrent files for finished downloads will be copied to the target directory."))
|
||||
|
||||
s:tab("bittorrent", translate("Bittorrent Settings"))
|
||||
|
||||
o = s:taboption("bittorrent", Flag, "DHT", translate("Enable DHT"), translate("Enable DHT (decentralized network) to find more peers"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("bittorrent", Flag, "PeX", translate("Enable PeX"), translate("Enable Peer Exchange (PeX) to find more peers"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("bittorrent", Flag, "LSD", translate("Enable LSD"), translate("Enable Local Peer Discovery to find more peers"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("bittorrent", Flag, "uTP_rate_limited", translate("uTP Rate Limit"), translate("Apply rate limit to µTP protocol."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("bittorrent", ListValue, "Encryption", translate("Encryption Mode"), translate("Enable DHT (decentralized network) to find more peers"))
|
||||
o:value("0", translate("Prefer Encryption"))
|
||||
o:value("1", translate("Require Encryption"))
|
||||
o:value("2", translate("Disable Encryption"))
|
||||
o.default = "0"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "MaxConnecs", translate("Max Connections"), translate("The max number of connections."))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "500"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "MaxConnecsPerTorrent", translate("Max Connections Per Torrent"), translate("The max number of connections per torrent."))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "100"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "MaxUploads", translate("Max Uploads"), translate("The max number of connected peers."))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "8"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "MaxUploadsPerTorrent", translate("Max Uploads Per Torrent"), translate("The max number of connected peers per torrent."))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "4"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "MaxRatio", translate("Max Ratio"), translate("The max ratio for seeding. -1 is to disable the seeding."))
|
||||
o.datatype = "float"
|
||||
o.placeholder = "-1"
|
||||
|
||||
o = s:taboption("bittorrent", ListValue, "MaxRatioAction", translate("Max Ratio Action"), translate("The action when reach the max seeding ratio."))
|
||||
o:value("0", translate("Pause them"))
|
||||
o:value("1", translate("Remove them"))
|
||||
o.defaule = "0"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "GlobalMaxSeedingMinutes", translate("Max Seeding Minutes"), translate("Units: minutes"))
|
||||
o.datatype = "integer"
|
||||
|
||||
o = s:taboption("bittorrent", DummyValue, "Queueing Setting", titlesplit("Queueing Setting"))
|
||||
|
||||
o = s:taboption("bittorrent", Flag, "QueueingEnabled", translate("Enable Torrent Queueing"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("bittorrent", Value, "MaxActiveDownloads", translate("Maximum Active Downloads"))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "3"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "MaxActiveUploads", translate("Max Active Uploads"))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "3"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "MaxActiveTorrents", translate("Max Active Torrents"))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "5"
|
||||
|
||||
o = s:taboption("bittorrent", Flag, "IgnoreSlowTorrents", translate("Ignore Slow Torrents"), translate("Do not count slow torrents in these limits."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("bittorrent", Value, "SlowTorrentsDownloadRate", translate("Download rate threshold"), translate("Units: KiB/s"))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "2"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "SlowTorrentsUploadRate", translate("Upload rate threshold"), translate("Units: KiB/s"))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "2"
|
||||
|
||||
o = s:taboption("bittorrent", Value, "SlowTorrentsInactivityTimer", translate("Torrent inactivity timer"), translate("Units: seconds"))
|
||||
o.datatype = "integer"
|
||||
o.placeholder = "60"
|
||||
|
||||
s:tab("webgui", translate("WebUI Settings"))
|
||||
|
||||
o = s:taboption("webgui", Flag, "UseUPnP", translate("Use UPnP for WebUI"), translate("Using the UPnP / NAT-PMP port of the router for connecting to WebUI."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("webgui", Value, "Username", translate("Username"), translate("The login name for WebUI."))
|
||||
o.placeholder = "admin"
|
||||
|
||||
o = s:taboption("webgui", Value, "Password", translate("Password"), translate("The login password for WebUI."))
|
||||
o.password = true
|
||||
|
||||
o = s:taboption("webgui", Value, "Port", translate("Listen Port"), translate("The listening port for WebUI."))
|
||||
o.datatype = "port"
|
||||
o.placeholder = "8080"
|
||||
|
||||
o = s:taboption("webgui", Flag, "CSRFProtection", translate("CSRF Protection"), translate("Enable Cross-Site Request Forgery (CSRF) protection."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("webgui", Flag, "ClickjackingProtection", translate("Clickjacking Protection"), translate("Enable clickjacking protection."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("webgui", Flag, "HostHeaderValidation", translate("Host Header Validation"), translate("Validate the host header."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("webgui", Flag, "LocalHostAuth", translate("Local Host Authentication"), translate("Force authentication for clients on localhost."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("webgui", Flag, "AuthSubnetWhitelistEnabled", translate("Enable Subnet Whitelist"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("webgui", DynamicList, "AuthSubnetWhitelist", translate("Subnet Whitelist"))
|
||||
o:depends("AuthSubnetWhitelistEnabled", "true")
|
||||
|
||||
s:tab("advanced", translate("Advance Settings"))
|
||||
|
||||
o = s:taboption("advanced", Flag, "AnonymousMode", translate("Anonymous Mode"), translate("When enabled, qBittorrent will take certain measures to try"
|
||||
.. " to mask its identity. Refer to the <a href='https://github.com/qbittorrent/qBittorrent/wiki/Anonymous-Mode' target='_blank'>wiki</a>"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("advanced", Flag, "SuperSeeding", translate("Super Seeding"), translate("The super seeding mode."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("advanced", Flag, "IncludeOverhead", translate("Limit Overhead Usage"), translate("The overhead usage is been limitted."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("advanced", Flag, "IgnoreLimitsLAN", translate("Ignore LAN Limit"), translate("Ignore the speed limit to LAN."))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("advanced", Flag, "osCache", translate("Use os Cache"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
o = s:taboption("advanced", Value, "OutgoingPortsMax", translate("Max Outgoing Port"), translate("The max outgoing port."))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:taboption("advanced", Value, "OutgoingPortsMin", translate("Min Outgoing Port"), translate("The min outgoing port."))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:taboption("advanced", ListValue, "SeedChokingAlgorithm", translate("Choking Algorithm"), translate("The strategy of choking algorithm."))
|
||||
o:value("RoundRobin", translate("Round Robin"))
|
||||
o:value("FastestUpload", translate("Fastest Upload"))
|
||||
o:value("AntiLeech", translate("Anti-Leech"))
|
||||
o.default = "FastestUpload"
|
||||
|
||||
o = s:taboption("advanced", Flag, "AnnounceToAllTrackers", translate("Announce To All Trackers"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.disabled
|
||||
|
||||
o = s:taboption("advanced", Flag, "AnnounceToAllTiers", translate("Announce To All Tiers"))
|
||||
o.enabled = "true"
|
||||
o.disabled = "false"
|
||||
o.default = o.enabled
|
||||
|
||||
return m
|
||||
|
@ -0,0 +1,36 @@
|
||||
<%#
|
||||
Copyright 2019 xxx <xxx@xxx.com>
|
||||
Licensed to the public under the Apache License 2.0.
|
||||
-%>
|
||||
|
||||
<div class="cbi-value<% if self.error and self.error[section] then %> cbi-value-error<% end %> <% if self.last_child then %> cbi-value-last <% end %>" id="cbi-<%=self.config.."-"..section.."-"..self.option%>" data-index="<%=self.index%>" data-depends="<%=pcdata(self:deplist2json(section))%>">
|
||||
<%- if self.title and #self.title > 0 then -%>
|
||||
<label class="cbi-value-title"<%= attr("for", cbid) %>><%-=self.title-%></label>
|
||||
<div class="cbi-value-field">
|
||||
<%- end -%>
|
||||
<input data-update="change"<%=
|
||||
attr("id", cbid) ..
|
||||
attr("name", cbid) ..
|
||||
attr("type", self.password and "password" or "text") ..
|
||||
attr("class", self.password and "cbi-input-password" or "cbi-input-text") ..
|
||||
attr("value", self:cfgvalue(section) or self.default) ..
|
||||
ifattr(self.size, "size") ..
|
||||
ifattr(self.placeholder, "placeholder") ..
|
||||
ifattr(self.readonly, "readonly") ..
|
||||
ifattr(self.maxlength, "maxlength") ..
|
||||
ifattr(self.datatype, "data-type", self.datatype) ..
|
||||
ifattr(self.datatype, "data-optional", self.optional or self.rmempty) ..
|
||||
ifattr(self.onmouseover, "onmouseover")
|
||||
%> />
|
||||
<% if self.description and #self.description > 0 then -%>
|
||||
<div class="cbi-value-description">
|
||||
<input class="cbi-button cbi-input-<%=self.inputstyle or "button" %>" type="button"<%=
|
||||
attr("value", self.description) ..
|
||||
ifattr(self.btnclick, "onclick", self.btnclick)
|
||||
%> />
|
||||
</div>
|
||||
<%- end %>
|
||||
<%- if self.title and #self.title > 0 then -%>
|
||||
</div>
|
||||
<%- end -%>
|
||||
</div>
|
@ -1,11 +1,19 @@
|
||||
|
||||
config basic
|
||||
option program_dir '/usr/bin'
|
||||
option library_dir '/usr/lib'
|
||||
option profile_dir '/root'
|
||||
option enable '0'
|
||||
|
||||
config Preferences
|
||||
option download_dir '/root/download'
|
||||
option port '8080'
|
||||
config qbittorrent 'main'
|
||||
option user 'root'
|
||||
option Locale 'zh'
|
||||
option BTProtocol 'Both'
|
||||
option DisableAutoTMMByDefault 'true'
|
||||
option CategoryChanged 'false'
|
||||
option DefaultSavePathChanged 'true'
|
||||
option CategorySavePathChanged 'true'
|
||||
option Encryption '0'
|
||||
option MaxRatioAction '0'
|
||||
option CSRFProtection 'false'
|
||||
option SeedChokingAlgorithm 'FastestUpload'
|
||||
option Enabled 'false'
|
||||
option Port '8080'
|
||||
option profile '/opt'
|
||||
option enabled '0'
|
||||
|
||||
|
@ -1,77 +1,264 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Licensed to the public under the Apache License 2.0.
|
||||
# ubus call service list
|
||||
|
||||
START=99
|
||||
|
||||
get_config()
|
||||
{
|
||||
config_get_bool enable $1 enable 0
|
||||
USE_PROCD=1
|
||||
|
||||
NAME=qbittorrent
|
||||
args=/usr/bin/qbittorrent-nox
|
||||
|
||||
QBT_PID_FILE=/var/run/qbittorrent.pid
|
||||
QBT_INI_FILE=/tmp/qBittorrent/config/qBittorrent.conf
|
||||
|
||||
QBT_INSTANCE=""
|
||||
|
||||
_info() {
|
||||
logger -p daemon.info -t "$NAME" "$*"
|
||||
}
|
||||
|
||||
config_qbittorrent()
|
||||
{
|
||||
local download_dir
|
||||
local port
|
||||
config_get download_dir $1 download_dir
|
||||
config_get port $1 port
|
||||
if [ -f $2/qBittorrent/config/qBittorrent.conf ]; then
|
||||
sed -i 's/WebUI\\Port=[0-9]*/WebUI\\Port='"$port"'/g' $2/qBittorrent/config/qBittorrent.conf
|
||||
sed -i 's/Downloads\\SavePath=[a-z,/]*//g' $2/qBittorrent/config/qBittorrent.conf
|
||||
echo "Downloads\SavePath=$down" >> $2/qBittorrent/config/qBittorrent.conf
|
||||
else
|
||||
cat>$2/qBittorrent/config/qBittorrent.conf<<EOF
|
||||
[AutoRun]
|
||||
enabled=false
|
||||
program=
|
||||
_err() {
|
||||
logger -p daemon.err -t "$NAME" "$*"
|
||||
}
|
||||
|
||||
validate_QBT () {
|
||||
uci_validate_section "$NAME" vlmcsd "$1" \
|
||||
'enabled:bool:1' \
|
||||
'user:string:root' \
|
||||
'profile:string:/tmp' \
|
||||
'configuration:string' \
|
||||
'DHT:or("true","false"):true' \
|
||||
'Encryption:or("0","1","2"):0' \
|
||||
'LSD:or("true","false"):true' \
|
||||
'MaxConnecs:integer' \
|
||||
'MaxConnecsPerTorrent:integer' \
|
||||
'MaxRatio:float' \
|
||||
'MaxRatioAction:or("0","1")' \
|
||||
'MaxUploads:integer' \
|
||||
'MaxUploadsPerTorrent:integer' \
|
||||
'PeX:or("true","false"):true' \
|
||||
'uTP_rate_limited:or("true","false"):true' \
|
||||
'PortRangeMin:port' \
|
||||
'InetAddress:string' \
|
||||
'UPnP:or("true","false"):true' \
|
||||
'GlobalDLLimit:float' \
|
||||
'GlobalDLLimitAlt:float' \
|
||||
'GlobalUPLimit:float' \
|
||||
'GlobalUPLimitAlt:float' \
|
||||
'DiskWriteCacheSize:integer' \
|
||||
'DiskWriteCacheTTL:integer' \
|
||||
'FinishedTorrentExportDir:string' \
|
||||
'PreAllocation:or("true","false"):false' \
|
||||
'SavePath:string:/tmp/download' \
|
||||
'StartInPause:or("true","false"):false' \
|
||||
'TempPathEnabled:or("true","false"):true' \
|
||||
'TempPath:string:temp/' \
|
||||
'UseIncompleteExtension:or("true","false"):false' \
|
||||
'TorrentExportDir:string' \
|
||||
'Locale:string:en' \
|
||||
'UseRandomPort:or("true","false"):true' \
|
||||
'IgnoreSlowTorrents:or("true","false")' \
|
||||
'MaxActiveDownloads:integer' \
|
||||
'MaxActiveTorrents:integer' \
|
||||
'MaxActiveUploads:integer' \
|
||||
'QueueingEnabled:or("true","false")' \
|
||||
'AuthSubnetWhitelist:string' \
|
||||
'AuthSubnetWhitelistEnabled:or("true","false"):false' \
|
||||
'ClickjackingProtection:or("true","false"):true' \
|
||||
'CSRFProtection:or("true","false"):true' \
|
||||
'HostHeaderValidation:or("true","false"):true' \
|
||||
'LocalHostAuth:or("true","false"):true' \
|
||||
'Password:string' \
|
||||
'Port:port:8080' \
|
||||
'Username:string' \
|
||||
'UseUPnP:or("true","false"):true' \
|
||||
'AnonymousMode:or("true","false"):true' \
|
||||
'AnnounceToAllTrackers:or("true","false")' \
|
||||
'IgnoreLimitsLAN:or("true","false"):true' \
|
||||
'IncludeOverhead:or("true","false"):false' \
|
||||
'osCache:or("true","false")' \
|
||||
'OutgoingPortsMax:port' \
|
||||
'OutgoingPortsMin:port' \
|
||||
'AnnounceToAllTiers:or("true","false")' \
|
||||
'BTProtocol:or("Both","TCP","UTP")' \
|
||||
'CreateTorrentSubfolder:or("true","false"):true' \
|
||||
'DisableAutoTMMByDefault:or("true","false"):true' \
|
||||
'SuperSeeding:or("true","false"):false' \
|
||||
'GlobalMaxSeedingMinutes:integer' \
|
||||
'SeedChokingAlgorithm:or("RoundRobin","FastestUpload","AntiLeech")' \
|
||||
'SlowTorrentsDownloadRate:integer' \
|
||||
'SlowTorrentsInactivityTimer:integer' \
|
||||
'SlowTorrentsUploadRate:integer' \
|
||||
'CategoryChanged:or("true","false"):false' \
|
||||
'CategorySavePathChanged:or("true","false"):true' \
|
||||
'DefaultSavePathChanged:or("true","false"):true' \
|
||||
'AutoDeleteAddedTorrentFile:or("Never","IfAdded"):Never' \
|
||||
'Enabled:or("true","false")' \
|
||||
'Path:string' \
|
||||
'Backup:or("true","false")' \
|
||||
'DeleteOld:or("true","false")' \
|
||||
'MaxSizeBytes:integer' \
|
||||
'SaveTime:string'
|
||||
}
|
||||
|
||||
sed_options () {
|
||||
local Anchor=$1
|
||||
local category=$( echo $2 | sed 's/\s/\\\\/g' )
|
||||
shift
|
||||
shift
|
||||
|
||||
if [ $( sed -n '/^\['"$Anchor"'\]/p' $QBT_INI_FILE | wc -l ) -lt 1 ]; then
|
||||
sed -i '$a\\n\['"$Anchor"'\]' "$QBT_INI_FILE"
|
||||
fi
|
||||
|
||||
local o; local v; local ol
|
||||
for o in "$@"; do
|
||||
v=$( echo "$(eval echo "\$$o")" | sed 's/[\/\.]/\\&/g' )
|
||||
[ -n "$category" ] && ol="$category\\\\$o" || ol="$o"
|
||||
|
||||
[ -n "$v" ] && {
|
||||
if [ $( sed -n '/^'"$ol"'=/p' $QBT_INI_FILE | wc -l ) -lt 1 ]; then
|
||||
sed -i '/'"$Anchor"'/a'"$ol"'='"$v" "$QBT_INI_FILE"
|
||||
else
|
||||
sed -i 's/'"$ol"'=.*/'"$ol"'='"$v"'/g' "$QBT_INI_FILE"
|
||||
fi
|
||||
} || {
|
||||
sed -i '/'"$ol"'=.*/d' "$QBT_INI_FILE"
|
||||
}
|
||||
done
|
||||
}
|
||||
|
||||
config_QBT () {
|
||||
local Password_ha1="";local Age="";local AgeType=""
|
||||
[ -n "$Password" ] && \
|
||||
Password_ha1="@ByteArray($(echo -n $Password|md5sum|grep -oE '[a-z0-9]{32}'))"
|
||||
|
||||
[ -n "$SaveTime" ] && {
|
||||
[ -n "$(echo $SaveTime | sed 's/[0-9dmyDMY]//g')" ] && { _err "Error save time setted."; return 1; }
|
||||
|
||||
Age="$(echo $SaveTime | sed 's/[dmyDMY]//g')"
|
||||
AgeType="$(echo $SaveTime | sed 's/[0-9]//g' | sed 's/[dD]/0/g' | sed 's/[mM]/1/g' | sed 's/[yY]/2/g')"
|
||||
}
|
||||
|
||||
[ -f "$QBT_INI_FILE" ] || {
|
||||
cat>"$QBT_INI_FILE"<<EOF
|
||||
[LegalNotice]
|
||||
Accepted=true
|
||||
|
||||
[Network]
|
||||
Cookies=@Invalid()
|
||||
|
||||
[Preferences]
|
||||
General\Locale=zh
|
||||
Downloads\SavePath=$download_dir
|
||||
General\Locale=zh
|
||||
WebUI\Port=$port
|
||||
WebUI\CSRFProtection=false
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
||||
run_qbittorrent()
|
||||
{
|
||||
local enable
|
||||
config_get_bool enable $1 enable
|
||||
|
||||
if [ $enable ]; then
|
||||
local profile_dir
|
||||
config_get profile_dir $1 profile_dir
|
||||
config_foreach config_qbittorrent 'Preferences' $profile_dir
|
||||
if [ "$profile_dir" != "" ]; then
|
||||
config_get library_dir $1 library_dir
|
||||
config_get program_dir $1 program_dir
|
||||
export PATH=$PATH:$program_dir
|
||||
export LD_LIBRARY_PATH=$library_dir
|
||||
qbittorrent-nox -d --profile=$profile_dir
|
||||
else
|
||||
echo "no profile_dir,stop!"
|
||||
fi
|
||||
}
|
||||
|
||||
sed_options "Core" "" \
|
||||
"AutoDeleteAddedTorrentFile"
|
||||
sed_options "BitTorrent" "Session DisableAutoTMMTriggers" \
|
||||
"CategoryChanged" "CategorySavePathChanged" "DefaultSavePathChanged"
|
||||
sed_options "BitTorrent" "Session" \
|
||||
"AnnounceToAllTiers" "BTProtocol" "CreateTorrentSubfolder" "DisableAutoTMMByDefault" "GlobalMaxSeedingMinutes" \
|
||||
"SeedChokingAlgorithm" "SlowTorrentsDownloadRate" "SlowTorrentsInactivityTimer" "SlowTorrentsUploadRate"
|
||||
sed_options "Preferences" "WebUI" \
|
||||
"AuthSubnetWhitelistEnabled" "AuthSubnetWhitelist" "CSRFProtection" \
|
||||
"ClickjackingProtection" "HostHeaderValidation" "LocalHostAuth" \
|
||||
"Password_ha1" "Port" "Username" "UseUPnP"
|
||||
sed_options "Preferences" "Queueing" \
|
||||
"IgnoreSlowTorrents" "MaxActiveDownloads" "MaxActiveTorrents" "MaxActiveUploads" \
|
||||
"QueueingEnabled"
|
||||
sed_options "Preferences" "General" \
|
||||
"Locale" "UseRandomPort"
|
||||
sed_options "Preferences" "Downloads" \
|
||||
"DiskWriteCacheSize" "DiskWriteCacheTTL" "FinishedTorrentExportDir" "PreAllocation" \
|
||||
"SavePath" "StartInPause" "TempPathEnabled" "TempPath" "TorrentExportDir" \
|
||||
"UseIncompleteExtension"
|
||||
sed_options "Preferences" "Connection" \
|
||||
"GlobalDLLimit" "GlobalDLLimitAlt" "GlobalUPLimit" "GlobalUPLimitAlt" \
|
||||
"PortRangeMin" "InetAddress" "UPnP"
|
||||
sed_options "Preferences" "Bittorrent" \
|
||||
"DHT" "Encryption" "LSD" "MaxConnecs" "MaxConnecsPerTorrent" "MaxRatio" \
|
||||
"MaxRatioAction" "MaxUploads" "MaxUploadsPerTorrent" "PeX" "uTP_rate_limited"
|
||||
sed_options "Preferences" "Advanced" \
|
||||
"AnnounceToAllTrackers" "AnonymousMode" "IgnoreLimitsLAN" "IncludeOverhead" "osCache" "OutgoingPortsMax" \
|
||||
"OutgoingPortsMin" "SuperSeeding"
|
||||
sed_options "Application" "FileLogger" \
|
||||
"Enabled" "Path" "Backup" "DeleteOld" "MaxSizeBytes" "Age" "AgeType"
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
start()
|
||||
{
|
||||
stop
|
||||
local profile_path
|
||||
config_load 'qbittorrent'
|
||||
config_foreach get_config basic
|
||||
[ $enable -eq 0 ] && exit 0
|
||||
config_foreach run_qbittorrent 'basic'
|
||||
init_QBT(){
|
||||
local section="$1"
|
||||
QBT_INSTANCE="${NAME}.${section}"
|
||||
|
||||
validate_QBT "$section" || { _err "Validation failed."; return 1; }
|
||||
|
||||
[ x"$enabled" = x0 ] && {
|
||||
_info "Instance \"${section}\" disabled.";
|
||||
procd_kill "$NAME" "$QBT_INSTANCE" >/dev/null 2>&1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
local confdir="qBittorrent"
|
||||
[ -n "$configuration" ] && {
|
||||
confdir="qBittorrent_$configuration"
|
||||
}
|
||||
|
||||
[ -d "$profile/$confdir/config" ] || {
|
||||
mkdir -m 0755 -p "$profile/$confdir/config"
|
||||
}
|
||||
|
||||
[ "$user" != "root" ] && {
|
||||
[ -d "$confdir" ] && {
|
||||
local groupnow="$(ls -l $profile | grep $confdir | awk '{print $3})"
|
||||
local usernow="$(ls -l $profile | grep $confdir | awk '{print $4})"
|
||||
|
||||
[ "$usernow" != "$user" ] && { _err "Permission denied!"; return 1; }
|
||||
} || {
|
||||
chmod -R g+w "$profile/$confdir"
|
||||
chown -R "$user":"$user" "$profile/$confdir"
|
||||
}
|
||||
}
|
||||
|
||||
[ "$AuthSubnetWhitelistEnabled" = true ] && {
|
||||
AuthSubnetWhitelist="$( echo $AuthSubnetWhitelist | sed 's/ /,/g')"
|
||||
} || {
|
||||
AuthSubnetWhitelist="@Invalid()"
|
||||
}
|
||||
|
||||
QBT_INI_FILE="$profile/$confdir/config/qBittorrent.conf"
|
||||
config_QBT
|
||||
|
||||
procd_open_instance $QBT_INSTANCE
|
||||
procd_set_param command $args
|
||||
procd_append_param command --profile="$profile"
|
||||
|
||||
[ -n "$configuration" ] && {
|
||||
procd_append_param command --configuration="$configuration"
|
||||
}
|
||||
|
||||
procd_set_param respawn
|
||||
procd_set_param user $user
|
||||
procd_set_param file $QBT_INI_FILE
|
||||
procd_set_param pidfile $QBT_PID_FILE
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
stop()
|
||||
service_triggers()
|
||||
{
|
||||
killall qbittorrent-nox >/dev/null 2>&1
|
||||
return 0
|
||||
procd_add_reload_trigger "$NAME"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load "$NAME"
|
||||
config_foreach init_QBT "$NAME"
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
restart
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
sleep 2
|
||||
start
|
||||
}
|
||||
|
@ -0,0 +1,21 @@
|
||||
#!/bin/sh
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@qbittorrent[-1]
|
||||
add ucitrack qbittorrent
|
||||
set ucitrack.@qbittorrent[-1].init=qbittorrent
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
if [ ."$(uci -q get qbittorrent.main)" != ."qbittorrent" ]; then
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
add qbittorrent qbittorrent
|
||||
rename qbittorrent.@qbittorrent[-1]="main"
|
||||
set qbittorrent.main.enabled=0
|
||||
set qbittorrent.main.profile="/tmp"
|
||||
commit qbittorrent
|
||||
EOF
|
||||
fi
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
exit 0
|
@ -1,12 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@qbittorrent[-1]
|
||||
add ucitrack qbittorrent
|
||||
set ucitrack.@qbittorrent[-1].init=qbittorrent
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
/etc/init.d/qbittorrent stop
|
||||
rm -f /tmp/luci-indexcache
|
||||
exit 0
|
@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=rblibtorrent
|
||||
PKG_VERSION:=1.1.13
|
||||
PKG_RELEASE=1
|
||||
PKG_RELEASE=2
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/arvidn/libtorrent.git
|
||||
@ -41,12 +41,15 @@ EXTRA_CXXFLAGS += $(if $(CONFIG_GCC_VERSION_4_8),-std=gnu++11,-std=gnu++14)
|
||||
TARGET_LDFLAGS += -lstdc++
|
||||
|
||||
CONFIGURE_ARGS += \
|
||||
--prefix /usr \
|
||||
--enable-shared \
|
||||
--enable-static \
|
||||
--disable-debug \
|
||||
--disable-rpath \
|
||||
--enable-encryption \
|
||||
--with-boost=$(STAGING_DIR)/usr
|
||||
--enable-deprecated-functions \
|
||||
--with-gnu-ld \
|
||||
--with-openssl=$(STAGING_DIR)/usr \
|
||||
--with-boost=$(STAGING_DIR)/usr \
|
||||
--with-libiconv \
|
||||
--with-libiconv-prefix=$(ICONV_PREFIX)
|
||||
|
||||
define Build/Configure
|
||||
cd $(PKG_BUILD_DIR) ; \
|
||||
|
Loading…
Reference in New Issue
Block a user