diff --git a/AGENTS.md b/AGENTS.md index 6a52eb5..7f10df3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,12 +25,15 @@ git push origin master # origin = Gitea(主仓库) git push --no-verify gitee master # 仅在确需回推 Gitee 时使用 ``` -### 待迁移(尚未完成,需单独确认后再改) +### 运行时端点(已全部迁移到 Gitea) -App 内部仍指向 **Gitee** 的两个运行时端点,迁移到 Gitea 需改代码并重新发版: +App 内部两处端点已指向 Gitea(随本版 APK 生效): -- `AppUpdateManager.kt`:`gitee.com/api/v5/repos/.../releases/latest`(App 内检查更新) -- `KtvJsBridge.kt`:`gitee.com/zijunchiang/maidong-ktv/raw/master/.../ktv_api.js`(JS 热更新) +- `AppUpdateManager.kt`:`gitea.kasugano.cn/api/v1/repos/zijunchiang/maidong-ktv/releases/latest`(App 内检查更新) +- `KtvJsBridge.kt`:`gitea.kasugano.cn/zijunchiang/maidong-ktv/raw/branch/master/app/src/main/assets/mobile/ktv_api.js`(JS 热更新) + +> 注意:Gitea 的 raw 规范路径是 `/raw/branch/<分支>/<文件>`;`/raw/<分支>/<文件>` 会 303 跳转。 +> 发布新版本时需在 Gitea 创建 Release 并上传 `.apk` 附件(Gitea Release API 的 `assets[].browser_download_url` 供 App 下载)。 ## 二、构建与产物 @@ -68,6 +71,6 @@ $BT/apksigner verify 目标名.apk - **歌曲源**:`app/src/main/assets/mobile/ktv_api.js` 的 `CONFIG.HOSTS`(多源自动排序,失败源沉底) - **JS 热更新**:改动 `ktv_api.js` 必须同步提升 `KTV_BRIDGE_API: N` 标记(JS 与 `KtvJsBridge.kt` 两处校验),否则设备仍用缓存旧脚本 -- **曲库**:只走官方 Muse 同步(`MuseDbSync`),不再依赖 Gitee 数据库文件 +- **曲库**:只走官方 Muse 同步(`MuseDbSync`),不再依赖代码仓库数据库文件 - **麦克风**:`MicActivator` 常驻占用输入通道(TV/投影需占用后才有演唱声音输出),外接设备热插拔会自动重建 - **仓库可见性**:Gitea 仓库保持 **public**(若后续把 App 更新/热更新端点迁到 Gitea,非 public 会导致 403) diff --git a/README.en.md b/README.en.md index e100540..ece2c10 100644 --- a/README.en.md +++ b/README.en.md @@ -59,6 +59,8 @@ ## Project Notice +> **This repository**: [https://gitea.kasugano.cn/zijunchiang/maidong-ktv](https://gitea.kasugano.cn/zijunchiang/maidong-ktv) +> > **UI/feature framework credit**: [https://gitee.com/yangyachao-X/maidong-ktv](https://gitee.com/yangyachao-X/maidong-ktv) > > This repository reworks the upstream "Maidong KTV" UI and feature framework, and the core/data layer was @@ -68,7 +70,7 @@ Highlights of the reworked data layer: - **Library**: synced exclusively from the official Muse service - (`mconn.cherryonline.cn` `mls-api/v1/sqlite/sync`); Gitee hosts code only, no database files. + (`mconn.cherryonline.cn` `mls-api/v1/sqlite/sync`); the code host carries source only, no database files. - **Song source**: `w.w345.my` (`i.php` token → `do.php` playback URL) with fixed device identity and reproduced signing; ad/mismatched resources (e.g. `wb66.cn/.../719.ts`) are blocked and retried. - **JS hot-update**: `app/src/main/assets/mobile/ktv_api.js`, requires the `KTV_BRIDGE_API: 7` marker. diff --git a/README.md b/README.md index 82650d4..f93539d 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ ## 📌 项目说明 +> **本仓库**:[https://gitea.kasugano.cn/zijunchiang/maidong-ktv](https://gitea.kasugano.cn/zijunchiang/maidong-ktv) +> > **内容框架来源**:[https://gitee.com/yangyachao-X/maidong-ktv](https://gitee.com/yangyachao-X/maidong-ktv) > > 本仓库基于上游「麦动 KTV」的界面与功能框架进行改造,并使用 **DSH(DeepSeek Harness)** 重写内核与数据源:重新实现曲库同步、歌曲源接入、设备认证、风控应对、远程日志与广告屏蔽等底层逻辑。上游框架的版权归原作者所有,本项目仅作学习与技术交流。 @@ -46,11 +48,11 @@ ## 内核与数据源(DSH 重写部分) -- **曲库**:统一走**官方 Muse 同步**(`mconn.cherryonline.cn` `mls-api/v1/sqlite/sync`,RSA 登录 + 增量文件校验),不再依赖 Gitee 承载数据库;Gitee 仓库仅存代码。 +- **曲库**:统一走**官方 Muse 同步**(`mconn.cherryonline.cn` `mls-api/v1/sqlite/sync`,RSA 登录 + 增量文件校验),不再依赖代码托管仓库承载数据库。 - **歌曲源**:接入 `w.w345.my`(`i.php` 取 token → `do.php` 解析播放地址),固定设备标识并复刻签名算法;广告/错号资源(如返回 `wb66.cn/.../719.ts` 或文件名与 musicno 不一致)会被拦截并重试。 - **风控应对**:源对陌生出口 IP 存在试用窗口(约 10 分钟,403"检测到异常行为"),App 检测到 403 后弹窗提示更换公网 IP;同 token 退避重试,不放大请求量。 - **JS 热更新**:歌曲接口逻辑在 `app/src/main/assets/mobile/ktv_api.js`,安装后从本仓库自动拉取兼容版本(须保留 `KTV_BRIDGE_API: 7` 标记)。 -- **应用更新**:以 Gitee Release 标签作为版本号(如 `1.2.5`),Release 需附带一个 `.apk` 附件;仅当标签高于当前 `BuildConfig.VERSION_NAME` 时提示下载。 +- **应用更新**:以 Gitea Release 标签作为版本号(如 `1.2.5`),Release 需附带一个 `.apk` 附件;仅当标签高于当前 `BuildConfig.VERSION_NAME` 时提示下载。 ## 🔧 编译教程 diff --git a/app/src/main/assets/mobile/ktv_api.js b/app/src/main/assets/mobile/ktv_api.js index cdeed70..6ab447f 100644 --- a/app/src/main/assets/mobile/ktv_api.js +++ b/app/src/main/assets/mobile/ktv_api.js @@ -1,7 +1,7 @@ /** * KTV Song API - JS Hot Update Module * ==================================== - * 从 Gitee 热更新, App 无需发版即可修复 API 变更 + * 从 Gitea 热更新, App 无需发版即可修复 API 变更 * * 用法: * const api = new KtvApi({proxy: 'http://127.0.0.1:7897'}) diff --git a/app/src/main/java/com/local/ktv/AppUpdateManager.kt b/app/src/main/java/com/local/ktv/AppUpdateManager.kt index cd97a80..51c269f 100644 --- a/app/src/main/java/com/local/ktv/AppUpdateManager.kt +++ b/app/src/main/java/com/local/ktv/AppUpdateManager.kt @@ -11,10 +11,10 @@ import java.io.FileOutputStream import java.net.HttpURLConnection import java.net.URL -/** Gitee Release based in-app updater. */ +/** Gitea Release based in-app updater. */ object AppUpdateManager { private const val LATEST_RELEASE_API = - "https://gitee.com/api/v5/repos/zijunchiang/maidong-ktv/releases/latest" + "https://gitea.kasugano.cn/api/v1/repos/zijunchiang/maidong-ktv/releases/latest" data class Release( val version: String, @@ -54,7 +54,7 @@ object AppUpdateManager { apkName = apkName, ) }) - }, "gitee-update-check").start() + }, "gitea-update-check").start() } fun download( @@ -105,7 +105,7 @@ object AppUpdateManager { require(partial.renameTo(target)) { "无法保存安装包" } target }) - }, "gitee-update-download").start() + }, "gitea-update-download").start() } /** diff --git a/app/src/main/java/com/local/ktv/DatabaseBootstrapper.kt b/app/src/main/java/com/local/ktv/DatabaseBootstrapper.kt index 127f490..d6df854 100644 --- a/app/src/main/java/com/local/ktv/DatabaseBootstrapper.kt +++ b/app/src/main/java/com/local/ktv/DatabaseBootstrapper.kt @@ -7,8 +7,8 @@ import java.util.Locale /** * 曲库下载引导(仅官方 Muse 同步源)。 * - * 说明:已移除 Gitee 数据库分片/镜像下载路径(database_publish 不再发布到 Gitee, - * Gitee 仓库此后只存代码)。曲库统一从官方 Muse 服务(mconn.cherryonline.cn mls-api) + * 说明:已移除分片/镜像数据库下载路径(database_publish 不再发布到代码仓库, + * 代码仓库此后只存代码)。曲库统一从官方 Muse 服务(mconn.cherryonline.cn mls-api) * 同步,由 [MuseDbSync] 负责登录、同步、校验与安装;本类只做版本文件与可读错误包装。 */ object DatabaseBootstrapper { diff --git a/app/src/main/java/com/local/ktv/KtvJsBridge.kt b/app/src/main/java/com/local/ktv/KtvJsBridge.kt index 0e94b65..0ef0fa0 100644 --- a/app/src/main/java/com/local/ktv/KtvJsBridge.kt +++ b/app/src/main/java/com/local/ktv/KtvJsBridge.kt @@ -30,15 +30,16 @@ import javax.crypto.Cipher * 在隐藏 WebView 中运行可热更新的歌曲接口脚本。 * * JS 决定接口地址、参数、签名和响应解析;Android 只提供 HTTP 与 RSA 这两个 - * WebView 中不可靠的底层能力。这样接口变化时只需更新 Gitee 上的 ktv_api.js。 + * WebView 中不可靠的底层能力。这样接口变化时只需更新 Gitea 上的 ktv_api.js。 */ class KtvJsBridge(context: Context) { companion object { private const val TAG = "KtvJsBridge" private const val JS_FILE = "mobile/ktv_api.js" private const val CACHE_FILE = "ktv_api_cache.js" + // 热更新脚本地址(Gitea 主仓库; raw 规范路径为 /raw/branch/<分支>/<文件>) private const val REMOTE_JS_URL = - "https://gitee.com/zijunchiang/maidong-ktv/raw/master/app/src/main/assets/mobile/ktv_api.js" + "https://gitea.kasugano.cn/zijunchiang/maidong-ktv/raw/branch/master/app/src/main/assets/mobile/ktv_api.js" private const val MAX_RESPONSE_BYTES = 2 * 1024 * 1024 private const val JS_REQUEST_TIMEOUT_MS = 180_000 // 当前歌曲源 w.w345.my 使用的设备标识(mac + sn)。与用户抓包示例一致, @@ -250,7 +251,7 @@ class KtvJsBridge(context: Context) { cacheFile.writeText(script, Charsets.UTF_8) tempFile.delete() } - Log.i(TAG, "JS cache updated from Gitee (${script.length} chars)") + Log.i(TAG, "JS cache updated from Gitea (${script.length} chars)") // 启动后刚拉到的新版本直接生效;若已有请求在执行,则留到下次启动。 mainHandler.post { if (ready && callbacks.isEmpty() && !destroyed) { diff --git a/app/src/main/java/com/local/ktv/MainActivity.kt b/app/src/main/java/com/local/ktv/MainActivity.kt index 829d5ce..b4afe1a 100644 --- a/app/src/main/java/com/local/ktv/MainActivity.kt +++ b/app/src/main/java/com/local/ktv/MainActivity.kt @@ -8232,7 +8232,7 @@ class MainActivity : AppCompatActivity() { SettingsEntry( R.drawable.ott_ic_data_upgrade, "应用更新", - "当前版本 ${BuildConfig.VERSION_NAME},更新来源:Gitee Release", + "当前版本 ${BuildConfig.VERSION_NAME},更新来源:Gitea Release", "检查更新", ) { checkAppUpdate(true) }, SettingsEntry(R.drawable.ott_ic_about_us, "关于", actionText = "查看") { showAboutDialog() }, diff --git a/app/src/main/java/com/local/ktv/MuseDbSync.kt b/app/src/main/java/com/local/ktv/MuseDbSync.kt index 12d8d72..609b4e7 100644 --- a/app/src/main/java/com/local/ktv/MuseDbSync.kt +++ b/app/src/main/java/com/local/ktv/MuseDbSync.kt @@ -20,7 +20,7 @@ import javax.crypto.Cipher /** * 官方曲库同步:login → cookie → sqlite/sync → 下载 gz → 解压安装。 * - * 这是原版「时光KTV / 麦动」的曲库分发方式,取代此前临时使用的 Gitee 分片方案。 + * 这是原版「时光KTV / 麦动」的曲库分发方式,取代此前临时使用的分片分发方案。 * 授权门控发生在服务端(未授权设备 sync 返回空 files),本地只负责完整复刻请求协议。 */ object MuseDbSync { diff --git a/app/src/main/java/com/local/ktv/SongApiClient.kt b/app/src/main/java/com/local/ktv/SongApiClient.kt index b0986a1..5172cd5 100644 --- a/app/src/main/java/com/local/ktv/SongApiClient.kt +++ b/app/src/main/java/com/local/ktv/SongApiClient.kt @@ -10,8 +10,8 @@ import java.util.concurrent.atomic.AtomicReference /** * 歌曲 API 客户端 —— JS 热更新桥接 * ================================= - * - 通过 KtvJsBridge 调用 Gitee 上的 JS 脚本 - * - API 变更时只需更新 Gitee JS 文件,App 无需发版 + * - 通过 KtvJsBridge 调用 Gitea 上的 JS 脚本 + * - API 变更时只需更新 Gitea JS 文件,App 无需发版 * - 首次播放时实时获取 URL,不存在过期问题 */ object SongApiClient {