You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@esme.apache.org by es...@apache.org on 2011/04/08 20:13:52 UTC
svn commit: r1090382 - in /esme/branches/esme-328_comet_timeline_rewrite: ./
project/build/ src/main/resources/props/ src/main/scala/bootstrap/liftweb/
src/main/scala/org/apache/esme/comet/ src/main/scala/org/apache/esme/model/
src/main/scala/org/apach...
Author: esjewett
Date: Fri Apr 8 18:13:51 2011
New Revision: 1090382
URL: http://svn.apache.org/viewvc?rev=1090382&view=rev
Log:
[ESME-328] Fix resend and various other stuff. About ready to merge.
Modified:
esme/branches/esme-328_comet_timeline_rewrite/ (props changed)
esme/branches/esme-328_comet_timeline_rewrite/pom.xml
esme/branches/esme-328_comet_timeline_rewrite/project/build/EsmeProject.scala
esme/branches/esme-328_comet_timeline_rewrite/src/main/resources/props/compass.filesystem.cfg.xml (props changed)
esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/bootstrap/liftweb/Boot.scala
esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/StreamTimeline.scala
esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/Timeline.scala
esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/ExtSession.scala
esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/Mailbox.scala
esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/snippet/UserSnip.scala
esme/branches/esme-328_comet_timeline_rewrite/src/main/webapp/templates-hidden/base.html
Propchange: esme/branches/esme-328_comet_timeline_rewrite/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Apr 8 18:13:51 2011
@@ -1,4 +1,5 @@
/esme/branches/lift-2.2/trunk/server:1051384-1055974
+/esme/trunk/server:1088274-1090300
/incubator/esme/branches/lift-2.0/server:928728-939625
/incubator/esme/branches/lift-2.2/trunk/server:1043371-1051383
/incubator/esme/branches/lift-2.2/trunk/server/src/main/webapp/info_view:1043380-1044792
Modified: esme/branches/esme-328_comet_timeline_rewrite/pom.xml
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/pom.xml?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/pom.xml (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/pom.xml Fri Apr 8 18:13:51 2011
@@ -75,7 +75,7 @@
</developer>
</developers>
<properties>
- <lift.version>2.2</lift.version>
+ <lift.version>2.3</lift.version>
<scala.version>2.8.1</scala.version>
<compass.version>2.1.1</compass.version>
<lucene.version>2.4.0</lucene.version>
Modified: esme/branches/esme-328_comet_timeline_rewrite/project/build/EsmeProject.scala
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/project/build/EsmeProject.scala?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/project/build/EsmeProject.scala (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/project/build/EsmeProject.scala Fri Apr 8 18:13:51 2011
@@ -1,7 +1,7 @@
import sbt._
class EsmeProject(info: ProjectInfo) extends DefaultWebProject(info) {
- val liftVersion = "2.2"
+ val liftVersion = "2.3"
val compassVersion = "2.1.1"
val luceneVersion = "2.4.0"
Propchange: esme/branches/esme-328_comet_timeline_rewrite/src/main/resources/props/compass.filesystem.cfg.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Apr 8 18:13:51 2011
@@ -1,4 +1,5 @@
/esme/branches/lift-2.2/trunk/server/src/main/resources/props/compass.filesystem.cfg.xml:1051384-1055974
+/esme/trunk/server/src/main/resources/props/compass.filesystem.cfg.xml:1088274-1090300
/incubator/esme/branches/lift-2.2/trunk/server/src/main/resources/props/compass.filesystem.cfg.xml:1043371-1051383
/incubator/esme/branches/metadata/src/main/resources/props/compass.filesystem.cfg.xml:966215-979767
/incubator/esme/branches/tagandconversationfollow/src/main/resources/props/compass.filesystem.cfg.xml:966215-1006324
Modified: esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/bootstrap/liftweb/Boot.scala
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/bootstrap/liftweb/Boot.scala?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/bootstrap/liftweb/Boot.scala (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/bootstrap/liftweb/Boot.scala Fri Apr 8 18:13:51 2011
@@ -197,7 +197,7 @@ class Boot extends Loggable {
LiftRules.setSiteMap(SiteMap(entries: _*))
- S.addAround(ExtSession.requestLoans)
+ LiftRules.earlyInStateful.append(ExtSession.testCookieEarlyInStateful)
// API security rules
LiftRules.dispatch.append(API2.authorizationRules)
Modified: esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/StreamTimeline.scala
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/StreamTimeline.scala?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/StreamTimeline.scala (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/StreamTimeline.scala Fri Apr 8 18:13:51 2011
@@ -62,9 +62,8 @@ class StreamTimeline extends PublicTimel
case _ => currentPool = StreamTimeline.PublicPool
}
- if(filterPool) {
- messages = getMessages
- clearMessages = true
+ if(filterPool) {
+ messages = getMessages
this ! ForceRender
}
}
@@ -76,30 +75,26 @@ class StreamTimeline extends PublicTimel
}
if(filterResender) {
- messages = getMessages
- clearMessages = true
+ messages = getMessages
this ! ForceRender
}
}
case FilterPool(on) => {
filterPool = on
- messages = getMessages
- clearMessages = true
+ messages = getMessages
this ! ForceRender
}
case FilterResender(on) => {
filterResender = on
- messages = getMessages
- clearMessages = true
+ messages = getMessages
this ! ForceRender
}
}
override def lowPriority = {
- case ForceRender =>
-// TODO: Adapt to new timeline format
+ case ForceRender =>
reRender(true)
case Distributor.NewMessage(msg) =>
@@ -122,8 +117,7 @@ class StreamTimeline extends PublicTimel
scheduled = true
ActorPing.schedule(this, ForceRender, 30000L)
}
- }
-// TODO: Adapt to new timeline format
+ }
else reRender(true)
}
Modified: esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/Timeline.scala
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/Timeline.scala?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/Timeline.scala (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/comet/Timeline.scala Fri Apr 8 18:13:51 2011
@@ -23,11 +23,12 @@ import net.liftweb.http._
import net.liftweb.util._
import net.liftweb.common._
import net.liftweb.util.Helpers._
-import scala.xml._
+import scala.xml._
import js._
-import JsCmds._
+import JsCmds._
import JE._
-import net.liftweb.http.js.jquery.JqJsCmds.{PrependHtml}
+import net.liftweb.http.js.jquery.JqJsCmds.{PrependHtml,FadeOut}
+import net.liftweb.http.SHtml.{BasicElemAttr}
import org.apache.esme._
import org.apache.esme.actor._
@@ -39,7 +40,6 @@ import java.text._
trait Timeline extends CometActor {
protected var messages: List[(Long,MailboxReason,Boolean)] = Nil
- protected var clearMessages: Boolean = false
protected val jsId: String
override def defaultPrefix = Full("timeline")
@@ -53,37 +53,94 @@ trait Timeline extends CometActor {
}
def render = {
-
-// TODO - handle clearMessages = true.
-// TODO - Get resend working
-// TODO - need to escape the replyHref string so that messages with ? in them don't bomb
-
+
val msgMap = Message.findMessages(messages map {_._1})
val toDisplay = for ((id, reason, resent) <- messages;
msg <- msgMap.get(id))
yield (msg, reason, resent)
<div id={jsId}>{toDisplay.map(renderMessage(_))}</div>
- }
+ }
+ // If we need to filter out some messages on display, override this method.
+ def filter(msgs:List[(Message,MailboxReason,Boolean)]):List[(Message,MailboxReason,Boolean)] = {
+ msgs
+ }
+
+// TODO Should be factored out into a template
+ val messageTemplate =
+ <div class="updates-box" id="message">
+ <div class="avatar">
+ <img id="avatar" width="40px" src=""/>
+ </div>
+ <div class="update2">
+ <a href="" class="author"/>
+ <div class="msgbody"/>
+ <div class="supp_data"/>
+ <div class="actions">
+ <a href="#" class="resend resend_link">
+ <lift:loc>ui_messages_message_label_resend</lift:loc>
+ </a><span class="resend">| </span>
+ <a href="#" class="reply">
+ <lift:loc>ui_messages_message_label_reply</lift:loc>
+ </a>
+ <span class="conversation">| </span>
+ <a class="conversation">
+ <lift:loc>ui_messages_message_label_conversation</lift:loc>
+ </a>
+ </div>
+ </div>
+ </div>
+
+ protected def prependMessage(m:Message, r:MailboxReason, rs:Boolean) {
+ val newMessage = renderMessage((m,r,rs))
+ val update = PrependHtml(jsId, newMessage)
+ partialUpdate(update)
+ }
+
+ private def resendMessage(m:Message):JsCmd = {
+ for (user <- User.currentUser;
+ msgId = m.id.is) {
+ Distributor ! Distributor.ResendMessage(user.id, msgId)
+ }
+
+ val resendId = "resend_" + m.id.toString
+
+ FadeOut(resendId,0,200)
+ }
+
protected def renderMessage(m: (Message,MailboxReason,Boolean)) = {
val imageUrl = m._1.author.obj.map(_.image_url).openOr("")
val authorNickname = m._1.author.obj.map(_.niceName).openOr("")
val messageId = "message_" + m._1.id.is.toString
- val messageBody = m._1.digestedXHTML
+ val messageBody = m._1.digestedXHTML
+ val replyBody = m._1.body.replaceAll("\\'","\\\\\\'")
val messagePool:String = m._1.pool.obj.map("in pool \'" + _.getName + "\'").openOr("")
- val replyHref = "javascript:setReplyTo(" + m._1.id.is.toString + ", '"+ messageBody + "', " + m._1.pool.obj.map(_.id.is).openOr(0) + ", '" + authorNickname + "')"
-
+ val replyHref = "javascript:setReplyTo(" + m._1.id.is.toString + ", '"+ replyBody + "', " + m._1.pool.obj.map(_.id.is).openOr(0) + ", '" + authorNickname + "')"
+
val convId = m._1.conversation.is
val convHref = LiftRules.context.path + "/conversation/" + convId
val convTransform:CssBindFunc = if(convId != 0) {
".conversation [href]" #> convHref
} else {
".conversation" #> Text("")
- }
-
+ }
+
+ val resendId = "resend_" + m._1.id.toString
+ val resendAttrs = BasicElemAttr("id",resendId).compose(BasicElemAttr("class","resend"))
+
+ val resendTransform:CssBindFunc =
+ if(m._3 || m._1.author.is == User.currentUser.map(_.id.is).openOr(0)) {
+ ".resend" #> Text("")
+ } else {
+ ".resend_link" #> SHtml.a(
+ () => resendMessage(m._1),
+ S.loc("ui_messages_message_label_resend").openOr(Text("")),
+ resendAttrs)
+ }
+
val authorHref = LiftRules.context.path + "/user/" + authorNickname
-
+
// TODO: Put date in the "ago" format
val messageDateStr = toInternetDate(m._1.when)
val messageReason = if(m._2.attr.length > 0){
@@ -95,9 +152,9 @@ trait Timeline extends CometActor {
} else {
"via " + m._1.source
}
-
+
val suppString = messagePool + " " + messageDateStr + " " + messageReason
-
+
("#avatar [src]" #> imageUrl &
".updates-box [id]" #> messageId &
".msgbody *" #> messageBody &
@@ -105,42 +162,7 @@ trait Timeline extends CometActor {
".reply [href]" #> replyHref &
convTransform &
".author [href]" #> authorHref &
- ".author *" #> authorNickname )(messageTemplate)
- }
-
- // If we need to filter out some messages on display, override this method.
- def filter(msgs:List[(Message,MailboxReason,Boolean)]):List[(Message,MailboxReason,Boolean)] = {
- msgs
- }
-
- protected def prependMessage(m:Message, r:MailboxReason, rs:Boolean) {
- val newMessage = renderMessage((m,r,rs))
- val update = PrependHtml(jsId, newMessage)
- partialUpdate(update)
- }
-
-// TODO Should be factored out into a template
- val messageTemplate =
- <div class="updates-box" id="message">
- <div class="avatar">
- <img id="avatar" width="40px" src=""/>
- </div>
- <div class="update2">
- <a href="" class="author"/>
- <div class="msgbody"/>
- <div class="supp_data"/>
- <div class="actions">
- <a href="#" class="resend">
- <lift:loc>ui_messages_message_label_resend</lift:loc>
- </a><span class="resend">| </span>
- <a href="#" class="reply">
- <lift:loc>ui_messages_message_label_reply</lift:loc>
- </a>
- <span class="conversation">| </span>
- <a class="conversation">
- <lift:loc>ui_messages_message_label_conversation</lift:loc>
- </a>
- </div>
- </div>
- </div>
+ ".author *" #> authorNickname &
+ resendTransform )(messageTemplate)
+ }
}
Modified: esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/ExtSession.scala
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/ExtSession.scala?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/ExtSession.scala (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/ExtSession.scala Fri Apr 8 18:13:51 2011
@@ -24,7 +24,7 @@ import mapper._
import util._
import common._
-object ExtSession extends ExtSession with MetaProtoExtendedSession[ExtSession] {
+object ExtSession extends ExtSession with LongKeyedMetaMapper[ExtSession] with MetaProtoExtendedSession[ExtSession] {
override def dbTableName = "ext_session" // define the DB table name
def logUserIdIn(uid: String): Unit = User.logUserIdIn(uid)
@@ -34,7 +34,7 @@ object ExtSession extends ExtSession wit
type UserType = User
}
-class ExtSession extends ProtoExtendedSession[ExtSession] {
+class ExtSession extends LongKeyedMapper[ExtSession] with ProtoExtendedSession[ExtSession] {
def getSingleton = ExtSession // what's the "meta" server
}
Modified: esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/Mailbox.scala
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/Mailbox.scala?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/Mailbox.scala (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/model/Mailbox.scala Fri Apr 8 18:13:51 2011
@@ -107,7 +107,7 @@ case class TagFollowReason(tagName: Stri
def attr = new UnprefixedAttribute("tag", tagName, Null)
}
case class ConvFollowReason(convId: Long) extends MailboxReason {
- def attr = new UnprefixedAttribute("conversation", convId, Null)
+ def attr = new UnprefixedAttribute("conversation", convId.toString, Null)
}
case class LoginReason(userId: Long) extends MailboxReason {
def attr = new UnprefixedAttribute("login", userId.toString, Null)
Modified: esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/snippet/UserSnip.scala
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/snippet/UserSnip.scala?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/snippet/UserSnip.scala (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/src/main/scala/org/apache/esme/snippet/UserSnip.scala Fri Apr 8 18:13:51 2011
@@ -79,21 +79,6 @@ object JsonPoster extends JsonHandler{
}
}
-object JsonResender extends JsonHandler{
- def apply(in: Any): JsCmd = in match {
- case JsonCmd("resend", _, map: Map[String, Any], _) =>
- for (msgId <- map.get("msg_id").map(toLong);
- user <- User.currentUser)
- Distributor ! Distributor.ResendMessage(user.id, msgId)
-
- Noop
-
- case _ => Noop
- }
-}
-
-
-
class UserSnip extends DispatchSnippet {
def dispatch: DispatchIt =
@@ -104,8 +89,7 @@ class UserSnip extends DispatchSnippet {
"following" -> following _,
"loginForm" -> loginForm _,
"loggedIn" -> loggedInFilter _,
- "accessPools" -> accessPools _,
- "resendScript" -> resendScript _,
+ "accessPools" -> accessPools _,
"popular" -> popular _,
"links" -> links _)
@@ -149,8 +133,6 @@ class UserSnip extends DispatchSnippet {
// Image of user as part of an img tag
- def logoutimage: MetaData = ("src" -> (Message.root + "/images/btn-signout.gif"))
- def searchimage: MetaData = ("src" -> (Message.root + "/images/btn-search.gif"))
def image: MetaData = ("src" -> (User.currentUser.map(_.image_url)openOr "/images/avatar.jpg"))
@@ -200,16 +182,6 @@ class UserSnip extends DispatchSnippet {
}
</xml:group>
- def resendScript(in: NodeSeq): NodeSeq =
- <xml:group>
- {Script(JsonResender.jsCmd)}
- {Script(Function("resend_msg", List("msg_id"),
- JsonResender.call("resend",
- JsObj("msg_id" -> JsVar("msg_id")))
- ))
- }
- </xml:group>
-
def popular(in: NodeSeq): NodeSeq =
PopStatsActor !? PopStatsActor.TopStats(ResendStat, 5, 1 week) match {
case l: List[Tuple2[Long,Int]] =>
Modified: esme/branches/esme-328_comet_timeline_rewrite/src/main/webapp/templates-hidden/base.html
URL: http://svn.apache.org/viewvc/esme/branches/esme-328_comet_timeline_rewrite/src/main/webapp/templates-hidden/base.html?rev=1090382&r1=1090381&r2=1090382&view=diff
==============================================================================
--- esme/branches/esme-328_comet_timeline_rewrite/src/main/webapp/templates-hidden/base.html (original)
+++ esme/branches/esme-328_comet_timeline_rewrite/src/main/webapp/templates-hidden/base.html Fri Apr 8 18:13:51 2011
@@ -32,14 +32,14 @@
<meta name="generator" content="" lang="en-US" />
<meta name="author" content="ESME Designed by Joy Reyes" lang="en-US" />
<meta name="Robots" content="index,follow,noodp" />
- <link rel="stylesheet" href="../style/style.css" type="text/css" media="screen" />
- <link rel="stylesheet" href="../style/tipTip.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="/style/style.css" type="text/css" media="screen" />
+ <link rel="stylesheet" href="/style/tipTip.css" type="text/css" media="screen" />
<script id="jquery" src="/classpath/jquery.js" type="text/javascript"/>
<script id="json" src="/classpath/json.js" type="text/javascript"/>
- <script src="../scripts/jquery.TipTip.js" type="text/javascript"/>
- <script src="../scripts/esme_tool_tip.js" type="text/javascript"/>
- <script src="../scripts/jquery.validate.js" type="text/javascript"/>
- <script src="../scripts/esme_validate.js" type="text/javascript"/>
+ <script src="/scripts/jquery.TipTip.js" type="text/javascript"/>
+ <script src="/scripts/esme_tool_tip.js" type="text/javascript"/>
+ <script src="/scripts/jquery.validate.js" type="text/javascript"/>
+ <script src="/scripts/esme_validate.js" type="text/javascript"/>
</head>
<body id="back">
<div id="messages" class="esme_message_bar" style="display: none"></div>
@@ -63,7 +63,7 @@
</ul>
<lift:Menu.item name="logout">
- <img lift:snippet="UserSnip.logoutimage" alt="" class="tipelement" title="Log out of ESME." />
+ <img src="/images/btn-signout.gif" alt="" class="tipelement" title="Log out of ESME." />
</lift:Menu.item>
</div>
</div><!--// ENDS HEADER -->
@@ -87,7 +87,7 @@
<input type="text" class="inputBox required alphanumeric nowhitespace" name="term" value=""/>
</div>
<div class="searchButton">
- <input type="image" onclick="javascript:form.submit();" lift:snippet="UserSnip.searchimage" style="padding:0;"/>
+ <input type="image" onclick="javascript:form.submit();" src="/images/btn-search.gif" style="padding:0;"/>
</div>
</div>
</form><!--search form--><h3 class ="tipelement" title="These are tags that appear often in your timeline."><lift:loc>ui_messages_message_label_tag_cloud</lift:loc></h3>