Merge branch 'main' into demo

This commit is contained in:
levywang 2025-03-17 16:19:39 +08:00
commit 2435ac2c4d
9 changed files with 140 additions and 16 deletions

View File

@ -4,7 +4,7 @@
# AvHub - R18 Resource Search & Management Tool
**AvHub** is a web platform dedicated to the retrieval and management of adult video resources.
**AvHub** is a web platform dedicated to the retrieval and management of `R18` video resources.
Cloudflare Page: https://avhub.pages.dev/

View File

@ -4,7 +4,7 @@
# AvHub - R18 资源搜索和管理工具
**AvHub** 是一个致力于检索和管理成人视频资源的 Web 平台
**AvHub** 是一个致力于检索和管理R18视频资源的 Web 平台
Cloudflare Page: https://avhub.pages.dev/

View File

@ -1,10 +1,21 @@
https://videos1.bysshxd.com/20230726/Pg0dW2NlmPpg1/index.m3u8
https://videos1.bysshxd.com/20230728/NJrY0K4386kRo/index.m3u8
https://videos1.bysshxd.com/20230727/MJQA2oYdmVvJj/index.m3u8
https://videos1.bysshxd.com/20230728/PRx1jzovobvJb/index.m3u8
https://videos1.bysshxd.com/20230728/LJB97V6r9PnRy/index.m3u8
https://videos1.bysshxd.com/20230728/QR1kwvNwlM7gB/index.m3u8
https://videos1.bysshxd.com/20230726/qGWQNZYPWBEJl/index.m3u8
https://videos1.bysshxd.com/20230728/Qg8zwYbrwaVRw/index.m3u8
https://videos1.bysshxd.com/20230728/1GwbVQ52xaLgr/index.m3u8
https://videos1.bysshxd.com/20230802/5G2kw3KpaY2R2/index.m3u8
https://txmov2.a.yximgs.com/upic/2019/12/23/16/BMjAxOTEyMjMxNjIxMjRfMTY1NzYyM18yMDgzNzk0MjY3N18yXzM=_b_B772861850137ede4beb9f0db63947fd0.mp4
https://txmov2.a.yximgs.com/upic/2021/03/03/09/BMjAyMTAzMDMwOTA3MjJfNzk3MTYxOTQ0XzQ1MzI5MTQzNzcxXzJfMw==_b_B5ad79ad25f92f4a0a5ccdc78c865b529.mp4
https://txmov2.a.yximgs.com/upic/2021/06/01/11/BMjAyMTA2MDExMTIyMDhfMjM2MzkyOTY3Nl81MDYxMzYzMjI0OV8yXzM=_b_B3470a2101a1ef6a00f9a78f7cd53699a.mp4
https://txmov2.a.yximgs.com/upic/2021/01/07/11/BMjAyMTAxMDcxMTA4MThfNTg0MDAzNDRfNDE5OTY1MTA4MTFfMV8z_b_Bf7776e64e305bb63af8f4b8b83738bb1.mp4
https://txmov2.a.yximgs.com/upic/2021/05/10/14/BMjAyMTA1MTAxNDM3MjhfMjIwNzE1NzAyOV80OTM2MDU5ODkwOF8xXzM=_b_B6acc6d0a13a3c3049475276f1274f32e.mp4
https://txmov2.a.yximgs.com/upic/2021/04/08/16/BMjAyMTA0MDgxNjMzMzZfMTczMzQ4NzI4XzQ3NDUwOTM0NTEyXzFfMw==_b_Baecc8006dcf6156fb2a30324ed4b6ad0.mp4
https://txmov2.a.yximgs.com/upic/2020/12/22/22/BMjAyMDEyMjIyMjEzMjNfNDgzOTAzNDkwXzQxMTM5NDk2OTIwXzFfMw==_b_B208e031925d3d84a3efcbad8055d61de.mp4
https://txmov2.a.yximgs.com/upic/2021/03/06/19/BMjAyMTAzMDYxOTQ3MzBfMjExMjA0ODM0NF80NTUyNTkwNjQ0Ml8xXzM=_b_B24246215b636e289e16d700a536c1d94.mp4
https://txmov2.a.yximgs.com/upic/2021/01/19/21/BMjAyMTAxMTkyMTQzNDlfMjE2ODQ4NDg3OV80MjY1MjExNjQ2NF8xXzM=_b_B3b62c08576c5cc5085029c4461e7eb9f.mp4
https://txmov2.a.yximgs.com/upic/2021/08/18/17/BMjAyMTA4MTgxNzQ5NTNfMTAyOTk4MzU5MF81NTQ5ODY2NjI4OF8xXzM=_b_B8b5ac30fb6af386e0bc3551b42f0be47.mp4
https://txmov2.a.yximgs.com/upic/2021/02/19/12/BMjAyMTAyMTkxMjE0NDZfNjIwMjYyNjU5XzQ0NjIxMjcwNTE1XzJfMw==_b_Bd4d7f58485663ae9a6fa79982f33400b.mp4
https://txmov2.a.yximgs.com/upic/2021/02/07/21/BMjAyMTAyMDcyMTI3MzFfNDgzOTAzNDkwXzQzNzc3Njc0NjI4XzFfMw==_b_B5684f39cd336ea1f31edb8ff627895c7.mp4
https://txmov2.a.yximgs.com/upic/2021/01/06/11/BMjAyMTAxMDYxMTA5MTZfNTg0MDAzNDRfNDE5NTI0MjAzMTRfMV8z_b_B0c8b6240d2fa5d04d709e0129d78f4f4.mp4
https://txmov2.a.yximgs.com/upic/2020/08/07/17/BMjAyMDA4MDcxNzU2MjFfMTU0NzU2MzQxOF8zMzg4MjYxMTQwN18xXzM=_b_B3c9fc2b83cd8f07f4a8b542067af12fd.mp4
https://txmov2.a.yximgs.com/upic/2023/09/25/19/BMjAyMzA5MjUxOTQ4MzZfMTMxMjAyNjEyNV8xMTM1NjQwMjUyMDNfMl8z_b_Bead1ae1f9b7792318d5d72405de73054.mp4
https://txmov2.a.yximgs.com/upic/2020/09/11/14/BMjAyMDA5MTExNDI2MTBfMTY1NzYyM18zNTg0MzA4ODU2Ml8xXzM=_b_B81923420dd954e420c42fc5091313ada.mp4
https://txmov2.a.yximgs.com/upic/2021/09/19/12/BMjAyMTA5MTkxMjU5NDlfMTMxMjAyNjEyNV81NzQyMTczNjEzNF8yXzM=_b_B3fb1f7e46f9b877c48f23e4547a63c62.mp4
https://txmov2.a.yximgs.com/upic/2020/01/11/00/BMjAyMDAxMTEwMDAwMzZfMTY1NzYyM18yMTU3OTQxNDA3NF8yXzM=_b_B89b021c5baddda1b9f3ce9e7817c7fb9.mp4
https://txmov2.a.yximgs.com/upic/2019/12/09/13/BMjAxOTEyMDkxMzU2MDNfMTY1NzYyM18yMDMzMzgzMDQ1NV8yXzM=_b_B89c84e64347127a907a5db9a54730d83.mp4
https://txmov2.a.yximgs.com/upic/2021/05/01/20/BMjAyMTA1MDEyMDM3MjVfMTAyOTk4MzU5MF80ODc5NjY2NTM5M18xXzM=_b_Ba6790e3db535269ab0a371b02076c0e1.mp4
https://txmov2.a.yximgs.com/upic/2021/03/23/18/BMjAyMTAzMjMxODA1MDRfMTU0NzU2MzQxOF80NjUwMjA0NDgwOF8xXzM=_b_B2f8dbee0688f4556f28c79af69d4de2f.mp4

