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 2010/12/11 15:33:07 UTC

svn commit: r1044664 - in /incubator/esme/trunk/server/src/main: scala/org/apache/esme/comet/ scala/org/apache/esme/snippet/ webapp/info_view/ webapp/templates-hidden/

Author: esjewett
Date: Sat Dec 11 14:33:06 2010
New Revision: 1044664

URL: http://svn.apache.org/viewvc?rev=1044664&view=rev
Log:
[ESME-287] [ESME-289] First cut at changing the user timeline display over to comet. Needs work on formatting and not very well tested at the moment.

Added:
    incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/UserMessagesTimeline.scala
    incubator/esme/trunk/server/src/main/webapp/templates-hidden/timeline_user_messages.html
Modified:
    incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/PersonalTimeline.scala
    incubator/esme/trunk/server/src/main/scala/org/apache/esme/snippet/UserDisplay.scala
    incubator/esme/trunk/server/src/main/webapp/info_view/user.html

Modified: incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/PersonalTimeline.scala
URL: http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/PersonalTimeline.scala?rev=1044664&r1=1044663&r2=1044664&view=diff
==============================================================================
--- incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/PersonalTimeline.scala (original)
+++ incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/PersonalTimeline.scala Sat Dec 11 14:33:06 2010
@@ -32,7 +32,7 @@ class PersonalTimeline extends Timeline 
   override def localSetup() {
     super.localSetup()
     for (user <- User.currentUser) {
-      Distributor ! Distributor.Listen(user.id, this)
+      Distributor ! Distributor.ListenObject(user, this)
       Distributor !? (2000, Distributor.LatestMessages(user.id, 40)) match {
         case Full(msg: List[(Long,MailboxReason,Boolean)]) => messages = msg
         case x =>

Added: incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/UserMessagesTimeline.scala
URL: http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/UserMessagesTimeline.scala?rev=1044664&view=auto
==============================================================================
--- incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/UserMessagesTimeline.scala (added)
+++ incubator/esme/trunk/server/src/main/scala/org/apache/esme/comet/UserMessagesTimeline.scala Sat Dec 11 14:33:06 2010
@@ -0,0 +1,69 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.esme.comet   
+
+import net.liftweb.common._ 
+import net.liftweb.mapper._  
+import net.liftweb.http._      
+import net.liftweb.util.Helpers.TimeSpan  
+
+import org.apache.esme._
+import actor.{Distributor,UserActor}
+import model._   
+
+class UserMessagesTimeline extends Timeline {   
+
+  val jsId = "user_messages_timeline_messages"   
+  
+  override def lifespan = Full(TimeSpan(300000))    
+  
+  val user: User = S.param("uid").flatMap(User.findFromWeb) openOr {
+    S.error(S.?("base_ui_no_user_found"))
+    S.redirectTo(S.referer openOr "/")
+  }
+
+  override def localSetup() {
+    super.localSetup()                
+    Distributor ! Distributor.ListenObject(user, this) 
+    messages = Message.findAll(
+      By(Message.author, user), 
+      OrderBy(Message.id, Descending), 
+      MaxRows(40)).map(m => (m.id.is,NoReason,true))          
+  }  
+  
+  override def localShutdown() {
+    super.localShutdown()
+    for (user <- User.currentUser) {
+      Distributor ! Distributor.Unlisten(user.id, this)
+    }
+  }
+  
+  override def lowPriority = {
+    case UserActor.MessageReceived(msg, r) =>   
+      if(msg.author == user) {
+        messages = ( (msg.id.is,r,true) :: messages).take(40)
+        reRender(false)
+      }        
+      
+    case UserActor.Resend(msgId) =>     
+      messages = ( (msgId,ResendReason(user.id.is),true) :: messages).take(40)
+      reRender(false)      
+  }   
+}
\ No newline at end of file

Modified: incubator/esme/trunk/server/src/main/scala/org/apache/esme/snippet/UserDisplay.scala
URL: http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/scala/org/apache/esme/snippet/UserDisplay.scala?rev=1044664&r1=1044663&r2=1044664&view=diff
==============================================================================
--- incubator/esme/trunk/server/src/main/scala/org/apache/esme/snippet/UserDisplay.scala (original)
+++ incubator/esme/trunk/server/src/main/scala/org/apache/esme/snippet/UserDisplay.scala Sat Dec 11 14:33:06 2010
@@ -57,14 +57,19 @@ object UserDisplay {
 
         case _ => <xml:group> <div class="thatsyou">{S.?("base_user_thats_you")}</div></xml:group> 
       }
+    }    
+    
+    def cometTimeline:NodeSeq = {                                        
+      println(<lift:comet type="UserMessagesTimeline" name={"user"+user.id.is} />)
+      <lift:comet type="UserMessagesTimeline" name={"user"+user.id.is} />
     }
-
-
+                                                      
      bind("user", in,
          "nicename" -> user.niceName,
          "lastName" -> user.lastName,
          "firstName" -> user.firstName,
-          "image" -> user.image_link,
+         "image" -> user.image_link,   
+         "cometTimeline" -> cometTimeline,
          "followButton" -> followOrNot,
           "messages" -> MessageUtils.bindMessages(Message.findAll(
             By(Message.author, user), 

Modified: incubator/esme/trunk/server/src/main/webapp/info_view/user.html
URL: http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/webapp/info_view/user.html?rev=1044664&r1=1044663&r2=1044664&view=diff
==============================================================================
--- incubator/esme/trunk/server/src/main/webapp/info_view/user.html (original)
+++ incubator/esme/trunk/server/src/main/webapp/info_view/user.html Sat Dec 11 14:33:06 2010
@@ -24,75 +24,48 @@
     <script type="text/javascript" src="../scripts/jquery-ui-1.8.2.custom.min.js">    </script>
     <script type="text/javascript" src="../scripts/esme_table_sorter.js"></script>
     <script type="text/javascript" src="../scripts/esme.js"></script>
-<div id="back-header">
-       <lift:user_info>
-	<h1><lift:loc>ui_user_single_title</lift:loc> <i>'<user:nicename/>'</i></h1>
-	
-	<user:image/>
-	<h4><lift:loc>ui_sign_up_firstname</lift:loc>: <user:firstName/></h4>
-	<h4><lift:loc>ui_sign_up_lastname</lift:loc>: <user:lastName/></h4>
-	<div class="container-aux">
-        <span id="following"><user:followButton/></span>
-            <div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs">
-                <ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
-                    <li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active">
-                        <a href="#tabs-1"><user:nicename/><lift:loc>ui_user_messages</lift:loc></a>
-                    </li>
-                    <li class="ui-state-default ui-corner-top">
-                        <a href="#tabs-2"><lift:loc>ui_user_following</lift:loc></a>
-                    </li>
-                    <li class="ui-state-default ui-corner-top">
-                        <a href="#tabs-3"><lift:loc>ui_user_followers</lift:loc></a>
-                    </li>
-                </ul>
-                <div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tabs-1">
-                    <dl class="">
-                        <dd class="b-clouds">
-                            <table class="tablesorter">
-                                <thead>
-                                    <tr>
-                                        <th>
-                                            <lift:loc>ui_user_message</lift:loc>
-                                        </th>
-                                        <th>
-                                            <lift:loc>ui_user_date</lift:loc>
-                                        </th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                <user:messages>
-                                    <tr class="user_row">
-                                        <td class ="user_message">
-                                            <item:body/>
-                                        </td>
-                                        <td>
-                                            <item:date/>
-                                        </td>
-                                    </tr>
-                                </user:messages>
-                                </tbody>
-                            </table>
-                        </dd>
-                    </dl>
-                </div>
-                <div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tabs-2">
-                    <dl class="">
-                        <dd class="b-contacts" style="height: 240px; overflow: auto">
-                            <lift:UserSnip.following user:userId=""/>
-                        </dd>
-                    </dl>
-                </div>
-                <div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tabs-3">
-                    <dl class="">
-                        <dd class="b-contacts" style="height: 240px; overflow: auto">
-                            <lift:UserSnip.followers user:userId=""/>
-                        </dd>
-                    </dl>
-                </div>
-            </div>
-
-	</div>
-	        </lift:user_info>
-	</div>
-	<!-- End demo --> 
+  <lift:user_info>
+    <div id="back-header">
+    	<h1>
+    	  <user:image/> <i>'<user:nicename/>'</i> - <user:firstName/> <user:lastName/>
+    	  <span id="following"><user:followButton/></span>
+    	</h1>                                           
+    </div>      
+  	<div class="container-aux">
+      <div class="ui-tabs ui-widget ui-widget-content ui-corner-all" id="tabs">
+        <ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
+          <li class="ui-state-default ui-corner-top ui-tabs-selected ui-state-active">
+            <a href="#tabs-1"><user:nicename/><lift:loc>ui_user_messages</lift:loc></a>
+          </li>
+          <li class="ui-state-default ui-corner-top">
+            <a href="#tabs-2"><lift:loc>ui_user_following</lift:loc></a>
+          </li>
+          <li class="ui-state-default ui-corner-top">
+            <a href="#tabs-3"><lift:loc>ui_user_followers</lift:loc></a>
+          </li>            
+        </ul>
+        <div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tabs-1">
+          <dl class="">
+            <dd class="b-clouds">
+              <lift:embed what="templates-hidden/timeline_user_messages"/> 
+            </dd>
+          </dl>
+        </div>         
+        <div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tabs-2">
+          <dl class="">
+            <dd class="b-contacts" style="height: 240px; overflow: auto">
+              <lift:UserSnip.following user:userId=""/>
+            </dd>
+          </dl>
+        </div>
+        <div class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide" id="tabs-3">
+          <dl class="">
+            <dd class="b-contacts" style="height: 240px; overflow: auto">
+              <lift:UserSnip.followers user:userId=""/>
+            </dd>
+          </dl>
+        </div>            
+      </div>
+    </div>       
+  </lift:user_info>      
 </lift:surround>
\ No newline at end of file

Added: incubator/esme/trunk/server/src/main/webapp/templates-hidden/timeline_user_messages.html
URL: http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/webapp/templates-hidden/timeline_user_messages.html?rev=1044664&view=auto
==============================================================================
--- incubator/esme/trunk/server/src/main/webapp/templates-hidden/timeline_user_messages.html (added)
+++ incubator/esme/trunk/server/src/main/webapp/templates-hidden/timeline_user_messages.html Sat Dec 11 14:33:06 2010
@@ -0,0 +1,29 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one   *
+ or more contributor license agreements.  See the NOTICE file *
+ distributed with this work for additional information        *
+ regarding copyright ownership.  The ASF licenses this file   *
+ to you under the Apache License, Version 2.0 (the            *
+ "License"); you may not use this file except in compliance   *
+ with the License.  You may obtain a copy of the License at   *
+                                                              *
+   http://www.apache.org/licenses/LICENSE-2.0                 *
+                                                              *
+ Unless required by applicable law or agreed to in writing,   *
+ software distributed under the License is distributed on an  *
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ KIND, either express or implied.  See the License for the    *
+ specific language governing permissions and limitations      *
+ under the License.                                           *
+-->
+   
+<div id="user_messages_timeline_messages">   
+  <head>                
+    <script src="../scripts/display_messages_top.js" type="text/javascript"/>  
+    <script src="../scripts/pretty.js" type="text/javascript"/>  
+    <lift:user_info> 
+      <user:cometTimeline />          
+    </lift:user_info>
+  </head>                                                                                     
+  <lift:embed what="templates-hidden/message_core"/>                                          
+</div>
\ No newline at end of file