Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 54 additions & 10 deletions src/all/Reddit.lua
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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
Expand All @@ -39,34 +40,53 @@ 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("[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 = a:text(),
link = shrinkURL(a:attr("href")),
imageURL = img and img:attr("src") or DEFAULT_COVER
}
end)
end

local function listing(data, query)
if not query or query == "" then
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))
Expand Down Expand Up @@ -139,7 +159,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 and nextPageElement:attr("src") or nil

return parseSearch(doc)
end
end

Expand Down
Loading