Files
mixcloud-dl/mixcloud-dl.sh

61 lines
5.4 KiB
Bash
Raw Normal View History

2014-11-27 17:51:15 +01:00
#!/bin/bash
function errormsg {
2014-11-29 11:34:57 +01:00
zenity --warning --text "Wrong input. Cancel."
2014-11-27 17:51:15 +01:00
}
CURDIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
PYFILENAME=".$RANDOM$RANDOM.py"
## EXTRACT PYTHON URL CONVERTER CODE
# Python code from https://gist.github.com/yomguy/dbcf7c55463ad79d6736
CODE='IyEvdXNyL2Jpbi9weXRob24KIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiIiIgpUaGUgTUlUIExpY2Vuc2UgKE1JVCkKCkNvcHlyaWdodCAoQykgMjAxNCBHdWlsbGF1bWUgUGVsbGVyaW4gPHlvbWd1eUBwYXJpc3Nvbi5jb20+CgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgoiIiIKCgppbXBvcnQgc3lzLCB1cmxsaWIyCmZyb20gcHlxdWVyeSBpbXBvcnQgUHlRdWVyeSBhcyBwcQoKCmNsYXNzIE1peENsb3VkKG9iamVjdCk6CiAgICAiIiJhIE1peENsb3VkIEhUTUwgcmVzb3VyY2Ugd2l0aCBhIGhhY2sgZm9yIGRvd25sb2FkaW5nIHJlbGF0ZWQgYXVkaW8gZmlsZS4KICAgIEJlIGNhcmVmdWxsLCB0aGUgYmFzZV91cmwgYW5kIHRoZSBoYWNreSBwYXJzaW5nIG1ldGhvZCBoYXZlIGJlZW4gcmV2ZXJzZSBlbmdpbmVlcmVkLAogICAgc28gYXJlIG5vdCBzYWZlLCBub3Qgc2NhbGFibGUsIGV2ZW4gdW5zdGFibGUuLi4iIiIKCiAgICBiYXNlX3VybCA9ICdodHRwczovL3N0cmVhbTIxLm1peGNsb3VkLmNvbS9jL200YS82NC8nCiAgICBibG9ja19zaXplID0gODE5MgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwpOgogICAgICAgIHNlbGYudXJsID0gdXJsCiAgICAgICAgc2VsZi5wcSA9IHBxKHVybD1zZWxmLnVybCkKICAgICAgICBzaGlmdCA9IDAKICAgICAgICBpZiBzZWxmLnVybFstMV0gPT0gJy8nOgogICAgICAgICAgICBzaGlmdCA9IDEKICAgICAgICBzZWxmLnNsdWcgPSB1cmwuc3BsaXQoJy8nKVstMS1zaGlmdF0KICAgICAgICBzZWxmLnVzZXIgPSB1cmwuc3BsaXQoJy8nKVstMi1zaGlmdF0KICAgICAgICBzZWxmLm1lZGlhX3VybCA9IHNlbGYuZ2V0X21lZGlhX3VybCgpCiAgICAgICAgc2VsZi5maWxlbmFtZSA9IHNlbGYudXNlciArICdfLV8nICsgc2VsZi5zbHVnICsgJy5tNGEnCgogICAgZGVmIGdldF9tZWRpYV91cmwoc2VsZik6CiAgICAgICAgZGl2ID0gc2VsZi5wcSgnLmNsb3VkY2FzdC13YXZlZm9ybScpCiAgICAgICAgdXJsID0gZGl2LmF0dHIoJ20td2F2ZWZvcm0nKS5zcGxpdCgnLycpWzI6XQogICAgICAgIHVybFswXSA9IHNlbGYuYmFzZV91cmwKICAgICAgICB1cmxbLTFdID0gdXJsWy0xXS5yZXBsYWNlKCdqc29uJywgJ200YScpCiAgICAgICAgcmV0dXJuICcvJy5qb2luKHVybCkKCiAgICBkZWYgZG93bmxvYWQoc2VsZik6CiAgICAgICAgdSA9IHVybGxpYjIudXJsb3BlbihzZWxmLm1lZGlhX3VybCkKICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lLCAnd2InKQogICAgICAgIG1ldGEgPSB1LmluZm8oKQogICAgICAgIGZpbGVfc2l6ZSA9IGludChtZXRhLmdldGhlYWRlcnMoIkNvbnRlbnQtTGVuZ3RoIilbMF0pCiAgICAgICAgcHJpbnQgIkRvd25sb2FkaW5nOiAlcyBCeXRlczogJXMiICUgKHNlbGYuZmlsZW5hbWUsIGZpbGVfc2l6ZSkKICAgICAgICBmaWxlX3NpemVfZGwgPSAwCiAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgYnVmZmVyID0gdS5yZWFkKHNlbGYuYmxvY2tfc2l6ZSkKICAgICAgICAgICAgaWYgbm90IGJ1ZmZlcjoKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgIGZpbGVfc2l6ZV9kbCArPSBsZW4oYnVmZmVyKQogICAgICAgICAgICBmLndyaXRlKGJ1ZmZlcikKICAgICAgICAgICAgc3RhdHVzID0gciIlMTBkICBbJTMuMmYlJV0iICUgKGZpbGVfc2l6ZV9kbCwgZmlsZV9zaXplX2RsICogMTAwLiAvIGZpbGVfc2l6ZSkKICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzICsgY2hyKDgpKihsZW4oc3RhdHVzKSsxKQogICAgICAgICAgICBwcmludCBzdGF0dXMsCiAgICAgICAgZi5jbG9zZSgpCgoKZGVmIG1haW4oKToKICAgIHVybCA9IHN5cy5hcmd2Wy0xXQogICAgbWMgPSBNaXhDbG91ZCh1cmwpCiAgICBwcmludCBtYy5tZWRpYV91cmwKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBtYWluKCkKCg=='
echo $CODE | base64 -d > "$CURDIR"/"$PYFILENAME"
chmod +x "$PYFILENAME"
## ASK FOR MIXCLOUD URL, DESIRED FILENAME AND DIRECTORY
2014-11-29 11:34:57 +01:00
MIXURL=$(zenity --entry --text "URL of Mixcloud set:" --title "Enter Mixcloud URL")
OUTNAME="$(zenity --entry --text "Desired Filename of Mixcloud set (without path or ext):" --title "Choose Filename")"
OUTDIR=$(zenity --file-selection --title "Choose destination folder" --filename=$HOME/ --directory)
2014-11-27 17:51:15 +01:00
# Convert URL to Downloadlink with Py script
DLURL=$(python "$CURDIR"/"$PYFILENAME" $MIXURL)
ORIGFILE=$(basename $DLURL)
if ([ "$MIXURL" = "" ] || [ "$OUTNAME" = "" ] || [ "$OUTDIR" = "" ] || [ "$DLURL" = "" ]); then
errormsg
exit 1
fi
## START DOWNLOAD SEQUENCE
2014-11-29 11:34:57 +01:00
zenity --info --text "Download starts. This may take a while..."
2014-11-27 17:51:15 +01:00
FINISHED="0"
t=0
while [ $FINISHED != "1" ]
do
(( t++ )) # Just for stats
wget -qc -O "$OUTDIR"/"$ORIGFILE" "$DLURL" &
PID=$! # Last process' (wget) pid
sleep 5s
kill $PID # Kill wget after 5 sec
# If wget process is finished, there's no pid to kill anymore
if [ "$?" = 1 ]; then
FINISHED="1"
fi
done
ORIGNAME=${ORIGFILE%%.*}
ORIGEXT=${ORIGFILE##*.}
#echo "Benenne $OUTDIR/$ORIGFILE in $OUTDIR/$OUTNAME.$ORIGEXT um"
mv "$OUTDIR"/"$ORIGFILE" "$OUTDIR"/"$OUTNAME.$ORIGEXT"
rm "$CURDIR"/"$PYFILENAME"
2014-11-29 11:34:57 +01:00
zenity --info --text "Download finished after $t download circles."