From 38f480c7ed429f7a3773881b0f956bc6f0994e4b Mon Sep 17 00:00:00 2001 From: Antonio Salazar Cardozo Date: Fri, 9 May 2014 23:41:44 -0400 Subject: [PATCH] Replace S.addCometAtEnd with S.addComet. S.addComet takes a LiftCometActor instead of an Elem. It replaces the private trackComet that simply added an entry to S.requestCometVersions. Additionally, this makes server-side actors and roundtrip streaming promises work again. --- .../scala/net/liftweb/http/LiftMerge.scala | 6 ----- .../scala/net/liftweb/http/LiftSession.scala | 8 ++---- .../src/main/scala/net/liftweb/http/S.scala | 26 +++++++++---------- 3 files changed, 15 insertions(+), 25 deletions(-) diff --git a/web/webkit/src/main/scala/net/liftweb/http/LiftMerge.scala b/web/webkit/src/main/scala/net/liftweb/http/LiftMerge.scala index 07605e1af9..8945fe1546 100644 --- a/web/webkit/src/main/scala/net/liftweb/http/LiftMerge.scala +++ b/web/webkit/src/main/scala/net/liftweb/http/LiftMerge.scala @@ -196,12 +196,6 @@ private[http] trait LiftMerge { headChildren += nl } - for { - e <- S.cometAtEnd() - } { - _fixHtml(e, true, false, false, true, false, false, true, false) - } - // Appends ajax script to body if (LiftRules.autoIncludeAjaxCalc.vend().apply(this)) { bodyChildren += diff --git a/web/webkit/src/main/scala/net/liftweb/http/LiftSession.scala b/web/webkit/src/main/scala/net/liftweb/http/LiftSession.scala index 09926b2bac..460fd00528 100644 --- a/web/webkit/src/main/scala/net/liftweb/http/LiftSession.scala +++ b/web/webkit/src/main/scala/net/liftweb/http/LiftSession.scala @@ -2356,9 +2356,7 @@ class LiftSession(private[http] val _contextPath: String, val uniqueId: String, ca ! PerformSetupComet2(Empty) - val node: Elem = ca.buildSpan(NodeSeq.Empty) - - S.addCometAtEnd(node) + S.addComet(ca) ca ! SetDeltaPruner(lastWhenDeltaPruner) @@ -2828,9 +2826,7 @@ class LiftSession(private[http] val _contextPath: String, val uniqueId: String, ca ! SetDeltaPruner(lastWhenDeltaPruner) - val node: Elem = ca.buildSpan(NodeSeq.Empty) - - S.addCometAtEnd(node) + S.addComet(ca) val currentReq: Box[Req] = S.request.map(_.snapshot) diff --git a/web/webkit/src/main/scala/net/liftweb/http/S.scala b/web/webkit/src/main/scala/net/liftweb/http/S.scala index d2c409a797..b65f87d63f 100644 --- a/web/webkit/src/main/scala/net/liftweb/http/S.scala +++ b/web/webkit/src/main/scala/net/liftweb/http/S.scala @@ -362,7 +362,11 @@ trait S extends HasParams with Loggable with UserAgentCalculator { */ private object _tailTags extends TransientRequestVar(new ListBuffer[Elem]) - private object _cometTags extends TransientRequestVar(new ListBuffer[Elem]) + // Set of CometVersionPairs for comets that should be tracked on + // the page that is currently being rendered or that called this AJAX + // callback. + private[http] object requestCometVersions extends TransientRequestVar[Set[CometVersionPair]](Set.empty) + private object p_queryLog extends TransientRequestVar(new ListBuffer[(String, Long)]) private object p_notice extends TransientRequestVar(new ListBuffer[(NoticeType.Value, NodeSeq, Box[String])]) @@ -797,14 +801,12 @@ trait S extends HasParams with Loggable with UserAgentCalculator { */ def atEndOfBody(): List[Elem] = _tailTags.is.toList - def addCometAtEnd(elem: Elem): Unit = _cometTags.is += elem - - // Set of CometVersionPairs for comets that should be tracked on - // the page that is currently being rendered or that called this AJAX - // callback. - private[http] object requestCometVersions extends TransientRequestVar[Set[CometVersionPair]](Set.empty) - - private def trackComet(cometActor: LiftCometActor) = { + /** + * Add a comet to the list of comets that should be registered to + * receive updates on the page currently being rendered or on the page + * that invoked the currently running callback. + */ + def addComet(cometActor: LiftCometActor): Unit = { requestCometVersions.set( requestCometVersions.is + CVP(cometActor.uniqueId, cometActor.lastListenerTime) ) @@ -832,7 +834,7 @@ trait S extends HasParams with Loggable with UserAgentCalculator { cometActor <- session.findOrCreateComet(cometType, cometName, cometHtml, cometAttributes) } yield { if (receiveUpdatesOnPage) - trackComet(cometActor) + addComet(cometActor) cometActor } @@ -859,14 +861,12 @@ trait S extends HasParams with Loggable with UserAgentCalculator { cometActor <- session.findOrCreateComet[T](cometName, cometHtml, cometAttributes) } yield { if (receiveUpdatesOnPage) - trackComet(cometActor) + addComet(cometActor) cometActor } } - def cometAtEnd(): List[Elem] = _cometTags.is.toList - /** * Sometimes it's helpful to accumute JavaScript as part of servicing * a request. For example, you may want to accumulate the JavaScript