All Downloads are FREE. Search and download functionalities are using the official Maven repository.

im.actor.util.http.DownloadManager.scala Maven / Gradle / Ivy

There is a newer version: 3.0.0
Show newest version
package im.actor.util.http

import java.nio.file.{ Files, Path }

import akka.stream.scaladsl.FileIO

import scala.concurrent._

import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.model.HttpRequest
import akka.stream.Materializer

class DownloadManager(implicit system: ActorSystem, materializer: Materializer) {
  implicit val ec: ExecutionContext = system.dispatcher

  val http = Http()

  def download(url: String): Future[(Path, Long)] = {
    val tempFileFuture = createTempFile()
    val responseFuture = http.singleRequest(HttpRequest(uri = url))

    for {
      filePath ← tempFileFuture
      response ← responseFuture
      size ← response.entity.dataBytes.runWith(FileIO.toFile(filePath.toFile))
    } yield (filePath, size)
  }

  // FIXME: dispatcher for this
  private def createTempFile(): Future[Path] = {
    Future {
      blocking {
        Files.createTempFile("ActorDownloadManager", "")
      }
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy