fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2011-12-29 11:14 am

[dw-free] Implement getreadpage in the API

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

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

New API method "getreadpage" which accepts as arguments "itemshow", "skip".
"getfriendspage" now returns a message saying it's obsolete.

Patch by [personal profile] fu.

Files modified:
  • cgi-bin/LJ/Protocol.pm
  • t/protocol.t
--------------------------------------------------------------------------------
diff -r 1275d9db0266 -r 9204faa7f6ec cgi-bin/LJ/Protocol.pm
--- a/cgi-bin/LJ/Protocol.pm	Thu Dec 29 18:45:32 2011 +0800
+++ b/cgi-bin/LJ/Protocol.pm	Thu Dec 29 19:14:06 2011 +0800
@@ -196,6 +196,7 @@
     if ($method eq "sessionexpire")    { return sessionexpire(@args);    }
     if ($method eq "getusertags")      { return getusertags(@args);      }
     if ($method eq "getfriendspage")   { return getfriendspage(@args);   }
+    if ($method eq "getreadpage")      { return getreadpage(@args);   }
     if ($method eq "getinbox")         { return getinbox(@args);         }
     if ($method eq "sendmessage")      { return sendmessage(@args);      }
     if ($method eq "setmessageread")   { return setmessageread(@args);   }
@@ -252,6 +253,11 @@
 
 sub getfriendspage
 {
+    return fail( $_[1], 504, "Use 'getreadpage' instead." );
+}
+
+sub getreadpage
+{
     my ($req, $err, $flags) = @_;
     return undef unless authenticate($req, $err, $flags);
     my $u = $flags->{'u'};
@@ -261,14 +267,14 @@
     my $skip = (defined $req->{skip}) ? $req->{skip} : 0;
     return fail($err, 209, "Bad skip value") if $skip ne int($skip ) or $skip  < 0 or $skip  > 100;
 
-    my @entries = LJ::get_friend_items({
-        'u' => $u,
-        'userid' => $u->{'userid'},
-        'remote' => $u,
-        'itemshow' => $itemshow,
-        'skip' => $skip,
-        'dateformat' => 'S2',
-    });
+    my @entries = $u->watch_items(
+        remote      => $u,
+
+        itemshow    => $itemshow,
+        skip        => $skip,
+
+        dateformat  => 'S2',
+    );
 
     my @attrs = qw/subject_raw event_raw journalid posterid ditemid security/;
 
@@ -3385,6 +3391,9 @@
     if ($req->{'mode'} eq "getfriendspage") {
         return getfriendspage($req, $res, $flags);
     }
+    if ($req->{'mode'} eq "getfriendspage") {
+        return getreadpage( $req, $res, $flags );
+    }
 
     ### unknown mode!
     $res->{'success'} = "FAIL";
@@ -3393,7 +3402,7 @@
 }
 
 ## flat wrapper
-sub getfriendspage
+sub getreadpage
 {
     my ($req, $res, $flags) = @_;
 
@@ -3424,6 +3433,37 @@
     return 1;
 }
 
+sub getreadpage
+{
+    my ($req, $res, $flags) = @_;
+
+    my $err = 0;
+    my $rq = upgrade_request($req);
+
+    my $rs = LJ::Protocol::do_request("getreadpage", $rq, \$err, $flags);
+    unless ($rs) {
+        $res->{'success'} = "FAIL";
+        $res->{'errmsg'} = LJ::Protocol::error_message($err);
+        return 0;
+    }
+
+    my $ect = 0;
+    foreach my $evt (@{$rs->{'entries'}}) {
+        $ect++;
+        foreach my $f (qw(subject_raw journalname journaltype postername postertype ditemid security)) {
+            if (defined $evt->{$f}) {
+                $res->{"entries_${ect}_$f"} = $evt->{$f};
+            }
+        }
+        $res->{"entries_${ect}_event"} = LJ::eurl($evt->{'event_raw'});
+    }
+
+    $res->{'entries_count'} = $ect;
+    $res->{'success'} = "OK";
+
+    return 1;
+}
+
 ## flat wrapper
 sub login
 {
diff -r 1275d9db0266 -r 9204faa7f6ec t/protocol.t
--- a/t/protocol.t	Thu Dec 29 18:45:32 2011 +0800
+++ b/t/protocol.t	Thu Dec 29 19:14:06 2011 +0800
@@ -3,7 +3,7 @@
 use warnings;
 
 use Test::More;
-plan tests => 237;
+plan tests => 246;
 
 use lib "$ENV{LJHOME}/cgi-bin";
 require 'ljlib.pl';
@@ -893,3 +893,56 @@
     ok( $comment->journal->equals( $u2 ), "Check comment journal when posting to another journal" );
 }
 
+note( "getfriendspage" );
+{
+    my $u = temp_user();
+    ( $res, $err ) = $do_request->( "getfriendspage",
+        username => $u->user
+    );
+
+    $check_err->( 504, "'getfriendspage' is deprecated." );
+}
+
+note( "getreadpage" );
+{
+    my $u1 = temp_user();
+    my $u2 = temp_user();
+
+    $u1->add_edge( $u2, watch => { nonotify => 1 } );
+    my $e1 = $u2->t_post_fake_entry( body => "entry 1 " . rand(), subject => "#1", );
+    my $e2 = $u2->t_post_fake_entry( body => "entry 2 " . rand(), subject => "#2", );
+    my $e3 = $u2->t_post_fake_entry( body => "entry 3 " . rand(), subject => "#3", );
+
+    my @entries;
+
+    # show everything
+    ( $res, $err ) = $do_request->( "getreadpage",
+        username => $u1->user,
+    );
+    @entries = @{$res->{entries}};
+    is( scalar @entries, 3, "3... 3 entries ah HA HA HA" );
+    is( $entries[0]->{subject_raw}, "#3" );
+    is( $entries[1]->{subject_raw}, "#2" );
+    is( $entries[2]->{subject_raw}, "#1" );
+
+
+    # limit to one item
+    ( $res, $err ) = $do_request->( "getreadpage",
+        username => $u1->user,
+        itemshow => 1,
+    );
+    @entries = @{$res->{entries}};
+    is( scalar @entries, 1, "we asked for one entry" );
+    is( $entries[0]->{subject_raw}, "#3" );
+
+    # limit to one, skip one
+    ( $res, $err ) = $do_request->( "getreadpage",
+        username => $u1->user,
+        itemshow => 1,
+        skip     => 1,
+    );
+    @entries = @{$res->{entries}};
+    is( scalar @entries, 1, "we asked for one entry (skip back one)" );
+    is( $entries[0]->{subject_raw}, "#2" );
+
+}
--------------------------------------------------------------------------------