From 2a7f4fb2a552d5e02757106c75a9647ac68bacab Mon Sep 17 00:00:00 2001 From: Abe Jellinek Date: Tue, 28 Jan 2025 10:39:43 -0500 Subject: [PATCH] Local API: Return everything when since=0 Addresses #5011 (option A) --- .../zotero/xpcom/localAPI/server_localAPI.js | 15 ++++++++++----- test/tests/server_localAPITest.js | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/chrome/content/zotero/xpcom/localAPI/server_localAPI.js b/chrome/content/zotero/xpcom/localAPI/server_localAPI.js index b7581426ff..070a29b7d8 100644 --- a/chrome/content/zotero/xpcom/localAPI/server_localAPI.js +++ b/chrome/content/zotero/xpcom/localAPI/server_localAPI.js @@ -139,7 +139,9 @@ class LocalAPIEndpoint { if (Number.isNaN(since)) { return this.makeResponse(400, 'text/plain', `Invalid 'since' value '${requestData.searchParams.get('since')}'`); } - response.data = response.data.filter(dataObject => dataObject.version > since); + if (since !== 0) { + response.data = response.data.filter(dataObject => dataObject.version > since); + } } if (dataIsArray && response.data.length > 1) { @@ -215,9 +217,12 @@ class LocalAPIEndpoint { if (lastModifiedVersion !== undefined) { headers['Last-Modified-Version'] = lastModifiedVersion; } - if (requestData.headers['If-Modified-Since-Version'] - && lastModifiedVersion <= parseInt(requestData.headers['If-Modified-Since-Version'])) { - return this.makeResponse(304, headers, ''); + let ifModifiedSinceVersion = requestData.headers['If-Modified-Since-Version']; + if (ifModifiedSinceVersion) { + ifModifiedSinceVersion = parseInt(ifModifiedSinceVersion); + if (ifModifiedSinceVersion !== 0 && lastModifiedVersion <= ifModifiedSinceVersion) { + return this.makeResponse(304, headers, ''); + } } return this.makeDataObjectResponse(requestData, response.data, headers); } @@ -792,7 +797,7 @@ Zotero.Server.LocalAPI.FullText = class extends LocalAPIEndpoint { let rows = await Zotero.DB.queryAsync( "SELECT I.key, FI.version " + "FROM fulltextItems FI JOIN items I USING (itemID) " - + "WHERE libraryID=? AND FI.version>?", + + "WHERE libraryID=?1 AND (?2=0 OR FI.version>?2)", [libraryID, since] ); let obj = {}; diff --git a/test/tests/server_localAPITest.js b/test/tests/server_localAPITest.js index a4350fa6da..34a24444c0 100644 --- a/test/tests/server_localAPITest.js +++ b/test/tests/server_localAPITest.js @@ -271,7 +271,7 @@ describe("Local API Server", function () { let { response: response1 } = await apiGet('/users/0/items?since=' + Zotero.Libraries.userLibrary.libraryVersion); assert.isEmpty(response1); - let { response: response2 } = await apiGet('/users/0/items?since=-1'); + let { response: response2 } = await apiGet('/users/0/items?since=0'); assert.lengthOf(response2, allItems.length); }); }); @@ -302,7 +302,7 @@ describe("Local API Server", function () { describe("/fulltext?since=", function () { it("should return items with full-text content", async function () { - let { response } = await apiGet('/users/0/fulltext?since=-1'); + let { response } = await apiGet('/users/0/fulltext?since=0'); assert.deepEqual(Object.entries(response), [[subcollectionAttachment.key, subcollectionAttachment.version]]); }); });