Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using System.IO;
- using System.Threading;
- using System.Net;
- using System.Text.RegularExpressions;
- namespace SoundcloudDownloader
- {
- public partial class Form1 : Form
- {
- MatchCollection links;
- MatchCollection nameOfTracks;
- List<string> listOfLinks = new List<string>();
- List<int> selectedTracks = new List<int>();
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- CheckForIllegalCrossThreadCalls = false;
- btnDownloadAll.Enabled = false;
- btnDownloadSelected.Enabled = false;
- }
- private void btnDownload_Click(object sender, EventArgs e)
- {
- if (folderBrowserDialog1.SelectedPath == "")
- {
- MessageBox.Show("Set Download Folder!");
- }
- else if(txtLink.Text == "Enter Soundcloud Link" || txtLink.Text == "")
- {
- MessageBox.Show("Enter Soundcloud Link.");
- }
- else
- {
- GetTracks();
- btnDownloadAll.Enabled = true;
- btnDownloadSelected.Enabled = true;
- }
- }
- private void btnBrowse_Click(object sender, EventArgs e)
- {
- folderBrowserDialog1.ShowDialog();
- txtDownloadLocation.Text = folderBrowserDialog1.SelectedPath.ToString();
- }
- private void btnGetTracks_Click(object sender, EventArgs e)
- {
- MethodInvoker simpleTest = new MethodInvoker(DownloadAllTracks);
- simpleTest.BeginInvoke(null, null);
- }
- void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
- {
- double bytesIn = double.Parse(e.BytesReceived.ToString());
- double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
- double percentage = bytesIn / totalBytes * 100;
- progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
- }
- void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
- {
- // MessageBox.Show("Track Downloaded");
- }
- private void progressBar1_Click(object sender, EventArgs e)
- {
- }
- void GetTracks()
- {
- // used to build entire input
- StringBuilder sb = new StringBuilder();
- // used on each read operation
- byte[] buf = new byte[8192];
- // prepare the web page we will be asking for
- HttpWebRequest request = (HttpWebRequest)
- WebRequest.Create(txtLink.Text.ToString());
- // execute the request
- HttpWebResponse response = (HttpWebResponse)
- request.GetResponse();
- // we will read data via the response stream
- Stream resStream = response.GetResponseStream();
- string tempString = null;
- int count = 0;
- do
- {
- // fill the buffer with data
- count = resStream.Read(buf, 0, buf.Length);
- // make sure we read some data
- if (count != 0)
- {
- // translate from bytes to ASCII text
- tempString = Encoding.ASCII.GetString(buf, 0, count);
- // continue building the string
- sb.Append(tempString);
- }
- }
- while (count > 0); // any more data to read?
- // print out page source
- string searchString = sb.ToString();
- links = Regex.Matches(searchString, "((http:[/][/])(media.soundcloud.com/stream/)([a-z]|[A-Z]|[0-9]|[/.]|[~]|[?]|[_]|[=])*)");
- nameOfTracks = Regex.Matches(searchString, "(?<=\"title\":\")[^\"]+");
- for (int i = 0; i < links.Count; i++)
- {
- lstTracks.Items.Add(nameOfTracks[i].ToString());
- }
- }
- private void btnDownloadSelected_Click(object sender, EventArgs e)
- {
- WebClient wc = new WebClient();
- for(int i = 0; i < selectedTracks.Count;i++)
- {
- int selectedTrackIndex;
- selectedTrackIndex = selectedTracks[i];
- string url;
- url = links[selectedTrackIndex].ToString();
- if (!wc.IsBusy)
- {
- try
- {
- wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
- wc.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
- wc.DownloadFileAsync(new Uri(url), folderBrowserDialog1.SelectedPath.ToString() + "\\" + nameOfTracks[selectedTrackIndex].ToString() + ".mp3");
- i++;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- }
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Console.WriteLine(lstTracks.CheckedItems.Count);
- }
- private void btnQuit_Click(object sender, EventArgs e)
- {
- Application.Exit();
- }
- private void txtLink_TextChanged(object sender, EventArgs e)
- {
- }
- void DownloadAllTracks()
- {
- WebClient wc = new WebClient();
- if (txtDownloadLocation.Text == folderBrowserDialog1.SelectedPath.ToString())
- {
- for (int i = 0; i < links.Count; )
- {
- string url;
- url = links[i].ToString();
- if (!wc.IsBusy)
- {
- try
- {
- wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
- wc.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
- wc.DownloadFileAsync(new Uri(url), folderBrowserDialog1.SelectedPath.ToString() + "\\" + nameOfTracks[i].ToString() + ".mp3");
- i++;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- }
- }
- else
- {
- MessageBox.Show("No Valid Tracks Found.");
- }
- }
- private void lstTracks_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
- {
- }
- private void lstTracks_ItemChecked(object sender, ItemCheckedEventArgs e)
- {
- if (e.Item.Checked)
- {
- selectedTracks.Add(e.Item.Index);
- }
- else
- {
- selectedTracks.Remove(e.Item.Index);
- }
- }
- private void btnClear_Click(object sender, EventArgs e)
- {
- lstTracks.Clear();
- links = Regex.Matches("","");
- nameOfTracks = Regex.Matches("", "");
- btnDownloadAll.Enabled = false;
- btnDownloadSelected.Enabled = false;
- }
- private void btnAbout_Click(object sender, EventArgs e)
- {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement