110 lines
3.5 KiB
Lua
110 lines
3.5 KiB
Lua
-- take note of YtLink, I keep passing it around in order to show it as the title bar
|
|
-- of the download window, YOU WILL HAVE TO PAY ATTENTION TO IT
|
|
-- IT GOES THROUGH FUCKING EVERYTHING
|
|
-- Also it will be replaced by what the user saves the file as
|
|
-- keep that in mind as well
|
|
require ('iuplua')
|
|
|
|
local cancelflag --set variable
|
|
local downloadProgress --set variable
|
|
|
|
local function downloadStart(YtLink) --create button and cancle flag
|
|
cancelButton = iup.button{
|
|
title = "Cancel",
|
|
action = function()
|
|
cancelflag = true
|
|
|
|
--return iup.CLOSE --not sure if needed
|
|
|
|
end
|
|
|
|
}
|
|
local pTest = "1"
|
|
downloadProgress = iup.progressbar{expand="HORIZONTAL"}
|
|
dlgProgress = iup.dialog{ --create main window
|
|
title = YtLink,
|
|
dialogframe = "YES", border = "YES",
|
|
iup.vbox { -- create vbox that contains said objects
|
|
downloadProgress,
|
|
cancelButton,
|
|
pTest,
|
|
}
|
|
}
|
|
dlgProgress.size = "QUARTERxEIGHT" --should be size of dialog box
|
|
-- dlgProgress.menubox = "NO" -- no windows menus
|
|
dlgProgress.close_cb = cancelButton.action -- calls the action of the button
|
|
dlgProgress:showxy(iup.CENTER, iup.CENTER) -- show and position box
|
|
return dlgProgress
|
|
end
|
|
|
|
|
|
local function DL_progress(YtLink) -- monitor download progress
|
|
downloadStart(YtLink) -- start the progress bar
|
|
downloadProgress.value = 0
|
|
local pipe = io.popen("youtube-dl " ..YtLink)
|
|
repeat
|
|
local c = pipe:read(20) -- read the first 20 characters of each line
|
|
if c then -- if c is true then...
|
|
|
|
local b = string.match(c, '.....%%') -- %% in a string is "%"
|
|
|
|
-- string.match finds the percent sign and then finds every character
|
|
-- for every dot you place. dots before grab before the character
|
|
-- dots after grab after the character
|
|
|
|
--[[
|
|
Perhaps do a different method
|
|
round up and only update if number has changed
|
|
-- didn't help at all, reverted to less code]]
|
|
|
|
|
|
if b then
|
|
|
|
--here we take the last character off of the string
|
|
--in this case it is the "percent" sign
|
|
|
|
local b = string.sub(b,0,-2)
|
|
downloadProgress.value = b/100 -- x out of 100
|
|
-- in this case x is the progress
|
|
-- data we grabbed
|
|
iup.Flush() -- speeds everything up considerably
|
|
-- when changing an attribute of an element, the change may not
|
|
-- take place immediately
|
|
-- in that case throw in a flush after the change
|
|
|
|
iup.LoopStep() -- required to work, also allows user to click button
|
|
iup.Flush() -- added this second flush... helps a shit ton
|
|
if cancelflag then -- if cancelflag is true, then break
|
|
-- which happens if you click the button
|
|
|
|
iup.Message("Terminated", "You have canceled the download")
|
|
iup.Flush()
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
until not c-- creating a loop until c is not true
|
|
pipe:close() -- closing the ipopen
|
|
iup.Close()
|
|
end
|
|
|
|
popin = {}
|
|
popin.ytdl = function(tubeLink)
|
|
DL_progress(tubeLink)
|
|
end
|
|
|
|
--if you can have your script call this one and insert the link to YtLink... win
|
|
|
|
--local YtLink = ('http://www.youtube.com/watch?v=jrmlums5bV8')
|
|
|
|
|
|
--DL_progress( YtLink)
|
|
|
|
|