mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-29 15:45:13 +08:00
🎁 Sync 2026-07-27 21:05:23
This commit is contained in:
1 parent
076b725e5a
commit
46ba553e1c
106 files changed
+1561
-391
No files matched your search
+3
-3
@@ -5,10 +5,10 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=dae
|
||||
PKG_VERSION:=2026.07.26
|
||||
PKG_RELEASE:=22
|
||||
PKG_VERSION:=2026.07.27
|
||||
PKG_RELEASE:=23
|
||||
|
||||
PKG_SOURCE:=dae-src-2026.07.26-92a3fbf117a3.tar.gz
|
||||
PKG_SOURCE:=dae-src-2026.07.27-c8388938b36a.tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/dae-src
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_HASH:=skip
|
||||
|
||||
+3
-3
@@ -5,10 +5,10 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=daed
|
||||
PKG_VERSION:=2026.07.26
|
||||
PKG_RELEASE:=30
|
||||
PKG_VERSION:=2026.07.27
|
||||
PKG_RELEASE:=31
|
||||
|
||||
PKG_SOURCE:=daed-src-2026.07.26-ecbc5c99d632.tar.gz
|
||||
PKG_SOURCE:=daed-src-2026.07.27-ed986932608b.tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/daed-src
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_HASH:=skip
|
||||
|
||||
+2
-2
@@ -8,8 +8,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=go-ethereum
|
||||
PKG_VERSION:=1.17.4
|
||||
PKG_RELEASE:=7
|
||||
PKG_VERSION:=1.17.5
|
||||
PKG_RELEASE:=8
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/ethereum/go-ethereum/tar.gz/v${PKG_VERSION}?
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ PKG_ARCH_kaiplus:=$(ARCH)
|
||||
|
||||
PKG_NAME:=kaiplus
|
||||
PKG_VERSION:=1.0.5
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/kaiplus/
|
||||
PKG_HASH:=skip
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
config kaiplus
|
||||
option 'enabled' '0'
|
||||
option 'data_dir' ''
|
||||
option 'port' '8198'
|
||||
option 'port' '8189'
|
||||
option 'base_path' '/apps/kaiplus/'
|
||||
option 'system_role' 'istoreos'
|
||||
@@ -6,7 +6,8 @@ USE_PROCD=1
|
||||
get_config() {
|
||||
config_get_bool enabled "$1" enabled 1
|
||||
config_get data_dir "$1" data_dir ""
|
||||
config_get port "$1" port "8198"
|
||||
config_get port "$1" port "8189"
|
||||
config_get base_path "$1" base_path "/apps/kaiplus/"
|
||||
config_get system_role "$1" system_role "istoreos"
|
||||
}
|
||||
|
||||
@@ -61,6 +62,7 @@ start_service() {
|
||||
procd_append_param command --data-dir "$data_dir"
|
||||
procd_append_param command --static-dir /usr/share/kaiplus/www
|
||||
procd_append_param command --defaults-dir /usr/share/kaiplus/defaults
|
||||
procd_append_param command --base-path "$base_path"
|
||||
procd_append_param command --system-role "$system_role"
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
|
||||
+7
-7
@@ -10,9 +10,9 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_ARCH_LINKEASE:=$(ARCH)
|
||||
|
||||
PKG_NAME:=linkease
|
||||
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
|
||||
PKG_SOURCE_DATE:=1.7.5
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
ARCH_HEXCODE:=
|
||||
ifeq ($(ARCH),x86_64)
|
||||
ARCH_HEXCODE=8664
|
||||
@@ -23,11 +23,11 @@ ARCH_HEXCODE=aa32
|
||||
else ifeq ($(ARCH),mipsel)
|
||||
ARCH_HEXCODE=1b0c
|
||||
endif
|
||||
PKG_SOURCE_VERSION:=$(ARCH_HEXCODE)
|
||||
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_SOURCE_DATE).tar.gz
|
||||
PKG_SOURCE_URL:=http://dl.istoreos.com/binary/LinkEase/LinuxStorage/
|
||||
PKG_HASH:=skip
|
||||
|
||||
PKG_SOURCE_VERSION:=$(ARCH_HEXCODE)
|
||||
PKG_SOURCE:=linkease-binary-$(PKG_SOURCE_DATE).tar.gz
|
||||
PKG_SOURCE_URL:=https://dl.istoreos.com/binary/LinkEase/LinuxStorage/
|
||||
PKG_HASH:=skip
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
@@ -40,7 +40,7 @@ define Package/$(PKG_NAME)
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
TITLE:=LinkEase - the file cloud
|
||||
DEPENDS:=@(arm||x86_64||aarch64) +linkmount
|
||||
DEPENDS:=@(arm||x86_64||aarch64)
|
||||
PKGARCH:=all
|
||||
URL:=https://www.linkease.com/
|
||||
endef
|
||||
|
||||
Executable → Regular
+2
-4
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
source /lib/functions.sh
|
||||
. /lib/functions.sh
|
||||
|
||||
case "$1" in
|
||||
save)
|
||||
@@ -40,7 +40,6 @@ case "$1" in
|
||||
config_get PUB_DIR main pub_dir ""
|
||||
config_get DL_DIR main dl_dir ""
|
||||
config_get TMP_DIR main tmp_dir ""
|
||||
# echo "$MAIN_DIR $CONF_DIR $PUB_DIR $DL_DIR $TMP_DIR"
|
||||
if [ "$ROOT_DIR" = "$MAIN_DIR" ]; then
|
||||
exit 0
|
||||
fi
|
||||
@@ -83,7 +82,6 @@ case "$1" in
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: $0 {save|load|status}"
|
||||
echo "Usage: $0 {save|load|local_save|local_load|status}"
|
||||
exit 1
|
||||
esac
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
config linkease
|
||||
option port '8897'
|
||||
option enabled '1'
|
||||
option allowPublic '0'
|
||||
Executable → Regular
+33
-9
@@ -3,24 +3,48 @@
|
||||
START=99
|
||||
USE_PROCD=1
|
||||
|
||||
PROG=/usr/sbin/linkease
|
||||
LOCAL_API=/var/run/linkease.sock
|
||||
|
||||
get_config() {
|
||||
config_get_bool enabled $1 enabled 1
|
||||
config_get_bool logger $1 logger
|
||||
config_get_bool allowPublic $1 allowPublic
|
||||
config_get port $1 port 8897
|
||||
config_get_bool enabled "$1" enabled 1
|
||||
config_get_bool logger "$1" logger 0
|
||||
config_get_bool allowPublic "$1" allowPublic 0
|
||||
config_get port "$1" port 8897
|
||||
}
|
||||
|
||||
stop_linkeaselite_runtime() {
|
||||
[ -x /etc/init.d/linkeaselite ] && /etc/init.d/linkeaselite stop >/dev/null 2>&1
|
||||
if uci -q get linkeaselite.@linkeaselite[0] >/dev/null 2>&1; then
|
||||
uci -q set linkeaselite.@linkeaselite[0].enabled="0"
|
||||
uci -q commit linkeaselite
|
||||
fi
|
||||
}
|
||||
|
||||
stop_linkeasefull_runtime() {
|
||||
[ -x /etc/init.d/linkeasefull ] && /etc/init.d/linkeasefull stop >/dev/null 2>&1
|
||||
if uci -q get linkeasefull.@linkeasefull[0] >/dev/null 2>&1; then
|
||||
uci -q set linkeasefull.@linkeasefull[0].enabled="0"
|
||||
uci -q commit linkeasefull
|
||||
fi
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load linkease
|
||||
config_foreach get_config linkease
|
||||
[ $enabled != 1 ] && return 1
|
||||
[ "$enabled" != "1" ] && return 1
|
||||
[ -x "$PROG" ] || return 1
|
||||
|
||||
stop_linkeaselite_runtime
|
||||
stop_linkeasefull_runtime
|
||||
rm -f "$LOCAL_API"
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param limits nofile="65535 65535"
|
||||
procd_set_param command /usr/sbin/linkease
|
||||
[ -n "$port" ] && procd_append_param command --deviceAddr ":$port" --localApi /var/run/linkease.sock
|
||||
[ "$allowPublic" == 1 ] && procd_append_param command --allowPublic
|
||||
[ "$logger" == 1 ] && procd_set_param stderr 1
|
||||
procd_set_param command "$PROG"
|
||||
procd_append_param command --deviceAddr ":$port" --localApi "$LOCAL_API"
|
||||
[ "$allowPublic" = "1" ] && procd_append_param command --allowPublic
|
||||
[ "$logger" = "1" ] && procd_set_param stderr 1
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
@@ -8,23 +8,52 @@
|
||||
EEOF
|
||||
}
|
||||
|
||||
if ! uci -q get linkease.@linkease[0] >/dev/null; then
|
||||
uci -q add linkease linkease >/dev/null
|
||||
fi
|
||||
|
||||
set_default() {
|
||||
key="$1"
|
||||
value="$2"
|
||||
current="$(uci -q get "linkease.@linkease[0].$key" 2>/dev/null || true)"
|
||||
[ -n "$current" ] && return 0
|
||||
uci -q set "linkease.@linkease[0].$key=$value"
|
||||
}
|
||||
|
||||
set_default enabled 1
|
||||
set_default port 8897
|
||||
set_default allowPublic 0
|
||||
uci -q commit linkease
|
||||
port="$(uci -q get linkease.@linkease[0].port 2>/dev/null || true)"
|
||||
[ -n "$port" ] || port=8897
|
||||
allow_public="$(uci -q get linkease.@linkease[0].allowPublic 2>/dev/null || true)"
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@linkease[-1]
|
||||
add ucitrack linkease
|
||||
set ucitrack.@linkease[-1].init=linkease
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
if [ "$allow_public" = "1" ]; then
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete firewall.linkease
|
||||
set firewall.linkease=rule
|
||||
set firewall.linkease.name="linkease"
|
||||
set firewall.linkease.target="ACCEPT"
|
||||
set firewall.linkease.src="wan"
|
||||
set firewall.linkease.proto="tcp"
|
||||
set firewall.linkease.dest_port="8897"
|
||||
set firewall.linkease.dest_port="$port"
|
||||
commit firewall
|
||||
EOF
|
||||
else
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete firewall.linkease
|
||||
commit firewall
|
||||
EOF
|
||||
fi
|
||||
|
||||
/etc/init.d/linkease enable
|
||||
/etc/init.d/linkease start
|
||||
/etc/init.d/linkease restart
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
@@ -0,0 +1,76 @@
|
||||
#
|
||||
# Copyright (C) 2026 iStoreOS
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=linkeasefull
|
||||
PKG_SOURCE_DATE:=3.0.4
|
||||
PKG_RELEASE:=1
|
||||
|
||||
ifeq ($(ARCH),x86_64)
|
||||
LINKEASE_RUNTIME_ARCH:=amd64
|
||||
PKG_HASH:=skip
|
||||
else ifeq ($(ARCH),aarch64)
|
||||
LINKEASE_RUNTIME_ARCH:=arm64
|
||||
PKG_HASH:=skip
|
||||
endif
|
||||
|
||||
PKG_SOURCE:=linkease-runtime-$(PKG_SOURCE_DATE)-linux-$(LINKEASE_RUNTIME_ARCH).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/linkease/linkease-desktop/releases/download/linkease-runtime-v$(PKG_SOURCE_DATE)/
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
TAR_CMD=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 $(TAR_OPTIONS)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
TITLE:=LinkEase Full - the local web desktop
|
||||
DEPENDS:=@(x86_64||aarch64) +linkease +ca-bundle
|
||||
URL:=https://www.linkease.com/
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
LinkEase Full provides the local web desktop entry for LinkEase and reuses the standard LinkEase LuCI file entry.
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/conffiles
|
||||
/etc/config/linkeasefull
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/postinst
|
||||
#!/bin/sh
|
||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||
[ -f /etc/uci-defaults/linkeasefull ] && /etc/uci-defaults/linkeasefull && rm -f /etc/uci-defaults/linkeasefull
|
||||
exit 0
|
||||
fi
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin $(1)/usr/libexec/linkeasefull/linkmount_bin $(1)/usr/libexec/linkeasefull/scripts $(1)/etc/config $(1)/etc/init.d $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/linkease-full $(1)/usr/bin/linkease-full
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/linkremote-agent $(1)/usr/bin/linkremote-agent
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/hostlink $(1)/usr/bin/hostlink
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/linkmount_bin/linkmount_bin $(1)/usr/libexec/linkeasefull/linkmount_bin/linkmount_bin
|
||||
$(CP) $(PKG_BUILD_DIR)/linkmount_bin/lib $(1)/usr/libexec/linkeasefull/linkmount_bin/lib
|
||||
$(CP) $(PKG_BUILD_DIR)/linkmount_bin/ver.json $(1)/usr/libexec/linkeasefull/linkmount_bin/ver.json
|
||||
$(CP) $(PKG_BUILD_DIR)/scripts/. $(1)/usr/libexec/linkeasefull/scripts/
|
||||
$(INSTALL_CONF) ./files/linkeasefull.config $(1)/etc/config/linkeasefull
|
||||
$(INSTALL_BIN) ./files/linkeasefull.init $(1)/etc/init.d/linkeasefull
|
||||
$(INSTALL_BIN) ./files/linkeasefull.uci-default $(1)/etc/uci-defaults/linkeasefull
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
@@ -0,0 +1,3 @@
|
||||
config linkeasefull
|
||||
option enabled '1'
|
||||
option data_root_parent ''
|
||||
@@ -0,0 +1,131 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=100
|
||||
STOP=10
|
||||
USE_PROCD=1
|
||||
|
||||
PROG=/usr/bin/linkease-full
|
||||
LINKEASE_LIBEXEC=/usr/libexec/linkeasefull
|
||||
LINKEASE_FULL_PORT=19290
|
||||
LINKEASE_BASE_PATH=/apps/
|
||||
LINKEASE_LEGACY_ADDR=0.0.0.0:8897
|
||||
|
||||
is_persistent_data_root_parent() {
|
||||
[ -n "$1" ] || return 1
|
||||
case "$1" in
|
||||
/tmp|/tmp/*|/var|/var/*|/run|/run/*|/dev|/dev/*|/proc|/proc/*|/sys|/sys/*|/rom|/rom/*|/overlay|/overlay/*) return 1 ;;
|
||||
esac
|
||||
[ -d "$1" ] || return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
resolve_data_root_parent() {
|
||||
if [ -n "$data_root_parent" ]; then
|
||||
is_persistent_data_root_parent "$data_root_parent"
|
||||
return $?
|
||||
fi
|
||||
|
||||
local_home="$(uci -q get linkease.@linkease[0].local_home || true)"
|
||||
if is_persistent_data_root_parent "$local_home"; then
|
||||
data_root_parent="$local_home"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ -f /etc/config/quickstart ]; then
|
||||
quickstart_main_dir="$(uci -q get quickstart.main.main_dir || true)"
|
||||
if [ -n "$quickstart_main_dir" ]; then
|
||||
if is_persistent_data_root_parent "$quickstart_main_dir"; then
|
||||
data_root_parent="$quickstart_main_dir"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
stop_other_linkease_runtimes() {
|
||||
[ -x /etc/init.d/linkease ] && /etc/init.d/linkease stop >/dev/null 2>&1
|
||||
[ -x /etc/init.d/linkeaselite ] && /etc/init.d/linkeaselite stop >/dev/null 2>&1
|
||||
|
||||
if uci -q get linkease.@linkease[0] >/dev/null 2>&1; then
|
||||
uci -q set linkease.@linkease[0].enabled="0"
|
||||
uci -q commit linkease
|
||||
fi
|
||||
if uci -q get linkeaselite.@linkeaselite[0] >/dev/null 2>&1; then
|
||||
uci -q set linkeaselite.@linkeaselite[0].enabled="0"
|
||||
uci -q commit linkeaselite
|
||||
fi
|
||||
}
|
||||
|
||||
read_config() {
|
||||
section="$1"
|
||||
config_get_bool enabled "$section" enabled 1
|
||||
config_get data_root_parent "$section" data_root_parent ""
|
||||
|
||||
if ! resolve_data_root_parent; then
|
||||
data_root_parent=""
|
||||
return 1
|
||||
fi
|
||||
data_root="$data_root_parent/.linkease_data"
|
||||
recycle_root="$data_root_parent/.linkease_recycle"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load linkeasefull
|
||||
config_foreach read_config linkeasefull
|
||||
[ "$enabled" = "1" ] || return 1
|
||||
[ -x "$PROG" ] || return 1
|
||||
if [ -z "$data_root_parent" ]; then
|
||||
echo "linkeasefull: please choose a persistent disk storage path in LuCI" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
stop_other_linkease_runtimes
|
||||
mkdir -p "$data_root/users/admin" "$data_root/system" "$data_root/tmp" "$recycle_root"
|
||||
mkdir -p "$data_root/apptunnel" "$data_root/mountremote" "$data_root/logs"
|
||||
|
||||
procd_open_instance linkeasefull
|
||||
procd_set_param limits nofile="65535 65535"
|
||||
procd_set_param command "$PROG"
|
||||
procd_set_param env \
|
||||
"SERVER_HOST=0.0.0.0" \
|
||||
"SERVER_PORT=$LINKEASE_FULL_PORT" \
|
||||
"SERVER_MODE=release" \
|
||||
"SERVER_BASE_PATH=$LINKEASE_BASE_PATH" \
|
||||
"LINKEASE_AUTH_PROVIDER=openwrt_luci" \
|
||||
"LINKEASE_EDITION=nas-full" \
|
||||
"KAIPLUS_ENABLED=0" \
|
||||
"LINKEASE_DATA_ROOT=$data_root" \
|
||||
"LINKEASE_RECYCLE_ROOT=$recycle_root" \
|
||||
"LINKEASE_APPTUNNEL_INTERNAL_ADDR=127.0.0.1:19810" \
|
||||
"LINKEASE_APPTUNNEL_LEGACY_ADDR=$LINKEASE_LEGACY_ADDR" \
|
||||
"LINKEASE_APPTUNNEL_DATA_DIR=$data_root/apptunnel" \
|
||||
"LINKEASE_APPTUNNEL_CACHE_DIR=$data_root/apptunnel/cache" \
|
||||
"LINKEASE_APPTUNNEL_RUNTIME_DIR=$data_root/apptunnel/runtime" \
|
||||
"LINKEASE_APPTUNNEL_LOG_DIR=$data_root/logs" \
|
||||
"APPTUNNEL_MOUNTREMOTE_MODE=real" \
|
||||
"APPTUNNEL_MOUNTREMOTE_LINKREMOTE_AGENT_BINARY=/usr/bin/linkremote-agent" \
|
||||
"APPTUNNEL_MOUNTREMOTE_SMBD_BINARY=$LINKEASE_LIBEXEC/linkmount_bin/linkmount_bin" \
|
||||
"APPTUNNEL_MOUNTREMOTE_WORK_DIR=$data_root/mountremote" \
|
||||
"APPTUNNEL_MOUNTREMOTE_SOCKET_DIR=$data_root/mountremote" \
|
||||
"APPTUNNEL_MOUNTREMOTE_SAMBA_DIR=$data_root/mountremote/samba" \
|
||||
"APPTUNNEL_MOUNTREMOTE_STORE_PATH=$data_root/mountremote/mounts.json" \
|
||||
"APPTUNNEL_MOUNTREMOTE_STARTUP_RECONCILE=true" \
|
||||
"APPTUNNEL_MOUNTREMOTE_ROOT_WATCH_DIR=$data_root/mountremote/root-watch" \
|
||||
"APPTUNNEL_MOUNTREMOTE_ALLOWED_MOUNT_PREFIX=$data_root_parent" \
|
||||
"MOUNTREMOTE_ALLOWED_MOUNT_PREFIX=$data_root_parent" \
|
||||
"LINKEASE_LINKMOUNT_BIN=$LINKEASE_LIBEXEC/linkmount_bin/linkmount_bin" \
|
||||
"LINKEASE_LINKMOUNT_LIB_DIR=$LINKEASE_LIBEXEC/linkmount_bin/lib" \
|
||||
"USER_DATA_PATH=$data_root/users/admin" \
|
||||
"SYSTEM_DATA_PATH=$data_root/system" \
|
||||
"TEMP_PATH=$data_root/tmp"
|
||||
procd_set_param respawn
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "linkeasefull"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
[ ! -f "/usr/share/ucitrack/luci-app-linkeasefull.json" ] && {
|
||||
cat > /usr/share/ucitrack/luci-app-linkeasefull.json << EEOF
|
||||
{
|
||||
"config": "linkeasefull",
|
||||
"init": "linkeasefull"
|
||||
}
|
||||
EEOF
|
||||
}
|
||||
|
||||
if ! uci -q get linkeasefull.@linkeasefull[0] >/dev/null; then
|
||||
uci -q add linkeasefull linkeasefull >/dev/null
|
||||
fi
|
||||
|
||||
set_default() {
|
||||
key="$1"
|
||||
value="$2"
|
||||
current="$(uci -q get "linkeasefull.@linkeasefull[0].$key" 2>/dev/null || true)"
|
||||
[ -n "$current" ] && return 0
|
||||
uci -q set "linkeasefull.@linkeasefull[0].$key=$value"
|
||||
}
|
||||
|
||||
set_default enabled 1
|
||||
uci -q commit linkeasefull
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@linkeasefull[-1]
|
||||
add ucitrack linkeasefull
|
||||
set ucitrack.@linkeasefull[-1].init=linkeasefull
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
/etc/init.d/linkeasefull enable
|
||||
/etc/init.d/linkeasefull restart
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# Copyright (C) 2015-2016 OpenWrt.org
|
||||
# Copyright (C) 2026 LinkEaseLite Contributors
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=linkeaselite
|
||||
PKG_SOURCE_DATE:=3.0.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=linkeaselite-binary-$(PKG_SOURCE_DATE).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/linkease/istore-packages/releases/download/linkeaselite-v$(PKG_SOURCE_DATE)/
|
||||
PKG_HASH:=skip
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
TAR_CMD=$(HOST_TAR) -C $(PKG_BUILD_DIR) $(TAR_OPTIONS)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
TITLE:=LinkEaseLite - the file cloud
|
||||
DEPENDS:=@(arm||x86_64||aarch64) +ca-bundle
|
||||
URL:=https://www.linkease.com/
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
LinkEaseLite is a lightweight LinkEase runtime for small-memory OpenWrt devices.
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/conffiles
|
||||
/etc/config/linkeaselite
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/postinst
|
||||
#!/bin/sh
|
||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||
[ -f /etc/uci-defaults/linkeaselite ] && /etc/uci-defaults/linkeaselite && rm -f /etc/uci-defaults/linkeaselite
|
||||
exit 0
|
||||
fi
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/postrm
|
||||
#!/bin/sh
|
||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||
uci -q delete firewall.linkeaselite
|
||||
uci -q commit firewall
|
||||
/etc/init.d/firewall reload
|
||||
fi
|
||||
exit 0
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/linkease-lite.$(ARCH) $(1)/usr/sbin/linkease-lite
|
||||
$(INSTALL_BIN) ./files/linkeaselite-config.sh $(1)/usr/sbin/linkeaselite-config.sh
|
||||
$(INSTALL_CONF) ./files/linkeaselite.config $(1)/etc/config/linkeaselite
|
||||
$(INSTALL_BIN) ./files/linkeaselite.init $(1)/etc/init.d/linkeaselite
|
||||
$(INSTALL_BIN) ./files/linkeaselite.uci-default $(1)/etc/uci-defaults/linkeaselite
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
Executable
+78
@@ -0,0 +1,78 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
case "$1" in
|
||||
save)
|
||||
if [ -n "$2" ]; then
|
||||
uci set "linkeaselite.@linkeaselite[0].preconfig=$2"
|
||||
uci commit linkeaselite
|
||||
fi
|
||||
;;
|
||||
|
||||
load)
|
||||
data="`uci -q get linkeaselite.@linkeaselite[0].preconfig`"
|
||||
if [ -z "${data}" ]; then
|
||||
echo "nil"
|
||||
else
|
||||
echo "${data}"
|
||||
fi
|
||||
;;
|
||||
|
||||
local_save)
|
||||
if [ -n "$2" ]; then
|
||||
uci set "linkeaselite.@linkeaselite[0].local_home=$2"
|
||||
uci commit linkeaselite
|
||||
ROOT_DIR="$2"
|
||||
if [ -f "/etc/config/quickstart" ]; then
|
||||
config_load quickstart
|
||||
config_get MAIN_DIR main main_dir ""
|
||||
config_get CONF_DIR main conf_dir ""
|
||||
config_get PUB_DIR main pub_dir ""
|
||||
config_get DL_DIR main dl_dir ""
|
||||
config_get TMP_DIR main tmp_dir ""
|
||||
[ "$ROOT_DIR" = "$MAIN_DIR" ] && exit 0
|
||||
uci set "quickstart.main.main_dir=$ROOT_DIR"
|
||||
if [ -z "$CONF_DIR" ] || [ "$CONF_DIR" = "$MAIN_DIR/Configs" ]; then
|
||||
uci set "quickstart.main.conf_dir=$ROOT_DIR/Configs"
|
||||
fi
|
||||
if [ -z "$PUB_DIR" ] || [ "$PUB_DIR" = "$MAIN_DIR/Public" ]; then
|
||||
uci set "quickstart.main.pub_dir=$ROOT_DIR/Public"
|
||||
fi
|
||||
if [ -z "$DL_DIR" ] || [ "$DL_DIR" = "$MAIN_DIR/Public/Downloads" ]; then
|
||||
uci set "quickstart.main.dl_dir=$ROOT_DIR/Public/Downloads"
|
||||
fi
|
||||
if [ -z "$TMP_DIR" ] || [ "$TMP_DIR" = "$MAIN_DIR/Caches" ]; then
|
||||
uci set "quickstart.main.tmp_dir=$ROOT_DIR/Caches"
|
||||
fi
|
||||
uci commit quickstart
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
|
||||
local_load)
|
||||
if [ -f "/etc/config/quickstart" ]; then
|
||||
data="`uci -q get quickstart.main.main_dir`"
|
||||
fi
|
||||
if [ -z "$data" ]; then
|
||||
data="`uci -q get linkeaselite.@linkeaselite[0].local_home`"
|
||||
fi
|
||||
if [ -z "${data}" ]; then
|
||||
echo "nil"
|
||||
else
|
||||
echo "${data}"
|
||||
fi
|
||||
;;
|
||||
|
||||
status)
|
||||
if pidof linkease-lite >/dev/null 2>&1; then
|
||||
echo "running"
|
||||
else
|
||||
echo "stopped"
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Usage: $0 {save|load|local_save|local_load|status}"
|
||||
exit 1
|
||||
esac
|
||||
@@ -0,0 +1,4 @@
|
||||
config linkeaselite
|
||||
option enabled '1'
|
||||
option port '8897'
|
||||
option allowPublic '0'
|
||||
Executable
+68
@@ -0,0 +1,68 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
STOP=10
|
||||
USE_PROCD=1
|
||||
|
||||
PROG=/usr/sbin/linkease-lite
|
||||
LOCAL_API=/var/run/linkeaselite.sock
|
||||
|
||||
read_config() {
|
||||
section="$1"
|
||||
config_get_bool enabled "$section" enabled 1
|
||||
config_get port "$section" port 8897
|
||||
config_get_bool allowPublic "$section" allowPublic 0
|
||||
}
|
||||
|
||||
sync_firewall() {
|
||||
uci -q delete firewall.linkeaselite
|
||||
if [ "$allowPublic" = "1" ]; then
|
||||
uci -q set firewall.linkeaselite=rule
|
||||
uci -q set firewall.linkeaselite.name="linkeaselite"
|
||||
uci -q set firewall.linkeaselite.target="ACCEPT"
|
||||
uci -q set firewall.linkeaselite.src="wan"
|
||||
uci -q set firewall.linkeaselite.proto="tcp"
|
||||
uci -q set firewall.linkeaselite.dest_port="$port"
|
||||
fi
|
||||
uci -q commit firewall
|
||||
/etc/init.d/firewall reload
|
||||
}
|
||||
|
||||
stop_linkease_runtimes() {
|
||||
[ -x /etc/init.d/linkeasefull ] && /etc/init.d/linkeasefull stop >/dev/null 2>&1
|
||||
[ -x /etc/init.d/linkease ] && /etc/init.d/linkease stop >/dev/null 2>&1
|
||||
|
||||
if uci -q get linkease.@linkease[0] >/dev/null 2>&1; then
|
||||
uci -q set linkease.@linkease[0].enabled="0"
|
||||
uci -q commit linkease
|
||||
fi
|
||||
if uci -q get linkeasefull.@linkeasefull[0] >/dev/null 2>&1; then
|
||||
uci -q set linkeasefull.@linkeasefull[0].enabled="0"
|
||||
uci -q commit linkeasefull
|
||||
fi
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load linkeaselite
|
||||
config_foreach read_config linkeaselite
|
||||
sync_firewall
|
||||
[ "$enabled" = "1" ] || return 1
|
||||
[ -x "$PROG" ] || return 1
|
||||
|
||||
stop_linkease_runtimes
|
||||
rm -f "$LOCAL_API"
|
||||
|
||||
procd_open_instance linkeaselite
|
||||
procd_set_param limits nofile="65535 65535"
|
||||
procd_set_param command "$PROG"
|
||||
procd_append_param command --deviceAddr ":$port" --localApi "$LOCAL_API"
|
||||
[ "$allowPublic" = "1" ] && procd_append_param command --allowPublic
|
||||
procd_set_param respawn
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "linkeaselite"
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
#!/bin/sh
|
||||
[ ! -f "/usr/share/ucitrack/luci-app-linkeaselite.json" ] && {
|
||||
cat > /usr/share/ucitrack/luci-app-linkeaselite.json << EEOF
|
||||
{
|
||||
"config": "linkeaselite",
|
||||
"init": "linkeaselite"
|
||||
}
|
||||
EEOF
|
||||
}
|
||||
|
||||
if ! uci -q get linkeaselite.@linkeaselite[0] >/dev/null; then
|
||||
uci -q add linkeaselite linkeaselite >/dev/null
|
||||
fi
|
||||
|
||||
set_default() {
|
||||
key="$1"
|
||||
value="$2"
|
||||
current="$(uci -q get "linkeaselite.@linkeaselite[0].$key" 2>/dev/null || true)"
|
||||
[ -n "$current" ] && return 0
|
||||
uci -q set "linkeaselite.@linkeaselite[0].$key=$value"
|
||||
}
|
||||
|
||||
set_default enabled 1
|
||||
set_default port 8897
|
||||
set_default allowPublic 0
|
||||
uci -q commit linkeaselite
|
||||
|
||||
port="$(uci -q get linkeaselite.@linkeaselite[0].port 2>/dev/null || true)"
|
||||
[ -n "$port" ] || port=8897
|
||||
allow_public="$(uci -q get linkeaselite.@linkeaselite[0].allowPublic 2>/dev/null || true)"
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@linkeaselite[-1]
|
||||
add ucitrack linkeaselite
|
||||
set ucitrack.@linkeaselite[-1].init=linkeaselite
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
if [ "$allow_public" = "1" ]; then
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete firewall.linkeaselite
|
||||
set firewall.linkeaselite=rule
|
||||
set firewall.linkeaselite.name="linkeaselite"
|
||||
set firewall.linkeaselite.target="ACCEPT"
|
||||
set firewall.linkeaselite.src="wan"
|
||||
set firewall.linkeaselite.proto="tcp"
|
||||
set firewall.linkeaselite.dest_port="$port"
|
||||
commit firewall
|
||||
EOF
|
||||
else
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete firewall.linkeaselite
|
||||
commit firewall
|
||||
EOF
|
||||
fi
|
||||
|
||||
/etc/init.d/linkeaselite enable
|
||||
/etc/init.d/linkeaselite restart
|
||||
|
||||
exit 0
|
||||
@@ -1,63 +0,0 @@
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_ARCH_LINKEASE:=$(ARCH)
|
||||
|
||||
PKG_NAME:=linkmount
|
||||
# use PKG_SOURCE_DATE instead of PKG_VERSION for compitable
|
||||
PKG_SOURCE_DATE:=1.0.3
|
||||
PKG_RELEASE:=1
|
||||
ARCH_HEXCODE:=
|
||||
ifeq ($(ARCH),x86_64)
|
||||
ARCH_HEXCODE=8664
|
||||
else ifeq ($(ARCH),aarch64)
|
||||
ARCH_HEXCODE=aa64
|
||||
else ifeq ($(ARCH),arm)
|
||||
ARCH_HEXCODE=aa32
|
||||
else ifeq ($(ARCH),mipsel)
|
||||
ARCH_HEXCODE=1b0c
|
||||
endif
|
||||
PKG_SOURCE_VERSION:=$(ARCH_HEXCODE)
|
||||
PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_SOURCE_DATE).tar.gz
|
||||
PKG_SOURCE_URL:=https://dl.istoreos.com/binary/LinkEase/AutoUpgrade/linkmount/
|
||||
PKG_HASH:=skip
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-binary-$(PKG_SOURCE_DATE)
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/$(PKG_NAME)
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
TITLE:=LinkMount - the file cloud
|
||||
DEPENDS:=@(arm||x86_64||aarch64)
|
||||
PKGARCH:=all
|
||||
URL:=https://www.linkease.com/
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/description
|
||||
LinkMount is used by LinkEase
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/$(PKG_NAME)/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin/linkmount
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_ARCH_LINKEASE)/bin/linkmount_bin $(1)/usr/sbin/linkmount/linkmount_bin
|
||||
$(CP) $(PKG_BUILD_DIR)/$(PKG_ARCH_LINKEASE)/bin/lib $(1)/usr/sbin/linkmount/lib
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,$(PKG_NAME)))
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-amlogic
|
||||
PKG_VERSION:=3.1.319
|
||||
PKG_RELEASE:=16
|
||||
PKG_VERSION:=3.1.320
|
||||
PKG_RELEASE:=17
|
||||
|
||||
PKG_LICENSE:=GPL-2.0 License
|
||||
PKG_MAINTAINER:=ophub <https://github.com/ophub/luci-app-amlogic>
|
||||
|
||||
@@ -57,22 +57,24 @@ return view.extend({
|
||||
handleSaveApply: null,
|
||||
handleReset: null,
|
||||
|
||||
// On load, call sync_menu to update sidebar menu flags from runtime platform detection. If the install menu becomes
|
||||
// visible but is not in the current nav, reload once to pick up the new menu (guarded by #menu-synced hash).
|
||||
load: function () {
|
||||
// Call sync_menu; if the install menu is now visible on the server but
|
||||
// absent in the browser nav, reload once (guarded by #menu-synced hash).
|
||||
// On load, call sync_menu to update sidebar menu flags from runtime platform detection. If the sidebar nav is out of
|
||||
// sync with the server-side menu flags, reload once to pick up the new menu (guarded by #menu-synced hash).
|
||||
load: function () {
|
||||
// Call sync_menu; reload once when the sidebar nav disagrees with the
|
||||
// server-side menu flags in either direction (guarded by #menu-synced hash).
|
||||
const alreadyReloaded = window.location.hash === '#menu-synced';
|
||||
const syncMenuPromise = callSyncMenu().then(function (res) {
|
||||
if (alreadyReloaded) return;
|
||||
if (res && res.show_install === 'yes') {
|
||||
// Check if the sidebar navigation already contains the install link.
|
||||
const installLink = document.querySelector('a[href*="amlogic/install"]');
|
||||
if (!installLink) {
|
||||
// Server-side index cache updated; reload to pick up new nav.
|
||||
window.location.replace(window.location.pathname + '#menu-synced');
|
||||
window.location.reload();
|
||||
}
|
||||
if (alreadyReloaded || !res) return;
|
||||
// Check if the sidebar navigation already contains the install link.
|
||||
const installLink = document.querySelector('a[href*="amlogic/install"]');
|
||||
// Menu became visible on the server but is absent in the browser nav.
|
||||
const needShow = (res.show_install === 'yes' && !installLink);
|
||||
// Menu became hidden on the server but is still present in the browser nav.
|
||||
const needHide = (res.show_install === 'no' && installLink);
|
||||
if (needShow || needHide) {
|
||||
// Server-side index cache updated; reload to pick up new nav.
|
||||
window.location.replace(window.location.pathname + '#menu-synced');
|
||||
window.location.reload();
|
||||
}
|
||||
}).catch(function () {});
|
||||
return Promise.all([callAuthor(), syncMenuPromise]).then(function (r) { return r[0]; });
|
||||
|
||||
@@ -20,10 +20,28 @@ PLATFORM=$(grep -E '^PLATFORM=' /etc/flippy-openwrt-release 2>/dev/null | \
|
||||
SHOW_INSTALL=$(grep -E '^SHOW_INSTALL_MENU=' /etc/flippy-openwrt-release 2>/dev/null | \
|
||||
awk -F= '{print $2}' | tr -d '"' | xargs)
|
||||
|
||||
case "$PLATFORM" in
|
||||
*amlogic*) MENU_INSTALL=yes ;;
|
||||
*) [ "$SHOW_INSTALL" = "yes" ] && MENU_INSTALL=yes || MENU_INSTALL=no ;;
|
||||
# Detect whether the root fs is already on eMMC (mmcblk*p* with device/type == "MMC").
|
||||
# Mirrors root_on_internal_storage() in luci.amlogic: all other boot media
|
||||
# (TF/SD, NVMe, SATA, USB) keep the install menu visible.
|
||||
ROOT_PT=$(df / | tail -n1 | awk '{print $1}' | awk -F '/' '{print $3}')
|
||||
IS_INSTALLED=0
|
||||
case "$ROOT_PT" in
|
||||
mmcblk*p*)
|
||||
BASE_DEV="${ROOT_PT%p*}"
|
||||
[ "$(cat /sys/block/${BASE_DEV}/device/type 2>/dev/null | xargs)" = "MMC" ] && IS_INSTALLED=1
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$PLATFORM" in
|
||||
*amlogic*|*allwinner*) CAN_INSTALL=yes ;;
|
||||
*) [ "$SHOW_INSTALL" = "yes" ] && CAN_INSTALL=yes || CAN_INSTALL=no ;;
|
||||
esac
|
||||
if [ "$CAN_INSTALL" = "yes" ] && [ "$IS_INSTALLED" = "0" ]; then
|
||||
MENU_INSTALL=yes
|
||||
else
|
||||
MENU_INSTALL=no
|
||||
fi
|
||||
|
||||
case "$PLATFORM" in
|
||||
*qemu*) MENU_ARMCPU=no ;;
|
||||
*) MENU_ARMCPU=yes ;;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-04-24 15:14+0000\n"
|
||||
"Last-Translator: \"د.عبدالعزيز الجهني\" <myzezo@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-07-03 15:29+0000\n"
|
||||
"Last-Translator: Develper openmn <devopenm@proton.me>\n"
|
||||
"Language-Team: Arabic <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/ar/>\n"
|
||||
"Language: ar\n"
|
||||
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
|
||||
msgid "\"../\" not allowed in path for Security Reason."
|
||||
@@ -74,7 +74,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:532
|
||||
msgid "Cancel"
|
||||
msgstr "الغاء"
|
||||
msgstr "إلغاء"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:981
|
||||
msgid "Check Interval"
|
||||
|
||||
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luci-app-ddns 2.4.0-1\n"
|
||||
"POT-Creation-Date: 2016-01-30 11:07+0100\n"
|
||||
"PO-Revision-Date: 2026-04-18 17:10+0000\n"
|
||||
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-06-26 11:18+0000\n"
|
||||
"Last-Translator: apemay <apemay.dev@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/es/>\n"
|
||||
"Language: es\n"
|
||||
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.7.dev0\n"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
|
||||
msgid "\"../\" not allowed in path for Security Reason."
|
||||
@@ -691,8 +691,8 @@ msgid ""
|
||||
"Source URL for services file. Defaults to the master openwrt ddns package "
|
||||
"repo."
|
||||
msgstr ""
|
||||
"URL utilizada para descargar el archivo de servicios. De forma "
|
||||
"predeterminada, es el repositorio principal del paquete ddns de openwrt ."
|
||||
"URL de origen del archivo de servicios. De forma predeterminada, es el "
|
||||
"repositorio principal del paquete DDNS de OpenWrt."
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:201
|
||||
msgid "Start DDNS"
|
||||
|
||||
@@ -2,9 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: LuCI: ddns\n"
|
||||
"POT-Creation-Date: 2017-10-17 21:00+0300\n"
|
||||
"PO-Revision-Date: 2026-04-25 09:44+0000\n"
|
||||
"Last-Translator: SnIPeRSnIPeR "
|
||||
"<snipersniper@users.noreply.hosted.weblate.org>\n"
|
||||
"PO-Revision-Date: 2026-07-03 15:28+0000\n"
|
||||
"Last-Translator: chigelo <chigelo@gmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/ru/>\n"
|
||||
"Language: ru\n"
|
||||
@@ -13,7 +12,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
|
||||
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
|
||||
|
||||
@@ -447,7 +446,7 @@ msgstr ""
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:491
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
|
||||
msgid "Name"
|
||||
msgstr "Название"
|
||||
msgstr "Имя"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
|
||||
msgid ""
|
||||
|
||||
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: luci-app-ddns 2.4.0-1\n"
|
||||
"POT-Creation-Date: 2016-01-30 11:07+0100\n"
|
||||
"PO-Revision-Date: 2026-05-12 09:07+0000\n"
|
||||
"Last-Translator: Oleksandr Yurov <oyurov@icloud.com>\n"
|
||||
"PO-Revision-Date: 2026-07-08 15:16+0000\n"
|
||||
"Last-Translator: Dan <jonweblin2205@protonmail.com>\n"
|
||||
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsddns/uk/>\n"
|
||||
"Language: uk\n"
|
||||
@@ -12,7 +12,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 2026.5-dev\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:423
|
||||
msgid "\"../\" not allowed in path for Security Reason."
|
||||
@@ -437,7 +437,7 @@ msgstr ""
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:491
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
|
||||
msgid "Name"
|
||||
msgstr "Імʼя"
|
||||
msgstr "Назва"
|
||||
|
||||
#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
|
||||
msgid ""
|
||||
|
||||
@@ -228,7 +228,7 @@ const methods = {
|
||||
|
||||
const hasWget = () => {
|
||||
return cache.has_wget ??= hasCommand('wget');
|
||||
}
|
||||
};
|
||||
|
||||
const hasWgetSsl = () => {
|
||||
return cache.has_wgetssl ??= hasWget() && system(`wget 2>&1 | grep -iqF 'https'`) == 0 ? true : false;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-04-24 15:13+0000\n"
|
||||
"Last-Translator: \"د.عبدالعزيز الجهني\" <myzezo@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-07-03 15:29+0000\n"
|
||||
"Last-Translator: Develper openmn <devopenm@proton.me>\n"
|
||||
"Language-Team: Arabic <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/ar/>\n"
|
||||
"Language: ar\n"
|
||||
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -224,7 +224,7 @@ msgstr "وحدات المعالجة المركزية"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1933
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:517
|
||||
msgid "Cancel"
|
||||
msgstr "الغاء"
|
||||
msgstr "إلغاء"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:35
|
||||
msgid "Causes errors when a chosen API > Docker endpoint API support."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-06-11 08:15+0000\n"
|
||||
"PO-Revision-Date: 2026-07-13 02:01+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/cs/>\n"
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 2026.6\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -2195,7 +2195,7 @@ msgstr "obraz"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:755
|
||||
msgid "json-file"
|
||||
msgstr ""
|
||||
msgstr "json soubor"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:336
|
||||
msgid "kill"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-06-05 19:02+0000\n"
|
||||
"PO-Revision-Date: 2026-06-27 12:02+0000\n"
|
||||
"Last-Translator: Hyeonjeong Lee <h9101654@gmail.com>\n"
|
||||
"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/ko/>\n"
|
||||
@@ -8,7 +8,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 2026.6\n"
|
||||
"X-Generator: Weblate 2026.7.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -1376,7 +1376,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:351
|
||||
msgid "Open in browser"
|
||||
msgstr ""
|
||||
msgstr "브라우저에서 열기"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:899
|
||||
msgid "Operation failed"
|
||||
@@ -1598,11 +1598,11 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:535
|
||||
msgid "Remove tag"
|
||||
msgstr ""
|
||||
msgstr "태그 제거"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:625
|
||||
msgid "Repository"
|
||||
msgstr ""
|
||||
msgstr "저장소"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/images.js:658
|
||||
msgid "Repository cannot be empty"
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-04-25 12:14+0000\n"
|
||||
"Last-Translator: SnIPeRSnIPeR "
|
||||
"<snipersniper@users.noreply.hosted.weblate.org>\n"
|
||||
"PO-Revision-Date: 2026-07-05 14:58+0000\n"
|
||||
"Last-Translator: Deni Dgabiev <ghostcraft412@gmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/ru/>\n"
|
||||
"Language: ru\n"
|
||||
@@ -10,7 +9,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -67,11 +66,11 @@ msgstr "Дополнительно"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:590
|
||||
msgid "Aliases"
|
||||
msgstr ""
|
||||
msgstr "Псевдонимы"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1923
|
||||
msgid "Aliases (optional):"
|
||||
msgstr ""
|
||||
msgstr "Псевдонимы (опционально):"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/events.js:342
|
||||
msgid "All Subtypes"
|
||||
@@ -489,7 +488,7 @@ msgstr "Отладка"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:753
|
||||
msgid "Default (daemon)"
|
||||
msgstr ""
|
||||
msgstr "По умолчанию (демон)"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/configuration.js:57
|
||||
msgid "Default bridge"
|
||||
@@ -892,7 +891,7 @@ msgstr "IPv4-адрес"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1919
|
||||
msgid "IPv4 Address (optional):"
|
||||
msgstr ""
|
||||
msgstr "IPv4-адрес (опционально):"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:64
|
||||
msgid "IPv6"
|
||||
@@ -906,7 +905,7 @@ msgstr "IPv6‑адрес"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1921
|
||||
msgid "IPv6 Address (optional):"
|
||||
msgstr ""
|
||||
msgstr "IPv6-адрес (опционально):"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:586
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network_new.js:134
|
||||
@@ -1102,7 +1101,7 @@ msgstr "Опции журналирования"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:751
|
||||
msgid "Log driver"
|
||||
msgstr ""
|
||||
msgstr "Драйвер логирования"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:745
|
||||
msgid "Log driver options"
|
||||
@@ -1214,7 +1213,7 @@ msgstr "Монтирования/Привязки"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:121
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:241
|
||||
msgid "Name"
|
||||
msgstr "Название"
|
||||
msgstr "Имя"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:213
|
||||
msgid "Name of the container that can be selected during container creation"
|
||||
@@ -1230,7 +1229,7 @@ msgstr "Статистика сети"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:282
|
||||
msgid "Network Aliases"
|
||||
msgstr ""
|
||||
msgstr "Сетевые псевдонимы"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/network.js:100
|
||||
msgid "Network Configurations"
|
||||
@@ -1401,7 +1400,7 @@ msgstr "Только для пользовательских сетей"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:351
|
||||
msgid "Open in browser"
|
||||
msgstr ""
|
||||
msgstr "Открыть в браузере"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:899
|
||||
msgid "Operation failed"
|
||||
@@ -1755,7 +1754,7 @@ msgstr ""
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:354
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container.js:1801
|
||||
msgid "Start"
|
||||
msgstr "Запустить"
|
||||
msgstr "Начало"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/containers.js:208
|
||||
msgid "Start this container"
|
||||
@@ -2200,7 +2199,7 @@ msgstr "образ"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:755
|
||||
msgid "json-file"
|
||||
msgstr ""
|
||||
msgstr "json-файл"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:336
|
||||
msgid "kill"
|
||||
@@ -2212,7 +2211,7 @@ msgstr "загрузить"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:754
|
||||
msgid "local"
|
||||
msgstr ""
|
||||
msgstr "локальный"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:383
|
||||
msgid "mount"
|
||||
@@ -2228,7 +2227,7 @@ msgstr "узел"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:757
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
msgstr "отсутствует"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:337
|
||||
msgid "oom"
|
||||
@@ -2297,7 +2296,7 @@ msgstr "остановить"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:756
|
||||
msgid "syslog"
|
||||
msgstr ""
|
||||
msgstr "syslog"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/dockerman/common.js:364
|
||||
msgid "tag"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-05-21 05:04+0000\n"
|
||||
"PO-Revision-Date: 2026-07-08 15:16+0000\n"
|
||||
"Last-Translator: Dan <jonweblin2205@protonmail.com>\n"
|
||||
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsdockerman/uk/>\n"
|
||||
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 2026.6.dev0\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:505
|
||||
msgid "/mnt/path"
|
||||
@@ -1211,7 +1211,7 @@ msgstr "Монтування/Привʼязки"
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:121
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/volumes.js:241
|
||||
msgid "Name"
|
||||
msgstr "Імʼя"
|
||||
msgstr "Назва"
|
||||
|
||||
#: applications/luci-app-dockerman/htdocs/luci-static/resources/view/dockerman/container_new.js:213
|
||||
msgid "Name of the container that can be selected during container creation"
|
||||
|
||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=KaiPlus
|
||||
PKG_VERSION:=1.0.0
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
LUCI_DEPENDS:=+kaiplus +luci-compat
|
||||
LUCI_MINIFY_CSS:=0
|
||||
LUCI_MINIFY_JS:=0
|
||||
|
||||
@@ -15,10 +15,12 @@ end
|
||||
function kaiplus_status()
|
||||
local sys = require "luci.sys"
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
local port = uci:get_first("kaiplus", "kaiplus", "port", "8198")
|
||||
local port = uci:get_first("kaiplus", "kaiplus", "port", "8189")
|
||||
local base_path = uci:get_first("kaiplus", "kaiplus", "base_path", "/apps/kaiplus/")
|
||||
local status = {
|
||||
running = (sys.call("pidof kaiplus_bin >/dev/null") == 0),
|
||||
port = port
|
||||
port = port,
|
||||
base_path = base_path
|
||||
}
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(status)
|
||||
|
||||
@@ -5,7 +5,10 @@ m = Map("kaiplus", translate("KaiPlus"), translate("KaiPlus is an AI workspace a
|
||||
m:section(SimpleSection).template = "kaiplus/kaiplus_status"
|
||||
|
||||
m.on_after_commit = function(self)
|
||||
sys.call("/etc/init.d/kaiplus restart >/dev/null 2>&1 &")
|
||||
sys.call("/etc/init.d/kaiplus restart >/dev/null 2>&1")
|
||||
if sys.call("[ -x /etc/init.d/linkease ]") == 0 then
|
||||
sys.call("/etc/init.d/linkease restart >/dev/null 2>&1 &")
|
||||
end
|
||||
end
|
||||
|
||||
s = m:section(TypedSection, "kaiplus", translate("Global settings"))
|
||||
@@ -29,7 +32,7 @@ end
|
||||
data_dir.default = default_path
|
||||
|
||||
local port = s:option(Value, "port", translate("Web port"))
|
||||
port.default = "8198"
|
||||
port.default = "8189"
|
||||
port.rmempty = false
|
||||
port.datatype = "port"
|
||||
port.description = translate("Port for the KaiPlus web service.")
|
||||
|
||||
@@ -6,8 +6,15 @@ XHR.poll(5, '<%=url("admin/services/kaiplus_status")%>', null, function(x, st) {
|
||||
el.innerHTML = '<br/><em style=\"color:red\"><%:The KaiPlus service is not running.%></em>';
|
||||
}
|
||||
if (st.running) {
|
||||
var basePath = st.base_path || "/apps/kaiplus/";
|
||||
if (basePath.charAt(0) !== "/") {
|
||||
basePath = "/" + basePath;
|
||||
}
|
||||
if (basePath.charAt(basePath.length - 1) !== "/") {
|
||||
basePath = basePath + "/";
|
||||
}
|
||||
el.innerHTML = '<br/><em style=\"color:green\"><%:The KaiPlus service is running.%></em>'
|
||||
+ "<br/><br/><input class=\"btn cbi-button cbi-button-apply\" type=\"button\" value=\" <%:Click to open KaiPlus%> \" onclick=\"window.open('http://" + window.location.hostname + ":" + st.port + "/')\"/>";
|
||||
+ "<br/><br/><input class=\"btn cbi-button cbi-button-apply\" type=\"button\" value=\" <%:Click to open KaiPlus%> \" onclick=\"window.open('http://' + window.location.hostname + ':' + st.port + basePath)\"/>";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-01-21 18:32+0000\n"
|
||||
"Last-Translator: niky1987 <niky1987@libero.it>\n"
|
||||
"PO-Revision-Date: 2026-07-23 06:18+0000\n"
|
||||
"Last-Translator: Random <random-r@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsksmbd/it/>\n"
|
||||
"Language: it\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.16-dev\n"
|
||||
"X-Generator: Weblate 2026.8.dev0\n"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:58
|
||||
msgid "Add optional guest access to IPC$ share, disabled by default"
|
||||
@@ -82,7 +82,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:109
|
||||
msgid "Inherit owner"
|
||||
msgstr ""
|
||||
msgstr "Eredita il proprietario"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:36
|
||||
msgid "Interface"
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-04-25 12:14+0000\n"
|
||||
"Last-Translator: SnIPeRSnIPeR "
|
||||
"<snipersniper@users.noreply.hosted.weblate.org>\n"
|
||||
"PO-Revision-Date: 2026-07-03 15:29+0000\n"
|
||||
"Last-Translator: chigelo <chigelo@gmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsksmbd/ru/>\n"
|
||||
"Language: ru\n"
|
||||
@@ -10,7 +9,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:58
|
||||
msgid "Add optional guest access to IPC$ share, disabled by default"
|
||||
@@ -96,7 +95,7 @@ msgstr "Слушать только на данном интерфейсе ил
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:81
|
||||
msgid "Name"
|
||||
msgstr "Название"
|
||||
msgstr "Имя"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:22
|
||||
#: applications/luci-app-ksmbd/root/usr/share/luci/menu.d/luci-app-ksmbd.json:3
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2026-05-12 09:06+0000\n"
|
||||
"Last-Translator: Oleksandr Yurov <oyurov@icloud.com>\n"
|
||||
"PO-Revision-Date: 2026-07-08 15:16+0000\n"
|
||||
"Last-Translator: Dan <jonweblin2205@protonmail.com>\n"
|
||||
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsksmbd/uk/>\n"
|
||||
"Language: uk\n"
|
||||
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 2026.5-dev\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:58
|
||||
msgid "Add optional guest access to IPC$ share, disabled by default"
|
||||
@@ -98,7 +98,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:81
|
||||
msgid "Name"
|
||||
msgstr "Імʼя"
|
||||
msgstr "Назва"
|
||||
|
||||
#: applications/luci-app-ksmbd/htdocs/luci-static/resources/view/ksmbd.js:22
|
||||
#: applications/luci-app-ksmbd/root/usr/share/luci/menu.d/luci-app-ksmbd.json:3
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI support for linkease
|
||||
LUCI_DEPENDS:=+linkease
|
||||
LUCI_DEPENDS:=+luci-lib-linkeasefile
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=2.1.70-r3
|
||||
PKG_VERSION:=2.1.70-r4
|
||||
# PKG_RELEASE MUST be empty for luci.mk
|
||||
PKG_RELEASE:=1
|
||||
PKG_RELEASE:=2
|
||||
LUCI_MINIFY_CSS:=0
|
||||
LUCI_MINIFY_JS:=0
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ function index()
|
||||
|
||||
entry({"admin", "services", "linkease_status"}, call("linkease_status"))
|
||||
|
||||
entry({"admin", "services", "linkease", "file"}, call("linkease_file_template")).leaf = true
|
||||
|
||||
end
|
||||
|
||||
@@ -27,13 +26,3 @@ function linkease_status()
|
||||
luci.http.write_json(status)
|
||||
end
|
||||
|
||||
function get_params(name)
|
||||
local data = {
|
||||
prefix=luci.dispatcher.build_url(unpack({"admin", "services", "linkease", name})),
|
||||
}
|
||||
return data
|
||||
end
|
||||
|
||||
function linkease_file_template()
|
||||
luci.template.render("linkease/file", get_params("file"))
|
||||
end
|
||||
@@ -0,0 +1,18 @@
|
||||
#
|
||||
# Copyright (C) 2026 iStoreOS
|
||||
#
|
||||
# This is free software, licensed under the Apache License, Version 2.0 .
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI support for linkeasefull
|
||||
LUCI_DEPENDS:=+linkeasefull +luci-lib-linkeasefile
|
||||
LUCI_PKGARCH:=all
|
||||
|
||||
PKG_VERSION:=1.0.1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -0,0 +1,89 @@
|
||||
module("luci.controller.linkeasefull", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/linkeasefull") then
|
||||
return
|
||||
end
|
||||
|
||||
entry({"admin", "services", "linkeasefull"}, cbi("linkeasefull"), _("LinkEase Full"), 21).dependent = true
|
||||
entry({"admin", "services", "linkeasefull_status"}, call("linkeasefull_status"))
|
||||
entry({"admin", "services", "linkeasefull", "auth"}, call("linkeasefull_auth")).leaf = true
|
||||
end
|
||||
|
||||
local function uhttpd_has_apps_proxy_prefix()
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
local mappings = uci:get_list("uhttpd", "main", "proxy_prefix") or {}
|
||||
|
||||
for _, mapping in ipairs(mappings) do
|
||||
if mapping == "/apps=http://127.0.0.1:19290" then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
function linkeasefull_status()
|
||||
local sys = require "luci.sys"
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
|
||||
local status = {
|
||||
running = (sys.call("pidof linkease-full >/dev/null") == 0),
|
||||
full_port = 19290,
|
||||
legacy_port = 8897,
|
||||
base_path = "/apps/",
|
||||
lan_ip = uci:get("network", "lan", "ipaddr") or "",
|
||||
proxy_prefix_enabled = uhttpd_has_apps_proxy_prefix()
|
||||
}
|
||||
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(status)
|
||||
end
|
||||
|
||||
local function retrieve_luci_session()
|
||||
local http = require "luci.http"
|
||||
local util = require "luci.util"
|
||||
|
||||
for _, key in ipairs({"sysauth_https", "sysauth_http", "sysauth"}) do
|
||||
local sid = http.getcookie(key)
|
||||
if sid and sid ~= "" then
|
||||
local sdat = util.ubus("session", "get", { ubus_rpc_session = sid })
|
||||
if sdat and type(sdat.values) == "table" then
|
||||
return sid
|
||||
end
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
local function valid_apps_return(value)
|
||||
if not value or value == "" then
|
||||
return false
|
||||
end
|
||||
if value == "/apps" then
|
||||
return true
|
||||
end
|
||||
local prefix = value:sub(1, 6)
|
||||
return prefix == "/apps/" or prefix == "/apps?" or prefix == "/apps#"
|
||||
end
|
||||
|
||||
local function valid_cookie_value(value)
|
||||
return value and value:match("^[A-Za-z0-9._%-_]+$") ~= nil
|
||||
end
|
||||
|
||||
function linkeasefull_auth()
|
||||
local http = require "luci.http"
|
||||
local sid = retrieve_luci_session()
|
||||
|
||||
if not valid_cookie_value(sid) then
|
||||
http.status(403, "Forbidden")
|
||||
return
|
||||
end
|
||||
|
||||
local target = http.formvalue("return") or "/apps/"
|
||||
if not valid_apps_return(target) then
|
||||
target = "/apps/"
|
||||
end
|
||||
|
||||
http.header("Set-Cookie", "linkease_openwrt_sid=" .. sid .. "; Path=/apps; HttpOnly; SameSite=Lax")
|
||||
http.redirect(target)
|
||||
end
|
||||
@@ -0,0 +1,86 @@
|
||||
local fs = require "nixio.fs"
|
||||
|
||||
local m, s
|
||||
|
||||
local function starts_with(value, prefix)
|
||||
return value:sub(1, #prefix) == prefix
|
||||
end
|
||||
|
||||
local function decode_mount_path(value)
|
||||
return value:gsub("\\040", " "):gsub("\\011", "\t"):gsub("\\012", "\n"):gsub("\\134", "\\")
|
||||
end
|
||||
|
||||
local function is_persistent_mount(path, fstype)
|
||||
if path == "" or path == "/" then
|
||||
return false
|
||||
end
|
||||
if starts_with(path, "/tmp") or starts_with(path, "/var") or starts_with(path, "/run") then
|
||||
return false
|
||||
end
|
||||
if starts_with(path, "/dev") or starts_with(path, "/proc") or starts_with(path, "/sys") then
|
||||
return false
|
||||
end
|
||||
if starts_with(path, "/rom") or starts_with(path, "/overlay") then
|
||||
return false
|
||||
end
|
||||
if fstype == "tmpfs" or fstype == "devtmpfs" or fstype == "overlay" or fstype == "squashfs" then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local function storage_mounts()
|
||||
local mounts = {}
|
||||
for line in io.lines("/proc/mounts") do
|
||||
local device, path, fstype = line:match("^(%S+)%s+(%S+)%s+(%S+)")
|
||||
path = path and decode_mount_path(path) or ""
|
||||
if device and fstype and is_persistent_mount(path, fstype) then
|
||||
mounts[#mounts + 1] = {
|
||||
path = path,
|
||||
label = string.format("%s (%s)", path, fstype)
|
||||
}
|
||||
end
|
||||
end
|
||||
table.sort(mounts, function(a, b) return a.path < b.path end)
|
||||
return mounts
|
||||
end
|
||||
|
||||
m = Map("linkeasefull", translate("LinkEase Full"), translate("LinkEase Full uses fixed entries at port 19290 /apps/ and legacy port 8897."))
|
||||
|
||||
m:section(SimpleSection).template = "linkeasefull_status"
|
||||
|
||||
s = m:section(TypedSection, "linkeasefull", translate("Storage"))
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
s:option(Flag, "enabled", translate("Enable")).rmempty = false
|
||||
|
||||
local data = s:option(ListValue, "data_root_parent", translate("Storage path"), translate("Choose a mounted persistent disk. /tmp is not allowed."))
|
||||
data.rmempty = false
|
||||
|
||||
local current = m.uci:get_first("linkeasefull", "linkeasefull", "data_root_parent") or ""
|
||||
local has_current = false
|
||||
for _, mount in ipairs(storage_mounts()) do
|
||||
data:value(mount.path, mount.label)
|
||||
if mount.path == current then
|
||||
has_current = true
|
||||
end
|
||||
end
|
||||
if current ~= "" and not has_current and fs.stat(current, "type") == "dir" and is_persistent_mount(current, "") then
|
||||
data:value(current, current)
|
||||
end
|
||||
|
||||
function data.validate(self, value)
|
||||
if value == nil or value == "" then
|
||||
return nil, translate("Please choose a mounted persistent disk.")
|
||||
end
|
||||
if not is_persistent_mount(value, "") then
|
||||
return nil, translate("/tmp and system paths cannot be used for LinkEase Full storage.")
|
||||
end
|
||||
if fs.stat(value, "type") ~= "dir" then
|
||||
return nil, translate("The selected storage path does not exist.")
|
||||
end
|
||||
return value
|
||||
end
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,34 @@
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(5, '<%=url("admin/services/linkeasefull_status")%>', null,
|
||||
function(x, st)
|
||||
{
|
||||
var tb = document.getElementById('linkeasefull_status');
|
||||
if (st && tb)
|
||||
{
|
||||
var lanHost = st.lan_ip || window.location.hostname;
|
||||
var fullUrl = st.proxy_prefix_enabled
|
||||
? window.location.protocol + "//" + window.location.host + "/apps/"
|
||||
: "http://" + lanHost + ":" + (st.full_port || 19290) + "/apps/";
|
||||
var legacyUrl = "http://" + lanHost + ":" + (st.legacy_port || 8897) + "/";
|
||||
var overallStatus = st.running
|
||||
? '<br/><em style=\"color:green\"><%:The LinkEase Full service is running.%></em>'
|
||||
: '<br/><em style=\"color:red\"><%:The LinkEase Full service is not running.%></em>';
|
||||
tb.innerHTML = overallStatus;
|
||||
|
||||
if (st.running)
|
||||
{
|
||||
tb.innerHTML = tb.innerHTML
|
||||
+ "<br/><br/><input class=\"btn cbi-button cbi-button-apply\" type=\"button\" value=\" <%:Open Full Entry%> \" onclick=\"window.open('" + fullUrl + "')\"/>"
|
||||
+ " <input class=\"btn cbi-button cbi-button-apply\" type=\"button\" value=\" <%:Open Standard Entry%> \" onclick=\"window.open('" + legacyUrl + "')\"/>";
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]></script>
|
||||
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%:LinkEase Full Status%></legend>
|
||||
<p id="linkeasefull_status">
|
||||
<em><%:Collecting data...%></em>
|
||||
</p>
|
||||
</fieldset>
|
||||
@@ -0,0 +1,35 @@
|
||||
msgid "LinkEase Full"
|
||||
msgstr "易有云完整版"
|
||||
|
||||
msgid "LinkEase Full provides the local web desktop entry for LinkEase."
|
||||
msgstr "易有云完整版提供本地 Web 桌面入口。"
|
||||
|
||||
msgid "Global settings"
|
||||
msgstr "全局设置"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
msgid "Base Path"
|
||||
msgstr "基础路径"
|
||||
|
||||
msgid "Data Root Parent"
|
||||
msgstr "数据根目录父路径"
|
||||
|
||||
msgid "The LinkEase Full service is running."
|
||||
msgstr "易有云完整版服务已启动"
|
||||
|
||||
msgid "The LinkEase Full service is not running."
|
||||
msgstr "易有云完整版服务未启动"
|
||||
|
||||
msgid "Click to open LinkEase Full"
|
||||
msgstr "点击打开易有云完整版"
|
||||
|
||||
msgid "LinkEase Full Status"
|
||||
msgstr "易有云完整版服务状态"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "收集数据..."
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
zh-cn
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
|
||||
exit 0
|
||||
@@ -0,0 +1,18 @@
|
||||
# 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 linkeaselite
|
||||
LUCI_DEPENDS:=+linkeaselite
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=1.0.0
|
||||
PKG_RELEASE:=1
|
||||
LUCI_MINIFY_CSS:=0
|
||||
LUCI_MINIFY_JS:=0
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
@@ -0,0 +1,31 @@
|
||||
module("luci.controller.linkeaselite", package.seeall)
|
||||
|
||||
function index()
|
||||
if not nixio.fs.access("/etc/config/linkeaselite") then
|
||||
return
|
||||
end
|
||||
|
||||
local page = entry({"admin", "services", "linkeaselite"}, firstchild(), _("LinkEaseLite"), 20)
|
||||
page.dependent = true
|
||||
entry({"admin", "services", "linkeaselite", "config"}, cbi("linkeaselite"), _("Settings"), 10).leaf = true
|
||||
entry({"admin", "services", "linkeaselite_status"}, call("linkeaselite_status"))
|
||||
entry({"admin", "services", "linkeaselite", "file"}, call("linkeaselite_file_removed")).leaf = true
|
||||
end
|
||||
|
||||
function linkeaselite_status()
|
||||
local sys = require "luci.sys"
|
||||
local uci = require "luci.model.uci".cursor()
|
||||
local port = tonumber(uci:get_first("linkeaselite", "linkeaselite", "port"))
|
||||
|
||||
local status = {
|
||||
running = (sys.call("pidof linkease-lite >/dev/null") == 0),
|
||||
port = (port or 8897)
|
||||
}
|
||||
|
||||
luci.http.prepare_content("application/json")
|
||||
luci.http.write_json(status)
|
||||
end
|
||||
|
||||
function linkeaselite_file_removed()
|
||||
luci.http.status(404, "Not Found")
|
||||
end
|
||||
@@ -0,0 +1,24 @@
|
||||
local m, s
|
||||
local sys = require "luci.sys"
|
||||
|
||||
m = Map("linkeaselite", translate("LinkEaseLite"), translate("LinkEaseLite is an efficient data transfer tool for small-memory devices."))
|
||||
m:section(SimpleSection).template = "linkeaselite_status"
|
||||
|
||||
m.on_after_commit = function(self)
|
||||
sys.call("/etc/init.d/linkeaselite restart >/dev/null 2>&1")
|
||||
end
|
||||
|
||||
s = m:section(TypedSection, "linkeaselite", translate("Global settings"))
|
||||
s.addremove = false
|
||||
s.anonymous = true
|
||||
|
||||
s:option(Flag, "enabled", translate("Enable")).rmempty = false
|
||||
|
||||
local port = s:option(Value, "port", translate("Port"))
|
||||
port.rmempty = false
|
||||
port.datatype = "port"
|
||||
port.default = "8897"
|
||||
|
||||
s:option(Flag, "allowPublic", translate("AllowPublic"), translate("Allowing access via public IP addresses can lead to insufficient security.")).rmempty = false
|
||||
|
||||
return m
|
||||
@@ -0,0 +1,42 @@
|
||||
<script type="text/javascript">//<![CDATA[
|
||||
XHR.poll(5, '<%=url("admin/services/linkeaselite_status")%>', null,
|
||||
function(x, st)
|
||||
{
|
||||
var tb = document.getElementById('linkeaselite_status');
|
||||
if (st && tb)
|
||||
{
|
||||
var legacyUrl = "http://" + window.location.hostname + ":" + (st.port || 8897) + "/";
|
||||
var overallStatus = st.running
|
||||
? '<br/><em style=\"color:green\"><%:The LinkEaseLite service is running.%></em>'
|
||||
: '<br/><em style=\"color:red\"><%:The LinkEaseLite service is not running.%></em>';
|
||||
tb.innerHTML = overallStatus;
|
||||
|
||||
function appendBreak()
|
||||
{
|
||||
tb.appendChild(document.createElement("br"));
|
||||
}
|
||||
|
||||
function appendButton(value, action)
|
||||
{
|
||||
var button = document.createElement("input");
|
||||
button.className = "btn cbi-button cbi-button-apply";
|
||||
button.type = "button";
|
||||
button.value = value;
|
||||
button.onclick = action;
|
||||
tb.appendChild(button);
|
||||
}
|
||||
|
||||
appendBreak();
|
||||
appendBreak();
|
||||
appendButton(" <%:Click to open LinkEaseLite%> ", function() { window.open(legacyUrl); });
|
||||
}
|
||||
}
|
||||
);
|
||||
//]]></script>
|
||||
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%:LinkEaseLite Status%></legend>
|
||||
<p id="linkeaselite_status">
|
||||
<em><%:Collecting data...%></em>
|
||||
</p>
|
||||
</fieldset>
|
||||
@@ -0,0 +1,35 @@
|
||||
msgid "LinkEaseLite"
|
||||
msgstr "易有云Lite"
|
||||
|
||||
msgid "LinkEaseLite is an efficient data transfer tool for small-memory devices."
|
||||
msgstr "易有云Lite是面向小内存设备的轻量数据传输工具。"
|
||||
|
||||
msgid "Global settings"
|
||||
msgstr "全局设置"
|
||||
|
||||
msgid "Enable"
|
||||
msgstr "启用"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
msgid "AllowPublic"
|
||||
msgstr "公网访问"
|
||||
|
||||
msgid "Allowing access via public IP addresses can lead to insufficient security."
|
||||
msgstr "允许公网IP访问,会导致不够安全。"
|
||||
|
||||
msgid "Click to open LinkEaseLite"
|
||||
msgstr "点击打开易有云Lite"
|
||||
|
||||
msgid "The LinkEaseLite service is running."
|
||||
msgstr "易有云Lite服务已启动"
|
||||
|
||||
msgid "The LinkEaseLite service is not running."
|
||||
msgstr "易有云Lite服务未启动"
|
||||
|
||||
msgid "LinkEaseLite Status"
|
||||
msgstr "易有云Lite服务状态"
|
||||
|
||||
msgid "Collecting data..."
|
||||
msgstr "收集数据..."
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
zh-cn
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
|
||||
exit 0
|
||||
@@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-passwall
|
||||
PKG_VERSION:=26.7.24
|
||||
PKG_RELEASE:=194
|
||||
PKG_RELEASE:=195
|
||||
PKG_PO_VERSION:=$(PKG_VERSION)
|
||||
|
||||
PKG_CONFIG_DEPENDS:= \
|
||||
|
||||
@@ -1754,9 +1754,9 @@ acl_app() {
|
||||
run_${type} flag=$tcp_node node=$tcp_node tcp_redir_port=$redir_port ${_extra_param} config_file=$config_file log_file=$log_file loglevel=$loglevel
|
||||
else
|
||||
config_file="acl/${tcp_node}_SOCKS_${socks_port}.json"
|
||||
run_socks flag=$tcp_node node=$tcp_node bind=127.0.0.1 socks_port=$socks_port config_file=$config_file
|
||||
# local log_file=$TMP_ACL_PATH/ipt2socks_${tcp_node}_${redir_port}.log
|
||||
# log_file="/dev/null"
|
||||
run_socks flag=$tcp_node node=$tcp_node bind=127.0.0.1 socks_port=$socks_port config_file=$config_file log_file=$log_file
|
||||
# log_file=$TMP_ACL_PATH/ipt2socks_${tcp_node}_${redir_port}.log
|
||||
log_file="/dev/null"
|
||||
run_ipt2socks flag=acl_${tcp_node} tcp_tproxy=${is_tproxy} local_port=$redir_port socks_address=127.0.0.1 socks_port=$socks_port log_file=$log_file
|
||||
fi
|
||||
run_dns ${_dns_port}
|
||||
@@ -1828,9 +1828,9 @@ acl_app() {
|
||||
run_${type} flag=$udp_node node=$udp_node udp_redir_port=$redir_port config_file=$config_file log_file=$log_file loglevel=$loglevel
|
||||
else
|
||||
config_file="acl/${udp_node}_SOCKS_${socks_port}.json"
|
||||
run_socks flag=$udp_node node=$udp_node bind=127.0.0.1 socks_port=$socks_port config_file=$config_file
|
||||
# local log_file=$TMP_ACL_PATH/ipt2socks_${udp_node}_${redir_port}.log
|
||||
# log_file="/dev/null"
|
||||
run_socks flag=$udp_node node=$udp_node bind=127.0.0.1 socks_port=$socks_port config_file=$config_file log_file=$log_file
|
||||
# log_file=$TMP_ACL_PATH/ipt2socks_${udp_node}_${redir_port}.log
|
||||
log_file="/dev/null"
|
||||
run_ipt2socks flag=acl_${udp_node} local_port=$redir_port socks_address=127.0.0.1 socks_port=$socks_port log_file=$log_file
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -476,7 +476,7 @@ ln_run() {
|
||||
fi
|
||||
#echo "${file_func} $*" >&2
|
||||
[ -n "${file_func}" ] || echolog " - 找不到 ${ln_name},无法启动..."
|
||||
[ "${output}" != "/dev/null" ] && [ "${ln_name}" != "chinadns-ng" ] && {
|
||||
[ "${output}" != "/dev/null" ] && [ -n "$(echo "${output}" | grep -E "default|SOCKS_")" ] && [ "${ln_name}" != "chinadns-ng" ] && {
|
||||
local persist_log_path=$(config_t_get global persist_log_path)
|
||||
local sys_log=$(config_t_get global sys_log "0")
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-qosmate
|
||||
PKG_VERSION:=1.0.14
|
||||
PKG_RELEASE:=2
|
||||
PKG_RELEASE:=3
|
||||
|
||||
PKG_MAINTAINER:=Markus Hütter <mh@hudra.net>
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
|
||||
@@ -10,6 +10,14 @@
|
||||
function addRelevanceInfo(description, settingName, rootQdisc) {
|
||||
var isRelevant = true;
|
||||
var note = '';
|
||||
|
||||
// A rate of 0 disables that direction, which makes its options ineffective
|
||||
if (/INGRESS/.test(settingName) && parseInt(uci.get('qosmate', 'settings', 'DOWNRATE') || '0') === 0) {
|
||||
return description + ' ⚠ Not used: ingress shaping is disabled (DOWNRATE=0)';
|
||||
}
|
||||
if (/EGRESS/.test(settingName) && parseInt(uci.get('qosmate', 'settings', 'UPRATE') || '0') === 0) {
|
||||
return description + ' ⚠ Not used: egress shaping is disabled (UPRATE=0)';
|
||||
}
|
||||
|
||||
// Check basic ROOT_QDISC relevance
|
||||
if (rootQdisc !== 'cake' && rootQdisc !== 'hybrid') {
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
'require fs';
|
||||
'require poll';
|
||||
'require tools.widgets as widgets';
|
||||
|
||||
const UI_VERSION = '1.2.0';
|
||||
const UI_UPD_CHANNEL = 'release';
|
||||
|
||||
@@ -554,7 +553,7 @@ return view.extend({
|
||||
}
|
||||
|
||||
statusHtml.appendChild(
|
||||
E('div', { 'style': 'display: flex; align-items: center; gap: 4px;' }, [
|
||||
E('div', { 'style': 'display: flex; align-items: center; gap: 4px;', 'title': detail }, [
|
||||
E('span', {
|
||||
'style': 'color: ' + color + '; font-size: 15px; font-weight: bold; min-width: 20px;'
|
||||
}, icon),
|
||||
@@ -780,11 +779,7 @@ return view.extend({
|
||||
opt.validate = function(section_id, value) {
|
||||
if (value === '' || value === null) return true;
|
||||
if (!/^\d+$/.test(value)) return _('Must be a non-negative integer or empty');
|
||||
var intValue = parseInt(value, 10);
|
||||
var rootQdisc = this.section.formvalue(section_id, 'ROOT_QDISC');
|
||||
if (intValue === 0 && rootQdisc === 'hfsc') {
|
||||
return _('Value must be greater than 0 for HFSC');
|
||||
}
|
||||
// 0 is valid for every qdisc: it disables shaping for that direction
|
||||
return true;
|
||||
};
|
||||
}
|
||||
@@ -797,8 +792,8 @@ return view.extend({
|
||||
o.editable = true;
|
||||
o.default = wanInterface;
|
||||
|
||||
createOption('DOWNRATE', _('Download Rate (kbps)'), _('Set the download rate in kbps'), _('Default: 90000'), 'uinteger');
|
||||
createOption('UPRATE', _('Upload Rate (kbps)'), _('Set the upload rate in kbps'), _('Default: 45000'), 'uinteger');
|
||||
createOption('DOWNRATE', _('Download Rate (kbps)'), _('Set the download rate in kbps. 0 disables ingress shaping (no IFB device is created).'), _('Default: 90000'), 'uinteger');
|
||||
createOption('UPRATE', _('Upload Rate (kbps)'), _('Set the upload rate in kbps. 0 disables egress shaping.'), _('Default: 45000'), 'uinteger');
|
||||
|
||||
// Function to get QDisc description based on value
|
||||
function getQdiscDescriptionForValue(value) {
|
||||
@@ -880,6 +875,37 @@ return view.extend({
|
||||
}
|
||||
};
|
||||
|
||||
// Notice when a direction is not shaped (rate 0, same convention as sqm-scripts)
|
||||
o = s_basic.option(form.DummyValue, '_shaping_direction', _('Shaping Direction'));
|
||||
o.rawhtml = true;
|
||||
o.render = function(section_id) {
|
||||
var downrate = parseInt(uci.get('qosmate', 'settings', 'DOWNRATE') || '0');
|
||||
var uprate = parseInt(uci.get('qosmate', 'settings', 'UPRATE') || '0');
|
||||
if (downrate > 0 && uprate > 0) return E('div');
|
||||
|
||||
var lines = [];
|
||||
if (downrate === 0 && uprate === 0) {
|
||||
lines.push(E('strong', {}, _('No shaping active: both rates are 0')));
|
||||
lines.push(E('br'));
|
||||
lines.push(_('Only nftables DSCP marking is applied, no queues are created.'));
|
||||
} else if (downrate === 0) {
|
||||
lines.push(E('strong', {}, _('Download shaping disabled (DOWNRATE=0)')));
|
||||
lines.push(E('br'));
|
||||
lines.push(_('No IFB device is created. TCP bulk detection is off because its thresholds derive from the download rate, CAKE ingress options have no effect, and incoming packets carry no DSCP.'));
|
||||
lines.push(E('br'));
|
||||
lines.push(_('Set ACK_FILTER_EGRESS explicitly in the CAKE tab: "auto" cannot decide without a download rate.'));
|
||||
} else {
|
||||
lines.push(E('strong', {}, _('Upload shaping disabled (UPRATE=0)')));
|
||||
lines.push(E('br'));
|
||||
lines.push(_('No egress qdisc is created, so traffic classification only affects the download queue.'));
|
||||
}
|
||||
|
||||
return E('div', { 'class': 'cbi-value' }, [
|
||||
E('label', { 'class': 'cbi-value-title' }, E('span', { 'style': 'color: orange; font-weight: bold;' }, '⚠')),
|
||||
E('div', { 'class': 'cbi-value-field', 'style': 'color: orange;' }, lines)
|
||||
]);
|
||||
};
|
||||
|
||||
// Warning for bandwidth ratio
|
||||
o = s_basic.option(form.DummyValue, '_ratio_warning', _('Bandwidth Ratio Warning'));
|
||||
o.rawhtml = true;
|
||||
|
||||
@@ -1492,6 +1492,21 @@ return view.extend({
|
||||
infoContainer.appendChild(row);
|
||||
}
|
||||
|
||||
// A rate of 0 disables that direction, so one of the tabs stays empty on purpose
|
||||
var statsUpRate = parseInt(uci.get('qosmate', 'settings', 'UPRATE') || '0');
|
||||
var statsDownRate = parseInt(uci.get('qosmate', 'settings', 'DOWNRATE') || '0');
|
||||
if (statsUpRate === 0 || statsDownRate === 0) {
|
||||
var dirText = statsUpRate === 0 && statsDownRate === 0
|
||||
? _('disabled in both directions (both rates are 0)')
|
||||
: (statsDownRate === 0 ? _('egress only (DOWNRATE=0, no ingress statistics)')
|
||||
: _('ingress only (UPRATE=0, no egress statistics)'));
|
||||
var row = E('div', { 'style': 'margin-right: 1.5em; margin-bottom: 0.3em; color: orange;' });
|
||||
row.appendChild(E('span', { 'style': 'font-weight: bold;' }, _('Shaping:')));
|
||||
row.appendChild(document.createTextNode(' '));
|
||||
row.appendChild(E('span', {}, dirText));
|
||||
infoContainer.appendChild(row);
|
||||
}
|
||||
|
||||
// Add CAKE-specific or HFSC-specific info
|
||||
if (qosStats.root_qdisc === 'cake') {
|
||||
if (qosStats.priority_queue_ingress) {
|
||||
|
||||
@@ -3,8 +3,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
|
||||
"PO-Revision-Date: 2025-11-28 22:04+0000\n"
|
||||
"Last-Translator: niky1987 <niky1987@libero.it>\n"
|
||||
"PO-Revision-Date: 2026-07-23 06:18+0000\n"
|
||||
"Last-Translator: Random <random-r@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssamba4/it/>\n"
|
||||
"Language: it\n"
|
||||
@@ -12,7 +12,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.15-dev\n"
|
||||
"X-Generator: Weblate 2026.8.dev0\n"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:120
|
||||
msgid "Allow guests"
|
||||
@@ -60,11 +60,11 @@ msgstr "Disattiva Controller di Dominio Active Directory"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:71
|
||||
msgid "Disable Netbios"
|
||||
msgstr ""
|
||||
msgstr "Disabilita Netbios"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:77
|
||||
msgid "Disable Winbind"
|
||||
msgstr ""
|
||||
msgstr "Disabilita Winbind"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:32
|
||||
msgid "Edit Template"
|
||||
@@ -81,7 +81,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:64
|
||||
msgid "Enable macOS compatible shares"
|
||||
msgstr ""
|
||||
msgstr "Abilita condivisioni compatibili con macOS"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:58
|
||||
msgid ""
|
||||
@@ -95,6 +95,8 @@ msgid ""
|
||||
"Enables Apple's AAPL extension globally and adds macOS compatibility options "
|
||||
"to all shares."
|
||||
msgstr ""
|
||||
"Abilita globalmente le estensioni AAPL di Apple ed aggiunge le opzioni di "
|
||||
"compatibilità con macOS in tutte le condivisioni."
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:115
|
||||
msgid "Force Root"
|
||||
@@ -114,11 +116,11 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:126
|
||||
msgid "Guests only"
|
||||
msgstr ""
|
||||
msgstr "Solo ospiti"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:131
|
||||
msgid "Inherit owner"
|
||||
msgstr ""
|
||||
msgstr "Eredita il proprietario"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:34
|
||||
msgid "Interface"
|
||||
@@ -177,11 +179,11 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:153
|
||||
msgid "Time-machine size in GB"
|
||||
msgstr ""
|
||||
msgstr "Dimensioni in GB di Time-machine"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:148
|
||||
msgid "Vfs objects"
|
||||
msgstr ""
|
||||
msgstr "Oggetti Vfs"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:51
|
||||
msgid "Workgroup"
|
||||
|
||||
@@ -2,9 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: LuCI: samba\n"
|
||||
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
|
||||
"PO-Revision-Date: 2026-04-25 12:14+0000\n"
|
||||
"Last-Translator: SnIPeRSnIPeR "
|
||||
"<snipersniper@users.noreply.hosted.weblate.org>\n"
|
||||
"PO-Revision-Date: 2026-07-03 15:28+0000\n"
|
||||
"Last-Translator: chigelo <chigelo@gmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssamba4/ru/>\n"
|
||||
"Language: ru\n"
|
||||
@@ -13,7 +12,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.17.1-dev\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
|
||||
"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
|
||||
|
||||
@@ -139,7 +138,7 @@ msgstr "Слушать только на данном интерфейсе ил
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:98
|
||||
msgid "Name"
|
||||
msgstr "Название"
|
||||
msgstr "Имя"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:23
|
||||
#: applications/luci-app-samba4/root/usr/share/luci/menu.d/luci-app-samba4.json:3
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"PO-Revision-Date: 2026-05-15 10:43+0000\n"
|
||||
"PO-Revision-Date: 2026-07-08 15:16+0000\n"
|
||||
"Last-Translator: Dan <jonweblin2205@protonmail.com>\n"
|
||||
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssamba4/uk/>\n"
|
||||
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 2026.5.dev0\n"
|
||||
"X-Generator: Weblate 2026.7.1.dev0\n"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:120
|
||||
msgid "Allow guests"
|
||||
@@ -136,7 +136,7 @@ msgstr ""
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:98
|
||||
msgid "Name"
|
||||
msgstr "Імʼя"
|
||||
msgstr "Назва"
|
||||
|
||||
#: applications/luci-app-samba4/htdocs/luci-static/resources/view/samba4.js:23
|
||||
#: applications/luci-app-samba4/root/usr/share/luci/menu.d/luci-app-samba4.json:3
|
||||
|
||||
@@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
PKG_MAINTAINER:=Nick Peng <pymumu@gmail.com>
|
||||
PKG_VERSION:=1.2025.47.2
|
||||
PKG_RELEASE:=10
|
||||
PKG_RELEASE:=11
|
||||
|
||||
LUCI_TITLE:=LuCI for smartdns
|
||||
LUCI_DESCRIPTION:=Provides Luci for smartdns
|
||||
|
||||
@@ -2,7 +2,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: 2020-07-02 17:20-0300\n"
|
||||
"PO-Revision-Date: 2026-06-25 19:51+0000\n"
|
||||
"PO-Revision-Date: 2026-06-26 11:19+0000\n"
|
||||
"Last-Translator: apemay <apemay.dev@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationssmartdns/es/>\n"
|
||||
@@ -170,7 +170,7 @@ msgstr "Descripción"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:75
|
||||
msgid "Dnsmasq Forwarded To Smartdns Failure"
|
||||
msgstr "Error de reenvío de Dnsmasq a Smartdns"
|
||||
msgstr "Error de reenvío de Dnsmasq a SmartDNS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:718
|
||||
msgid "Do not check certificate."
|
||||
@@ -419,8 +419,8 @@ msgid ""
|
||||
"Include other config files from /etc/smartdns/conf.d or custom path, can be "
|
||||
"downloaded from the download page."
|
||||
msgstr ""
|
||||
"Incluye otros archivos de configuración desde /etc/smartdns/conf.d o una "
|
||||
"ruta personalizada, se puede obtener desde la página de descarga."
|
||||
"Incluir otros archivos de configuración desde /etc/smartdns/conf.d o una "
|
||||
"ruta personalizada. Se pueden descargar desde la página de descargas."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:282
|
||||
msgid "Ipset name, Add domain result to ipset when speed check fails."
|
||||
@@ -730,9 +730,8 @@ msgid ""
|
||||
"SmartDNS is a local high-performance DNS server, supports finding fastest "
|
||||
"IP, supports ad filtering, and supports avoiding DNS poisoning."
|
||||
msgstr ""
|
||||
"SmartDNS es un servidor DNS local de alto rendimiento, admite la búsqueda de "
|
||||
"la IP más rápida, admite el filtrado de anuncios y evita el envenenamiento "
|
||||
"de DNS."
|
||||
"SmartDNS es un servidor DNS local de alto rendimiento. Admite la búsqueda de "
|
||||
"la IP más rápida, el filtrado de anuncios y evita el envenenamiento de DNS."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1141
|
||||
msgid "SmartDNS official website"
|
||||
@@ -740,7 +739,7 @@ msgstr "Sitio web oficial de SmartDNS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:376
|
||||
msgid "Smartdns local server port"
|
||||
msgstr "Puerto del servidor local Smartdns"
|
||||
msgstr "Puerto del servidor local de SmartDNS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:153
|
||||
msgid ""
|
||||
@@ -755,18 +754,18 @@ msgid ""
|
||||
"Smartdns response mode, First Ping: return the first ping IP, Fastest IP: "
|
||||
"return the fastest IP, Fastest Response: return the fastest DNS response."
|
||||
msgstr ""
|
||||
"Modo de respuesta de SmartDNS, Primer Ping: devuelve la primera IP que "
|
||||
"responde al ping, IP Más Rápida: devuelve la IP más rápida, Respuesta Más "
|
||||
"Rápida: devuelve la respuesta DNS más rápida."
|
||||
"Modo de respuesta de SmartDNS. Primer Ping: devuelve la primera IP que "
|
||||
"responde al ping; IP más rápida: devuelve la IP más rápida; Respuesta más "
|
||||
"rápida: devuelve la respuesta DNS más rápida."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:146
|
||||
msgid "Smartdns server name"
|
||||
msgstr "Nombre del servidor de Smartdns"
|
||||
msgstr "Nombre del servidor de SmartDNS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:168
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1015
|
||||
msgid "Smartdns speed check mode."
|
||||
msgstr "Modo de verificación de velocidad de smartdns."
|
||||
msgstr "Modo de verificación de velocidad de SmartDNS."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:1118
|
||||
msgid ""
|
||||
@@ -844,7 +843,7 @@ msgstr "Cargar el archivo de lista de dominios"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:507
|
||||
msgid "Upload domain list file to /etc/smartdns/domain-set"
|
||||
msgstr "Cargue el archivo de lista de dominios en /etc/smartdns/domain-set"
|
||||
msgstr "Cargar el archivo de lista de dominios en /etc/smartdns/domain-set"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:891
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:991
|
||||
@@ -861,7 +860,7 @@ msgstr "Cargar el archivo de lista de dominios."
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:500
|
||||
msgid "Upload smartdns config file to /etc/smartdns/conf.d"
|
||||
msgstr "Cargue el archivo de configuración de smartdns en /etc/smartdns/conf.d"
|
||||
msgstr "Cargar el archivo de configuración de SmartDNS en /etc/smartdns/conf.d"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:630
|
||||
msgid "Upstream Servers"
|
||||
@@ -929,11 +928,11 @@ msgstr "abrir sitio web"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:555
|
||||
msgid "smartdns config (/etc/smartdns/conf.d)"
|
||||
msgstr "Configuración de smartdns (/etc/smartdns/conf.d)"
|
||||
msgstr "Configuración de SmartDNS (/etc/smartdns/conf.d)"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:584
|
||||
msgid "smartdns custom settings"
|
||||
msgstr "configuraciones personalizadas de smartdns"
|
||||
msgstr "configuraciones personalizadas de SmartDNS"
|
||||
|
||||
#: applications/luci-app-smartdns/htdocs/luci-static/resources/view/smartdns/smartdns.js:667
|
||||
msgid "tcp"
|
||||
|
||||
@@ -3,8 +3,8 @@ msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-05-19 19:36+0200\n"
|
||||
"PO-Revision-Date: 2025-11-28 22:04+0000\n"
|
||||
"Last-Translator: niky1987 <niky1987@libero.it>\n"
|
||||
"PO-Revision-Date: 2026-07-23 06:18+0000\n"
|
||||
"Last-Translator: Random <random-r@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationsupnp/it/>\n"
|
||||
"Language: it\n"
|
||||
@@ -12,7 +12,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.15-dev\n"
|
||||
"X-Generator: Weblate 2026.8.dev0\n"
|
||||
|
||||
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:180
|
||||
msgctxt ""
|
||||
@@ -115,7 +115,7 @@ msgstr "Velocità di download"
|
||||
|
||||
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:144
|
||||
msgid "Enable PCP/NAT-PMP protocols"
|
||||
msgstr "Abilita il protocollo PCP/NAT-PMP"
|
||||
msgstr "Attiva i protocolli PCP/NAT-PMP"
|
||||
|
||||
#: applications/luci-app-upnp/htdocs/luci-static/resources/view/upnp/upnp.js:141
|
||||
msgid "Enable UPnP IGD protocol"
|
||||
|
||||
@@ -2,8 +2,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2026-03-29 19:31+0000\n"
|
||||
"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
|
||||
"PO-Revision-Date: 2026-06-27 12:01+0000\n"
|
||||
"Last-Translator: apemay <apemay.dev@gmail.com>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
|
||||
"luciapplicationswatchcat/es/>\n"
|
||||
"Language: es\n"
|
||||
@@ -11,7 +11,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.17-dev\n"
|
||||
"X-Generator: Weblate 2026.7.dev0\n"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:94
|
||||
msgid ""
|
||||
@@ -21,12 +21,12 @@ msgid ""
|
||||
"to fail. Enter the number of seconds to wait for the soft reboot to fail or "
|
||||
"use 0 to disable the forced reboot delay."
|
||||
msgstr ""
|
||||
"<i>Se aplica a los modos de Reinicio por Ping y Reinicio periódico</i><br /> "
|
||||
"Al reiniciar el enrutador, el servicio desencadenará un reinicio suave. "
|
||||
"Poniendo un valor distinto de cero aquí, se desencadenará un reinicio "
|
||||
"completo retrasado si falla el reinicio suave. Ponga el número de segundos "
|
||||
"que hay que esperar a que el reinicio suave falle o use 0 para desactivar el "
|
||||
"retraso de reinicio forzado."
|
||||
"<i>Se aplica a los modos Reinicio por ping y Reinicio periódico</i><br /> Al "
|
||||
"reiniciar el enrutador, el servicio activará un reinicio suave. Introducir "
|
||||
"aquí un valor distinto de cero activará un reinicio completo retrasado si el "
|
||||
"reinicio suave falla. Introduzca el número de segundos que esperar a que "
|
||||
"falle el reinicio suave o use 0 para desactivar el retraso del reinicio "
|
||||
"forzado."
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:111
|
||||
msgid ""
|
||||
@@ -73,7 +73,7 @@ msgstr "Ajustes generales"
|
||||
|
||||
#: applications/luci-app-watchcat/root/usr/share/rpcd/acl.d/luci-app-watchcat.json:3
|
||||
msgid "Grant access to LuCI app watchcat"
|
||||
msgstr "Otorgar acceso a la aplicación LuCI watchcat"
|
||||
msgstr "Conceder acceso a la aplicación LuCI watchcat"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:12
|
||||
msgid ""
|
||||
@@ -191,14 +191,13 @@ msgid ""
|
||||
"time. <br /> Run Script: Run a script if a ping to a specified host fails "
|
||||
"for a specified duration of time. <br />"
|
||||
msgstr ""
|
||||
"Reinicio de ping: si el ping al host especificado siempre falla dentro del "
|
||||
"tiempo especificado, el dispositivo se reiniciará. <br />Reinicio "
|
||||
"programado: reinicia el dispositivo después de un intervalo de tiempo "
|
||||
"específico. <br />Reiniciar interfaz: si dentro del tiempo especificado, el "
|
||||
"ping del host especificado siempre falla, reinicie la interfaz de red "
|
||||
"específica. <br />Ejecutar secuencia de comandos: si dentro del tiempo "
|
||||
"especificado, el ping del host especificado siempre falla, ejecute una "
|
||||
"secuencia de comandos específica. <br />"
|
||||
"Reinicio por ping: reinicia este dispositivo si un ping al host especificado "
|
||||
"falla durante un periodo de tiempo especificado. <br />Reinicio periódico: "
|
||||
"reinicia este dispositivo después de un intervalo de tiempo especificado. "
|
||||
"<br />Reiniciar interfaz: reinicia una interfaz de red si un ping al host "
|
||||
"especificado falla durante un periodo de tiempo especificado. <br />Ejecutar "
|
||||
"script: ejecuta un script si un ping al host especificado falla durante un "
|
||||
"periodo de tiempo especificado.<br />"
|
||||
|
||||
#: applications/luci-app-watchcat/htdocs/luci-static/resources/view/watchcat.js:29
|
||||
msgid "Restart Interface"
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI support for linkease file
|
||||
LUCI_DEPENDS:=+linkease
|
||||
LUCI_PKGARCH:=all
|
||||
PKG_VERSION:=2.1.70-r3
|
||||
# PKG_RELEASE MUST be empty for luci.mk
|
||||
PKG_RELEASE:=1
|
||||
LUCI_MINIFY_CSS:=0
|
||||
LUCI_MINIFY_JS:=0
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+15
-1
@@ -7,13 +7,27 @@ local ltn12 = require "luci.ltn12"
|
||||
local table = require "table"
|
||||
local util = require "luci.util"
|
||||
|
||||
module("luci.controller.linkease_backend", package.seeall)
|
||||
module("luci.controller.linkease_file", package.seeall)
|
||||
|
||||
local BLOCKSIZE = 2048
|
||||
local LINKEASE_UNIX = "/var/run/linkease.sock"
|
||||
|
||||
function index()
|
||||
entry({"linkease"}, call("linkease_backend")).leaf=true
|
||||
local e = entry({"admin", "services", "linkease", "file"}, call("linkease_file_template"))
|
||||
e.leaf = true
|
||||
e.dependent = false
|
||||
end
|
||||
|
||||
function get_params(name)
|
||||
local data = {
|
||||
prefix=luci.dispatcher.build_url(unpack({"admin", "services", "linkease", name})),
|
||||
}
|
||||
return data
|
||||
end
|
||||
|
||||
function linkease_file_template()
|
||||
luci.template.render("linkease/file", get_params("file"))
|
||||
end
|
||||
|
||||
local function sink_socket(sock, io_err)
|
||||
File renamed without changes.
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -f /tmp/luci-indexcache /tmp/luci-indexcache.*
|
||||
exit 0
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=qBittorrent-Enhanced-Edition
|
||||
PKG_VERSION:=5.2.3.10
|
||||
PKG_RELEASE:=12
|
||||
PKG_RELEASE:=13
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/c0re100/qBittorrent-Enhanced-Edition/tar.gz/release-$(PKG_VERSION)?
|
||||
@@ -14,6 +14,7 @@ PKG_LICENSE_FILES:=COPYING
|
||||
PKG_CPE_ID:=cpe:/a:qbittorrent:qbittorrent
|
||||
|
||||
PKG_BUILD_DEPENDS:=qt6tools/host
|
||||
PKG_BUILD_FLAGS:=no-mips16
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=qBittorrent
|
||||
PKG_VERSION:=5.2.3
|
||||
PKG_RELEASE:=4
|
||||
PKG_RELEASE:=5
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/qbittorrent/qBittorrent/tar.gz/release-$(PKG_VERSION)?
|
||||
@@ -14,6 +14,7 @@ PKG_LICENSE_FILES:=COPYING
|
||||
PKG_CPE_ID:=cpe:/a:qbittorrent:qbittorrent
|
||||
|
||||
PKG_BUILD_DEPENDS:=qt6tools/host
|
||||
PKG_BUILD_FLAGS:=no-mips16
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
Loaded 100 of 106 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user