backend/app/commands/GetPagePreview.scala (19 lines of code) (raw):
package commands
import org.apache.pekko.stream.scaladsl.StreamConverters
import model.{Language, Uri}
import play.api.http.HttpEntity
import services.ObjectStorage
import services.previewing.PreviewService
import utils.attempt.Attempt
import scala.concurrent.ExecutionContext
class GetPagePreview(uri: Uri, language: Language, pageNumber: Int,
previewStorage: ObjectStorage)(implicit ec: ExecutionContext) extends AttemptCommand[HttpEntity] {
override def process(): Attempt[HttpEntity] = {
val previewUri = PreviewService.getPageStoragePath(uri, language, pageNumber)
for {
pageData <- previewStorage.get(previewUri).toAttempt
} yield {
// StreamConverters.fromInputStream will close the stream for us once it's done
HttpEntity.Streamed(StreamConverters.fromInputStream(() => pageData), None, Some("application/pdf"))
}
}
}