diff --git a/app/src/main/java/com/futo/platformplayer/api/media/models/PlatformAuthorLink.kt b/app/src/main/java/com/futo/platformplayer/api/media/models/PlatformAuthorLink.kt index 0fe2d55be8557877230e568ead337dc8f0a64145..e0acb91e7a03d5d3b31e9c4176d36ea4cf6a9ba1 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/models/PlatformAuthorLink.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/models/PlatformAuthorLink.kt @@ -27,6 +27,8 @@ open class PlatformAuthorLink { } companion object { + val UNKNOWN = PlatformAuthorLink(PlatformID.NONE, "Unknown", "", null, null); + fun fromV8(config: SourcePluginConfig, value: V8ValueObject): PlatformAuthorLink { if(value.has("membershipUrl")) return PlatformAuthorMembershipLink.fromV8(config, value); diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSContent.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSContent.kt index b3dd9dd52aaa257144c1a882443be92740270b0f..ab3b6f106b8ffd0fb3599f40783ff196c85724e2 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSContent.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSContent.kt @@ -42,7 +42,12 @@ open class JSContent : IPlatformContent, IPluginSourced { id = PlatformID.fromV8(_pluginConfig, _content.getOrThrow(config, "id", contextName)); name = HtmlCompat.fromHtml(_content.getOrThrow<String>(config, "name", contextName).decodeUnicode(), HtmlCompat.FROM_HTML_MODE_LEGACY).toString(); - author = PlatformAuthorLink.fromV8(_pluginConfig, _content.getOrThrow(config, "author", contextName)); + + val authorObj = _content.getOrDefault<V8ValueObject>(config, "author", contextName, null); + if(authorObj != null) + author = PlatformAuthorLink.fromV8(_pluginConfig, authorObj); + else + author = PlatformAuthorLink.UNKNOWN; val datetimeInt = _content.getOrThrow<Int>(config, "datetime", contextName).toLong(); if(datetimeInt == 0.toLong()) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SuggestionsFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SuggestionsFragment.kt index 2f7254dc9e072c51b008dddceb54967698d8b342..95055d0a1c93170c2ff8c7ff9c465e26d2fae400 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SuggestionsFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SuggestionsFragment.kt @@ -117,8 +117,14 @@ class SuggestionsFragment : MainFragment { } else if (_searchType == SearchType.PLAYLIST) { navigate<PlaylistSearchResultsFragment>(it); } else { - if(it.isHttpUrl()) - navigate<VideoDetailFragment>(it); + if(it.isHttpUrl()) { + if(StatePlatform.instance.hasEnabledPlaylistClient(it)) + navigate<RemotePlaylistFragment>(it); + else if(StatePlatform.instance.hasEnabledChannelClient(it)) + navigate<ChannelFragment>(it); + else + navigate<VideoDetailFragment>(it); + } else navigate<ContentSearchResultsFragment>(SuggestionsFragmentData(it, SearchType.VIDEO, _channelUrl)); } diff --git a/app/src/main/java/com/futo/platformplayer/states/StateCache.kt b/app/src/main/java/com/futo/platformplayer/states/StateCache.kt index b922d756b069ab3a6ca5b52489df05021b9af1c2..7d91c9ceafea1937845b025dd2a131c4e82c63f0 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StateCache.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StateCache.kt @@ -64,8 +64,20 @@ class StateCache { Logger.i(TAG, "Subscriptions CachePager get pagers"); val pagers: List<IPager<IPlatformContent>>; + val splitAmount = 900; val timeCacheRetrieving = measureTimeMillis { - pagers = listOf(getAllChannelCachePager(allUrls)); + if(allUrls.size > splitAmount) { + var done = 0; + var subsetPagers = mutableListOf<IPager<IPlatformContent>>(); + while(done < allUrls.size) { + val subsetUrls = allUrls.subList(done, Math.min(allUrls.size - 1, done + splitAmount)); + subsetPagers.add(getAllChannelCachePager(subsetUrls)); + done += splitAmount; + } + pagers = subsetPagers; + } + else + pagers = listOf(getAllChannelCachePager(allUrls)); } Logger.i(TAG, "Subscriptions CachePager compiling (retrieved in ${timeCacheRetrieving}ms)"); diff --git a/app/src/main/java/com/futo/platformplayer/stores/db/ManagedDBStore.kt b/app/src/main/java/com/futo/platformplayer/stores/db/ManagedDBStore.kt index a07b4f5b7e4b7bfc4683cd55cef278df5bce9809..2e493eef2d164215a91cb2e358f9eb87728f1638 100644 --- a/app/src/main/java/com/futo/platformplayer/stores/db/ManagedDBStore.kt +++ b/app/src/main/java/com/futo/platformplayer/stores/db/ManagedDBStore.kt @@ -12,10 +12,10 @@ import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.stores.v2.JsonStoreSerializer import com.futo.platformplayer.stores.v2.StoreSerializer import kotlinx.serialization.KSerializer -import java.lang.IllegalArgumentException import java.lang.reflect.Field import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentMap +import kotlin.IllegalArgumentException import kotlin.reflect.KClass import kotlin.reflect.KProperty import kotlin.reflect.KType @@ -318,8 +318,12 @@ class ManagedDBStore<I: ManagedDBIndex<T>, T, D: ManagedDBDatabase<T, I, DA>, DA }); } + private val inLimit = 990; fun <X> queryInPager(field: KProperty<*>, obj: List<String>, pageSize: Int, convert: (I)->X): IPager<X> = queryInPager(validateFieldName(field), obj, pageSize, convert); fun <X> queryInPager(field: String, obj: List<String>, pageSize: Int, convert: (I)->X): IPager<X> { + if(obj.size > inLimit) { + throw IllegalArgumentException("Too many objects requested (IN query), create subqueries of ${inLimit}"); + } return AdhocPager({ queryInPage(field, obj, it - 1, pageSize).map(convert); }); diff --git a/app/src/stable/assets/sources/youtube b/app/src/stable/assets/sources/youtube index a4766ec223e4711dc2870060c1dce24d64470938..0c11c566918647fb6d3d010deeeb8312c94d3437 160000 --- a/app/src/stable/assets/sources/youtube +++ b/app/src/stable/assets/sources/youtube @@ -1 +1 @@ -Subproject commit a4766ec223e4711dc2870060c1dce24d64470938 +Subproject commit 0c11c566918647fb6d3d010deeeb8312c94d3437 diff --git a/app/src/unstable/assets/sources/youtube b/app/src/unstable/assets/sources/youtube index a4766ec223e4711dc2870060c1dce24d64470938..0c11c566918647fb6d3d010deeeb8312c94d3437 160000 --- a/app/src/unstable/assets/sources/youtube +++ b/app/src/unstable/assets/sources/youtube @@ -1 +1 @@ -Subproject commit a4766ec223e4711dc2870060c1dce24d64470938 +Subproject commit 0c11c566918647fb6d3d010deeeb8312c94d3437