Account for result pagination when fetching notes or notebooks from Joplin API (#7162)

The Joplin Web Clipper API now paginates results for the APIs for fetching notes or notebooks

Iterate through Joplin API results in order
reviewable/pr7345/r2^2
Georgelemental 3 years ago committed by GitHub
parent eb57c4e0da
commit 053df60553
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -61,34 +61,49 @@ end
-- If successful returns id of found note. -- If successful returns id of found note.
function JoplinClient:findNoteByTitle(title, notebook_id) function JoplinClient:findNoteByTitle(title, notebook_id)
local url = "http://"..self.server_ip..":"..self.server_port.."/notes?".."token="..self.auth_token.."&fields=id,title,parent_id" local url_base = "http://"..self.server_ip..":"..self.server_port.."/notes?".."token="..self.auth_token.."&fields=id,title,parent_id&page="
local notes = self:_makeRequest(url, "GET") local url
local page = 1
for _, note in pairs(notes) do local has_more
if note.title == title then
if notebook_id == nil or note.parent_id == notebook_id then repeat
return note.id url = url_base..page
local notes = self:_makeRequest(url, "GET")
has_more = notes.has_more
for _, note in ipairs(notes.items) do
if note.title == title then
if notebook_id == nil or note.parent_id == notebook_id then
return note.id
end
end end
end end
end page = page + 1
until not has_more
return false return false
end end
-- If successful returns id of found notebook (folder). -- If successful returns id of found notebook (folder).
function JoplinClient:findNotebookByTitle(title) function JoplinClient:findNotebookByTitle(title)
local url = "http://"..self.server_ip..":"..self.server_port.."/folders?".."token="..self.auth_token.."&".."query="..title local url_base = "http://"..self.server_ip..":"..self.server_port.."/folders?".."token="..self.auth_token.."&".."query="..title.."&page="
local folders = self:_makeRequest(url, "GET")
for _, folder in pairs(folders) do local url
if folder.title== title then local page = 1
return folder.id local has_more
end
end
repeat
url = url_base..page
local folders = self:_makeRequest(url, "GET")
has_more = folders.has_more
for _, folder in ipairs(folders.items) do
if folder.title == title then
return folder.id
end
end
page = page + 1
until not has_more
return false return false
end end
@ -109,10 +124,10 @@ end
-- If successful returns id of created note. -- If successful returns id of created note.
function JoplinClient:createNote(title, note, parent_id, created_time) function JoplinClient:createNote(title, note, parent_id, created_time)
local request_body = { local request_body = {
title = title, title = title,
body = note, body = note,
parent_id = parent_id, parent_id = parent_id,
created_time = created_time created_time = created_time
} }
local url = "http://"..self.server_ip..":"..self.server_port.."/notes?".."token="..self.auth_token local url = "http://"..self.server_ip..":"..self.server_port.."/notes?".."token="..self.auth_token
local response = self:_makeRequest(url, "POST", request_body) local response = self:_makeRequest(url, "POST", request_body)

Loading…
Cancel
Save