package net.bluemangoo.indpjsk.data import net.bluemangoo.indpjsk.upload.Uploader object PredefinedProfiles { private const val SUITE_PATH = "/api/suite/user/(\\d+)(\\?isLogin=true)?$" private const val MYSEKAI_PATH = "/api/user/(\\d+)/mysekai\\?isForceAllReloadOnlyMysekai=True" private const val MYSEKAI_BIRTHDAY_PATH = "/api/user/(\\d+)/mysekai/birthday-party/(\\d+)/delivery" data class StepTarget(val path: String, val uploadType: String) val stepTargets: Map = mapOf( "suite" to StepTarget(SUITE_PATH, "suite"), "mysekai" to StepTarget(MYSEKAI_PATH, "mysekai"), "birthday" to StepTarget(MYSEKAI_BIRTHDAY_PATH, "birthday"), ) val hostAliases: Map> get() = mapOf( "cn" to CN_HOSTS, "jp" to JP_HOSTS, "en" to EN_HOSTS, "tw" to TW_HOSTS, "kr" to KR_HOSTS ) private fun suiteStep(hosts: List) = CaptureProfileStep( id = "suite", name = "Suite", hosts = hosts, path = SUITE_PATH, fileName = "suite", postAction = { result -> Uploader.tryUpload(result) } ) private fun mysekaiStep(hosts: List) = CaptureProfileStep( id = "mysekai", name = "烤森", hosts = hosts, path = MYSEKAI_PATH, fileName = "mysekai", postAction = { result -> Uploader.tryUpload(result) } ) private fun mysekaiBirthday(hosts: List) = CaptureProfileStep( id = "mysekai_birthday", name = "烤森生日双叶", hosts = hosts, path = MYSEKAI_BIRTHDAY_PATH, fileName = "mysekai_birthday", postAction = { result -> Uploader.tryUpload(result) } ) private val CN_HOSTS = listOf( "mkcn-prod-public-60001-1.dailygn.com", "mkcn-prod-public-60001-2.dailygn.com" ) private val JP_HOSTS = listOf("production-game-api.sekai.colorfulpalette.org") private val EN_HOSTS = listOf("n-production-game-api.sekai-en.com") private val TW_HOSTS = listOf( "mk-zian-obt-cdn.bytedgame.com", "mk-zian-obt-https.bytedgame.com" ) private val KR_HOSTS = listOf( "mkkorea-obt-prod01-cdn.bytedgame.com", "mkkorea-obt-prod01-https.bytedgame.com" ) fun rewriteTwUrl(result: CaptureResult): CaptureResult { val originalUrl = result.url val rewrittenUrl = originalUrl.replace( "mk-zian-obt-https.bytedgame.com", "mk-zian-obt-cdn.bytedgame.com" ) return result.copy(url = rewrittenUrl) } val all: List = listOf( // 国服不支持烤森 CaptureProfile( id = "cn", name = "国服", steps = listOf(suiteStep(CN_HOSTS)) ), CaptureProfile( id = "jp", name = "日服", steps = listOf(suiteStep(JP_HOSTS), mysekaiStep(JP_HOSTS), mysekaiBirthday(JP_HOSTS)) ), CaptureProfile( id = "en", name = "国际服", steps = listOf(suiteStep(EN_HOSTS), mysekaiStep(EN_HOSTS), mysekaiBirthday(EN_HOSTS)) ), CaptureProfile( id = "tw", name = "台服", steps = listOf(suiteStep(TW_HOSTS).apply { postAction = { result -> val rewrittenResult = rewriteTwUrl(result) Uploader.tryUpload(rewrittenResult) } }, mysekaiStep(TW_HOSTS).apply { postAction = { result -> val rewrittenResult = rewriteTwUrl(result) Uploader.tryUpload(rewrittenResult) } }, mysekaiBirthday(TW_HOSTS).apply { postAction = { result -> val rewrittenResult = rewriteTwUrl(result) Uploader.tryUpload(rewrittenResult) } }) ), CaptureProfile( id = "kr", name = "韩服", steps = listOf(suiteStep(KR_HOSTS), mysekaiStep(KR_HOSTS), mysekaiBirthday(KR_HOSTS)) ), ) fun byId(id: String): CaptureProfile? = MixinProfiles.merged().firstOrNull { it.id == id } }