mirror of
https://github.com/kenzok8/small-package.git
synced 2026-02-06 23:08:07 +08:00
update 2024-12-17 12:26:43
This commit is contained in:
@@ -189,7 +189,7 @@ $razordVersion = getRazordVersion();
|
|||||||
</div>
|
</div>
|
||||||
<div class="text-center mt-2">
|
<div class="text-center mt-2">
|
||||||
<button class="btn btn-pink" id="checkCliverButton">🔍 检测版本</button>
|
<button class="btn btn-pink" id="checkCliverButton">🔍 检测版本</button>
|
||||||
<button class="btn btn-info" id="updateButton" title="更新到最新版本" onclick="showUpdateVersionModal()">🔄 更新版本</button>
|
<button class="btn btn-info" id="updateButton" title="更新到最新版本" onclick="showVersionTypeModal()">🔄 更新版本</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -237,27 +237,42 @@ $razordVersion = getRazordVersion();
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div class="modal fade" id="updateVersionModal" tabindex="-1" aria-labelledby="updateVersionModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
|
<div class="modal fade" id="updateVersionTypeModal" tabindex="-1" aria-labelledby="updateVersionTypeModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
|
||||||
<div class="modal-dialog modal-lg">
|
<div class="modal-dialog modal-lg">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="updateVersionModalLabel">选择更新版本语言</h5>
|
<h5 class="modal-title" id="updateVersionTypeModalLabel">选择更新版本类型</h5>
|
||||||
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
<span aria-hidden="true">×</span>
|
</div>
|
||||||
</button>
|
<div class="modal-body">
|
||||||
|
<div class="form-group text-center">
|
||||||
|
<button id="stableBtn" class="btn btn-success btn-lg" style="margin: 10px;" onclick="selectVersionType('stable')">正式版</button>
|
||||||
|
<button id="previewBtn" class="btn btn-warning btn-lg" style="margin: 10px;" onclick="selectVersionType('preview')">预览版</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal fade" id="updateLanguageModal" tabindex="-1" aria-labelledby="updateLanguageModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="updateLanguageModalLabel">选择语言</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="languageSelect">选择语言</label>
|
<label for="languageSelect">选择语言</label>
|
||||||
<select id="languageSelect" class="form-select">
|
<select id="languageSelect" class="form-select">
|
||||||
<option value="cn">中文版</option>
|
<option value="cn">中文版</option>
|
||||||
<option value="en">英文版</option>
|
<option value="en">英文版</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button>
|
||||||
<button type="button" class="btn btn-primary" onclick="confirmUpdateVersion()">确认</button>
|
<button type="button" class="btn btn-primary" onclick="confirmLanguageSelection()">确认</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -327,6 +342,7 @@ $razordVersion = getRazordVersion();
|
|||||||
<option value="v1.11.0-alpha.15">v1.11.0-alpha.15</option>
|
<option value="v1.11.0-alpha.15">v1.11.0-alpha.15</option>
|
||||||
<option value="v1.11.0-alpha.20">v1.11.0-alpha.20</option>
|
<option value="v1.11.0-alpha.20">v1.11.0-alpha.20</option>
|
||||||
<option value="v1.11.0-beta.5">v1.11.0-beta.5</option>
|
<option value="v1.11.0-beta.5">v1.11.0-beta.5</option>
|
||||||
|
<option value="v1.11.0-beta.10">v1.11.0-beta.10</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
@@ -476,6 +492,7 @@ let selectedMihomoVersion = 'stable';
|
|||||||
let selectedLanguage = 'cn';
|
let selectedLanguage = 'cn';
|
||||||
let selectedSingboxVersionForChannelTwo = 'preview';
|
let selectedSingboxVersionForChannelTwo = 'preview';
|
||||||
let selectedPanel = 'zashboard';
|
let selectedPanel = 'zashboard';
|
||||||
|
let selectedVersionType = 'stable';
|
||||||
|
|
||||||
function showPanelSelector() {
|
function showPanelSelector() {
|
||||||
$('#panelSelectionModal').modal('show');
|
$('#panelSelectionModal').modal('show');
|
||||||
@@ -487,14 +504,51 @@ function confirmPanelSelection() {
|
|||||||
selectOperation('panel');
|
selectOperation('panel');
|
||||||
}
|
}
|
||||||
|
|
||||||
function showUpdateVersionModal() {
|
function showVersionTypeModal() {
|
||||||
$('#updateVersionModal').modal('show');
|
$('#updateVersionTypeModal').modal('show');
|
||||||
}
|
}
|
||||||
|
|
||||||
function confirmUpdateVersion() {
|
function confirmVersionTypeSelection() {
|
||||||
selectedLanguage = document.getElementById('languageSelect').value;
|
selectedVersionType = document.getElementById('versionTypeSelect').value;
|
||||||
$('#updateVersionModal').modal('hide');
|
$('#updateVersionTypeModal').modal('hide');
|
||||||
selectOperation('client');
|
|
||||||
|
if (selectedVersionType === 'stable') {
|
||||||
|
$('#updateLanguageModal').modal('show');
|
||||||
|
} else {
|
||||||
|
selectOperation('client');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectVersionType(type) {
|
||||||
|
selectedVersionType = type;
|
||||||
|
|
||||||
|
if (type === 'stable') {
|
||||||
|
document.getElementById('stableBtn').classList.add('btn-success');
|
||||||
|
document.getElementById('previewBtn').classList.remove('btn-warning');
|
||||||
|
document.getElementById('previewBtn').classList.add('btn-light');
|
||||||
|
} else {
|
||||||
|
document.getElementById('previewBtn').classList.add('btn-warning');
|
||||||
|
document.getElementById('stableBtn').classList.remove('btn-success');
|
||||||
|
document.getElementById('stableBtn').classList.add('btn-light');
|
||||||
|
}
|
||||||
|
|
||||||
|
handleVersionSelection();
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleVersionSelection() {
|
||||||
|
$('#updateVersionTypeModal').modal('hide');
|
||||||
|
|
||||||
|
if (selectedVersionType === 'stable') {
|
||||||
|
$('#updateLanguageModal').modal('show');
|
||||||
|
} else {
|
||||||
|
selectOperation('client');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function confirmLanguageSelection() {
|
||||||
|
selectedLanguage = document.getElementById('languageSelect').value;
|
||||||
|
$('#updateLanguageModal').modal('hide');
|
||||||
|
selectOperation('client');
|
||||||
}
|
}
|
||||||
|
|
||||||
function showSingboxVersionSelector() {
|
function showSingboxVersionSelector() {
|
||||||
@@ -573,9 +627,15 @@ function selectOperation(type) {
|
|||||||
description: '正在更新 Mihomo 内核到最新版本 (' + selectedMihomoVersion + ')'
|
description: '正在更新 Mihomo 内核到最新版本 (' + selectedMihomoVersion + ')'
|
||||||
},
|
},
|
||||||
'client': {
|
'client': {
|
||||||
url: 'update_script.php?lang=' + selectedLanguage,
|
url: selectedVersionType === 'stable'
|
||||||
message: '开始下载客户端更新...',
|
? 'update_script.php?lang=' + selectedLanguage
|
||||||
description: '正在更新客户端到最新版本'
|
: 'update_preview.php',
|
||||||
|
message: selectedVersionType === 'stable'
|
||||||
|
? '开始下载客户端更新...'
|
||||||
|
: '开始下载客户端预览版更新...',
|
||||||
|
description: selectedVersionType === 'stable'
|
||||||
|
? '正在更新客户端到最新正式版'
|
||||||
|
: '正在更新客户端到最新预览版'
|
||||||
},
|
},
|
||||||
'panel': {
|
'panel': {
|
||||||
url: selectedPanel === 'zashboard'
|
url: selectedPanel === 'zashboard'
|
||||||
|
|||||||
81
luci-app-nekobox/htdocs/nekobox/update_preview.php
Normal file
81
luci-app-nekobox/htdocs/nekobox/update_preview.php
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
$repo_owner = "Thaolga";
|
||||||
|
$repo_name = "neko";
|
||||||
|
$package_name = "luci-app-nekobox";
|
||||||
|
|
||||||
|
$api_url = "https://api.github.com/repos/$repo_owner/$repo_name/releases/latest";
|
||||||
|
$local_api_response = "/tmp/api_response.json";
|
||||||
|
|
||||||
|
$curl_command = "curl -H 'User-Agent: PHP' -s " . escapeshellarg($api_url) . " -o " . escapeshellarg($local_api_response);
|
||||||
|
exec($curl_command . " 2>&1", $output, $return_var);
|
||||||
|
|
||||||
|
if ($return_var !== 0 || !file_exists($local_api_response)) {
|
||||||
|
echo "<script>appendLog('curl 获取版本信息失败,尝试使用 wget...');</script>";
|
||||||
|
$wget_command = "wget -q --no-check-certificate " . escapeshellarg($api_url) . " -O " . escapeshellarg($local_api_response);
|
||||||
|
exec($wget_command . " 2>&1", $output, $return_var);
|
||||||
|
|
||||||
|
if ($return_var !== 0 || !file_exists($local_api_response)) {
|
||||||
|
die("无法访问GitHub API。请检查URL或网络连接。输出: " . implode("\n", $output));
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<script>appendLog('wget 获取版本信息完成。');</script>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$response = file_get_contents($local_api_response);
|
||||||
|
$data = json_decode($response, true);
|
||||||
|
unlink($local_api_response);
|
||||||
|
|
||||||
|
$new_version = $data['tag_name'] ?? '';
|
||||||
|
|
||||||
|
if (empty($new_version)) {
|
||||||
|
die("未找到最新版本或版本信息为空。");
|
||||||
|
}
|
||||||
|
|
||||||
|
$preview_suffix = "-preview";
|
||||||
|
|
||||||
|
$download_url = "https://github.com/$repo_owner/$repo_name/releases/download/$new_version/{$package_name}_{$new_version}{$preview_suffix}_all.ipk";
|
||||||
|
|
||||||
|
echo "<pre>最新版本: $new_version</pre>";
|
||||||
|
echo "<pre>下载URL: $download_url</pre>";
|
||||||
|
echo "<pre id='logOutput'></pre>";
|
||||||
|
|
||||||
|
echo "<script>
|
||||||
|
function appendLog(message) {
|
||||||
|
document.getElementById('logOutput').innerHTML += message + '\\n';
|
||||||
|
}
|
||||||
|
</script>";
|
||||||
|
|
||||||
|
echo "<script>appendLog('开始下载更新...');</script>";
|
||||||
|
|
||||||
|
$local_file = "/tmp/{$package_name}_{$new_version}{$preview_suffix}_all.ipk";
|
||||||
|
|
||||||
|
$curl_command = "curl -sL " . escapeshellarg($download_url) . " -o " . escapeshellarg($local_file);
|
||||||
|
exec($curl_command . " 2>&1", $output, $return_var);
|
||||||
|
|
||||||
|
if ($return_var !== 0 || !file_exists($local_file)) {
|
||||||
|
echo "<script>appendLog('curl 下载失败,尝试使用 wget...');</script>";
|
||||||
|
$wget_command = "wget -q --show-progress --no-check-certificate " . escapeshellarg($download_url) . " -O " . escapeshellarg($local_file);
|
||||||
|
exec($wget_command . " 2>&1", $output, $return_var);
|
||||||
|
|
||||||
|
if ($return_var !== 0 || !file_exists($local_file)) {
|
||||||
|
echo "<pre>下载失败。命令输出: " . implode("\n", $output) . "</pre>";
|
||||||
|
die("下载失败。未找到下载的文件。");
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<script>appendLog('wget 下载完成。');</script>";
|
||||||
|
} else {
|
||||||
|
echo "<script>appendLog('curl 下载完成。');</script>";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<script>appendLog('更新软件包列表...');</script>";
|
||||||
|
$output = shell_exec("opkg update");
|
||||||
|
echo "<pre>$output</pre>";
|
||||||
|
|
||||||
|
echo "<script>appendLog('开始安装...');</script>";
|
||||||
|
|
||||||
|
$output = shell_exec("opkg install --force-reinstall " . escapeshellarg($local_file));
|
||||||
|
echo "<pre>$output</pre>";
|
||||||
|
echo "<script>appendLog('安装完成。');</script>";
|
||||||
|
|
||||||
|
unlink($local_file);
|
||||||
|
?>
|
||||||
1
luci-app-nekobox/root/etc/neko/ui/zashboard/CNAME
Normal file
1
luci-app-nekobox/root/etc/neko/ui/zashboard/CNAME
Normal file
@@ -0,0 +1 @@
|
|||||||
|
board.zash.run.place
|
||||||
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,16 +1,55 @@
|
|||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="">
|
<html lang="">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8" />
|
||||||
<title>zashboard</title>
|
<title>zashboard</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta
|
||||||
<meta name="description" content="A dashboard using clash api" />
|
name="viewport"
|
||||||
<link rel="apple-touch-icon" href="./apple-touch-icon.png">
|
content="width=device-width, initial-scale=1.0"
|
||||||
<link rel="icon" href="./favicon.ico" sizes="48x48">
|
/>
|
||||||
<link rel="icon" href="./favicon.svg" sizes="any" type="image/svg+xml">
|
<meta
|
||||||
<meta name="theme-color" content="#FFFFFF">
|
name="description"
|
||||||
<script type="module" crossorigin src="./assets/index-Eir5DzNE.js"></script>
|
content="A dashboard using clash api"
|
||||||
<link rel="stylesheet" crossorigin href="./assets/index-BpMWcX30.css">
|
/>
|
||||||
|
<link
|
||||||
|
rel="apple-touch-icon"
|
||||||
|
href="./apple-touch-icon.png"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="icon"
|
||||||
|
href="./favicon.ico"
|
||||||
|
sizes="48x48"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="icon"
|
||||||
|
href="./favicon.svg"
|
||||||
|
sizes="any"
|
||||||
|
type="image/svg+xml"
|
||||||
|
/>
|
||||||
|
<meta
|
||||||
|
name="theme-color"
|
||||||
|
content="#FFFFFF"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
media="print"
|
||||||
|
onload="this.media='all'"
|
||||||
|
href="https://unpkg.com/subsetted-fonts@latest/MiSans-VF/MiSans-VF.css"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
media="print"
|
||||||
|
onload="this.media='all'"
|
||||||
|
href="https://unpkg.com/subsetted-fonts@latest/SarasaUiSC-Regular/SarasaUiSC-Regular.css"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
media="print"
|
||||||
|
onload="this.media='all'"
|
||||||
|
href="https://unpkg.com/subsetted-fonts@latest/PingFangSC-Regular\PingFangSC-Regular.css"
|
||||||
|
/>
|
||||||
|
<script type="module" crossorigin src="./assets/index-D9NwuV-C.js"></script>
|
||||||
|
<link rel="stylesheet" crossorigin href="./assets/index-BYhhgJN7.css">
|
||||||
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
|
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise((i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()})).then((()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e})));self.define=(n,r)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(i[c])return;let f={};const o=e=>s(e,c),d={module:{uri:c},exports:f,require:o};i[c]=Promise.all(n.map((e=>d[e]||o(e)))).then((e=>(r(...e),f)))}}define(["./workbox-3e8df8c8"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-BpMWcX30.css",revision:null},{url:"assets/index-Eir5DzNE.js",revision:null},{url:"index.html",revision:"81dcf3167b5ce1226484c65c1c5f3282"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"c452912633990899ffe790f985ad0db9"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
|
if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise((i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()})).then((()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e})));self.define=(n,r)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(i[f])return;let d={};const o=e=>s(e,f),c={module:{uri:f},exports:d,require:o};i[f]=Promise.all(n.map((e=>c[e]||o(e)))).then((e=>(r(...e),d)))}}define(["./workbox-3e8df8c8"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-BYhhgJN7.css",revision:null},{url:"assets/index-D9NwuV-C.js",revision:null},{url:"index.html",revision:"cfdf488d6346498f0e0c29ee500f6038"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"c452912633990899ffe790f985ad0db9"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v1.19.0
|
v1.29.0
|
||||||
@@ -11,7 +11,7 @@ LUCI_DEPENDS:=+curl +opkg +luci-base +tar +libuci-lua +mount-utils +luci-lib-tas
|
|||||||
LUCI_EXTRA_DEPENDS:=luci-lib-taskd (>=1.0.19)
|
LUCI_EXTRA_DEPENDS:=luci-lib-taskd (>=1.0.19)
|
||||||
LUCI_PKGARCH:=all
|
LUCI_PKGARCH:=all
|
||||||
|
|
||||||
PKG_VERSION:=0.1.27-2
|
PKG_VERSION:=0.1.27-3
|
||||||
# PKG_RELEASE MUST be empty for luci.mk
|
# PKG_RELEASE MUST be empty for luci.mk
|
||||||
PKG_RELEASE:=
|
PKG_RELEASE:=
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ opkg_wrap_mirrors() {
|
|||||||
alias fcurl='curl -L --fail --show-error'
|
alias fcurl='curl -L --fail --show-error'
|
||||||
|
|
||||||
check_space() {
|
check_space() {
|
||||||
local free="$((`df -k / | awk 'NR==2 {print $4}'` >> 10 ))"
|
local free="$((`df -kP / | awk 'NR==2 {print $4}'` >> 10 ))"
|
||||||
if [ "$free" -lt 1 ]; then
|
if [ "$free" -lt 1 ]; then
|
||||||
echo "Root disk full!" >&2
|
echo "Root disk full!" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user