reactormonk
07/24/2023, 2:20 PMfun RssNewsCompose(dao: RssFeedDao, url: HttpUrl, exoPlayerBuilder: (Context) -> ExoPlayer) {
val TAG = "RssNewsActivity"
var videos: List<RssFeedVideo> by remember { mutableStateOf(listOf()) }
var position: RssFeedPosition? by remember { mutableStateOf(null) }
suspend fun reloadData() {
Log.d(TAG, "Old Videos: $videos")
videos = dao.getNewestVideosFirst(url)
Log.d(TAG, "New Videos: $videos")
Log.d(TAG, "Old Position: $position")
position = dao.getPosition(url)
Log.d(TAG, "New Position: $position")
}
AutoPlayPlaylist(videos, position, dao = dao, exoPlayerBuilder = exoPlayerBuilder)
LaunchedEffect(false) {
reloadData()
val feedData = getNewestFeed(url).sortedByDescending { it.pubDate }
if (videos.firstOrNull() != feedData.firstOrNull()) {
Log.d(TAG, "Got data: $feedData")
dao.insertAll(*feedData.toTypedArray())
dao.deletePosition(url)
reloadData()
}
}
}
@Composable
@androidx.annotation.OptIn(androidx.media3.common.util.UnstableApi::class)
fun AutoPlayPlaylist(videos: List<RssFeedVideo>, feedPosition: RssFeedPosition?, dao: RssFeedDao, exoPlayerBuilder: (Context) -> ExoPlayer) {
val TAG = "AutoPlayPlaylist"
Log.d(TAG, "Entering AutoPlay")
val context = LocalContext.current
val lifecycleOwner = LocalLifecycleOwner.current
val scope = rememberCoroutineScope()
var done by remember { mutableStateOf(false) }
Log.d(TAG, "Entering Continuing AutoPlay")
[...]
}
Logs:
D/RssNewsActivity: Old Position: null
D/RssNewsActivity: New Position: null
Not Playing...
D/RssNewsActivity: Got data: [RssFeedVideo(guid=Guid(value=o49CXJlJ3bz9Vahmwvu1nnxqlWHw1YeChyiypZKtrAM=, isPermaLink=false), feedUrl=<http://localhost:10023/short.rss>, title=Feind im Kopf (2), category=Category(name=Der Bergdoktor, domain=null), videoUrl=<http://localhost:10023/zero-waste.webm>, pubDate=2023-04-22T17:25:00Z)]
D/RssNewsActivity: Old Videos: []
D/RssNewsActivity: New Videos: [RssFeedVideo(guid=Guid(value=o49CXJlJ3bz9Vahmwvu1nnxqlWHw1YeChyiypZKtrAM=, isPermaLink=false), feedUrl=<http://localhost:10023/short.rss>, title=Feind im Kopf (2), category=Category(name=Der Bergdoktor, domain=null), videoUrl=<http://localhost:10023/zero-waste.webm>, pubDate=2023-04-22T17:25:00Z)]
D/RssNewsActivity: Old Position: null
D/RssNewsActivity: New Position: null
But the logs inside AutoPlayPlaylist
aren't getting hit.
robolectric compose context.reactormonk
07/24/2023, 3:43 PMproduceState
, let's see...reactormonk
07/24/2023, 4:05 PMfun RssNewsCompose(dao: RssFeedDao, url: HttpUrl, exoPlayerBuilder: (Context) -> ExoPlayer) {
val TAG = "RssNewsActivity"
Log.d(TAG, "Recomposing")
val videosAndPosition = produceState(VideosAndPosition(listOf(), null), url) {
Log.d(TAG, "Fetching state")
val initialVideos = dao.getNewestVideosFirst(url)
val initialPosition = dao.getPosition(url)
value = VideosAndPosition(initialVideos, initialPosition)
Log.d(TAG, "Set first value: $value")
val feedData = getNewestFeed(url)
Log.d(TAG, "new feed data: $feedData")
dao.insertAll(*feedData.toTypedArray())
dao.deletePosition(url)
Log.d(TAG, "Set data")
val videos = dao.getNewestVideosFirst(url)
val position = dao.getPosition(url)
value = VideosAndPosition(videos, position)
Log.d(TAG, "Set second value: $value")
}
AutoPlayPlaylist(videosAndPosition, dao = dao, exoPlayerBuilder = exoPlayerBuilder)
}
reactormonk
07/24/2023, 4:36 PMfun RssNewsCompose(dao: RssFeedDao, url: HttpUrl, exoPlayerBuilder: (Context) -> ExoPlayer) {
val TAG = "RssNewsActivity"
Log.d(TAG, "Recomposing")
val videosAndPosition by produceState(VideosAndPosition(listOf(), null), url) {
Log.d(TAG, "Fetching state")
val initialVideos = dao.getNewestVideosFirst(url)
val initialPosition = dao.getPosition(url)
value = VideosAndPosition(initialVideos, initialPosition)
Log.d(TAG, "Set first value: $value")
val feedData = getNewestFeed(url)
Log.d(TAG, "new feed data: $feedData")
dao.insertAll(*feedData.toTypedArray())
dao.deletePosition(url)
Log.d(TAG, "Set data")
val videos = dao.getNewestVideosFirst(url)
val position = dao.getPosition(url)
value = VideosAndPosition(videos, position)
Log.d(TAG, "Set second value: $value")
}
Log.d(TAG, "Current value: $videosAndPosition")
AutoPlayPlaylist(videosAndPosition, dao = dao, exoPlayerBuilder = exoPlayerBuilder)
}
Shouldn't the Log.d statement appear at least twice?