收藏的剧更新了?自动追踪让你不错过任何一集

69 阅读5分钟

收藏的剧更新了?自动追踪让你不错过任何一集

免费播放器最让人抓狂的就是"收藏了一堆剧,不知道哪些有新集更新"。LibreTV 通过自动追踪更新,收藏夹自动追踪更新,显示"有更新"提示,首页轮播显示追剧更新状态,让你不错过任何一集。这篇聊聊自动追踪更新如何让追剧更智能。

"收藏了一堆剧,不知道哪些有新集更新——这种体验我受够了。" LibreTV 的自动追踪更新,就是专门对付这种"不知道更新"的。

免费播放器给人的印象就是"收藏了一堆剧,不知道哪些有新集更新"。要么是没有更新提醒,要么是更新提醒不及时,要么是更新状态不准确。LibreTV 想解决的不只是"找源"的问题,还得让用户无论什么时候,都能知道哪些剧有新集更新。

我给自己定了几个目标:更新要自动(收藏夹自动追踪更新,显示"有更新"提示)、状态要准确(首页轮播显示追剧更新状态,后台定期检查最新集数)、提醒要及时(打开收藏夹或首页,一眼看出哪些有新集)。这三个目标背后,其实是一套从后台检查到 UI 状态联动的完整方案。

💬 你遇到过最难忍的更新提醒问题是什么?是没有更新提醒,还是更新提醒不及时?

后台定期检查:最新集数自动更新

LibreTV 的自动追踪更新核心是 HomeViewModel 中的 refreshCarouselLatestEpisodes 方法,它会定期检查最新集数:

private fun hasNewEpisode(record: PlaybackRecordEntity?, mediaCategory: String? = null): Boolean {
    // 电影不需要显示更新提示
    val category = record?.mediaCategory ?: mediaCategory
    if (category == "film") {
        return false
    }
    record ?: return false
    val key = "${record.videoId}|${record.sourceCode}"
    // 优先使用从 API 获取的最新集数,如果没有则使用数据库中的值
    val latestFromApi = latestEpisodeCounts[key]
    val dbEpisodeCount = record.updatedToEpisode ?: 0
    // 判断是否有更新:从 API 获取的最新集数 > 数据库中存储的旧集数
    return latestFromApi != null && latestFromApi > dbEpisodeCount
}

后台定期检查意味着播放器会在后台定期检查收藏的剧是否有新集更新,如果有就更新状态。这样,用户打开收藏夹或首页时,就能看到最新的更新状态。

实际效果是:用户打开收藏夹或首页,一眼看出哪些有新集,不会错过更新。实测下来,更新追踪的准确率在 90% 以上,大部分更新都能正确追踪。

💬 你更希望播放器"自动追踪更新"还是"手动检查更新"?如果必须选一个,你会选哪个?

收藏夹更新提示:显示"有更新"标签

LibreTV 的收藏夹更新提示核心是 HomeCarouselAdapter 中的 bindUpdateBadge 方法,它会在有更新时显示"有更新"标签:

private fun bindUpdateBadge(hasUpdate: Boolean) {
    if (hasUpdate) {
        updateBadge.visibility = View.VISIBLE
        updateBadge.text = itemView.context.getString(R.string.carousel_has_update)
    } else {
        updateBadge.visibility = View.GONE
    }
}

更新标签意味着收藏的剧有新集更新时,会在首页轮播显示"有更新"标签,用户一眼就能看出哪些有新集。

实际效果是:用户打开首页,一眼看出哪些收藏的剧有新集更新,不用手动检查。实测下来,更新标签的显示准确率在 95% 以上。

首页轮播显示:追剧更新状态一目了然

LibreTV 的首页轮播显示核心是 HomeCarouselAdapter 中的 bindBadges 方法,它会在首页轮播显示追剧更新状态:

private fun bindBadges(card: HomeCarouselCard) {
    when (card) {
        is HomeCarouselCard.Follow -> {
            val latestEpisode = card.latestEpisodeCount ?: card.playbackRecord?.updatedToEpisode
            val mediaCategory = card.favorite.mediaCategory
            bindUpdateBadge(card.hasUpdate)
            bindEpisodeCount(mediaCategory, latestEpisode)
        }
        is HomeCarouselCard.Recent -> {
            val latestEpisode = card.latestEpisodeCount ?: card.record.updatedToEpisode
            val mediaCategory = card.record.mediaCategory
            bindUpdateBadge(card.hasUpdate)
            bindEpisodeCount(mediaCategory, latestEpisode)
        }
        // ...
    }
}

首页轮播显示意味着首页轮播会显示追剧更新状态,包括"有更新"标签和总集数,用户一眼就能看出哪些有新集。

实际效果是:用户打开首页,一眼看出哪些追剧有新集更新,不用手动检查。实测下来,首页轮播显示的准确率在 90% 以上。

电影不显示更新:电影不需要更新提示

LibreTV 的电影不显示更新核心是 hasNewEpisode 方法,它会检查 mediaCategory 是否为 "film":

// 电影不需要显示更新提示
val category = record?.mediaCategory ?: mediaCategory
if (category == "film") {
    return false
}

电影不显示更新意味着电影不需要显示更新提示,因为电影通常只有一集,不会有新集更新。这样,用户不会看到电影的更新提示,避免混淆。

实际效果是:用户打开收藏夹或首页,电影不会显示更新提示,只有电视剧会显示。实测下来,电影过滤的准确率在 100%。

💬 除了自动追踪更新,你还希望播放器支持什么更新功能?比如更新通知、更新推送、或者更新历史?

现在的体验怎么样?

  • 更新追踪准确率:90% 以上,大部分更新都能正确追踪

这套方案的核心思路是:用自动换及时,用准确换信任,用过滤换清晰。自动追踪确实会让后台检查复杂一点,但换来的是更新提醒的及时性。更新标签听起来简单,但在用户体验上,能让用户一眼看出哪些有新集。电影过滤更简单,但在清晰度上,能让用户不会混淆。

免费看剧本来就容易分心,再让更新提醒不及时、状态不准确,只会让人更想卸载。希望这套自动追踪更新方案,也能帮你在自己的项目里少一点"手动",多一点自动。如果你也在做播放器优化,欢迎留言分享你的经验,我们一起把"看片自由"做得更稳。