diff --git a/README.md b/README.md
index 8d47d5f..51db2b0 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,7 @@ On linux systems you may need to set the environment variable before run \
#### macOS install / configure / uninstall script
Just run in Terminal: `curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerMac.sh -o installTorrserverMac.sh && chmod 755 installTorrServerMac.sh && sudo ./installTorrServerMac.sh`
+Alternative install script for Intel Macs: https://github.com/dancheskus/TorrServerMacInstaller
#### Linux on VPS install / configure / uninstall script
Just run in console: `curl -s https://raw.githubusercontent.com/YouROK/TorrServer/master/installTorrServerLinux.sh | sudo bash`
@@ -54,7 +55,7 @@ TorrServer-darwin-arm64 [--port PORT] [--path PATH] [--logpath LOGPATH] [--weblo
* --torrentsdir TORRENTSDIR, -t TORRENTSDIR
* autoload torrents from dir
* --torrentaddr TORRENTADDR
- * Torrent client address, default :32000
+ * Torrent client address (format [IP]:PORT, ex. :32000, 127.0.0.1:32768 etc)
* --pubipv4 PUBIPV4, -4 PUBIPV4
* set public IPv4 addr
* --pubipv6 PUBIPV6, -6 PUBIPV6
diff --git a/build-all.sh b/build-all.sh
index 7f3e957..910ebdb 100755
--- a/build-all.sh
+++ b/build-all.sh
@@ -50,12 +50,13 @@ OUTPUT="${ROOT}/dist/TorrServer"
#### Build web
echo "Build web"
+export NODE_OPTIONS=--openssl-legacy-provider
$GOBIN run gen_web.go
#### Build server
echo "Build server"
cd "${ROOT}/server" || exit 1
-$GOBIN clean -i -r -cache #--modcache
+$GOBIN clean -i -r -cache --modcache
$GOBIN mod tidy
BUILD_FLAGS="-ldflags=${LDFLAGS} -tags=nosqlite"
@@ -92,7 +93,8 @@ declare -a COMPILERS=(
export NDK_VERSION="25.2.9519653" # 25.1.8937393
#export NDK_TOOLCHAIN=${ANDROID_HOME}/ndk/${NDK_VERSION}/toolchains/llvm/prebuilt/darwin-x86_64
-export NDK_TOOLCHAIN="${PWD}/../android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64"
+#export NDK_TOOLCHAIN="${PWD}/../android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64"
+export NDK_TOOLCHAIN=/Users/yourok/Projects/AndroidNDK
GOOS=android
for V in "${COMPILERS[@]}"; do
diff --git a/installTorrServerLinux.sh b/installTorrServerLinux.sh
index 2165d63..12ac9e4 100644
--- a/installTorrServerLinux.sh
+++ b/installTorrServerLinux.sh
@@ -448,6 +448,9 @@ case $1 in
isRdb=0
isLog=0
installTorrServer
+ else
+ systemctl stop $serviceName.service
+ systemctl start $serviceName.service
fi
exit
;;
diff --git a/server/cmd/main.go b/server/cmd/main.go
index 10fab82..71c4d8e 100644
--- a/server/cmd/main.go
+++ b/server/cmd/main.go
@@ -3,7 +3,6 @@ package main
import (
"context"
"fmt"
- "io/ioutil"
"net"
"os"
"path/filepath"
@@ -127,7 +126,7 @@ func watchTDir(dir string) {
path = dir
}
for {
- files, err := ioutil.ReadDir(path)
+ files, err := os.ReadDir(path)
if err == nil {
for _, file := range files {
filename := filepath.Join(path, file.Name())
diff --git a/server/log/log.go b/server/log/log.go
index c7ea035..64d796e 100644
--- a/server/log/log.go
+++ b/server/log/log.go
@@ -3,7 +3,7 @@ package log
import (
"bytes"
"fmt"
- "io/ioutil"
+ "io"
"log"
"os"
"strings"
@@ -93,8 +93,8 @@ func WebLogger() gin.HandlerFunc {
body := ""
// save body if not form or file
if !strings.HasPrefix(c.Request.Header.Get("Content-Type"), "multipart/form-data") {
- body, _ := ioutil.ReadAll(c.Request.Body)
- c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body))
+ body, _ := io.ReadAll(c.Request.Body)
+ c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
} else {
body = "body hidden, too large"
}
diff --git a/server/server.go b/server/server.go
index 8aebb3d..4b3df32 100644
--- a/server/server.go
+++ b/server/server.go
@@ -1,7 +1,6 @@
package server
import (
- "io/ioutil"
"net"
"os"
"path/filepath"
@@ -36,7 +35,7 @@ func cleanCache() {
return
}
- dirs, err := ioutil.ReadDir(settings.BTsets.TorrentsSavePath)
+ dirs, err := os.ReadDir(settings.BTsets.TorrentsSavePath)
if err != nil {
return
}
@@ -68,7 +67,7 @@ func cleanCache() {
}
func removeAllFiles(path string) {
- files, err := ioutil.ReadDir(path)
+ files, err := os.ReadDir(path)
if err != nil {
return
}
diff --git a/server/torr/apihelper.go b/server/torr/apihelper.go
index 4e51299..1384ec0 100644
--- a/server/torr/apihelper.go
+++ b/server/torr/apihelper.go
@@ -2,7 +2,6 @@ package torr
import (
"io"
- "io/ioutil"
"os"
"path/filepath"
"sort"
@@ -143,7 +142,7 @@ func RemTorrent(hashHex string) {
hash := metainfo.NewHashFromHex(hashHex)
if sets.BTsets.UseDisk && hashHex != "" && hashHex != "/" {
name := filepath.Join(sets.BTsets.TorrentsSavePath, hashHex)
- ff, _ := ioutil.ReadDir(name)
+ ff, _ := os.ReadDir(name)
for _, f := range ff {
os.Remove(filepath.Join(name, f.Name()))
}
diff --git a/server/torr/btserver.go b/server/torr/btserver.go
index c109ce1..0878695 100644
--- a/server/torr/btserver.go
+++ b/server/torr/btserver.go
@@ -5,7 +5,6 @@ import (
"fmt"
"log"
"net"
- "strconv"
"sync"
"github.com/anacrolix/publicip"
@@ -131,20 +130,21 @@ func (bt *BTServer) configure(ctx context.Context) {
log.Println("Set listen port", settings.BTsets.PeersListenPort)
bt.config.ListenPort = settings.BTsets.PeersListenPort
} else {
- lport := 32000
- for {
- log.Println("Check listen port", lport)
- l, err := net.Listen("tcp", ":"+strconv.Itoa(lport))
- if l != nil {
- l.Close()
- }
- if err == nil {
- break
- }
- lport++
- }
- log.Println("Set listen port", lport)
- bt.config.ListenPort = lport
+ // lport := 32000
+ // for {
+ // log.Println("Check listen port", lport)
+ // l, err := net.Listen("tcp", ":"+strconv.Itoa(lport))
+ // if l != nil {
+ // l.Close()
+ // }
+ // if err == nil {
+ // break
+ // }
+ // lport++
+ // }
+ // log.Println("Set listen port", lport)
+ log.Println("Set listen port to random autoselect (0)")
+ bt.config.ListenPort = 0 // lport
}
}
diff --git a/server/torr/utils/blockedIP.go b/server/torr/utils/blockedIP.go
index 61edc04..fbe56b4 100644
--- a/server/torr/utils/blockedIP.go
+++ b/server/torr/utils/blockedIP.go
@@ -2,7 +2,7 @@ package utils
import (
"bufio"
- "io/ioutil"
+ "os"
"path/filepath"
"strings"
@@ -12,7 +12,7 @@ import (
)
func ReadBlockedIP() (ranger iplist.Ranger, err error) {
- buf, err := ioutil.ReadFile(filepath.Join(settings.Path, "blocklist"))
+ buf, err := os.ReadFile(filepath.Join(settings.Path, "blocklist"))
if err != nil {
return nil, err
}
diff --git a/server/torr/utils/torrent.go b/server/torr/utils/torrent.go
index 9120f3f..d8ac5ca 100644
--- a/server/torr/utils/torrent.go
+++ b/server/torr/utils/torrent.go
@@ -2,9 +2,10 @@ package utils
import (
"encoding/base32"
- "io/ioutil"
+ "io"
"math/rand"
"net/http"
+ "os"
"path/filepath"
"strings"
@@ -14,7 +15,7 @@ import (
)
var defTrackers = []string{
- "http://retracker.local",
+ "http://retracker.local/announce",
"http://bt4.t-ru.org/ann?magnet",
"http://retracker.mgts.by:80/announce",
"http://tracker.city9x.com:2710/announce",
@@ -34,7 +35,7 @@ var loadedTrackers []string
func GetTrackerFromFile() []string {
name := filepath.Join(settings.Path, "trackers.txt")
- buf, err := ioutil.ReadFile(name)
+ buf, err := os.ReadFile(name)
if err == nil {
list := strings.Split(string(buf), "\n")
var ret []string
@@ -62,7 +63,7 @@ func loadNewTracker() {
}
resp, err := http.Get("https://raw.githubusercontent.com/ngosang/trackerslist/master/trackers_best_ip.txt")
if err == nil {
- buf, err := ioutil.ReadAll(resp.Body)
+ buf, err := io.ReadAll(resp.Body)
if err == nil {
arr := strings.Split(string(buf), "\n")
var ret []string
diff --git a/server/version/version.go b/server/version/version.go
index 0048d7b..c3738a1 100644
--- a/server/version/version.go
+++ b/server/version/version.go
@@ -6,7 +6,7 @@ import (
// "github.com/anacrolix/torrent"
)
-const Version = "MatriX.124.OE"
+const Version = "MatriX.125.OE"
func GetTorrentVersion() string {
// _ = torrent.NewDefaultClientConfig()
diff --git a/server/web/auth/auth.go b/server/web/auth/auth.go
index 2b07c90..cb5eb08 100644
--- a/server/web/auth/auth.go
+++ b/server/web/auth/auth.go
@@ -3,8 +3,8 @@ package auth
import (
"encoding/base64"
"encoding/json"
- "io/ioutil"
"net/http"
+ "os"
"path/filepath"
"reflect"
"strings"
@@ -28,7 +28,7 @@ func SetupAuth(engine *gin.Engine) *gin.RouterGroup {
}
func getAccounts() gin.Accounts {
- buf, err := ioutil.ReadFile(filepath.Join(settings.Path, "accs.db"))
+ buf, err := os.ReadFile(filepath.Join(settings.Path, "accs.db"))
if err != nil {
return nil
}
diff --git a/server/web/blocker/blocker.go b/server/web/blocker/blocker.go
index 3ceecca..7bfbc10 100644
--- a/server/web/blocker/blocker.go
+++ b/server/web/blocker/blocker.go
@@ -4,9 +4,9 @@ import (
"bufio"
"bytes"
"errors"
- "io/ioutil"
"net"
"net/http"
+ "os"
"path/filepath"
"strings"
@@ -22,11 +22,11 @@ func Blocker() gin.HandlerFunc {
}
name := filepath.Join(settings.Path, "bip.txt")
- buf, _ := ioutil.ReadFile(name)
+ buf, _ := os.ReadFile(name)
blackIpList := scanBuf(buf)
name = filepath.Join(settings.Path, "wip.txt")
- buf, _ = ioutil.ReadFile(name)
+ buf, _ = os.ReadFile(name)
whiteIpList := scanBuf(buf)
if blackIpList.NumRanges() == 0 && whiteIpList.NumRanges() == 0 {
diff --git a/server/web/server.go b/server/web/server.go
index 973fb4e..8d9e61c 100644
--- a/server/web/server.go
+++ b/server/web/server.go
@@ -2,6 +2,7 @@ package web
import (
"net"
+ "os"
"sort"
"server/rutor"
@@ -36,8 +37,8 @@ func Start(port string) {
}
err := BTS.Connect()
if err != nil {
- waitChan <- err
- return
+ log.TLogln("BTS.Connect() error!", err) // waitChan <- err
+ os.Exit(1) // return
}
rutor.Start()
diff --git a/web/src/components/About/index.jsx b/web/src/components/About/index.jsx
index 33af79d..eb2b6f3 100644
--- a/web/src/components/About/index.jsx
+++ b/web/src/components/About/index.jsx
@@ -69,6 +69,7 @@ export default function AboutDialog() {
+
@@ -82,6 +83,10 @@ export default function AboutDialog() {
+
+
+
+
diff --git a/web/src/components/App/index.jsx b/web/src/components/App/index.jsx
index 06b397e..3ba1080 100644
--- a/web/src/components/App/index.jsx
+++ b/web/src/components/App/index.jsx
@@ -109,6 +109,8 @@ export default function App() {
? changeLang('ru')
: currentLang === 'ru'
? changeLang('ua')
+ : currentLang === 'ua'
+ ? changeLang('zh')
: changeLang('en')
}
>
diff --git a/web/src/i18n.js b/web/src/i18n.js
index 3fa470e..710467a 100644
--- a/web/src/i18n.js
+++ b/web/src/i18n.js
@@ -4,6 +4,7 @@ import LanguageDetector from 'i18next-browser-languagedetector'
import translationEN from 'locales/en/translation.json'
import translationRU from 'locales/ru/translation.json'
import translationUA from 'locales/ua/translation.json'
+import translationZH from 'locales/zh/translation.json'
i18n
.use(LanguageDetector)
@@ -15,6 +16,7 @@ i18n
en: { translation: translationEN },
ru: { translation: translationRU },
ua: { translation: translationUA },
+ zh: { translation: translationZH },
},
})
diff --git a/web/src/locales/en/translation.json b/web/src/locales/en/translation.json
index 2c7b1d7..50dadf5 100644
--- a/web/src/locales/en/translation.json
+++ b/web/src/locales/en/translation.json
@@ -76,6 +76,7 @@
"Playlist": "Playlist",
"Preload": "Preload",
"ProjectSource": "Project GitHub",
+ "NasReleases": "NAS Releases GitHub",
"PWAGuide": {
"Header": "Install application",
"Description": "Install the app on your device to easily access it anytime. No app store. No download.",
@@ -112,7 +113,7 @@
"DisablePEXHint": "Better leave enabled",
"DisableTCPHint": "Don't disable without μTP enabled",
"DisableUPNPHint": "Auto-open port on router",
- "DisableUTPHint": "Not recommended to enable on weak devices",
+ "DisableUTPHint": "Recommended to disable in Windows OS",
"Disk": "Disk",
"DLNA": "DLNA Media Server",
"DontAddRetrackers": "Don`t add retrackers",
@@ -126,7 +127,7 @@
"EnableRutorSearch": "Turn on torrents search by RuTor",
"EnableRutorSearchHint": "You can search torrents by RuTor, even if the RuTor is not available. NOTE: The database takes about 500 MB of RAM.",
"PeersListenPort": "Peers Listen Port",
- "PeersListenPortHint": "1024 - 65535, 0 - auto",
+ "PeersListenPortHint": "1024 - 65535, 0 - random",
"PreloadCache": "Preload Cache Before Play",
"ProMode": "PRO mode",
"RAM": "RAM",
diff --git a/web/src/locales/ru/translation.json b/web/src/locales/ru/translation.json
index 9389275..8b13e50 100644
--- a/web/src/locales/ru/translation.json
+++ b/web/src/locales/ru/translation.json
@@ -76,6 +76,7 @@
"Playlist": "Плейлист",
"Preload": "Предзагр.",
"ProjectSource": "GitHub проекта",
+ "NasReleases": "Релизы для NAS GitHub",
"PWAGuide": {
"Header": "Установить приложение",
"Description": "Установите приложение на ваше устройство для быстрого доступа в любой момент. Без AppStore. Без загрузки.",
@@ -112,7 +113,7 @@
"DisablePEXHint": "Обмен списками участников - не рекомендуется отключать",
"DisableTCPHint": "Не отключайте без включенного μTP",
"DisableUPNPHint": "Автоматическая настройка порта на роутере",
- "DisableUTPHint": "Не рекомендуется включать на слабых устройствах",
+ "DisableUTPHint": "Рекомендуется отключить в ОС Windows",
"Disk": "ПЗУ / Накопитель",
"DLNA": "DLNA-медиасервер",
"DontAddRetrackers": "Ничего не делать",
diff --git a/web/src/locales/ua/translation.json b/web/src/locales/ua/translation.json
index 9a97e08..1b384bc 100644
--- a/web/src/locales/ua/translation.json
+++ b/web/src/locales/ua/translation.json
@@ -76,6 +76,7 @@
"Playlist": "Плейлист",
"Preload": "Передзав.",
"ProjectSource": "Сайт проекту",
+ "NasReleases": "Релізи для NAS GitHub",
"PWAGuide": {
"Header": "Встановити додаток",
"Description": "Встановіть програму на свій пристрій, щоб легко отримати до неї доступ у будь-який час. Немає магазину додатків. Немає завантаження.",
@@ -112,7 +113,7 @@
"DisablePEXHint": "Не рекомендується відключати",
"DisableTCPHint": "Не вимикайте без включеного μTP",
"DisableUPNPHint": "Автовідкриття порту на роутері",
- "DisableUTPHint": "Не рекомендується на слабких пристроях",
+ "DisableUTPHint": "Рекомендується відключити в ОС Windows",
"Disk": "ПЗП / Носій",
"DLNA": "DLNA-медиасервер",
"DontAddRetrackers": "Нічого не робити",
diff --git a/web/src/locales/zh/translation.json b/web/src/locales/zh/translation.json
new file mode 100644
index 0000000..92598ae
--- /dev/null
+++ b/web/src/locales/zh/translation.json
@@ -0,0 +1,179 @@
+{
+ "About": "关于",
+ "Actions": "操作",
+ "Add": "添加",
+ "AddDialog": {
+ "AddPosterLinkInput": "海报链接",
+ "AddTorrentSourceNotification": "先添加你的种子",
+ "AppendFile": {
+ "Or": "或",
+ "ClickOrDrag": "点击/拖放上传 (.torrent)"
+ },
+ "CustomTorrentTitle": "自定义标题(可选)",
+ "CustomTorrentTitleHelperText": "编写自定义标题以查找海报",
+ "HashExists": "这个种子已经在数据库中",
+ "OriginalTorrentTitle": "原始种子标题",
+ "TitleBlank": "标题",
+ "TitleBlankHelperText": "留空则使用种子原始标题",
+ "TorrentSourceLink": "种子地址",
+ "TorrentSourceOptions": "magnet / hash / .torrent文件链接",
+ "WrongTorrentSource": "错误的种子来源"
+ },
+ "AddFromLink": "添加种子",
+ "AddNewTorrent": "添加新种子",
+ "B": "B",
+ "bps": "bps",
+ "Buffer": "预加载缓冲区/缓存",
+ "BufferNote": "在设置中将播放前预加载缓存设置为大于 32 MB 以更改预加载大小",
+ "Cache": "缓存",
+ "Cancel": "取消",
+ "Clear": "清除",
+ "Close": "关闭",
+ "CloseServer?": "你想关闭服务器吗?",
+ "CloseServer": "关闭",
+ "CopyHash": "复制哈希",
+ "CopyLink": "复制链接",
+ "Data": "数据",
+ "DebugMode": "优先级标记",
+ "Delete": "删除",
+ "DeleteTorrent?": "删除种子?",
+ "DeleteTorrents?": "删除所有种子?",
+ "DetailedCacheView": {
+ "button": "查看缓存详情",
+ "header": "$t(DetailedCacheView.button)"
+ },
+ "Details": "详细信息",
+ "Donate?": "想要捐赠?",
+ "Donate": "捐赠",
+ "DownloadPlaylist": "下载播放列表",
+ "DownloadSpeed": "下载速度",
+ "Drop": "停止",
+ "DropTorrent": "停止种子",
+ "Edit": "编辑",
+ "EditTorrent": "编辑种子",
+ "Episode": "剧集",
+ "FromLatestFile": "来自最新文件",
+ "Full": "全部",
+ "GB": "GB",
+ "Gbps": "Gbps",
+ "Host": "主机",
+ "Info": "信息",
+ "KB": "KB",
+ "kbps": "kbps",
+ "Kilobytes": "千字节",
+ "LatestFilePlayed": "最近播放的文件:",
+ "Links": "链接",
+ "MB": "MB",
+ "Mbps": "Mbps",
+ "Name": "名称",
+ "NoTorrentsAdded": "没有添加种子",
+ "Offline": "离线",
+ "OK": "确定",
+ "OpenLink": "打开链接",
+ "Peers": "Peers",
+ "PiecesCount": "块数量",
+ "PiecesLength": "块长度",
+ "Playlist": "播放列表",
+ "Preload": "预加载",
+ "ProjectSource": "项目GitHub",
+ "NasReleases": "NAS GitHub 版本",
+ "PWAGuide": {
+ "Header": "安装应用程序",
+ "Description": "将应用程序安装到您的设备上,以便随时方便地访问。无需应用商店、无需下载。",
+ "VLC": "添加VLC按钮以在手机上立即打开视频",
+ "FirstStep": "点击",
+ "SecondStep": {
+ "Select": "选择",
+ "AddToHomeScreen":"添加到主屏幕"
+ }
+ },
+ "Releases": "TorrServer发行版",
+ "RemoveAll": "全部删除",
+ "RemoveViews": "移除视图状态",
+ "Resolution": "分辨率",
+ "Save": "保存",
+ "ScrollDown": "向下滚动",
+ "Season": "季",
+ "Sec": "秒",
+ "Seconds": "秒",
+ "SelectSeason": "选择季",
+ "SettingsDialog": {
+ "AddRetrackers": "添加retrackers",
+ "AdditionalSettings": "附加设置",
+ "MobileAppSettings": "移动APP设置",
+ "CacheBeforeReaderDesc": "在播放帧前面的缓存",
+ "CacheAfterReaderDesc": "在播放帧后面的缓存",
+ "CacheSize": "缓存大小",
+ "CacheSettings": "缓存设置",
+ "CacheStorageLocation": "缓存存储位置",
+ "ConnectionsLimit": "连接限制",
+ "ConnectionsLimitHint": "推荐20-25",
+ "DHT": "DHT(分布式哈希表)",
+ "DisableDHTHint": "启动服务器后无网络时禁用",
+ "DisablePEXHint": "最好保持启用状态",
+ "DisableTCPHint": "在未启用μTP的情况下不要禁用",
+ "DisableUPNPHint": "在路由器上自动打开端口",
+ "DisableUTPHint": "建议在 Windows 操作系统上禁用",
+ "Disk": "磁盘",
+ "DLNA": "DLNA媒体服务器",
+ "DontAddRetrackers": "不加retrackers",
+ "DownloadRateLimit": "下载速度限制",
+ "EnableDebug": "启用调试服务器日志",
+ "EnableIPv6Hint": "仅在ISP支持时启用",
+ "ForceEncrypt": "强制加密标头",
+ "ForceEncryptHint": "可以防止运营商阻止种子",
+ "FriendlyName": "DLNA服务器名称",
+ "FriendlyNameHint": "留空使用默认值",
+ "EnableRutorSearch": "打开RuTor种子搜索",
+ "EnableRutorSearchHint": "您可以通过RuTor搜索种子,即使RuTor不可用。注意:数据库占用大约500 MB的存储。",
+ "PeersListenPort": "Peers监听端口",
+ "PeersListenPortHint": "1024 - 65535,0 - 自动",
+ "PreloadCache": "播放前预加载缓存",
+ "ProMode": "专业模式",
+ "RAM": "内存",
+ "ReaderReadAHead": "预读缓存 (5-100%, rec. 95%)",
+ "RemoveCacheOnDrop": "删除已停用种子在磁盘上的缓存",
+ "RemoveCacheOnDropDesc": "如果禁用,缓存会在删除种子时移除。",
+ "RemoveRetrackers": "删除retrackers",
+ "ReplaceRetrackers": "替换retrackers",
+ "RetrackersMode": "Retrackers模式",
+ "ResetToDefault": "重置为默认值",
+ "Settings": "设置",
+ "TorrentDisconnectTimeout": "种子断开超时",
+ "TorrentsSavePath": "种子缓存保存路径",
+ "Upload": "上传",
+ "UploadHint": "不建议禁用",
+ "UploadRateLimit": "上传速度限制",
+ "UseDiskDesc": "最好使用内存或固态存储作为缓存",
+ "Tabs": {
+ "Main": "主要",
+ "Additional": "附加",
+ "AdditionalDisabled": "(启用专业模式)",
+ "App": "App"
+ },
+ "UseVLC": "提示在VLC中打开视频",
+ "UseVLCHint": "将VLC播放器按钮添加到种子内容列表"
+ },
+ "Size": "大小",
+ "SpecialThanks": "特别感谢",
+ "Speed": "速度",
+ "Support": "支持",
+ "TB": "TB",
+ "Tbps": "Tbps",
+ "ThanksToEveryone": "感谢所有测试和帮助的人。",
+ "TorrentAdded": "已添加",
+ "TorrentClosed": "已关闭",
+ "TorrentContent": "种子内容",
+ "TorrentDetails": "种子详情",
+ "TorrentGettingInfo": "获取信息",
+ "TorrentInDb": "在数据库中",
+ "TorrentPreload": "预加载",
+ "TorrentSize": "种子大小",
+ "TorrentState": "控制",
+ "TorrentStatus": "种子状态",
+ "TorrentWorking": "活跃",
+ "TurnOff": "关闭",
+ "UploadFile": "上传文件",
+ "UploadSpeed": "上传速度",
+ "Viewed": "查看"
+}
diff --git a/web/yarn.lock b/web/yarn.lock
index 1482050..be6b88d 100644
--- a/web/yarn.lock
+++ b/web/yarn.lock
@@ -11279,9 +11279,9 @@ semver-greatest-satisfied-range@^1.1.0:
sver-compat "^1.5.0"
"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
- integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
+ version "5.7.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+ integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
semver@7.3.2:
version "7.3.2"
@@ -11289,14 +11289,14 @@ semver@7.3.2:
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.2.1, semver@^7.3.2, semver@^7.3.5:
- version "7.3.7"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
- integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
+ version "7.5.4"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+ integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies:
lru-cache "^6.0.0"
@@ -12342,9 +12342,9 @@ toidentifier@1.0.1:
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
tough-cookie@^4.0.0:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874"
- integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf"
+ integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==
dependencies:
psl "^1.1.33"
punycode "^2.1.1"
@@ -13092,9 +13092,9 @@ which@^2.0.1, which@^2.0.2:
isexe "^2.0.0"
word-wrap@^1.2.3, word-wrap@~1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
- integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f"
+ integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==
workbox-background-sync@^5.1.4:
version "5.1.4"