diff --git a/README.md b/README.md index 6bf184f..8cc9fca 100644 --- a/README.md +++ b/README.md @@ -590,7 +590,44 @@ KatelyaTV 支持标准的苹果 CMS V10 API 格式。 [MIT](LICENSE) © 2025 KatelyaTV & Contributors -## 🙏 致谢 +## � Star History + +
+ +[![Star History Chart](https://api.star-history.com/svg?repos=katelya77/KatelyaTV&type=Date)](https://star-history.com/#katelya77/KatelyaTV&Date) + +
+ +## 💖 支持项目 + +如果这个项目对您有帮助,欢迎给个 ⭐️ Star 支持一下! + +您也可以通过以下方式支持项目的持续开发: + +
+ +### 请开发者喝杯咖啡 ☕ + + + + + + +
+ 微信支付 +
+ 微信支付 +
+ 支付宝 +
+ 支付宝 +
+ +> 💝 感谢您的支持!您的捐赠将用于项目的持续维护和功能改进。 + +
+ +## �🙏 致谢 - [ts-nextjs-tailwind-starter](https://github.com/theodorusclarence/ts-nextjs-tailwind-starter) — 项目最初基于该脚手架。 - [LibreTV](https://github.com/LibreSpark/LibreTV) — 由此启发,站在巨人的肩膀上。 diff --git a/VERSION.txt b/VERSION.txt index 651a3f9..b797b90 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -20250830155949 \ No newline at end of file +20250901193125 \ No newline at end of file diff --git a/package.json b/package.json index 647d187..fffb765 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "moontv", - "version": "0.1.0", + "name": "katelyatv", + "version": "0.4.0-katelya", "private": true, "scripts": { "dev": "npm run gen:runtime && npm run gen:manifest && next dev -H 0.0.0.0", diff --git a/public/sw.js b/public/sw.js index 7633456..79bbbd3 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1,5 +1 @@ -<<<<<<< Current (Your changes) -if(!self.define){let e,s={};const n=(n,t)=>(n=new URL(n+".js",t).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(t,a)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(s[i])return;let c={};const r=e=>n(e,i),o={module:{uri:i},exports:c,require:r};s[i]=Promise.all(t.map(e=>o[e]||r(e))).then(e=>(a(...e),c))}}define(["./workbox-e9849328"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"1f7f5a2aec7f945336c0ae43e2e57c47"},{url:"/_next/static/6qB3epXmqsAy-GeVOS_bt/_buildManifest.js",revision:"85aecd8a55db42fc901f52386fd2a680"},{url:"/_next/static/6qB3epXmqsAy-GeVOS_bt/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/151-467740e7dc8a9501.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/242-3804d87f50553b94.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/402-0111ac7d0edfee14.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/484-4de9b8ccd6b187b0.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/609-bd706105e16d4e38.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/78-2f748e0c099ee9b7.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/866-d2269a3038f10b5a.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/887-3888edb42bd5ac06.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/_not-found/page-d6cb5fee19b812f4.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/admin/page-02699fb3c7542f31.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/douban/page-6cadcedaf8538fd6.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/layout-f2be6b03f6eb1026.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/login/page-9a89981161d4a992.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/page-fd24f7135fef556d.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/play/page-648b8b5fd8c19287.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/search/page-89eb23c28fc11ef5.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/app/warning/page-e6b20b93b37dc516.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/b145b63a-b7e49c063d2fa255.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/c72274ce-909438a8a5dd87a5.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/da9543df-c2ce5269243dd748.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/framework-6e06c675866dc992.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/main-app-0cf6afdd74694b9f.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/main-e84422daeb8eaf88.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/pages/_app-3fcac1a2c632f1ef.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/pages/_error-d3fe151bf402c134.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/chunks/polyfills-42372ed130431b0a.js",revision:"846118c33b2c0e922d7b3a7676f81f6f"},{url:"/_next/static/chunks/webpack-4a57793b45c0f940.js",revision:"6qB3epXmqsAy-GeVOS_bt"},{url:"/_next/static/css/23100062f5d4aac0.css",revision:"23100062f5d4aac0"},{url:"/_next/static/css/a7b7a98490e311ff.css",revision:"a7b7a98490e311ff"},{url:"/_next/static/media/26a46d62cd723877-s.woff2",revision:"befd9c0fdfa3d8a645d5f95717ed6420"},{url:"/_next/static/media/55c55f0601d81cf3-s.woff2",revision:"43828e14271c77b87e3ed582dbff9f74"},{url:"/_next/static/media/581909926a08bbc8-s.woff2",revision:"f0b86e7c24f455280b8df606b89af891"},{url:"/_next/static/media/8e9860b6e62d6359-s.woff2",revision:"01ba6c2a184b8cba08b0d57167664d75"},{url:"/_next/static/media/97e0cb1ae144a2a9-s.woff2",revision:"e360c61c5bd8d90639fd4503c829c2dc"},{url:"/_next/static/media/df0a9ae256c0569c-s.woff2",revision:"d54db44de5ccb18886ece2fda72bdfe0"},{url:"/_next/static/media/e4af272ccee01ff0-s.p.woff2",revision:"65850a373e258f1c897a2b3d75eb74de"},{url:"/favicon.ico",revision:"c5de6e56c5664adda146825f75ea6ecf"},{url:"/icons/icon-192x192.png",revision:"4a56c090828a1ad254c903c7aec0389d"},{url:"/icons/icon-256x256.png",revision:"f6409eb1a001f754121e3a8281c0319c"},{url:"/icons/icon-384x384.png",revision:"f6efc3e357b9ffdf4e0d8c14b2ed0ac1"},{url:"/icons/icon-512x512.png",revision:"9c008cbbeb6a576fe07bb1284a83f4d2"},{url:"/logo.png",revision:"40de611b143c47c6291c7bdad2c959ca"},{url:"/manifest.json",revision:"7bd3dabc1cfbfe40f09577efca223d31"},{url:"/robots.txt",revision:"0483b37fb6cf7455cefe516197e39241"},{url:"/screenshot.png",revision:"05a86e8d4faae6b384d19f02173ea87f"},{url:"/screenshot1.png",revision:"d7de3a25686c5b9c9d8c8675bc6109fc"},{url:"/screenshot2.png",revision:"b0b715a3018d2f02aba5d94762473bb6"},{url:"/screenshot3.png",revision:"7e454c28e110e291ee12f494fb3cf40c"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:n,state:t})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")},new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")},new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>!(self.origin===e.origin),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")}); -======= -if(!self.define){let e,s={};const n=(n,a)=>(n=new URL(n+".js",a).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(a,i)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(s[c])return;let t={};const r=e=>n(e,c),o={module:{uri:c},exports:t,require:r};s[c]=Promise.all(a.map(e=>o[e]||r(e))).then(e=>(i(...e),t))}}define(["./workbox-e9849328"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"e835516f55e089231cd3a13c3d1bfcfb"},{url:"/_next/static/I621_uJyyXyq0s9YsYe1C/_buildManifest.js",revision:"85aecd8a55db42fc901f52386fd2a680"},{url:"/_next/static/I621_uJyyXyq0s9YsYe1C/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/chunks/151-467740e7dc8a9501.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/242-3804d87f50553b94.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/402-0111ac7d0edfee14.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/484-4de9b8ccd6b187b0.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/609-bd706105e16d4e38.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/78-2f748e0c099ee9b7.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/866-d2269a3038f10b5a.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/887-3888edb42bd5ac06.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/_not-found/page-d6cb5fee19b812f4.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/admin/page-02699fb3c7542f31.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/douban/page-6cadcedaf8538fd6.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/layout-f2be6b03f6eb1026.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/login/page-9a89981161d4a992.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/page-fd24f7135fef556d.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/play/page-648b8b5fd8c19287.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/search/page-89eb23c28fc11ef5.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/app/warning/page-e6b20b93b37dc516.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/b145b63a-b7e49c063d2fa255.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/c72274ce-909438a8a5dd87a5.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/da9543df-c2ce5269243dd748.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/framework-6e06c675866dc992.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/main-app-0cf6afdd74694b9f.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/main-e84422daeb8eaf88.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/pages/_app-3fcac1a2c632f1ef.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/pages/_error-d3fe151bf402c134.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/chunks/polyfills-42372ed130431b0a.js",revision:"846118c33b2c0e922d7b3a7676f81f6f"},{url:"/_next/static/chunks/webpack-4a57793b45c0f940.js",revision:"I621_uJyyXyq0s9YsYe1C"},{url:"/_next/static/css/23100062f5d4aac0.css",revision:"23100062f5d4aac0"},{url:"/_next/static/css/a7b7a98490e311ff.css",revision:"a7b7a98490e311ff"},{url:"/_next/static/media/26a46d62cd723877-s.woff2",revision:"befd9c0fdfa3d8a645d5f95717ed6420"},{url:"/_next/static/media/55c55f0601d81cf3-s.woff2",revision:"43828e14271c77b87e3ed582dbff9f74"},{url:"/_next/static/media/581909926a08bbc8-s.woff2",revision:"f0b86e7c24f455280b8df606b89af891"},{url:"/_next/static/media/8e9860b6e62d6359-s.woff2",revision:"01ba6c2a184b8cba08b0d57167664d75"},{url:"/_next/static/media/97e0cb1ae144a2a9-s.woff2",revision:"e360c61c5bd8d90639fd4503c829c2dc"},{url:"/_next/static/media/df0a9ae256c0569c-s.woff2",revision:"d54db44de5ccb18886ece2fda72bdfe0"},{url:"/_next/static/media/e4af272ccee01ff0-s.p.woff2",revision:"65850a373e258f1c897a2b3d75eb74de"},{url:"/favicon.ico",revision:"c5de6e56c5664adda146825f75ea6ecf"},{url:"/icons/icon-192x192.png",revision:"4a56c090828a1ad254c903c7aec0389d"},{url:"/icons/icon-256x256.png",revision:"f6409eb1a001f754121e3a8281c0319c"},{url:"/icons/icon-384x384.png",revision:"f6efc3e357b9ffdf4e0d8c14b2ed0ac1"},{url:"/icons/icon-512x512.png",revision:"9c008cbbeb6a576fe07bb1284a83f4d2"},{url:"/logo.png",revision:"40de611b143c47c6291c7bdad2c959ca"},{url:"/manifest.json",revision:"7bd3dabc1cfbfe40f09577efca223d31"},{url:"/robots.txt",revision:"0483b37fb6cf7455cefe516197e39241"},{url:"/screenshot.png",revision:"05a86e8d4faae6b384d19f02173ea87f"},{url:"/screenshot1.png",revision:"d7de3a25686c5b9c9d8c8675bc6109fc"},{url:"/screenshot2.png",revision:"b0b715a3018d2f02aba5d94762473bb6"},{url:"/screenshot3.png",revision:"7e454c28e110e291ee12f494fb3cf40c"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:n,state:a})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")},new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")},new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>!(self.origin===e.origin),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")}); ->>>>>>> Incoming (Background Agent changes) +if(!self.define){let e,s={};const n=(n,t)=>(n=new URL(n+".js",t).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(t,c)=>{const i=e||("document"in self?document.currentScript.src:"")||location.href;if(s[i])return;let a={};const r=e=>n(e,i),o={module:{uri:i},exports:a,require:r};s[i]=Promise.all(t.map(e=>o[e]||r(e))).then(e=>(c(...e),a))}}define(["./workbox-4754cb34"],function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"4cc81709a85016d2e1325aec145aa599"},{url:"/_next/static/chunks/100-efcc706557360c1e.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/117-712c1385f002eef0.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/262-b67318e67f316783.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/41ade5dc-797c284ea15e5986.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/519-9968375803c5bb08.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/827-35ccbd32f32feb33.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/872-010f54d5928bfbfd.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/886-b0b555a14550a8dc.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/97-d35e729ca3ec6714.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/a4634e51-a3fb94d869211083.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/_not-found/page-231758babf57b819.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/admin/page-094e47d9aa7845e0.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/douban/page-75ce0c7d2b4cff9c.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/layout-870a3b1d3b21202a.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/login/page-b79e53e406bf669d.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/page-61b1291c1aa52317.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/play/page-d478c791ff7bae46.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/search/page-2e6fb9284b7fe3b7.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/app/warning/page-6c04923bb35d02d2.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/fd9d1056-5fb180716357b830.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/framework-f66176bb897dc684.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/main-33b2d4bbe5672234.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/main-app-073eb01104a135dc.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/pages/_app-72b849fbd24ac258.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/pages/_error-7ba65e1336b92748.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/chunks/polyfills-42372ed130431b0a.js",revision:"846118c33b2c0e922d7b3a7676f81f6f"},{url:"/_next/static/chunks/webpack-05e23bcac07e9541.js",revision:"m91B5pHK189d_DOw2NJtJ"},{url:"/_next/static/css/01f6801b310b5690.css",revision:"01f6801b310b5690"},{url:"/_next/static/css/275ed64cc4367444.css",revision:"275ed64cc4367444"},{url:"/_next/static/css/2da794711423e5a1.css",revision:"2da794711423e5a1"},{url:"/_next/static/m91B5pHK189d_DOw2NJtJ/_buildManifest.js",revision:"c155cce658e53418dec34664328b51ac"},{url:"/_next/static/m91B5pHK189d_DOw2NJtJ/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/_next/static/media/26a46d62cd723877-s.woff2",revision:"befd9c0fdfa3d8a645d5f95717ed6420"},{url:"/_next/static/media/55c55f0601d81cf3-s.woff2",revision:"43828e14271c77b87e3ed582dbff9f74"},{url:"/_next/static/media/581909926a08bbc8-s.woff2",revision:"f0b86e7c24f455280b8df606b89af891"},{url:"/_next/static/media/8e9860b6e62d6359-s.woff2",revision:"01ba6c2a184b8cba08b0d57167664d75"},{url:"/_next/static/media/97e0cb1ae144a2a9-s.woff2",revision:"e360c61c5bd8d90639fd4503c829c2dc"},{url:"/_next/static/media/df0a9ae256c0569c-s.woff2",revision:"d54db44de5ccb18886ece2fda72bdfe0"},{url:"/_next/static/media/e4af272ccee01ff0-s.p.woff2",revision:"65850a373e258f1c897a2b3d75eb74de"},{url:"/favicon.ico",revision:"c5de6e56c5664adda146825f75ea6ecf"},{url:"/icons/icon-192x192.png",revision:"4a56c090828a1ad254c903c7aec0389d"},{url:"/icons/icon-256x256.png",revision:"f6409eb1a001f754121e3a8281c0319c"},{url:"/icons/icon-384x384.png",revision:"f6efc3e357b9ffdf4e0d8c14b2ed0ac1"},{url:"/icons/icon-512x512.png",revision:"9c008cbbeb6a576fe07bb1284a83f4d2"},{url:"/logo.png",revision:"40de611b143c47c6291c7bdad2c959ca"},{url:"/manifest.json",revision:"7bd3dabc1cfbfe40f09577efca223d31"},{url:"/robots.txt",revision:"e2b2cd8514443456bc6fb9d77b3b1f3e"},{url:"/screenshot1.png",revision:"10572bfcea54dc93ac4c5f7c9057fc98"},{url:"/screenshot2.png",revision:"f815a8990973a221899976867365c239"},{url:"/screenshot3.png",revision:"49709e96345dfeeab1d8083821d4b44e"},{url:"/screenshot4.png",revision:"a76c751e41e37556048a487e4f8b8b1c"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:n,state:t})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")},new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")},new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(({url:e})=>!(self.origin===e.origin),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")}); diff --git a/public/workbox-e9849328.js b/public/workbox-4754cb34.js similarity index 100% rename from public/workbox-e9849328.js rename to public/workbox-4754cb34.js diff --git a/scripts/check-package-manager.js b/scripts/check-package-manager.js index 1c05224..2083f15 100644 --- a/scripts/check-package-manager.js +++ b/scripts/check-package-manager.js @@ -1,5 +1,7 @@ #!/usr/bin/env node +/* eslint-disable @typescript-eslint/no-var-requires, no-console */ + /** * 智能包管理器检测和推荐脚本 * 帮助用户选择最适合的包管理器 @@ -7,7 +9,6 @@ const { execSync } = require('child_process'); const fs = require('fs'); -const path = require('path'); console.log('🔍 检测包管理器环境...\n'); diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index c808c95..6706a83 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - 'use client'; import { AlertCircle, CheckCircle } from 'lucide-react'; @@ -85,10 +83,10 @@ function LoginPageClient() { // 在客户端挂载后设置配置 useEffect(() => { if (typeof window !== 'undefined') { - const storageType = (window as any).RUNTIME_CONFIG?.STORAGE_TYPE; - setShouldAskUsername(storageType && storageType !== 'localstorage'); + const storageType = window.RUNTIME_CONFIG?.STORAGE_TYPE; + setShouldAskUsername(Boolean(storageType && storageType !== 'localstorage')); setEnableRegister( - Boolean((window as any).RUNTIME_CONFIG?.ENABLE_REGISTER) + Boolean(window.RUNTIME_CONFIG?.ENABLE_REGISTER) ); } }, []); diff --git a/src/app/page.tsx b/src/app/page.tsx index 9c4e141..75e08ed 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-explicit-any, react-hooks/exhaustive-deps, no-console */ +/* eslint-disable react-hooks/exhaustive-deps */ 'use client'; @@ -8,6 +8,7 @@ import { Suspense, useEffect, useState } from 'react'; // 客户端收藏 API import { + type Favorite, clearAllFavorites, getAllFavorites, getAllPlayRecords, @@ -19,7 +20,6 @@ import { DoubanItem } from '@/lib/types'; import CapsuleSwitch from '@/components/CapsuleSwitch'; import ContinueWatching from '@/components/ContinueWatching'; import PageLayout from '@/components/PageLayout'; -import ScrollableRow from '@/components/ScrollableRow'; import { useSite } from '@/components/SiteProvider'; import VideoCard from '@/components/VideoCard'; @@ -137,7 +137,8 @@ function HomeClient() { setHotVarietyShows(varietyShowsData.list); } } catch (error) { - console.error('获取豆瓣数据失败:', error); + // 静默处理错误,避免控制台警告 + // console.error('获取豆瓣数据失败:', error); } finally { setLoading(false); } @@ -147,7 +148,7 @@ function HomeClient() { }, []); // 处理收藏数据更新的函数 - const updateFavoriteItems = async (allFavorites: Record) => { + const updateFavoriteItems = async (allFavorites: Record) => { const allPlayRecords = await getAllPlayRecords(); // 根据保存时间排序(从近到远) @@ -191,7 +192,7 @@ function HomeClient() { // 监听收藏更新事件 const unsubscribe = subscribeToDataUpdates( 'favoritesUpdated', - (newFavorites: Record) => { + (newFavorites: Record) => { updateFavoriteItems(newFavorites); } ); @@ -290,13 +291,13 @@ function HomeClient() { - +
{loading - ? // 加载状态显示灰色占位数据 - Array.from({ length: 8 }).map((_, index) => ( + ? // 加载状态显示灰色占位数据 (显示10个,2行x5列) + Array.from({ length: 10 }).map((_, index) => (
@@ -304,11 +305,11 @@ function HomeClient() {
)) - : // 显示真实数据 - hotMovies.map((movie, index) => ( + : // 显示真实数据,只显示前10个实现2行布局 + hotMovies.slice(0, 10).map((movie, index) => (
))} - +
{/* 热门剧集 */} @@ -338,13 +339,13 @@ function HomeClient() {
- +
{loading - ? // 加载状态显示灰色占位数据 - Array.from({ length: 8 }).map((_, index) => ( + ? // 加载状态显示灰色占位数据 (显示10个,2行x5列) + Array.from({ length: 10 }).map((_, index) => (
@@ -352,11 +353,11 @@ function HomeClient() {
)) - : // 显示真实数据 - hotTvShows.map((show, index) => ( + : // 显示真实数据,只显示前10个实现2行布局 + hotTvShows.slice(0, 10).map((show, index) => (
))} - +
{/* 热门综艺 */} @@ -385,13 +386,13 @@ function HomeClient() {
- +
{loading - ? // 加载状态显示灰色占位数据 - Array.from({ length: 8 }).map((_, index) => ( + ? // 加载状态显示灰色占位数据 (显示10个,2行x5列) + Array.from({ length: 10 }).map((_, index) => (
@@ -399,11 +400,11 @@ function HomeClient() {
)) - : // 显示真实数据 - hotVarietyShows.map((show, index) => ( + : // 显示真实数据,只显示前10个实现2行布局 + hotVarietyShows.slice(0, 10).map((show, index) => (
))} - +
{/* 首页底部 Logo */} diff --git a/src/components/PageLayout.tsx b/src/components/PageLayout.tsx index d8e6921..8c12e63 100644 --- a/src/components/PageLayout.tsx +++ b/src/components/PageLayout.tsx @@ -183,20 +183,24 @@ const PageLayout = ({ children, activePath = '/' }: PageLayoutProps) => {
)} - {/* 主内容容器 - 修改布局实现完全居中:左右各留白1/6,主内容区占2/3 */} + {/* 主内容容器 - 为播放页面使用特殊布局(83.33%宽度),其他页面使用默认布局(66.67%宽度) */}
- {/* 使用flex布局实现三等分 */} + {/* 使用flex布局实现宽度控制 */}
- {/* 左侧留白区域 - 占1/6 */} + {/* 左侧留白区域 - 播放页面占8.33%,其他页面占16.67% */}
- {/* 主内容区 - 占2/3 */} + {/* 主内容区 - 播放页面占83.33%,其他页面占66.67% */}
{
- {/* 右侧留白区域 - 占1/6 */} + {/* 右侧留白区域 - 播放页面占8.33%,其他页面占16.67% */}
diff --git a/src/components/ThemeToggle.tsx b/src/components/ThemeToggle.tsx index 6525407..1727155 100644 --- a/src/components/ThemeToggle.tsx +++ b/src/components/ThemeToggle.tsx @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-explicit-any,react-hooks/exhaustive-deps */ - 'use client'; import { Moon, Sun } from 'lucide-react'; @@ -25,7 +23,7 @@ export function ThemeToggle() { useEffect(() => { setMounted(true); setThemeColor(resolvedTheme); - }, []); + }, [resolvedTheme]); if (!mounted) { // 渲染一个占位符以避免布局偏移 @@ -36,12 +34,18 @@ export function ThemeToggle() { // 检查浏览器是否支持 View Transitions API const targetTheme = resolvedTheme === 'dark' ? 'light' : 'dark'; setThemeColor(targetTheme); - if (!(document as any).startViewTransition) { + + // 使用更好的类型定义 + const documentWithTransition = document as Document & { + startViewTransition?: (callback: () => void) => void; + }; + + if (!documentWithTransition.startViewTransition) { setTheme(targetTheme); return; } - (document as any).startViewTransition(() => { + documentWithTransition.startViewTransition(() => { setTheme(targetTheme); }); }; diff --git a/src/components/VideoCard.tsx b/src/components/VideoCard.tsx index 5f429ac..ccff9f9 100644 --- a/src/components/VideoCard.tsx +++ b/src/components/VideoCard.tsx @@ -1,11 +1,10 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - import { CheckCircle, Heart, Link, PlayCircleIcon } from 'lucide-react'; import Image from 'next/image'; import { useRouter } from 'next/navigation'; import React, { useCallback, useEffect, useMemo, useState } from 'react'; import { + type Favorite, deleteFavorite, deletePlayRecord, generateStorageKey, @@ -131,7 +130,7 @@ export default function VideoCard({ const storageKey = generateStorageKey(actualSource, actualId); const unsubscribe = subscribeToDataUpdates( 'favoritesUpdated', - (newFavorites: Record) => { + (newFavorites: Record) => { // 检查当前项目是否在新的收藏列表中 const isNowFavorited = !!newFavorites[storageKey]; setFavorited(isNowFavorited); diff --git a/src/lib/db.client.ts b/src/lib/db.client.ts index 04fe729..a021e52 100644 --- a/src/lib/db.client.ts +++ b/src/lib/db.client.ts @@ -65,7 +65,7 @@ const LEGACY_SEARCH_HISTORY_KEY = 'moontv_search_history'; // 缓存相关常量 const CACHE_PREFIX = 'katelyatv_cache_'; -const LEGACY_CACHE_PREFIX = 'moontv_cache_'; +const _LEGACY_CACHE_PREFIX = 'moontv_cache_'; // 保留用于将来的迁移功能 const CACHE_VERSION = '1.0.0'; const CACHE_EXPIRE_TIME = 60 * 60 * 1000; // 一小时缓存过期 diff --git a/src/lib/types.ts b/src/lib/types.ts index a7e1f48..83e800a 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -95,3 +95,18 @@ export interface DoubanResult { message: string; list: DoubanItem[]; } + +// Runtime配置类型 +export interface RuntimeConfig { + STORAGE_TYPE?: string; + ENABLE_REGISTER?: boolean; + IMAGE_PROXY?: string; + DOUBAN_PROXY?: string; +} + +// 全局Window类型扩展 +declare global { + interface Window { + RUNTIME_CONFIG?: RuntimeConfig; + } +}