Example #1
0
        public Download(Uri uri, string key, CookieContainer cc, JObject song)
        {
            m_uri = uri;
            m_key = key;
            m_cc = cc;
            m_song = song;

            song["Status"] = "Opening file";
            string filename = (string)song["ArtistName"] + " - " + (string)song["Name"] + ".mp3";
            m_logger = new Logger(this.GetType().ToString() + " " + filename);
            string dst = "";
            string path = "";
            if (Main.PATH.Length != 0)
                path = Main.PATH + Path.DirectorySeparatorChar;
            dst = path + filename;
            try
            {
                m_path = dst;
                m_fs = new FileStream(dst, FileMode.Create);
            }
            catch (Exception ex)
            {
                char[] invalf = Path.GetInvalidFileNameChars();
                foreach (char c in invalf)
                    filename = filename.Replace(c, '_');
                dst = path + filename;
                try
                {
                    m_path = dst;
                    m_fs = new FileStream(dst, FileMode.Create);
                }
                catch (Exception exc)
                {
                    for (int i = 0; i < dst.Length; i++)
                    {
                        if (!Char.IsLetterOrDigit(dst[i]))
                            filename = filename.Replace(dst[i], '_');
                        dst = path + filename;
                    }
                    try
                    {
                        m_path = dst;
                        m_fs = new FileStream(dst, FileMode.Create);
                    }
                    catch (Exception exc2)
                    {
                        throw new Exception("Could not save the file buddy. (" + exc2.Message + ")");
                    }
                }
            }

            m_logger.Info("Starting download");
            song["Status"] = "Starting download";
            Segment s = new Segment(uri, cc, key, 0, SEGMENT_SIZE-1, m_path);
            m_segments.Add(s);
            s.Progress += new EventHandler(s_Progress);
            s.HeadersReceived += new Segment.HeadersReceivedHandler(s_HeadersReceived);
            s.Start();
            m_start = DateTime.Now;
        }
Example #2
0
 void s_HeadersReceived(object sender, Dictionary<string, string> headers)
 {
     string range = headers["Content-Range"];
     m_total = Int32.Parse(range.Split('/')[1]);
     m_song["Total"] = m_total;
     m_song["Status"] = "Segmenting";
     int total = m_total - SEGMENT_SIZE;  // already downloaded
     int i = 0;
     while (total > 0)
     {
         i++;
         Segment s = new Segment(m_uri, m_cc, m_key, SEGMENT_SIZE * i, SEGMENT_SIZE * i + Math.Min(SEGMENT_SIZE, total) - 1, m_path);
         m_segments.Add(s);
         s.Completed += new EventHandler(s_Completed);
         s.Progress += new EventHandler(s_Progress);
         s.Start();
         total -= SEGMENT_SIZE;
     }
     m_logger.Info("Splitted in " + m_segments.Count + " segments");
 }