fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-09-14 05:42 am

[dw-free] No way to get the server-based creation time (logtime) through the protocol

[commit: http://hg.dwscoalition.org/dw-free/rev/fecfa5b4646a]

http://bugs.dwscoalition.org/show_bug.cgi?id=2673

Add the logtime to the list of properties returned by getevents. Patch
includes cleanup for code style.

Patch by [personal profile] murklins.

Files modified:
  • cgi-bin/ljprotocol.pl
  • doc/raw/build/protocol/getevents.mode.xml
  • htdocs/protocol.dat
--------------------------------------------------------------------------------
diff -r 243791185af8 -r fecfa5b4646a cgi-bin/ljprotocol.pl
--- a/cgi-bin/ljprotocol.pl	Tue Sep 14 12:08:18 2010 +0800
+++ b/cgi-bin/ljprotocol.pl	Tue Sep 14 13:42:00 2010 +0800
@@ -2199,9 +2199,9 @@ sub getevents
 
         # okay, follow me here... see how we add the revttime predicate
         # even if no beforedate key is present?  you're probably saying,
-        # that's retarded -- you're saying: "revttime > 0", that's like
+        # what, huh? -- you're saying: "revttime > 0", that's like
         # saying, "if entry occurred at all."  yes yes, but that hints
-        # mysql's braindead optimizer to use the right index.
+        # mysql's optimizer to use the right index.
         my $rtime_after = 0;
         my $rtime_what = $is_community ? "rlogtime" : "revttime";
         if ($req->{'beforedate'}) {
@@ -2314,7 +2314,7 @@ sub getevents
 
     # common SQL template:
     unless ($sql) {
-        $sql = "SELECT jitemid, eventtime, security, allowmask, anum, posterid ".
+        $sql = "SELECT jitemid, eventtime, logtime, security, allowmask, anum, posterid ".
             "FROM log2 WHERE journalid=$ownerid $where $secwhere $orderby $limit";
     }
 
@@ -2330,22 +2330,23 @@ sub getevents
     my $count = 0;
     my @itemids = ();
     my $res = {};
-    my $events = $res->{'events'} = [];
+    my $events = $res->{events} = [];
     my %evt_from_itemid;
 
-    while (my ($itemid, $eventtime, $sec, $mask, $anum, $jposterid) = $sth->fetchrow_array)
+    while (my ($itemid, $eventtime, $logtime, $sec, $mask, $anum, $jposterid) = $sth->fetchrow_array)
     {
         $count++;
         my $evt = {};
-        $evt->{'itemid'} = $itemid;
+        $evt->{itemid} = $itemid;
         push @itemids, $itemid;
 
         $evt_from_itemid{$itemid} = $evt;
 
-        $evt->{"eventtime"} = $eventtime;
+        $evt->{eventtime} = $eventtime;
+        $evt->{logtime} = $logtime;
         if ($sec ne "public") {
-            $evt->{'security'} = $sec;
-            $evt->{'allowmask'} = $mask if $sec eq "usemask";
+            $evt->{security} = $sec;
+            $evt->{allowmask} = $mask if $sec eq "usemask";
         }
         $evt->{anum} = $anum;
         $evt->{poster} = LJ::get_username( $jposterid )
@@ -3905,37 +3906,37 @@ sub getevents
 
     my $rs = LJ::Protocol::do_request("getevents", $rq, \$err, $flags);
     unless ($rs) {
-        $res->{'success'} = "FAIL";
-        $res->{'errmsg'} = LJ::Protocol::error_message($err);
+        $res->{success} = "FAIL";
+        $res->{errmsg} = LJ::Protocol::error_message($err);
         return 0;
     }
 
     my $ect = 0;
     my $pct = 0;
-    foreach my $evt (@{$rs->{'events'}}) {
+    foreach my $evt (@{$rs->{events}}) {
         $ect++;
-        foreach my $f (qw(itemid eventtime security allowmask subject anum url poster)) {
+        foreach my $f (qw(itemid eventtime logtime security allowmask subject anum url poster)) {
             if (defined $evt->{$f}) {
                 $res->{"events_${ect}_$f"} = $evt->{$f};
             }
         }
-        $res->{"events_${ect}_event"} = LJ::eurl($evt->{'event'});
-
-        if ($evt->{'props'}) {
-            foreach my $k (sort keys %{$evt->{'props'}}) {
+        $res->{"events_${ect}_event"} = LJ::eurl($evt->{event});
+
+        if ($evt->{props}) {
+            foreach my $k (sort keys %{$evt->{props}}) {
                 $pct++;
-                $res->{"prop_${pct}_itemid"} = $evt->{'itemid'};
+                $res->{"prop_${pct}_itemid"} = $evt->{itemid};
                 $res->{"prop_${pct}_name"} = $k;
-                $res->{"prop_${pct}_value"} = $evt->{'props'}->{$k};
-            }
-        }
-    }
-
-    unless ($req->{'noprops'}) {
-        $res->{'prop_count'} = $pct;
-    }
-    $res->{'events_count'} = $ect;
-    $res->{'success'} = "OK";
+                $res->{"prop_${pct}_value"} = $evt->{props}->{$k};
+            }
+        }
+    }
+
+    unless ($req->{noprops}) {
+        $res->{prop_count} = $pct;
+    }
+    $res->{events_count} = $ect;
+    $res->{success} = "OK";
 
     return 1;
 }
diff -r 243791185af8 -r fecfa5b4646a doc/raw/build/protocol/getevents.mode.xml
--- a/doc/raw/build/protocol/getevents.mode.xml	Tue Sep 14 12:08:18 2010 +0800
+++ b/doc/raw/build/protocol/getevents.mode.xml	Tue Sep 14 13:42:00 2010 +0800
@@ -131,6 +131,10 @@ The time the user posted (or said they p
 The time the user posted (or said they posted, rather, since users can back-date posts) the item being returned.
 </des></scalar></key>
 
+<key name="logtime" count="1"><scalar><des>
+The UTC time that the server logged when the post was first created.
+</des></scalar></key>
+
 <key name="security" count="1"><scalar><des>
 If this variable is not returned, then the security of the post is <emphasis>public</emphasis>, otherwise this value will be <emphasis>private</emphasis> or usemask.
 </des></scalar></key>
@@ -190,6 +194,10 @@ Server: Apache/1.3.4 (Unix)
 &lt;value&gt;&lt;string&gt;2020-02-20 02:20:00&lt;/string&gt;&lt;/value&gt;
 
 &lt;/member&gt;
+&lt;member&gt;&lt;name&gt;logtime&lt;/name&gt;
+&lt;value&gt;&lt;string&gt;2020-02-20 08:23:48&lt;/string&gt;&lt;/value&gt;
+
+&lt;/member&gt;
 &lt;member&gt;&lt;name&gt;event&lt;/name&gt;
 &lt;value&gt;&lt;string&gt;yes its true its ...&lt;/string&gt;&lt;/value&gt;
 &lt;/member&gt;
@@ -205,6 +213,10 @@ Server: Apache/1.3.4 (Unix)
 &lt;value&gt;&lt;struct&gt;
 &lt;member&gt;&lt;name&gt;eventtime&lt;/name&gt;
 &lt;value&gt;&lt;string&gt;2002-07-14 11:17:00&lt;/string&gt;&lt;/value&gt;
+
+&lt;/member&gt;
+&lt;member&gt;&lt;name&gt;logtime&lt;/name&gt;
+&lt;value&gt;&lt;string&gt;2002-07-14 17:17:51&lt;/string&gt;&lt;/value&gt;
 
 &lt;/member&gt;
 &lt;member&gt;&lt;name&gt;event&lt;/name&gt;
diff -r 243791185af8 -r fecfa5b4646a htdocs/protocol.dat
--- a/htdocs/protocol.dat	Tue Sep 14 12:08:18 2010 +0800
+++ b/htdocs/protocol.dat	Tue Sep 14 13:42:00 2010 +0800
@@ -582,6 +582,10 @@ The unique integer ItemID of the <I>n</I
 .des
 The time the user posted (or said they posted, rather, since users can back-date posts) the <I>n</I>th item being returned.
 }
+{ events_<I>n</I>_logtime
+.des
+The UTC time that the server logged when the post was first created.
+}
 { events_<I>n</I>_event
 .des
 The <I>n</I>th event text itself.  This value is first truncated if the <TT>truncate</TT> variable is set, and then it is URL-encoded (alphanumerics stay the same, weird symbols to <TT>%hh</TT>, and spaces to <TT>+</TT> signs, just like URLs or post request).  This allows posts with line breaks to come back on one line.
--------------------------------------------------------------------------------