Open Him188 opened 3 days ago
看了下, 数据层没有, 还需要 graphql 批量复查别名, 比较麻烦
Subject: [PATCH] p
---
Index: app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorFactory.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorFactory.kt b/app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorFactory.kt
--- a/app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorFactory.kt (revision 33eec9b0a9a86c3673bfab56a686152d9fb35b8d)
+++ b/app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorFactory.kt (date 1727205589136)
@@ -51,6 +51,7 @@
subjectManager.subjectCompletedFlow(subjectId),
mediaSourceManager.allInstances,
flowOf(subtitlePreferences),
+ subjectManager.relatedSubjectNamesFlow(subjectId)
),
mediaList,
savedUserPreference = episodePreferencesRepository.mediaPreferenceFlow(subjectId),
Index: app/shared/app-data/src/commonMain/kotlin/data/models/subject/SubjectManager.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/shared/app-data/src/commonMain/kotlin/data/models/subject/SubjectManager.kt b/app/shared/app-data/src/commonMain/kotlin/data/models/subject/SubjectManager.kt
--- a/app/shared/app-data/src/commonMain/kotlin/data/models/subject/SubjectManager.kt (revision 33eec9b0a9a86c3673bfab56a686152d9fb35b8d)
+++ b/app/shared/app-data/src/commonMain/kotlin/data/models/subject/SubjectManager.kt (date 1727205605809)
@@ -136,6 +136,8 @@
return subjectId.mapLatest { getSubjectInfo(it) }
}
+ abstract fun relatedSubjectNamesFlow(subjectId: Int): Flow<Set<String>>
+
///////////////////////////////////////////////////////////////////////////
// Subject progress
///////////////////////////////////////////////////////////////////////////
@@ -388,6 +390,10 @@
.toSubjectInfo()
}
+ override fun relatedSubjectNamesFlow(subjectId: Int): Flow<Set<String>> {
+
+ }
+
override suspend fun getEpisodeInfo(episodeId: Int): EpisodeInfo {
collectionsByType.values.map { it.getCachedData() }.asSequence().flatten()
.flatMap { it.episodes }
Index: app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorContext.kt
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorContext.kt b/app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorContext.kt
--- a/app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorContext.kt (revision 33eec9b0a9a86c3673bfab56a686152d9fb35b8d)
+++ b/app/shared/app-data/src/commonMain/kotlin/data/source/media/selector/MediaSelectorContext.kt (date 1727205581802)
@@ -32,6 +32,11 @@
* 用于针对各个平台的播放器缺陷,调整选择资源的优先级
*/
val subtitlePreferences: MediaSelectorSubtitlePreferences?,
+ /**
+ * 续集条目的名称列表, 用于过滤掉包含这些名称的资源. 不能是前传的, 否则会造成 false positive
+ * @since 3.11
+ */ // #1009
+ val relatedSubjectNames: Set<String>?,
) {
fun allFieldsLoaded() = subjectFinished != null
&& mediaSourcePrecedence != null
@@ -41,9 +46,15 @@
/**
* 刚开始查询时的默认值
*/
- val Initial = MediaSelectorContext(null, null, null)
+ val Initial = MediaSelectorContext(null, null, null, null)
- val EmptyForPreview get() = MediaSelectorContext(false, emptyList(), MediaSelectorSubtitlePreferences.AllNormal)
+ val EmptyForPreview
+ get() = MediaSelectorContext(
+ false,
+ emptyList(),
+ MediaSelectorSubtitlePreferences.AllNormal,
+ emptySet(),
+ )
}
}
@@ -54,13 +65,15 @@
subjectCompleted: Flow<Boolean>,
mediaSourcePrecedence: Flow<List<String>>,
subtitleKindFilters: Flow<MediaSelectorSubtitlePreferences>,
+ relatedSubjectNames: Flow<Set<String>>,
): Flow<MediaSelectorContext> = combine(
- subjectCompleted, mediaSourcePrecedence, subtitleKindFilters,
-) { completed, instances, filters ->
+ subjectCompleted, mediaSourcePrecedence, subtitleKindFilters, relatedSubjectNames,
+) { completed, instances, filters, names ->
MediaSelectorContext(
subjectFinished = completed,
mediaSourcePrecedence = instances,
subtitlePreferences = filters,
+ relatedSubjectNames = names,
)
}.onStart {
emit(Initial) // 否则如果一直没获取到剧集信息, 就无法选集, #385
@@ -74,10 +87,12 @@
subjectCompleted: Flow<Boolean>,
mediaSourcePrecedence: Flow<List<MediaSourceInstance>>,
subtitleKindFilters: Flow<MediaSelectorSubtitlePreferences>,
+ relatedSubjectNames: Flow<Set<String>>,
): Flow<MediaSelectorContext> = createFlow(
subjectCompleted,
mediaSourcePrecedence.map { list ->
list.map { it.mediaSourceId }
},
subtitleKindFilters,
+ relatedSubjectNames,
)
partial implementation
可以高效处理看第一季时搜到第二季的问题
技术上可以实现到 MediaSelector 里