Skip to content

Commit

Permalink
refactor: 投币和稍后再看操作移动入ActionDelegate
Browse files Browse the repository at this point in the history
  • Loading branch information
muedsa committed Dec 23, 2024
1 parent 5fc6b1b commit 0dcc04a
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 64 deletions.
11 changes: 11 additions & 0 deletions app/src/main/java/com/muedsa/tvbox/bilibili/model/CoinAddParams.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.muedsa.tvbox.bilibili.model

import kotlinx.serialization.Serializable

@Serializable
data class CoinAddParams(
val aid: Long,
val multiply: Int,
val selectLike: Int = 1,
val referer: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.muedsa.tvbox.bilibili.model

import kotlinx.serialization.Serializable

@Serializable
data class HistoryToViewModifyParams(
val bvid: String,
val aid: Long,
)
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import com.muedsa.tvbox.bilibili.BILI_REFRESH_TOKEN_KEY
import com.muedsa.tvbox.bilibili.BILI_VIDEO_HEARTBEAT
import com.muedsa.tvbox.bilibili.BilibiliConst
import com.muedsa.tvbox.bilibili.helper.BiliCookieHelper
import com.muedsa.tvbox.bilibili.model.CoinAddParams
import com.muedsa.tvbox.bilibili.model.HistoryToViewModifyParams
import com.muedsa.tvbox.bilibili.model.LoginState
import com.muedsa.tvbox.bilibili.model.QRCodeLoginCache
import com.muedsa.tvbox.bilibili.model.UserRelationModifyParams
Expand Down Expand Up @@ -54,9 +56,9 @@ class ActionDelegate(
videoHeartbeat(updateConfig = updateConfig)
}

ACTION_INVALID -> throw RuntimeException("这是一个动作卡片,请删除")
ACTION_INVALID -> throw IllegalArgumentException("这是一个动作卡片,请删除")

else -> throw RuntimeException("未知动作")
else -> throw IllegalArgumentException("未知动作")
}
return mediaDetail
}
Expand All @@ -69,12 +71,36 @@ class ActionDelegate(
ACTION_USER_FOLLOW -> {
userRelationModify(
params = LenientJson.decodeFromString<UserRelationModifyParams>(
data ?: throw RuntimeException("参数错误")
data ?: throw IllegalArgumentException("参数错误")
)
)
}

else -> throw RuntimeException("未知动作")
ACTION_COIN_ADD -> {
coinAdd(
params = LenientJson.decodeFromString<CoinAddParams>(
data ?: throw IllegalArgumentException("参数错误")
)
)
}

ACTION_HISTORY_TO_VIEW_ADD -> {
historyToViewAdd(
params = LenientJson.decodeFromString<HistoryToViewModifyParams>(
data ?: throw IllegalArgumentException("参数错误")
)
)
}

ACTION_HISTORY_TO_VIEW_DEL -> {
historyToViewDel(
params = LenientJson.decodeFromString<HistoryToViewModifyParams>(
data ?: throw IllegalArgumentException("参数错误")
)
)
}

else -> throw IllegalArgumentException("未知动作")
}
return source
}
Expand Down Expand Up @@ -174,14 +200,56 @@ class ActionDelegate(
}
}

private suspend fun coinAdd(params: CoinAddParams): MediaHttpSource {
val resp = apiService.coinAdd(
aid = params.aid,
multiply = params.multiply,
selectLike = params.selectLike,
referer = params.referer,
csrf = BiliCookieHelper.getCookeValue(
cookieSaver = cookieSaver,
cookieName = BiliCookieHelper.COOKIE_B_JCT
) ?: throw RuntimeException("未登录")
)
val message = if (resp.code != 0L) resp.message else "投币成功"
throw RuntimeException(message)
}

private suspend fun historyToViewAdd(params: HistoryToViewModifyParams): MediaHttpSource {
val resp = apiService.historyToViewAdd(
aid = params.aid,
csrf = BiliCookieHelper.getCookeValue(
cookieSaver = cookieSaver,
cookieName = BiliCookieHelper.COOKIE_B_JCT
) ?: throw RuntimeException("未登录")
)
val message = if (resp.code != 0L) resp.message else "添加成功"
throw RuntimeException(message)
}

