Add filter that shortens a number of parts
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / template / LinkedImagesFilter.kt
1 package net.pterodactylus.sone.template
2
3 import net.pterodactylus.sone.core.ImageLoader
4 import net.pterodactylus.sone.core.LoadedImage
5 import net.pterodactylus.sone.text.FreenetLinkPart
6 import net.pterodactylus.sone.text.Part
7 import net.pterodactylus.util.template.Filter
8 import net.pterodactylus.util.template.TemplateContext
9
10 /**
11  * Filter that takes a number of pre-rendered [Part]s and replaces all identified links to freenet images
12  * with [LoadedImage]s.
13  */
14 class LinkedImagesFilter(private val imageLoader: ImageLoader) : Filter {
15
16         @Suppress("UNCHECKED_CAST")
17         override fun format(templateContext: TemplateContext?, data: Any?, parameters: MutableMap<String, Any?>?) =
18                         (data as? Iterable<Part>)
19                                         ?.filterIsInstance<FreenetLinkPart>()
20                                         ?.mapNotNull { imageLoader.toLoadedImage(it.link) }
21                                         ?: listOf<LoadedImage>()
22
23 }