Mandy/mandy.lua

174 lines
3.7 KiB
Lua
Raw Permalink Normal View History

2013-07-23 21:23:31 -05:00
#!/usr/bin/lua5.2
require("iuplua")
require("iupluacontrols")
require('progress')
2013-07-27 01:52:23 -05:00
require('ffmpeg_progress')
2013-07-26 20:36:15 -05:00
2013-07-23 21:23:31 -05:00
--Main url entry box
function url_entry()
2013-08-03 17:36:45 -05:00
local format = sel_format()
local url = ""
2013-08-03 17:36:45 -05:00
res, url, format = iup.GetParam("Mandy 0.5.0 - Enter URL", nil,
"Enter Youtube URL: %s\n"..
"Select an audio format: %l|mp3|ogg|flac|\n", url, format)
2013-08-03 17:36:45 -05:00
gFormat = sel_Codec(format)
2013-07-27 11:51:07 -05:00
if res == true then
if string.match(url, "youtube.com/watch") then
2013-08-03 17:36:45 -05:00
local format_config = io.open("Config.txt", "w")
format_config:write("local format = "..format)
format_config:close()
2013-07-27 11:51:07 -05:00
return url
else
2013-07-27 11:51:07 -05:00
iup.Message("Error", "The URL is not a youtube link")
iup.Flush()
iup.Close()
end
2013-07-27 11:51:07 -05:00
else
return false
end
2013-07-23 21:23:31 -05:00
end
2013-08-03 17:36:45 -05:00
-- checks mandy.cfg for format
function sel_format()
local format = cfg_table["format"]
if format == "mp3" then return 0
elseif format == "ogg" then return 1
elseif format == "flac" then return 2
else return 0
end
end
--make format dropdown menu items work
function sel_Codec(x)
if x == 0 then
local mp3 = ".mp3"
print("Selected "..mp3)
return mp3
elseif x == 1 then
local ogg = ".ogg"
print("Selected "..ogg)
return ogg
elseif x == 2 then
local flac = ".flac"
print("Selected "..flac)
return flac
end
2013-07-23 21:23:31 -05:00
end
--Ask user to set directory
function set_dir()
2013-07-27 11:51:07 -05:00
getPath = iup.filedlg{dialogtype = "SAVE", title="Save file...",
filter="*.mp3; *.ogg; *.flac",
2013-07-27 11:51:07 -05:00
directory=".",
file=""}
2013-07-23 21:23:31 -05:00
2013-07-27 11:51:07 -05:00
getPath:popup(iup.ANYWHERE, iup.ANYWHERE)
2013-07-23 21:23:31 -05:00
2013-07-27 11:51:07 -05:00
local status = getPath.status
2013-07-23 21:23:31 -05:00
2013-08-03 17:36:45 -05:00
-- The "%" is used to escape the "." comming from gFormat
if status == "1" or status == "0" then
if string.match(getPath.value, "%"..gFormat) then
2013-07-27 11:51:07 -05:00
local savedPath = getPath.value
return savedPath
2013-07-27 11:51:07 -05:00
else
local savedPath = getPath.value..gFormat
2013-07-27 11:51:07 -05:00
return savedPath
2013-07-27 11:51:07 -05:00
end
2013-07-23 21:23:31 -05:00
2013-07-27 11:51:07 -05:00
elseif status == "-1" then
return false
2013-07-27 11:51:07 -05:00
end
2013-07-23 21:23:31 -05:00
end
2013-07-26 21:07:19 -05:00
function ytDl(x)
local tmpName = math.random(0,999999999999)
local tmpNameTwo = math.random(0,999999999999)
2013-07-26 21:32:28 -05:00
local tmpPath = x.." --output=/tmp/youtube-dl-"..tmpName.."-"..tmpNameTwo..".flv"
2013-07-26 21:07:19 -05:00
local tmpPath2 = "/tmp/youtube-dl-"..tmpName.."-"..tmpNameTwo..".flv"
2013-07-23 21:23:31 -05:00
local flag = popin.ytdl(tmpPath, tmpPath2)
2013-07-29 22:55:12 -05:00
if not flag then return false end
2013-07-26 21:07:19 -05:00
return tmpPath2
2013-07-23 21:23:31 -05:00
end
--optional function to implement autoplay
function ask_play(x)
local play = ""
res, play = iup.GetParam("Play now?", nil,
"Do you want to play the file now? %t\n")
if res == true then
io.popen("notify-send 'The file was saved to' "..x)
io.close()
io.popen("xdg-open "..x)
io.close()
return true
else
return false
end
end
2013-07-26 21:07:19 -05:00
function ffmpeg(tmpPath, dirD)
if gFormat == ".mp3" then gFormat = "libmp3lame" end
if gFormat == ".ogg" then gFormat = "libvorbis" end
if gFormat == ".flac" then gFormat = "flac" end
2013-07-30 15:47:03 -05:00
local subSpaces = string.gsub(dirD, " ", "\\ ")
2013-08-03 17:36:45 -05:00
local codec = "ffmpeg -i "..tmpPath.." -acodec "..gFormat.." -ac 2 -ab 192k -vn -y "..subSpaces
print(format)
local flag = convert_mp3.go(codec, tmpPath)
if not flag then return false end
--end
--io.popen("notify-send 'The file was saved to' "..subSpaces)
ask_play(subSpaces)
2013-07-23 21:23:31 -05:00
end
2013-07-27 11:51:07 -05:00
2013-07-23 21:23:31 -05:00
--put everything into a table to use local functions globally
global = {}
global.url = function ()
local url = url_entry()
return url
end
global.dir = function()
local dir = set_dir()
return dir
end
2013-07-26 21:07:19 -05:00
global.path = function(url)
local yt = ytDl(url)
return yt
2013-07-23 21:23:31 -05:00
end
2013-07-26 21:07:19 -05:00
global.ffmpeg = function(tmpPath, saveDir)
local convert = ffmpeg(tmpPath, saveDir)
return convert
end
2013-07-23 21:23:31 -05:00