package org.schabi.newpipe.local.feed.service import org.schabi.newpipe.database.subscription.NotificationMode import org.schabi.newpipe.database.subscription.SubscriptionEntity import org.schabi.newpipe.extractor.Info import org.schabi.newpipe.extractor.channel.ChannelInfo import org.schabi.newpipe.extractor.stream.StreamInfoItem import org.schabi.newpipe.util.image.ImageStrategy /** * Instances of this class might stay around in memory for some time while fetching the feed, * because of [FeedLoadManager.BUFFER_COUNT_BEFORE_INSERT]. Therefore this class should contain * as little data as possible to avoid out of memory errors. In particular, avoid storing whole * [ChannelInfo] objects, as they might contain raw JSON info in ready channel tabs link handlers. */ data class FeedUpdateInfo( val uid: Long, @NotificationMode val notificationMode: Int, val name: String, val avatarUrl: String, val url: String, val serviceId: Int, // description and subscriberCount are null if the constructor info is from the fast feed method val description: String?, val subscriberCount: Long?, val streams: List, val errors: List, ) { constructor( subscription: SubscriptionEntity, info: Info, streams: List, errors: List, ) : this( uid = subscription.uid, notificationMode = subscription.notificationMode, name = info.name, avatarUrl = (info as? ChannelInfo)?.avatars?.let { // if the newly fetched info is not from fast feed, then it contains updated avatars ImageStrategy.imageListToDbUrl(it) } ?: subscription.avatarUrl, url = info.url, serviceId = info.serviceId, // there is no description and subscriberCount in the fast feed description = (info as? ChannelInfo)?.description, subscriberCount = (info as? ChannelInfo)?.subscriberCount, streams = streams, errors = errors, ) /** * Integer id, can be used as notification id, etc. */ val pseudoId: Int get() = url.hashCode() lateinit var newStreams: List }