diff --git a/images/test.jpg b/images/test.jpg new file mode 100644 index 0000000..92fa529 Binary files /dev/null and b/images/test.jpg differ diff --git a/manga/init.lua b/manga/init.lua index 3666fdc..fdabd42 100644 --- a/manga/init.lua +++ b/manga/init.lua @@ -23,9 +23,10 @@ function m.storeList(list) end end m.azlist = titles + return titles end -- returns manga -m.getManga = function(title) +m.getManga = THREAD:newFunction(function(title) local http = require("socket.http") local manga = http.request(title.Link) local tab = {} @@ -45,7 +46,7 @@ m.getManga = function(title) end end return tab -end +end) local queue = multi:newSystemThreadedJobQueue(16) queue:doToAll(function() multi,thread = require("multi"):init() @@ -70,20 +71,25 @@ m.getPages = function(manga,chapter) local http = require("socket.http") local tab = {} local cc = 0 + local done = false local page = http.request(manga.Chapters[chapter].Link) tab.pages = {page:match([[id="imgholder.-src="([^"]*)]])} tab.nextChapter = "http://www.mangareader.net"..page:match([[Next Chapter:.-href="([^"]*)]]) + local lastJob local conn = queue.OnJobCompleted(function(jid,link) table.insert(tab.pages,link) cc=cc+1 + if jid==lastJob then + done = true + end end) local count = 0 for link,page in page:gmatch([[]]) do - queue:pushJob("getImage","http://www.mangareader.net"..link) + lastJob = queue:pushJob("getImage","http://www.mangareader.net"..link) count = count + 1 end thread.hold(function() - return count==#tab.pages + return done end) return tab end diff --git a/multi/integration/loveManager/extensions.lua b/multi/integration/loveManager/extensions.lua index aeb3b2d..08f8dd3 100644 --- a/multi/integration/loveManager/extensions.lua +++ b/multi/integration/loveManager/extensions.lua @@ -105,7 +105,6 @@ function multi:newSystemThreadedJobQueue(n) thread.yield() local dat = c.queueReturn:pop() if dat then - print(dat) c.OnJobCompleted:Fire(unpack(dat)) end end diff --git a/multi/integration/loveManager/init.lua b/multi/integration/loveManager/init.lua index 9097609..14a3c9e 100644 --- a/multi/integration/loveManager/init.lua +++ b/multi/integration/loveManager/init.lua @@ -49,11 +49,13 @@ local THREAD_ID = 1 local OBJECT_ID = 0 function THREAD:newFunction(func,holup) return function(...) - local t = multi:newSystemThread("SystemThreadedFunction",func,...) + local t = multi:newSystemThread("SystemThreadedFunction"..math.random(0,999999999),func,...) return thread:newFunction(function() return thread.hold(function() if t.stab["returns"] then - return unpack(t.stab.returns) + local dat = t.stab.returns + t.stab.returns = nil + return unpack(dat) end end) end,holup)() diff --git a/pages/search.lua b/pages/search.lua index 0f2479c..c022961 100644 --- a/pages/search.lua +++ b/pages/search.lua @@ -1,23 +1,112 @@ +local Set = require("set") local mangaReader = require("manga") local multi,thread = require("multi"):init() +local titles +multi:newThread(function() + titles = mangaReader.storeList(mangaReader.init()) +end) +local scale = 2 +local mangaSize = { + x=200/scale, + y=288/scale +} +function tprint (tbl, indent) + if not indent then indent = 0 end + for k, v in pairs(tbl) do + formatting = string.rep(" ", indent) .. k .. ": " + if type(v) == "table" then + print(formatting) + tprint(v, indent+1) + elseif type(v) == 'boolean' then + print(formatting .. tostring(v)) + else + print(formatting .. v) + end + end +end +function searchFor(query) + query = Set(query:split(" ")) + local list = {} + for i,v in pairs(titles) do + local t = Set(v.Title:split(" ")) + local tab = {} + for k in Set.elements(query*t) do table.insert(tab,k) end + if #tab==Set.card(query) then + table.insert(list,v) + end + end + return list +end +function searchBy(char) + local list = {} + for i,v in pairs(titles) do + if v.Title:sub(1,1):lower()==char:sub(1,1):lower() or (char=="#" and tonumber(v.Title:sub(1,1))~=nil) then + table.insert(list,v) + end + end + return list +end +local chars = {"#"} +for i=65,90 do + table.insert(chars,string.char(i)) +end local function init(page,workspace) + local holder = page:newFrame("",15,80,-30,-95,0,0,1,1) + holder.Visibility = 0 + holder.BorderSize = 0 + page.ClipDescendants = true + holder:OnUpdate(function() + local c = holder:getChildren() + for i=1,#c do + local x,y = InGridX(i,holder.width,0,mangaSize.x+5,mangaSize.y+5) + c[i]:SetDualDim(x,y+5) + end + local size = math.floor(holder.width/(mangaSize.x+5))*(mangaSize.x+5) + holder:SetDualDim((page.width-size)/2) + end) local nav = page:newFrame(10,10,-20,40,0,0,1) + local SBL = page:newFrame(0,55,540,20) + for i,v in pairs(chars) do + local temp = SBL:newTextLabel(v,v,(i-1)*20,0,20,20) + temp.Color = theme.button + temp:fitFont() + temp:OnReleased(thread:newFunction(function() + thread.hold(function() return titles end) + local list = searchBy(temp.text) + local c = holder:getChildren() + for i=#c,1,-1 do + c[i]:Destroy() + end + for i,v in pairs(list) do + thread.sleep(.5) + local manga = mangaReader.getManga(v).connect(function(manga) + print(v.Title,manga.Cover) + local temp = holder:newImageButton(nil,0,0,mangaSize.x,mangaSize.y) + temp.BorderSize = 2 + temp:SetImage(manga.Cover) + end) + end + end)) + end + --[[ + local temp = holder:newImageLabel("images/test.jpg",0,0,mangaSize.x,mangaSize.y) + temp.BorderSize = 2 + ]] + SBL:centerX() nav.Color = theme.header nav:setRoundness(5,5,60) local search = nav:newTextButton("Search","Search",5,5,60,-10,0,0,0,1) - search.Color = theme.button--Color.new("2196F3") + search.Color = theme.button search:fitFont() - local func = thread:newFunction(function() - mangaReader.storeList(mangaReader.init()) - local title = mangaReader.getList()[643] - local manga = mangaReader.getManga(title) - local page = mangaReader.getPages(manga,1) - - end) - search:OnReleased(function() - func() - end) local bar = nav:newTextBox("","",70,5,-75,-10,0,0,1,1) + search:OnReleased(thread:newFunction(function() + thread.hold(function() return titles end) + -- tprint(searchBy("a")) + -- tprint(searchFor(bar.text)) + -- local manga = mangaReader.getManga(title) + -- local page = mangaReader.getPages(manga,1) + -- print(page) + end)) bar:fitFont() bar.Color = theme.input bar.XTween = 1 diff --git a/set.lua b/set.lua new file mode 100644 index 0000000..1a612de --- /dev/null +++ b/set.lua @@ -0,0 +1,42 @@ +local pairs, setmetatable = pairs, setmetatable +local mt -- metatable +mt = { + __add = function(s1, s2) -- union + local s = {} + for e in pairs(s1) do s[e] = true end + for e in pairs(s2) do s[e] = true end + return setmetatable(s, mt) + end, + __mul = function(s1, s2) -- intersection + local s = {} + for e in pairs(s1) do + if s2[e] then s[e] = true end + end + return setmetatable(s, mt) + end, + __sub = function(s1, s2) -- set difference + local s = {} + for e in pairs(s1) do + if not s2[e] then s[e] = true end + end + return setmetatable(s, mt) + end, + __tostring = function(s) + return table.concat(s,",") + end +} + +local card = function(s) -- #elements + local n = 0 + for k in pairs(s) do n = n + 1 end + return n +end + +return setmetatable({elements = pairs, card = card}, { + __call = function(_, t) -- new set + local t = t or {} + local s = {} + for _, e in pairs(t) do s[e:lower()] = true end + return setmetatable(s, mt) + end +}) \ No newline at end of file