diff --git a/README b/README index 308a38d..e48a28c 100644 --- a/README +++ b/README @@ -11,8 +11,10 @@ Dependencies ------------- * youtube-dl -* zenity -* vlc +* zenity or yad +* xdg-utils +* libnotify +* ffmpeg or avconvert Installation @@ -20,8 +22,10 @@ Installation 1. Open a terminal window 2. Navigate to the directory zymp3 is located -3. you@machine:~$ chmod +x zymp3 -4. ./zymp3 +3. you@machine:~$ cd zymp3/src +4. ./zymp3 + +TODO: standalone installer diff --git a/assets/zymp3.desktop b/assets/zymp3.desktop new file mode 100755 index 0000000..8238e2b --- /dev/null +++ b/assets/zymp3.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Zymp3 +Comment=Convert youtube videos to mp3 +Exec=zymp3 +Icon=zymp3.png +Terminal=0 +Type=Application +Encoding=UTF-8 +Categories=AudioVideo;Application; diff --git a/assets/zymp3.png b/assets/zymp3.png new file mode 100644 index 0000000..f046588 Binary files /dev/null and b/assets/zymp3.png differ diff --git a/config/zymp3.conf b/config/zymp3.conf new file mode 100644 index 0000000..5cf0a92 --- /dev/null +++ b/config/zymp3.conf @@ -0,0 +1,23 @@ +#!/bin/bash +#config.sh + +#Zymp3 Configuration File + + +#FILE SETTINGS + +#MUSICDIR must have trailing forward slash +MUSICDIR="/home/$USER/Music/" + +#You shouldn't need to change this filename but just in case +VIDEOFILE=/tmp/youtube-dl-$RANDOM-$RANDOM.flv + + +#GUI SETTINGS + + +URL_BOX_HEIGHT="64" +URL_BOX_WIDTH="512" + +FILENAME_BOX_HEIGHT="64" +FILENAME_BOX_WIDTH="326" diff --git a/lib/logic.lib b/lib/logic.lib new file mode 100644 index 0000000..5c03b7f --- /dev/null +++ b/lib/logic.lib @@ -0,0 +1,121 @@ +#!/bin/bash + + +SET_GUI_BIN="zenity" +SET_CONV_TOOL="ffmpeg" + +#convert youtube videos to mp3 with zenity progess bar +backend() +{ + +youtube-dl --output=${VIDEOFILE} --format=18 "$1" | ${SET_GUI_BIN} --progress --pulsate --title="Downloading..." --text="Downloading video, please wait.." --auto-close + +if [ ! -f $VIDEOFILE ];then + ${SET_GUI_BIN} --error --text "Can't convert video to mp3 because it does not exist, it probably failed to download." + exit 0; + +elif [ -f $VIDEOFILE ];then + ${SET_CONV_TOOL} -i $VIDEOFILE -acodec libmp3lame -ac 2 -ab 128k -vn -y "$2" | ${SET_GUI_BIN} --progress --pulsate --title="Converting..." --text="Converting video to mp3.." --auto-close + rm ${VIDEOFILE} + +else + echo -e "\e[1;31mERROR: It seems the video file successfully downloaded, however it was not converted to mp3 \e[0m" + ${SET_GUI_BIN} --error --text "It seems the video file successfully downloaded, however it was not converted to mp3" +fi +} + + +#first zenity gui window (paste youtube link) +gui() +{ + VIDURL=$(${SET_GUI_BIN} --title="Zymp3 0.1-5" --height=${URL_BOX_HEIGHT} --width=${URL_BOX_WIDTH} --entry --text "Paste youtube link here: ") + + if [[ $? == 0 ]] ; then + gui2 + else + exit 0; + fi + + + + + +} + +#second gui window to name your mp3 file + +gui2() +{ + AUDIOFILENAME=$(${SET_GUI_BIN} --title="Filename" --height=${FILENAME_BOX_HEIGHT} --width=${FILENAME_BOX_WIDTH} --entry --text "Name your file: ") + + if [[ $? == 0 ]] ; then + dconvert + else + exit 0; + fi + +} + + + + +#notify the user that the mp3 file has been moved to their music folder +open() +{ + + + if [[ $? == 0 ]] ; then + xdg-open "${MUSICDIR}${AUDIOFILENAME}.mp3" + else + exit 0; + fi + + +} + +#Check if MUSICDIR exists and create the directory if not +#move the mp3 file to the users music directory +move() +{ + if [ -d ${MUSICDIR} ];then + mv -v "${AUDIOFILENAME}.mp3" ${MUSICDIR} + elif [ ! -d ${MUSICDIR} ];then + mkdir ${MUSICDIR} + mv -v "${AUDIOFILENAME}.mp3" ${MUSICDIR} + + fi + + +} + +checkFile() +{ + + #check if mp3 file exists + if [ -f "${MUSICDIR}${AUDIOFILENAME}.mp3" ];then + notify-send "${AUDIOFILENAME}.mp3 was saved in ${MUSICDIR}" + ${SET_GUI_BIN} --question --title="Hey!" --text="I moved $AUDIOFILENAME.mp3 to $MUSICDIR, do you want to play it now?" + + elif [ ! -f "${MUSICDIR}${AUDIOFILENAME}.mp3" ];then + ${SET_GUI_BIN} --error --text "The mp3 file was does not exist. Either the download failed or the video was not converted to mp3 properly" + fi + +} + + +dconvert() +{ + + #call backend function and pass video URL and input of mp3 file + backend "${VIDURL}" "${AUDIOFILENAME}.mp3" + + #call the move function to send mp3 files to MUSICDIR + move + + #check if mp3 file is in MUSICDIR before prompting to play + checkFile + + + + open +} diff --git a/src/zymp3 b/src/zymp3 new file mode 100755 index 0000000..561e8f3 --- /dev/null +++ b/src/zymp3 @@ -0,0 +1,59 @@ +#!/bin/bash +############################################## +# Title: Zymp3 v0.1-5 +# Description: Convert youtube video to mp3 +# Author: Justin Moore +# Created: Oct 12, 2011 +# Updated: Jan 16, 2015 +# Contact: mollusk@homebutter.com +# github: https://github.com/silvernode/zymp3 +############################################## + + +#I wrote this in 2011 and realize now I could have done this alot better + + + + + +#check for config file in two locations +chk_conf(){ +if [ -f ~/.config/Zymp3/zymp3.conf ];then + source ~/.config/Zymp3/zymp3.conf + + +elif [ -f ../config/zymp3.conf ];then + source ../config/zymp3.conf + +else + echo -e "\e[1;31mERROR: No config file in $HOME/.config/Zymp3/ or ../config/ \e[0m" + zenity --error --text "No config file in $HOME/.config/Zymp3/ or ../config" + exit 0; +fi +} + +chk_libs(){ +if [ -f ../lib/logic.lib ];then + source ../lib/logic.lib + +else + echo -e "\e[1;31mERROR: No libraries file in found in ../libs \e[0m" + zenity --error --text "No libraries file in found in ../libs" + exit 0; +fi + +} + + +#call the main gui +main(){ + while true;do + chk_conf + chk_libs + gui + done + +} + +main +