ApiSetNotificationTimestamp: Make entirewatchlist more efficient
authorRoan Kattouw <roan.kattouw@gmail.com>
Thu, 3 Jan 2019 01:41:04 +0000 (17:41 -0800)
committerRoan Kattouw <roan.kattouw@gmail.com>
Wed, 16 Jan 2019 22:06:46 +0000 (14:06 -0800)
Use WatchedItemStore's built-in feature for clearing the entire
watchlist when no timestamp is specified. When a timestamp is specified,
this will still use the inefficient page-by-page method, which I'll
improve in a follow-up commit.

Bug: T207941
Change-Id: I2008ff89c95fe6f66a3fd789d2cef0e8fe52bd93

RELEASE-NOTES-1.33
includes/api/ApiSetNotificationTimestamp.php

index 3dfca9a..d73a260 100644 (file)
@@ -80,6 +80,8 @@ production.
 * (T212356) When using action=delete on pages with many revisions, the module
   may return a boolean-true 'scheduled' and no 'logid'. This signifies that the
   deletion will be processed via the job queue.
+* action=setnotificationtimestamp will now update the watchlist asynchronously
+  if entirewatchlist is set, so updates may not be visible immediately
 
 === Action API internal changes in 1.33 ===
 * A number of deprecated methods for API documentation, intended for overriding
index b81c5bf..41c207b 100644 (file)
@@ -108,10 +108,14 @@ class ApiSetNotificationTimestamp extends ApiBase {
                $result = [];
                if ( $params['entirewatchlist'] ) {
                        // Entire watchlist mode: Just update the thing and return a success indicator
-                       $watchedItemStore->setNotificationTimestampsForUser(
-                               $user,
-                               $timestamp
-                       );
+                       if ( is_null( $timestamp ) ) {
+                               $watchedItemStore->resetAllNotificationTimestampsForUser( $user );
+                       } else {
+                               $watchedItemStore->setNotificationTimestampsForUser(
+                                       $user,
+                                       $timestamp
+                               );
+                       }
 
                        $result['notificationtimestamp'] = is_null( $timestamp )
                                ? ''