in app/controllers/LightboxController.scala [235:265]
def checkRestoreStatus(user:String, fileId:String) = IsAuthenticatedAsync { claims=> request=>
implicit val timeout:akka.util.Timeout = 60 seconds
withTargetUserProfile(request, user) { userProfile=>
lightboxEntryDAO.get(userProfile.userEmail, fileId).flatMap({
case None=>
Future(NotFound(GenericErrorResponse("not_found","This item is not in your lightbox").asJson))
case Some(Left(err))=>
Future(InternalServerError(GenericErrorResponse("db_error", err.toString).asJson))
case Some(Right(lbEntry))=>
val response = (glacierRestoreActor ? GlacierRestoreActor.CheckRestoreStatus(lbEntry)).mapTo[GlacierRestoreActor.GRMsg]
response.map({
case GlacierRestoreActor.ItemLost(_)=>
NotFound(GenericErrorResponse("not_found","Item must have gone away").asJson)
case GlacierRestoreActor.NotInArchive(entry)=>
Ok(RestoreStatusResponse("ok",entry.id, RestoreStatus.RS_UNNEEDED, None, None).asJson)
case GlacierRestoreActor.RestoreCompleted(entry, expiry)=>
Ok(RestoreStatusResponse("ok", entry.id, RestoreStatus.RS_SUCCESS, Some(expiry), None).asJson)
case GlacierRestoreActor.RestoreInProgress(entry)=>
Ok(RestoreStatusResponse("ok", entry.id, RestoreStatus.RS_UNDERWAY, None, None).asJson)
case GlacierRestoreActor.RestoreNotRequested(entry)=>
val restoreStatus = if(entry.storageClass==StorageClass.GLACIER) {
RestoreStatus.RS_EXPIRED
} else {
RestoreStatus.RS_UNNEEDED
}
Ok(RestoreStatusResponse("not_requested", entry.id, restoreStatus, None, None).asJson)
})
})
}
}