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" );
+
+}
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org