BIN
web/imgs/icon-192x192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

BIN
web/imgs/icon-512x512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -8,6 +8,12 @@
<link href="https://testingcf.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
<link href="style.css" rel="stylesheet">
<link href="https://testingcf.jsdelivr.net/npm/hls.js@1.4.12/dist/hls.min.js" rel="stylesheet">
<meta name="theme-color" content="#000000">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="AvHub">
<link rel="manifest" href="manifest.json">
<link rel="apple-touch-icon" href="imgs/icon-192x192.png">
</head>
<body class="bg-gradient-to-br from-slate-900 to-slate-800 min-h-screen text-gray-100 transition-colors duration-300">
<!-- 在 body 标签下添加 logo -->
@ -193,11 +199,11 @@
<!-- 添加版权信息 -->
<footer class="text-center py-4 text-gray-400 text-xs mt-8">
<p>
<span class="tab-text" data-zh="版权所有" data-en="Copyright">版权所有</span> © 2024
<a href="https://github.com/levywang/avhub" target="_blank" class="text-primary hover:text-primary-hover transition-colors duration-200">
<span class="tab-text" data-zh="版权所有" data-en="Copyright">版权所有</span> © 2025
<a href="#" target="_blank" class="text-primary hover:text-primary-hover transition-colors duration-200">
AvHub
</a>
</p>
</footer>
</body>
</html>
</html>

