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-05 04:10:10 -05:00
|
|
|
local changeLog = io.popen("changelog.txt", "r")
|
2013-08-03 17:36:45 -05:00
|
|
|
local format = sel_format()
|
2013-08-05 04:10:10 -05:00
|
|
|
local bitRate = sel_bitrate()
|
2013-07-31 02:29:11 -05:00
|
|
|
local url = ""
|
2013-08-05 04:10:10 -05:00
|
|
|
local multiLine = "changeLog"
|
|
|
|
|
2013-08-03 17:36:45 -05:00
|
|
|
|
2013-08-05 04:10:10 -05:00
|
|
|
res, url, format, bitRate, multiLine = iup.GetParam("Mandy 0.5.0 - Enter URL", nil,
|
2013-07-31 02:29:11 -05:00
|
|
|
"Enter Youtube URL: %s\n"..
|
2013-08-05 04:10:10 -05:00
|
|
|
"Audio Options %t\n"..
|
|
|
|
"Select an audio format: %l|mp3|ogg|flac|\n"..
|
|
|
|
"Select the bitrate: %l|320 kb/s|192 kb/s|160 kb/s|128 kb/s|96 kb/s|32 kb/s|\n"..
|
|
|
|
"Changelog %m\n", url, format, bitRate, multiLine)
|
2013-08-03 17:36:45 -05:00
|
|
|
|
|
|
|
|
2013-07-31 02:29:11 -05:00
|
|
|
gFormat = sel_Codec(format)
|
2013-08-05 04:10:10 -05:00
|
|
|
gBitrate = bit_logic(bitRate)
|
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
|
|
|
|
2013-08-05 04:10:10 -05:00
|
|
|
--local format_config = io.open("Config.txt", "w")
|
|
|
|
--format_config:write("local format = "..format)
|
|
|
|
--format_config:close()
|
|
|
|
--local bitrate_config = io.open("Config.txt", "w")
|
|
|
|
--bitrate_config:write("local bitrate = "..bitRate)
|
|
|
|
--bitrate_config:close()
|
2013-07-27 11:51:07 -05:00
|
|
|
return url
|
2013-07-26 22:49:41 -05:00
|
|
|
else
|
2013-07-27 11:51:07 -05:00
|
|
|
iup.Message("Error", "The URL is not a youtube link")
|
|
|
|
iup.Flush()
|
|
|
|
iup.Close()
|
2013-07-24 13:13:50 -05:00
|
|
|
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
|
|
|
|
|
2013-08-05 04:10:10 -05:00
|
|
|
function sel_bitrate()
|
|
|
|
local bitrate = cfg_table["bitrate"]
|
|
|
|
if bitrate == "320k" then return 0
|
|
|
|
elseif bitrate == "192k" then return 1
|
|
|
|
elseif bitrate == "160k" then return 2
|
|
|
|
elseif bitrate == "128k" then return 3
|
|
|
|
elseif bitrate == "96k" then return 4
|
|
|
|
elseif bitrate == "32k" then return 5
|
|
|
|
else return 0
|
|
|
|
end
|
|
|
|
end
|
2013-08-03 17:36:45 -05:00
|
|
|
|
|
|
|
|
2013-07-31 02:29:11 -05:00
|
|
|
--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
|
|
|
|
|
2013-08-05 04:10:10 -05:00
|
|
|
function bit_logic(x)
|
|
|
|
if x == 0 then
|
|
|
|
local b320k = "320k"
|
|
|
|
print ("Selected "..b320k)
|
|
|
|
return b320k
|
|
|
|
elseif x == 1 then
|
|
|
|
local b192k = "b192k"
|
|
|
|
print ("Selected "..b192k)
|
|
|
|
return b192k
|
|
|
|
elseif x == 2 then
|
|
|
|
local b160k = "160k"
|
|
|
|
print ("Selected "..b160k)
|
|
|
|
return b160k
|
|
|
|
elseif x == 3 then
|
|
|
|
local b128k = "128k"
|
|
|
|
print ("Selected "..b128k)
|
|
|
|
return b128k
|
|
|
|
elseif x == 4 then
|
|
|
|
local b96k = "96k"
|
|
|
|
print ("Selected "..b96k)
|
|
|
|
return b96k
|
|
|
|
elseif x == 5 then
|
|
|
|
local b32k = "32k"
|
|
|
|
print ("Selected "..b32k)
|
|
|
|
return b32k
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-07-23 21:23:31 -05:00
|
|
|
--Ask user to set directory
|
|
|
|
function set_dir()
|
2013-07-31 02:29:11 -05:00
|
|
|
|
2013-07-27 11:51:07 -05:00
|
|
|
getPath = iup.filedlg{dialogtype = "SAVE", title="Save file...",
|
2013-07-31 02:29:11 -05:00
|
|
|
filter="*.mp3; *.ogg; *.flac",
|
2013-07-27 11:51:07 -05:00
|
|
|
directory=".",
|
2013-07-31 02:29:11 -05:00
|
|
|
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
|
2013-07-29 22:49:23 -05:00
|
|
|
if status == "1" or status == "0" then
|
2013-07-31 02:29:11 -05:00
|
|
|
if string.match(getPath.value, "%"..gFormat) then
|
2013-07-27 11:51:07 -05:00
|
|
|
local savedPath = getPath.value
|
|
|
|
return savedPath
|
2013-07-24 13:13:50 -05:00
|
|
|
|
2013-07-27 11:51:07 -05:00
|
|
|
else
|
2013-07-31 02:29:11 -05:00
|
|
|
local savedPath = getPath.value..gFormat
|
2013-07-27 11:51:07 -05:00
|
|
|
return savedPath
|
2013-07-24 13:13:50 -05:00
|
|
|
|
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
|
2013-07-29 22:49:23 -05:00
|
|
|
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-08-05 04:10:10 -05:00
|
|
|
print(x)
|
2013-07-31 21:35:58 -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-29 22:49:23 -05:00
|
|
|
|
2013-07-26 21:07:19 -05:00
|
|
|
return tmpPath2
|
2013-07-23 21:23:31 -05:00
|
|
|
end
|
|
|
|
|
2013-07-31 02:29:11 -05:00
|
|
|
--optional function to implement autoplay
|
2013-07-31 21:35:58 -05:00
|
|
|
|
2013-07-31 02:29:11 -05:00
|
|
|
function ask_play(x)
|
2013-07-31 21:35:58 -05:00
|
|
|
local play = ""
|
2013-07-31 02:29:11 -05:00
|
|
|
res, play = iup.GetParam("Play now?", nil,
|
2013-07-31 21:35:58 -05:00
|
|
|
"Do you want to play the file now? %t\n")
|
2013-07-31 02:29:11 -05:00
|
|
|
|
|
|
|
if res == true then
|
|
|
|
io.popen("notify-send 'The file was saved to' "..x)
|
2013-07-31 21:35:58 -05:00
|
|
|
io.close()
|
2013-07-31 02:29:11 -05:00
|
|
|
io.popen("xdg-open "..x)
|
2013-07-31 21:35:58 -05:00
|
|
|
io.close()
|
|
|
|
return true
|
2013-07-31 02:29:11 -05:00
|
|
|
else
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2013-07-26 21:07:19 -05:00
|
|
|
function ffmpeg(tmpPath, dirD)
|
2013-07-31 21:35:58 -05:00
|
|
|
|
|
|
|
if gFormat == ".mp3" then gFormat = "libmp3lame" end
|
|
|
|
if gFormat == ".ogg" then gFormat = "libvorbis" end
|
|
|
|
if gFormat == ".flac" then gFormat = "flac" end
|
|
|
|
|
2013-08-05 04:10:10 -05:00
|
|
|
if gBitrate == "320k" then gBitrate = "320k" end
|
|
|
|
if gBitrate == "192k" then gBitrate = "192k" end
|
|
|
|
if gBitrate == "160k" then gBitrate = "160k" end
|
|
|
|
if gBitrate == "128k" then gBitrate = "128k" end
|
|
|
|
if gBitrate == "96k" then gBitrate = "96k" end
|
|
|
|
if gBitrate == "32k" then gBitrate = "32k" end
|
2013-07-31 02:29:11 -05:00
|
|
|
local subSpaces = string.gsub(dirD, " ", "\\ ")
|
2013-08-05 04:10:10 -05:00
|
|
|
local codec = "ffmpeg -i "..tmpPath.." -acodec "..gFormat.." -ac 2 -ab "..gBitrate.." -vn -y "..subSpaces
|
2013-07-31 21:35:58 -05:00
|
|
|
|
|
|
|
print(format)
|
|
|
|
local flag = convert_mp3.go(codec, tmpPath)
|
2013-07-31 02:29:11 -05:00
|
|
|
if not flag then return false end
|
|
|
|
|
2013-07-31 21:35:58 -05:00
|
|
|
--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
|
|
|
|
|
|
|
|