Exemple #1
0
        public async Task <Stream> GetGroovesharkStream(string groovesharkUrl)
        {
            await Load();

            string streamUrl;

            GroovesharkApi.GroovesharkResult parameters;

            HttpProxy proxy = null;

            if (await GroovesharkApi.IsProxyRequired())
            {
                proxy = await ProxyManager.Instance.GetWebProxy();
            }

            using (var p = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    CreateNoWindow = true,
                    RedirectStandardOutput = true,
                    UseShellExecute = false,
                    FileName = "youtube-dl.exe",
                    Arguments = string.Format("-g {0}{1} -j", groovesharkUrl, proxy != null ? string.Format(" --proxy \"{0}\"", proxy) : null)
                }
            })
            {
                p.Start();
                streamUrl = await p.StandardOutput.ReadLineAsync();

                parameters = JsonConvert.DeserializeObject <GroovesharkApi.GroovesharkResult>(await p.StandardOutput.ReadToEndAsync());
            }

            if (string.IsNullOrEmpty(streamUrl))
            {
                Debug.Print("invalid proxy: " + proxy);
                ProxyManager.Instance.AddInvalid(proxy);
                return(await GetGroovesharkStream(groovesharkUrl));
            }

            Debug.Print("everything is awesome");

            var data = Encoding.ASCII.GetBytes(parameters.HttpPostData);

            var request = (HttpWebRequest)WebRequest.Create(streamUrl);

            request.Headers.Add("Accept-Charset", parameters.HttpHeaders.AcceptCharset);
            request.Headers.Add("Accept-Language", parameters.HttpHeaders.AcceptLanguage);
            request.Headers.Add("Accept-Encoding", parameters.HttpHeaders.AcceptEncoding);
            request.Headers.Add("Cookie", parameters.HttpHeaders.Cookie);

            request.Method        = "POST";
            request.ContentType   = parameters.HttpHeaders.ContentType;
            request.ContentLength = data.Length;
            request.UserAgent     = parameters.HttpHeaders.UserAgent;
            request.Accept        = parameters.HttpHeaders.Accept;

            request.Proxy = proxy != null?proxy.ToWebProxy() : null;

            var requestStream = request.GetRequestStream();

            requestStream.Write(data, 0, data.Length);
            requestStream.Close();

            var myHttpWebResponse = (HttpWebResponse)request.GetResponse();

            return(myHttpWebResponse.GetResponseStream());
        }