private def getSourceFuture()

in app/controllers/Application.scala [204:232]


  private def getSourceFuture(locator:OMLocator, objectEntryFut:Future[Either[Result, ObjectMatrixEntry]], rangesOrFailureFut:Future[Seq[RangeHeader]], uid:String) = {
    Future.sequence(Seq(objectEntryFut,rangesOrFailureFut)).map(results=>{
      val ranges = results(1).asInstanceOf[Seq[RangeHeader]]

      results.head.asInstanceOf[Either[Result,ObjectMatrixEntry]] match {
        case Right(omEntry)=>
          withUserInfo(locator) { userInfo =>
            val responseSize = if (ranges.nonEmpty) {
              Some(ranges.foldLeft(0L)((acc, range) => acc + (range.end.getOrElse(omEntry.fileAttribues.get.size) - range.start.getOrElse(0L))))
            } else {
              omEntry.fileAttribues.map(_.size)
            }

            //log that we are starting a streamout
            val auditFile = AuditFile(omEntry.oid, locator.filePath)
            auditActor ! actors.Audit.LogEvent(AuditEvent.STREAMOUT, uid, Some(auditFile), ranges)

            getStreamingSource(ranges, userInfo, omEntry, auditFile, uid) match {
              case Success(partialGraph) =>
                Right((Source.fromGraph(partialGraph), responseSize, headersForEntry(omEntry, ranges, responseSize), getMaybeMimetype(omEntry), ranges.nonEmpty))
              case Failure(err) => //if we did not get a source, log that
                auditActor ! actors.Audit.LogEvent(AuditEvent.OMERROR, uid, Some(auditFile), ranges, notes = Some(err.getMessage))
                logger.error(s"Could not set up streaming source: ", err)
                Left(InternalServerError(s"Could not set up streaming source, see logs for more details"))
            }
          }
        case Left(err)=> Left(err)
      }})
  }