23
web/manifest.json Normal file
View File

@ -0,0 +1,23 @@
{
"name": "AvHub",
"short_name": "AvHub",
"description": "R18 Resource Search & Manager",
"start_url": "/",
"display": "standalone",
"background_color": "#141518",
"theme_color": "#000000",
"icons": [
{
"src": "imgs/icon-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any maskable"
},
{
"src": "imgs/icon-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any maskable"
}
]
}

View File

@ -35,7 +35,7 @@ function switchTab(tabName) {
// 添加 API 配置
const API_CONFIG = {
BASE_URL: 'https://api.wwlww.org/v1',
BASE_URL: '/api/v1',
ENDPOINTS: {
SEARCH: '/avcode',
COLLECTIONS: '/hacg',
@ -1517,3 +1517,16 @@ function showThemeMenu(button) {
};
document.addEventListener('keydown', handleEscape);
}
// 注册 Service Worker
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/sw.js')
.then(registration => {
console.log('ServiceWorker registration successful');
})
.catch(err => {
console.log('ServiceWorker registration failed: ', err);
});
});
}

71
web/sw.js Normal file
View File

@ -0,0 +1,71 @@
const CACHE_NAME = 'avhub-cache-v1';
const urlsToCache = [
'/',
'/index.html',
'/style.css',
'/script.js',
'/manifest.json',
'/imgs/favicon.ico',
'/imgs/icon-192x192.png',
'/imgs/icon-512x512.png',
'https://testingcf.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css',
'https://testingcf.jsdelivr.net/npm/hls.js@1.4.12/dist/hls.min.js'
];
// 安装 Service Worker
self.addEventListener('install', event => {
event.waitUntil(
caches.open(CACHE_NAME)
.then(cache => cache.addAll(urlsToCache))
);
});
// 激活 Service Worker
self.addEventListener('activate', event => {
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames.map(cacheName => {
if (cacheName !== CACHE_NAME) {
return caches.delete(cacheName);
}
})
);
})
);
});
// 处理请求
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request)
.then(response => {
// 如果在缓存中找到响应,则返回缓存的响应
if (response) {
return response;
}
// 克隆请求,因为请求是一个流,只能使用一次
const fetchRequest = event.request.clone();
// 发起网络请求
return fetch(fetchRequest).then(response => {
// 检查是否收到有效的响应
if (!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
// 克隆响应,因为响应是一个流,只能使用一次
const responseToCache = response.clone();
// 将响应添加到缓存
caches.open(CACHE_NAME)
.then(cache => {
cache.put(event.request, responseToCache);
});
return response;
});
})
);
});