From 8a021e7d5431e4357a4491064a8ae3f84dcefbf3 Mon Sep 17 00:00:00 2001
From: SkyD666
Date: Mon, 2 Dec 2024 20:50:01 +0800
Subject: [PATCH] [optimize|build|doc] Optimize podcast icon extraction logic;
update dependencies; update README
---
README.md | 3 +-
app/build.gradle.kts | 2 +-
.../skyd/anivu/model/repository/RssHelper.kt | 39 ++++++++++++++-----
doc/readme/README-zh-rCN.md | 3 +-
gradle/libs.versions.toml | 2 +-
5 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/README.md b/README.md
index 8675fbca..452cbb48 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@
- An all-in-one tool for RSS subscription and updates, bit torrent downloads, and video playback.
+ An all-in-one Podcast tool for RSS subscription and updates, media downloads and playback.
AniVu utilizes the MVI architecture and fully adopts the Material You design style. All pages are developed using Jetpack Compose.
@@ -41,7 +41,6 @@
-
## 💡 Features
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 75095a94..6c13db7a 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -22,7 +22,7 @@ android {
minSdk = 24
targetSdk = 35
versionCode = 24
- versionName = "2.1-beta11"
+ versionName = "2.1-beta12"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/java/com/skyd/anivu/model/repository/RssHelper.kt b/app/src/main/java/com/skyd/anivu/model/repository/RssHelper.kt
index dc153a9d..03c6499e 100644
--- a/app/src/main/java/com/skyd/anivu/model/repository/RssHelper.kt
+++ b/app/src/main/java/com/skyd/anivu/model/repository/RssHelper.kt
@@ -1,20 +1,23 @@
package com.skyd.anivu.model.repository
import android.util.Log
-import com.rometools.modules.itunes.EntryInformationImpl
-import com.rometools.modules.mediarss.MediaEntryModuleImpl
+import com.rometools.modules.itunes.EntryInformation
+import com.rometools.modules.itunes.FeedInformation
+import com.rometools.modules.mediarss.MediaEntryModule
+import com.rometools.modules.mediarss.MediaModule
import com.rometools.modules.mediarss.types.Rating
import com.rometools.rome.feed.module.Module
import com.rometools.rome.feed.synd.SyndEntry
+import com.rometools.rome.feed.synd.SyndFeed
import com.rometools.rome.io.SyndFeedInput
import com.rometools.rome.io.XmlReader
import com.skyd.anivu.ext.toEncodedUrl
-import com.skyd.anivu.model.bean.feed.FeedBean
-import com.skyd.anivu.model.bean.feed.FeedWithArticleBean
import com.skyd.anivu.model.bean.article.ArticleBean
import com.skyd.anivu.model.bean.article.ArticleWithEnclosureBean
import com.skyd.anivu.model.bean.article.EnclosureBean
import com.skyd.anivu.model.bean.article.RssMediaBean
+import com.skyd.anivu.model.bean.feed.FeedBean
+import com.skyd.anivu.model.bean.feed.FeedWithArticleBean
import com.skyd.anivu.util.favicon.FaviconExtractor
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
@@ -45,7 +48,9 @@ class RssHelper @Inject constructor(
title = syndFeed.title,
description = syndFeed.description,
link = syndFeed.link,
- icon = syndFeed.icon?.link ?: iconAsync.await(),
+ icon = getMediaRssIcon(syndFeed)
+ ?: syndFeed.icon?.link
+ ?: iconAsync.await(),
)
val list = syndFeed.entries.map { article(feed, it) }
FeedWithArticleBean(feed, list)
@@ -75,7 +80,9 @@ class RssHelper @Inject constructor(
title = syndFeed.title,
description = syndFeed.description,
link = syndFeed.link,
- icon = syndFeed.icon?.link ?: iconAsync.await(),
+ icon = getMediaRssIcon(syndFeed)
+ ?: syndFeed.icon?.link
+ ?: iconAsync.await(),
),
articles = syndFeed.entries
.asSequence()
@@ -151,7 +158,7 @@ class RssHelper @Inject constructor(
private fun getRssMedia(articleId: String, modules: List): RssMediaBean? {
modules.forEach { module ->
val media = when (module) {
- is EntryInformationImpl -> {
+ is EntryInformation -> {
RssMediaBean(
articleId = articleId,
duration = module.duration?.milliseconds,
@@ -161,7 +168,7 @@ class RssHelper @Inject constructor(
)
}
- is MediaEntryModuleImpl -> {
+ is MediaEntryModule -> {
val content = module.mediaContents.firstOrNull()
RssMediaBean(
articleId = articleId,
@@ -179,7 +186,21 @@ class RssHelper @Inject constructor(
return null
}
- fun getRssIcon(url: String): String? {
+ private fun getMediaRssIcon(syndFeed: SyndFeed): String? {
+ var icon: String?
+ syndFeed.modules.forEach { module ->
+ icon = when (module) {
+ is FeedInformation -> module.image?.toString()
+ is MediaModule -> module.metadata?.thumbnail?.firstOrNull()?.url?.toString()
+
+ else -> null
+ }
+ if (icon != null) return icon
+ }
+ return null
+ }
+
+ private fun getRssIcon(url: String): String? {
return runCatching {
faviconExtractor.extractFavicon(url).apply { Log.e("TAG", "getRssIcon: $this") }
}.onFailure { it.printStackTrace() }.getOrNull()
diff --git a/doc/readme/README-zh-rCN.md b/doc/readme/README-zh-rCN.md
index 31e90681..3b0e7d19 100644
--- a/doc/readme/README-zh-rCN.md
+++ b/doc/readme/README-zh-rCN.md
@@ -25,7 +25,7 @@
- AniVu,一个集 RSS 订阅与更新、比特洪流下载、视频播放为一体的工具。
+ AniVu,一个集 RSS 订阅与更新、媒体下载与播放为一体的播客工具。
使用 MVI 架构,完全采用 Material You 设计风格。使用 Jetpack Compose 开发。
@@ -35,6 +35,7 @@
+
## 💡主要功能
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 05853426..8244a3e8 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,6 +1,6 @@
[versions]
adaptive = "1.0.0"
-coil = "3.0.3"
+coil = "3.0.4"
hilt = "2.52"
libtorrent4j = "2.1.0-35"
composeMaterial = "1.7.5"