예제 #1
0
 public override int GetHashCode()
 {
     return(FullSize.GetHashCode() + Thumbnail.GetHashCode());
 }
예제 #2
0
        private void downloadInternal1(string url, string path, string filename, MultiDownloader multiDownloader)
        {
            try
            {
                var httpWebRequest = HttpWebRequest.CreateHttp(url);
                //httpWebRequest.Method = "GET";
                var filePath = Path.Combine(path, filename);
                var fi       = new FileInfo(filePath);
                FullSize = GetLength(url);
                if (fi.Exists)
                {
                    if (fi.Length >= FullSize)
                    {
                        return;
                    }
                    httpWebRequest.AddRange(fi.Length);
                }
                using (var fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))//, FileShare.ReadWrite))
                {
                    using (var httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse)
                    {
                        using (var stream = httpWebResponse.GetResponseStream())
                        {
                            var dt       = DateTime.UtcNow;
                            var buffsize = LiXMath.MIBIBYTE;
                            var buffer   = new byte[buffsize];
                            var speed    = 0;
                            while (!multiDownloader.IsStopped)
                            {
                                if (IsPaused)
                                {
                                    buffsize = 1000;
                                    Task.Delay(1000).Wait();
                                }
                                else
                                {
                                    buffsize = buffer.Length;
                                }
                                var l = stream.Read(buffer, 0, buffsize);
                                if (l <= 0 || multiDownloader.IsStopped)
                                {
                                    break;
                                }
                                fileStream.Write(buffer, 0, l);
                                //if (fileStream.Position >= FullSize)
                                //    break;
                                speed += l;
                                if (DateTime.UtcNow.Subtract(dt).TotalMilliseconds >= 1000)
                                {
                                    CurrentSize = fileStream.Length;
                                    Speed       = speed;

                                    Percentage   = (int)(fileStream.Length / (float)FullSize * 100f);
                                    DownloadInfo = "[" +
                                                   fileStream.Length.SizeSuffix(0) + "/" + FullSize.SizeSuffix(0) +
                                                   "(" + Percentage + "%) " +
                                                   "CN:" + multiDownloader.Download_Connections +
                                                   " DL:" + speed.SizeSuffix(1) +
                                                   " ETA: " + TimeSpan.FromSeconds((FullSize - fileStream.Length) / speed).ToString(@"hh\:mm\:ss") +
                                                   "]";
                                    speed = 0;
                                    dt    = DateTime.UtcNow;
                                }
                            }
                        }//.CopyTo(fileStream);
                    }
                }
            }
            catch (Exception x)
            {
            }
        }