diff --git a/GuiManager/Core/Destroy.int b/GuiManager/Core/Destroy.int
new file mode 100644
index 0000000..341df75
--- /dev/null
+++ b/GuiManager/Core/Destroy.int
@@ -0,0 +1,32 @@
+-- More work needs to be done tbh
+function gui:_Destroy()
+ for i,v in pairs(self) do
+ self.Children={}
+ end
+ for i,v in pairs(self.threads) do
+ v:Kill()
+ end
+ for i,v in pairs(self.conns) do
+ v:Destroy()
+ end
+ self.Visible = false
+ self.Active = false
+end
+function gui:Destroy()
+ check=self.Parent:getChildren()
+ local objs = GetAllChildren(self)
+ local cc=0
+ for cc=1,#check do
+ if check[cc]==self then
+ table.remove(self.Parent.Children,cc)
+ end
+ end
+ self.Destroyed = true
+ if #self.Parent.Children==0 then
+ self.Parent.isLeaf = true
+ end
+ for i,v in pairs(objs) do
+ v:_Destroy()
+ end
+ self:_Destroy()
+end
\ No newline at end of file
diff --git a/GuiManager/Core/EventDefinitions.int b/GuiManager/Core/EventDefinitions.int
index 65782db..5710d91 100644
--- a/GuiManager/Core/EventDefinitions.int
+++ b/GuiManager/Core/EventDefinitions.int
@@ -1,13 +1,19 @@
local multi, thread = require("multi").init()
local buttonConv = {"l","r","m","x1","x2"} -- For the old stuff
+function gui:addThread(t)
+ table.insert(self.threads,t)
+end
+function gui:addConn(t)
+ table.insert(self.conns,t)
+end
function gui:OnClicked(func)
if not self.clickEvnt then
self.clickEvnt = true
self._connClicked = multi:newConnection()
- self._connClicked(func)
- multi:newThread(self.Name.."_Updater",function()
+ self:addConn(self._connClicked(func))
+ self:addThread(multi:newThread(self.Name.."_Updater",function()
while true do
- thread.hold(function() return self.Active or self.Destroyed end)
+ thread.hold(function() return self.Active or not self.Destroyed end)
if love.mouse.isDown(1) and self:canPress() then
self._connClicked:Fire("1",self,love.mouse.getX()-self.x,love.mouse.getY()-self.y)
end
@@ -27,66 +33,66 @@ function gui:OnClicked(func)
thread.kill()
end
end
- end)
+ end))
else
- self._connClicked(func)
+ self:addConn(self._connClicked(func))
end
end
function gui:OnPressed(func)
- multi.OnMousePressed(function(x,y,b)
+ self:addConn(multi.OnMousePressed(function(x,y,b)
if self:canPress() then
func(buttonConv[b],self,x,y)
end
- end)
+ end))
end
function gui:OnPressedOuter(func)
- multi.OnMousePressed(function(x,y,b)
+ self:addConn(multi.OnMousePressed(function(x,y,b)
if not(self:canPress()) then
func(buttonConv[b],self)
end
- end,nil,1)
+ end,nil,1))
end
function gui:OnReleased(func)
- multi.OnMouseReleased(function(x,y,b)
+ self:addConn(multi.OnMouseReleased(function(x,y,b)
if self:canPress() then
func(buttonConv[b],self,x,y)
end
- end)
+ end))
end
function gui:OnReleasedOuter(func)
- multi.OnMouseReleased(function(x,y,b)
+ self:addConn(multi.OnMouseReleased(function(x,y,b)
if not(self:canPress()) then
func(buttonConv[b],self)
end
- end,nil,1)
+ end,nil,1))
end
function gui:OnUpdate(func)
if not self.updateEvnt then
self._connUpdate = multi:newConnection()
- self._connUpdate(func)
+ self:addConn(self._connUpdate(func))
self.updateEvnt = true
- multi:newThread(self.Name.."_Updater",function()
+ self:addThread(multi:newThread(self.Name.."_Updater",function()
while true do
thread.hold(function() return self.Active end)
self._connUpdate:Fire(self)
end
- end)
+ end))
else
- self._connUpdate(func)
+ self:addConn(self._connUpdate(func))
end
end
function gui:OnMouseMoved(func)
- multi.OnMouseMoved(function(x,y,dx,dy)
+ self:addConn(multi.OnMouseMoved(function(x,y,dx,dy)
if self:canPress() then
func(self,x-self.x,y-self.y,dx,dy)
end
- end,nil,1)
+ end,nil,1))
end
gui.WhileHovering=gui.OnMouseMoved -- To keep older features working
local mbenter = multi:newConnection()
function gui:OnMouseEnter(func)
self.HE=false
- mbenter(func)
+ self:addConn(mbenter(func))
self:OnMouseMoved(function()
if self.HE == false then
self.HE=true
@@ -98,10 +104,10 @@ end
function gui:OnMouseExit(func)
if not self.exitEvnt then
self._connExit = multi:newConnection()
- self._connExit(func)
+ self:addConn(self._connExit(func))
self.exitEvnt = true
self.HE=false
- multi:newThread(self.Name.."_OnExit",function()
+ self:addThread(multi:newThread(self.Name.."_OnExit",function()
while true do
thread.hold(function() return self.HE or self.Destroyed end)
if not(self:canPress()) then
@@ -112,22 +118,17 @@ function gui:OnMouseExit(func)
thread.kill()
end
end
- end)
+ end))
else
- self._connExit(func)
+ self:addConn(self._connExit(func))
end
end
---[[
-x=(love.mouse.getX()-self.x)
-y=(love.mouse.getY()-self.y)
-self:Move(x,y)
-]]
function gui:OnMouseWheelMoved(func)
- multi.OnMouseWheelMoved(function(...)
+ self:addConn(multi.OnMouseWheelMoved(function(...)
if self:canPress() then
func(self,...)
end
- end)
+ end))
end
function gui:enableDragging(bool)
self.draggable = bool
@@ -154,48 +155,48 @@ function gui:enableDragging(bool)
self._connDragging:Fire(self)
end
end)
- multi.OnMouseReleased(function(x,y,b)
+ self:addConn(multi.OnMouseReleased(function(x,y,b)
if buttonConv[b]~=self.dragbut or not(self.draggable) or not(self.hasDrag) then return end
self.hasDrag = false
startX = nil
startY = nil
self._connDragEnd:Fire(self)
- end)
+ end))
end
function gui:OnDragStart(func)
if not self.dragEvnt then
self:enableDragging(true)
- self._connDragStart(func)
+ self:addConn(self._connDragStart(func))
else
- self._connDragStart(func)
+ self:addConn(self._connDragStart(func))
end
end
function gui:OnDragging(func)
if not self.dragEvnt then
self:enableDragging(true)
- self._connDragging(func)
+ self:addConn(self._connDragging(func))
else
- self._connDragging(func)
+ self:addConn(self._connDragging(func))
end
end
function gui:OnDragEnd(func)
if not self.dragEvnt then
self:enableDragging(true)
- self._connDragEnd(func)
+ self:addConn(self._connDragEnd(func))
else
- self._connDragEnd(func)
+ self:addConn(self._connDragEnd(func))
end
end
function gui:OnHotKey(key,func)
local tab=key:split("+")
- multi.OnKeyPressed(function()
+ self:addConn(multi.OnKeyPressed(function()
for i=1,#tab do
if not(love.keyboard.isDown(tab[i])) then
return
end
end
func(self)
- end)
+ end))
end
gui.addHotKey=gui.OnHotKey
gui.setHotKey=gui.OnHotKey
\ No newline at end of file
diff --git a/GuiManager/Core/newBase.int b/GuiManager/Core/newBase.int
index e16bcc4..17c629a 100644
--- a/GuiManager/Core/newBase.int
+++ b/GuiManager/Core/newBase.int
@@ -48,6 +48,8 @@ function gui:newBase(tp,name, x, y, w, h, sx ,sy ,sw ,sh)
c.DPI=love.window.getPixelScale()
x, y, w, h=c.DPI*x,c.DPI*y,c.DPI*w,c.DPI*h
end
+ c.threads = {}
+ c.conns = {}
c.centerFontY=true
c.FormFactor="rectangle"
c.Type=tp
diff --git a/GuiManager/Misc/Destroy.int b/GuiManager/Misc/Destroy.int
deleted file mode 100644
index dd8f5de..0000000
--- a/GuiManager/Misc/Destroy.int
+++ /dev/null
@@ -1,13 +0,0 @@
-function gui:Destroy()
- check=self.Parent:getChildren()
- local cc=0
- for cc=1,#check do
- if check[cc]==self then
- table.remove(self.Parent.Children,cc)
- end
- end
- self.Destroyed = true
- if #self.Parent.Children==0 then
- self.Parent.isLeaf = true
- end
-end
\ No newline at end of file
diff --git a/app.lua b/app.lua
index 3ee80a9..7f0b45a 100644
--- a/app.lua
+++ b/app.lua
@@ -64,10 +64,10 @@ local function init(a)
end)
app.workspace.Color = Color.Black
app.menu.Visible = false
- local search = app.createPage("Search","search")
- local favs = app.createPage("Favorites","favs")
- search:Goto()
- --app.createPage("Favorites","favs")
+ app.workspace.search = app.createPage("Search","search")
+ app.workspace.view, app.workspace.button = app.createPage("Viewer","view")
+ --app.workspace.button.Visible = false
+ app.workspace.search:Goto()
end
return {
init = init
diff --git a/manga/init.lua b/manga/init.lua
index d229e8c..9f20234 100644
--- a/manga/init.lua
+++ b/manga/init.lua
@@ -54,34 +54,31 @@ m.getManga = queue:newFunction("queue",function(title)
return tab
end)
m.getImage = queue:newFunction("getImage",function(pageurl)
+ local http = require("socket.http")
local page = http.request(pageurl)
return page:match([[id="imgholder.-src="([^"]*)]])
end)
-m._getPages = queue:newFunction("getPages",function(manga,chapter)
+m._getPages = queue:newFunction("getPages",function(Link)
+ local http = require("socket.http")
local tab = {}
- local page = http.request(manga.Chapters[chapter].Link)
- tab.pages = {page:match([[id="imgholder.-src="([^"]*)]])}
+ local page = http.request(Link)
+ tab.pages = {}
tab.nextChapter = "http://www.mangareader.net"..page:match([[Next Chapter:.-href="([^"]*)]])
for link,page in page:gmatch([[]]) do
- table.insert(tab.pages,getImage("http://www.mangareader.net"..link))
+ table.insert(tab.pages,"http://www.mangareader.net"..link)
end
return tab
end)
-- returns pages
-m.getPages = function(manga,chapter)
+m.getPages = function(chapter)
local http = require("socket.http")
local tab = {}
- local page = http.request(manga.Chapters[chapter].Link)
- tab.pages = {page:match([[id="imgholder.-src="([^"]*)]])}
+ local page = http.request(chapter.Link)
+ tab.pages = {chapter.Link}
tab.nextChapter = "http://www.mangareader.net"..page:match([[Next Chapter:.-href="([^"]*)]])
for link,page in page:gmatch([[]]) do
- m._getPages("http://www.mangareader.net"..link).connect(function(link)
- table.insert(tab.pages,link)
- end)
+ table.insert(tab.pages,"http://www.mangareader.net"..link)
end
- thread.hold(function()
- return done
- end)
- return tab
+ return tab.pages
end
return m
\ No newline at end of file
diff --git a/multi/init.lua b/multi/init.lua
index da2eb76..cc5fda9 100644
--- a/multi/init.lua
+++ b/multi/init.lua
@@ -783,8 +783,13 @@ function multi:newConnection(protect,func,kill)
c.lock = false
setmetatable(c,{__call=function(self,...)
local t = ...
- if type(t)=="table" and t.Type ~= nil then
- return self:Fire(args,select(2,...))
+ if type(t)=="table" then
+ for i,v in pairs(t) do
+ if v==self then
+ return self:Fire(...)
+ end
+ end
+ return self:connect(...)
else
return self:connect(...)
end
@@ -1559,41 +1564,18 @@ function multi:newThread(name,func,...)
if type(name) == "function" then
name = "Thread#"..threadCount
end
- -- local env = {}
- -- setmetatable(env,{
- -- __index = Gref,
- -- __newindex = function(t,k,v)
- -- if type(v)=="function" then
- -- rawset(t,k,thread:newFunction(v))
- -- else
- -- if type(v)=="table" then
- -- if v.isTFunc then
- -- if not _G["_stack_"] or #_G["_stack_"]==0 then
- -- _G["_stack_"] = {}
- -- local s = _G["_stack_"]
- -- local a,b,c,d,e,f,g = v.wait(true)
- -- table.insert(s,a)
- -- table.insert(s,b)
- -- table.insert(s,c)
- -- table.insert(s,d)
- -- table.insert(s,e)
- -- table.insert(s,f)
- -- local x = table.remove(_G["_stack_"])
- -- rawset(t,k,x)
- -- else
- -- local x = table.remove(_G["_stack_"])
- -- rawset(t,k,x)
- -- end
- -- else
- -- Gref[k]=v
- -- end
- -- else
- -- Gref[k]=v
- -- end
- -- end
- -- end
- -- })
- -- setfenv(func,env)
+ local env = {}
+ setmetatable(env,{
+ __index = Gref,
+ __newindex = function(t,k,v)
+ if type(v)=="function" then
+ rawset(t,k,thread:newFunction(v))
+ else
+ Gref[k]=v
+ end
+ end
+ })
+ setfenv(func,env)
local c={}
c.TempRets = {nil,nil,nil,nil,nil,nil,nil,nil,nil,nil}
c.startArgs = {...}
diff --git a/multi/integration/loveManager/extensions.lua b/multi/integration/loveManager/extensions.lua
index db99a10..3cab758 100644
--- a/multi/integration/loveManager/extensions.lua
+++ b/multi/integration/loveManager/extensions.lua
@@ -179,7 +179,7 @@ function multi:newSystemThreadedJobQueue(n)
queueReturn:push(tab)
end
end
- end).OnError(function(...)
+ end):OnError(function(...)
error(...)
end)
multi:newThread("Idler",function()
diff --git a/pages/favs.lua b/pages/favs.lua
deleted file mode 100644
index aa80b6b..0000000
--- a/pages/favs.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-local function init(page)
- page.Color = Color.new("7c2d5b")
- return page
-end
-return {
- init = init
-}
\ No newline at end of file
diff --git a/pages/search.lua b/pages/search.lua
index 5dddfbe..14d2f33 100644
--- a/pages/search.lua
+++ b/pages/search.lua
@@ -63,6 +63,7 @@ function getFavs()
return {}
end
end
+
local function init(page,workspace)
local favs = getFavs()
local holder = page:newFrame("",15,80,-30,-95,0,0,1,1)
@@ -86,6 +87,14 @@ local function init(page,workspace)
mangaViewer.Visible = false
end)
end)
+ function MenuItem(b,self)
+ multi:newThread(function()
+ thread.sleep(.1)
+ mangaViewer.Visible = false
+ end)
+ workspace.view:Goto()
+ workspace.view.doChapter(self.chapter)
+ end
goback.Color = theme.button
function setViewer(manga)
menu:reset()
@@ -124,10 +133,11 @@ local function init(page,workspace)
menu.header.Color = theme.header
menu.ref = {
[[setRoundness(5,5,30)]],
+ [[OnReleased(MenuItem)]],
Color = theme.menuitem
}
for i,v in ipairs(manga.Chapters) do
- menu:addItem(v.Lead, 20, 3)
+ menu:addItem(v.Lead, 20, 3).chapter = v
end
end
function addManga(manga,v)
@@ -212,9 +222,7 @@ local function init(page,workspace)
end
for i,v in pairs(favs) do
thread.yield()
- print(v.Title,v.Link)
mangaReader.getManga(v).connect(function(manga)
- print(manga.Title)
addManga(manga,{Title=manga.Title,Link=manga.Link})
end)
end
@@ -236,7 +244,6 @@ local function init(page,workspace)
end
for i,v in pairs(list) do
thread.yield()
- print(v)
mangaReader.getManga(v).connect(function(manga)
addManga(manga,{Title=manga.Title,Link=manga.Link})
end)
diff --git a/pages/view.lua b/pages/view.lua
new file mode 100644
index 0000000..9949822
--- /dev/null
+++ b/pages/view.lua
@@ -0,0 +1,46 @@
+local mangaReader = require("manga")
+local function init(page)
+ local holder
+ local masterI
+ page:OnMouseWheelMoved(function(self,x,y)
+ holder:Move(0,y*60)
+ end)
+ function buildPages(img,i)
+ masterI = masterI + 1
+ local temp = holder:newImageLabel(nil,0,(masterI-1)*1210,800,1200)
+ temp:SetImage(img)
+ temp:centerX()
+ return temp
+ end
+ queuePages = thread:newFunction(function(list)
+ local last
+ for i = 1,#list do
+ local img = mangaReader.getImage(list[i]).wait()
+ last = buildPages(img,i)
+ end
+ last:OnUpdate(function()
+ if last.loaded then return end
+ if last.y<_GuiPro.height then
+ last.loaded = true
+ local pages = mangaReader.getPages(list.nextChapter)
+ queuePages(pages).wait()
+ end
+ end)
+ end)
+ page.doChapter = thread:newFunction(function(chapter)
+ masterI = 0
+ if holder then
+ holder:Destroy()
+ else
+ holder = page:newFrame("",15,80,-30,-95,0,0,1,1)
+ end
+ holder.Visibility = 0
+ holder.BorderSize = 0
+ local pages = mangaReader.getPages(chapter)
+ print(queuePages(pages).wait())
+ end)
+ return page
+end
+return {
+ init = init
+}
\ No newline at end of file