From 05f1b2a9500d63b4b6b933ec4ba4a8db8e6e906a Mon Sep 17 00:00:00 2001 From: wasu-code <61418403+wasu-code@users.noreply.github.com> Date: Tue, 15 Jul 2025 16:56:08 +0200 Subject: [PATCH 1/3] search current subreddit --- src/all/Reddit.lua | 52 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/src/all/Reddit.lua b/src/all/Reddit.lua index 8acfd69..e2fda7a 100644 --- a/src/all/Reddit.lua +++ b/src/all/Reddit.lua @@ -1,4 +1,4 @@ --- {"id": 23119212, "ver": "1.0.2", "libVer": "1.0.0", "author": "wasu-code", "dep": ["url>=1.0.0"]} +-- {"id": 23119212, "ver": "1.0.3", "libVer": "1.0.0", "author": "wasu-code", "dep": ["url>=1.0.0"]} local qs = Require("url").querystring @@ -15,6 +15,7 @@ local DEFAULT_COVER = "https://redditinc.com/hubfs/Reddit%20Inc/Blog/Imported_Bl local DEFAULT_COVER2 = "https://redditinc.com/hubfs/Reddit%20Inc/Blog/Imported_Blog_Media/BlogHeader_PortalSnoo_003.jpg" local NEXT_PAGE_URL -- will hold next page url (shrunken) with token param +local LAST_SUBREDDIT -- will hold last used listing (to be used in search) -- Filters local FID_SORT = 2 @@ -48,25 +49,40 @@ local function parseListing(doc) end) end -local function listing(data, query) - if not query or query == "" then +local function parseSearch(doc) + return map(doc:select('a[data-testid="post-title-text"]'), function(card) + return Novel { + title = card:text(), + link = shrinkURL(card:attr("href")), + imageURL = DEFAULT_COVER + } + end) +end + +local function listing(data, subreddit) + if not subreddit or subreddit == "" then error("Subreddit not provided (set subreddit name in extension's settings)") end + LAST_SUBREDDIT = subreddit + local page = data[PAGE] local sort = SORT_VALUES[data[FID_SORT] + 1] local flair = data[FID_FLAIR] local params = { - name = query + name = subreddit } if flair ~= "" then params.f = '"' .. flair .. '"' end - local url = qs(params, "/svc/shreddit/community-more-posts/".. sort .. "/") + local url + if page > 1 then url = NEXT_PAGE_URL + else + url = qs(params, "/svc/shreddit/community-more-posts/".. sort .. "/") end local doc = GETDocument(expandURL(url)) @@ -139,7 +155,31 @@ local function search(data) } } else - error("Invalid query format. Expected: 'r/subreddit' or a valid Reddit URL.") + -- search in last used subreddit + + -- will appear in global search if extension/any subreddit wasn't yet opened in app + if not LAST_SUBREDDIT then error("Invalid query format. Expected: 'r/subreddit' or a valid Reddit URL.") end + + local page = data[PAGE] + local sort = SORT_VALUES[data[FID_SORT] + 1] + local flair = data[FID_FLAIR] + + local url + + if page > 1 then + url = NEXT_PAGE_URL + else + url = "/svc/shreddit/search?q=subreddit:" .. LAST_SUBREDDIT .. "+" .. query + url = url .. (flair ~= "" and '+flair:%22"'..flair..'"' or "") + url = url .. (sort ~= "" and "&sort="..sort or "") + url = url .. "&type=posts" + end + + local doc = GETDocument(expandURL(url)) + local nextPageElement = doc:selectFirst('faceplate-partial') + NEXT_PAGE_URL = nextPageElement:attr("src") + + return parseSearch(doc) end end From 798f55291161ba585f2f96d218a75c8519f227bb Mon Sep 17 00:00:00 2001 From: wasu-code <61418403+wasu-code@users.noreply.github.com> Date: Tue, 15 Jul 2025 17:48:39 +0200 Subject: [PATCH 2/3] covers in listing --- src/all/Reddit.lua | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/all/Reddit.lua b/src/all/Reddit.lua index e2fda7a..a2b7945 100644 --- a/src/all/Reddit.lua +++ b/src/all/Reddit.lua @@ -40,21 +40,25 @@ local function expandURL(url) end local function parseListing(doc) - return map(doc:select('a[slot="full-post-link"]'), function(card) + return map(doc:select("article:has(a[slot=full-post-link])"), function(card) + local a = card:selectFirst("a[slot=full-post-link]") + local img = card:selectFirst("[slot=post-media-container] img") return Novel { - title = card:text(), - link = shrinkURL(card:attr("href")), - imageURL = DEFAULT_COVER + title = a:text(), + link = shrinkURL(a:attr("href")), + imageURL = img and img:attr("src") or DEFAULT_COVER } end) end local function parseSearch(doc) - return map(doc:select('a[data-testid="post-title-text"]'), function(card) + return map(doc:select("[data-testid=search-post-unit]"), function(card) + local a = card:selectFirst("a[data-testid=post-title-text]") + local img = card:selectFirst("faceplate-img") return Novel { title = card:text(), link = shrinkURL(card:attr("href")), - imageURL = DEFAULT_COVER + imageURL = img and img:attr("src") or DEFAULT_COVER } end) end From 1dc4d981c09809eb58934decd1043a0a4e17c9a9 Mon Sep 17 00:00:00 2001 From: wasu-code <61418403+wasu-code@users.noreply.github.com> Date: Tue, 15 Jul 2025 18:27:19 +0200 Subject: [PATCH 3/3] fix search listing --- src/all/Reddit.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/all/Reddit.lua b/src/all/Reddit.lua index a2b7945..e9a91d8 100644 --- a/src/all/Reddit.lua +++ b/src/all/Reddit.lua @@ -56,8 +56,8 @@ local function parseSearch(doc) local a = card:selectFirst("a[data-testid=post-title-text]") local img = card:selectFirst("faceplate-img") return Novel { - title = card:text(), - link = shrinkURL(card:attr("href")), + title = a:text(), + link = shrinkURL(a:attr("href")), imageURL = img and img:attr("src") or DEFAULT_COVER } end) @@ -181,7 +181,7 @@ local function search(data) local doc = GETDocument(expandURL(url)) local nextPageElement = doc:selectFirst('faceplate-partial') - NEXT_PAGE_URL = nextPageElement:attr("src") + NEXT_PAGE_URL = nextPageElement and nextPageElement:attr("src") or nil return parseSearch(doc) end