private suspend fun historyToViewDel(params: HistoryToViewModifyParams): MediaHttpSource {
val resp = apiService.historyToViewDel(
bvids = params.bvid,
csrf = BiliCookieHelper.getCookeValue(
cookieSaver = cookieSaver,
cookieName = BiliCookieHelper.COOKIE_B_JCT
) ?: throw RuntimeException("未登录")
)
val message = if (resp.code != 0L) resp.message else "移除成功"
throw RuntimeException(message)
}

companion object {
const val ACTION_PREFIX = "action_"
const val ACTION_INVALID = "${ACTION_PREFIX}invalid"
const val ACTION_QRCODE_LOGIN = "${ACTION_PREFIX}qrcode_login"
const val ACTION_QRCODE_LOGIN_POLL = "${ACTION_PREFIX}qrcode_login_poll"
const val ACTION_LOGOUT = "${ACTION_PREFIX}logout"
const val ACTION_VIDEO_HEARTBEAT = "${ACTION_PREFIX}_VIDEO_HEARTBEAT"
const val ACTION_USER_FOLLOW = "${ACTION_PREFIX}_USER_FOLLOW"
const val ACTION_VIDEO_HEARTBEAT = "${ACTION_PREFIX}_video_heartbeat"
const val ACTION_USER_FOLLOW = "${ACTION_PREFIX}_user_follow"
const val ACTION_COIN_ADD = "${ACTION_PREFIX}_coin_add"
const val ACTION_HISTORY_TO_VIEW_ADD = "${ACTION_PREFIX}_history_to_view_add"
const val ACTION_HISTORY_TO_VIEW_DEL = "${ACTION_PREFIX}_history_to_view_del"

val LOGIN_ACTION_CARD = MediaCard(
id = ACTION_QRCODE_LOGIN,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ import com.muedsa.tvbox.bilibili.helper.BiliApiHelper
import com.muedsa.tvbox.bilibili.helper.BiliCookieHelper
import com.muedsa.tvbox.bilibili.helper.WBIHelper.decodeURIComponent
import com.muedsa.tvbox.bilibili.model.BiliVideoDetailUrlAttrs
import com.muedsa.tvbox.bilibili.model.CoinAddParams
import com.muedsa.tvbox.bilibili.model.HistoryToViewModifyParams
import com.muedsa.tvbox.bilibili.model.UserRelationModifyParams
import com.muedsa.tvbox.bilibili.model.VideoHeartbeatInfo
import com.muedsa.tvbox.bilibili.model.bilibili.BiliResp
Expand Down Expand Up @@ -192,24 +194,36 @@ class MediaDetailService(
index = if (isNotEmpty()) 1 else 0,
listOf(
MediaEpisode(
id = "$EPISODE_ID_COIN_ADD_PREFIX${info.bvid}",
id = ActionDelegate.ACTION_COIN_ADD,
name = "投币+2 & 点赞",
flag1 = 2,
flag3 = info.aid,
flag5 = referer,
flag5 = LenientJson.encodeToString(
CoinAddParams(
aid = info.aid,
multiply = 2,
referer = referer,
)
),
),
MediaEpisode(
id = "$EPISODE_ID_COIN_ADD_PREFIX${info.bvid}",
id = ActionDelegate.ACTION_COIN_ADD,
name = "投币+1 & 点赞",
flag1 = 1,
flag3 = info.aid,
flag5 = referer,
flag5 = LenientJson.encodeToString(
CoinAddParams(
aid = info.aid,
multiply = 1,
referer = referer,
)
),
),
MediaEpisode(
id = if (attrs.historyToView) "$HISTORY_TO_VIEW_DEL_PREFIX${info.bvid}" else "$HISTORY_TO_VIEW_ADD_PREFIX${info.bvid}",
id = if (attrs.historyToView) ActionDelegate.ACTION_HISTORY_TO_VIEW_DEL else ActionDelegate.ACTION_HISTORY_TO_VIEW_ADD,
name = if (attrs.historyToView) "从稍后再看中移除" else "添加至稍后再看",
flag3 = info.aid,
flag5 = info.bvid,
flag5 = LenientJson.encodeToString(
HistoryToViewModifyParams(
bvid = info.bvid,
aid = info.aid,
)
),
),
)
)
Expand Down Expand Up @@ -590,12 +604,6 @@ class MediaDetailService(
return getVideoEpisodePlayInfo(episode = episode)
} else if (episode.id.startsWith(MEDIA_ID_LIVE_ROOM_PREFIX)) {
return getLiveEpisodePlayInfo(episode = episode)
} else if (episode.id.startsWith(EPISODE_ID_COIN_ADD_PREFIX)) {
return coinAdd(episode = episode)
} else if (episode.id.startsWith(HISTORY_TO_VIEW_ADD_PREFIX)) {
return historyToViewAdd(episode = episode)
} else if (episode.id.startsWith(HISTORY_TO_VIEW_DEL_PREFIX)) {
return historyToViewDel(episode = episode)
} else {
TODO("暂不支持的类型 ${episode.id}")
}
Expand Down Expand Up @@ -670,44 +678,6 @@ class MediaDetailService(
return MediaHttpSource(url = url)
}

private suspend fun coinAdd(episode: MediaEpisode): MediaHttpSource {
val resp = apiService.coinAdd(
aid = episode.flag3 ?: throw RuntimeException("aid为空"),
multiply = episode.flag1 ?: 1,
referer = episode.flag5 ?: BilibiliConst.MAIN_SITE_URL,
csrf = BiliCookieHelper.getCookeValue(
cookieSaver = cookieSaver,
cookieName = BiliCookieHelper.COOKIE_B_JCT
) ?: throw RuntimeException("未登录")
)
val message = if (resp.code != 0L) resp.message else "投币成功"
throw RuntimeException(message)
}

private suspend fun historyToViewAdd(episode: MediaEpisode): MediaHttpSource {
val resp = apiService.historyToViewAdd(
aid = episode.flag3 ?: throw RuntimeException("aid为空"),
csrf = BiliCookieHelper.getCookeValue(
cookieSaver = cookieSaver,
cookieName = BiliCookieHelper.COOKIE_B_JCT
) ?: throw RuntimeException("未登录")
)
val message = if (resp.code != 0L) resp.message else "添加成功"
throw RuntimeException(message)
}

private suspend fun historyToViewDel(episode: MediaEpisode): MediaHttpSource {
val resp = apiService.historyToViewDel(
bvids = episode.flag5 ?: throw RuntimeException("bvid为空"),
csrf = BiliCookieHelper.getCookeValue(
cookieSaver = cookieSaver,
cookieName = BiliCookieHelper.COOKIE_B_JCT
) ?: throw RuntimeException("未登录")
)
val message = if (resp.code != 0L) resp.message else "移除成功"
throw RuntimeException(message)
}

override suspend fun getEpisodeDanmakuDataList(episode: MediaEpisode): List<DanmakuData> {
return if (
episode.id.startsWith(MEDIA_ID_BV_PREFIX)
Expand Down Expand Up @@ -789,9 +759,6 @@ class MediaDetailService(
const val MEDIA_ID_BV_PREFIX = "BV"
const val MEDIA_ID_LIVE_ROOM_PREFIX = "LIVE_ROOM:"
const val MEDIA_ID_USER_SPACE_PREFIX = "USER_SPACE:"
const val EPISODE_ID_COIN_ADD_PREFIX = "COIN_ADD:"
const val HISTORY_TO_VIEW_ADD_PREFIX = "HISTORY_TO_VIEW_ADD:"
const val HISTORY_TO_VIEW_DEL_PREFIX = "HISTORY_TO_VIEW_DEL:"
val V_VOUCHER_MEDIA_EPISODE_LIST = listOf(
MediaEpisode(
id = " MEDIA_EPISODE_V_VOUCHER",
Expand Down

0 comments on commit 0dcc04a

Please sign in to comment.