Changeset 1515 for trunk/eraser6/Eraser/UpdateForm.cs
- Timestamp:
- 1/13/2010 4:29:25 AM (2 years ago)
- Location:
- trunk/eraser6
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
Eraser/UpdateForm.cs (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/eraser6
- Property svn:mergeinfo changed
/branches/eraser6/SpeedMeter (added) merged: 1502-1514
- Property svn:mergeinfo changed
-
trunk/eraser6/Eraser/UpdateForm.cs
r1495 r1515 536 536 Assembly.GetExecutingAssembly().GetName().Version.ToString())); 537 537 538 using (WebResponse resp = req.GetResponse()) 539 using (Stream strm = resp.GetResponseStream()) 540 { 538 using (WebResponse response = req.GetResponse()) 539 using (Stream responseStream = response.GetResponseStream()) 540 using (MemoryStream memoryStream = new MemoryStream()) 541 { 542 Manager.ProgressManager progress = new Manager.ProgressManager(); 543 progress.Total = response.ContentLength; 544 541 545 //Download the response 542 int bytesRead = 0;546 int lastRead = 0; 543 547 byte[] buffer = new byte[16384]; 544 List<byte> responseBuffer = new List<byte>(); 545 while ((bytesRead = strm.Read(buffer, 0, buffer.Length)) != 0) 548 while ((lastRead = responseStream.Read(buffer, 0, buffer.Length)) != 0) 546 549 { 547 byte[] tmpDest = new byte[bytesRead]; 548 Buffer.BlockCopy(buffer, 0, tmpDest, 0, bytesRead); 549 responseBuffer.AddRange(tmpDest); 550 551 float progress = responseBuffer.Count / (float)resp.ContentLength; 552 OnProgress(new ProgressEventArgs(progress, progress, null, 550 memoryStream.Write(buffer, 0, lastRead); 551 progress.Completed = memoryStream.Position; 552 OnProgress(new ProgressEventArgs(progress.Progress, progress.Progress, null, 553 553 S._("{0} of {1} downloaded", 554 Util.File.GetHumanReadableFilesize( responseBuffer.Count),555 Util.File.GetHumanReadableFilesize( resp.ContentLength))));554 Util.File.GetHumanReadableFilesize(progress.Completed), 555 Util.File.GetHumanReadableFilesize(progress.Total)))); 556 556 } 557 557 558 558 //Parse it. 559 using (MemoryStream mStrm = new MemoryStream(responseBuffer.ToArray()))560 ParseUpdateList(mStrm);559 memoryStream.Position = 0; 560 ParseUpdateList(memoryStream); 561 561 } 562 562 } … … 671 671 int currUpdate = 0; 672 672 Dictionary<string, UpdateInfo> tempFilesMap = new Dictionary<string, UpdateInfo>(); 673 Manager.SteppedProgressManager progress = new Manager.SteppedProgressManager(); 673 674 foreach (UpdateInfo update in downloadQueue) 674 675 { 675 676 try 676 677 { 678 //Add the update to the overall progress. 679 Manager.ProgressManager step = new Eraser.Manager.ProgressManager(); 680 progress.Steps.Add(new Manager.SteppedProgressManager.Step( 681 step, 1.0f / downloadQueue.Count)); 682 677 683 //Decide on the URL to connect to. The Link of the update may 678 684 //be a relative path (relative to the selected mirror) or an … … 701 707 UriFormat.Unescaped)) : contentDisposition.FileName)); 702 708 703 byte[] tempBuffer = new byte[16384]; 704 using (Stream strm = resp.GetResponseStream()) 705 using (FileStream tempStrm = new FileStream(tempFilePath, FileMode.CreateNew)) 706 using (BufferedStream bufStrm = new BufferedStream(tempStrm)) 709 using (Stream responseStream = resp.GetResponseStream()) 710 using (FileStream fileStream = new FileStream(tempFilePath, FileMode.CreateNew)) 707 711 { 712 //Update the progress of this step 713 step.Total = resp.ContentLength; 714 708 715 //Copy the information into the file stream 709 int readBytes = 0; 710 while ((readBytes = strm.Read(tempBuffer, 0, tempBuffer.Length)) != 0) 716 int lastRead = 0; 717 byte[] buffer = new byte[16384]; 718 while ((lastRead = responseStream.Read(buffer, 0, buffer.Length)) != 0) 711 719 { 712 bufStrm.Write(tempBuffer, 0, readBytes);720 fileStream.Write(buffer, 0, lastRead); 713 721 714 722 //Compute progress 715 float itemProgress = tempStrm.Position / (float)resp.ContentLength; 716 float overallProgress = (currUpdate - 1 + itemProgress) / downloadQueue.Count; 717 OnProgress(new ProgressEventArgs(itemProgress, overallProgress, 723 step.Completed = fileStream.Position; 724 OnProgress(new ProgressEventArgs(step.Progress, progress.Progress, 718 725 update, S._("Downloading: {0}", update.Name))); 719 726 } … … 724 731 725 732 //Let the event handler know the download is complete. 726 OnProgress(new ProgressEventArgs(1.0f, (float)currUpdate / downloadQueue.Count, 733 step.Completed = step.Total; 734 OnProgress(new ProgressEventArgs(step.Progress, progress.Progress, 727 735 update, S._("Downloaded: {0}", update.Name))); 728 736 } … … 747 755 public void InstallUpdates(object value) 748 756 { 757 Manager.ProgressManager progress = new Manager.ProgressManager(); 749 758 Dictionary<string, UpdateInfo> tempFiles = (Dictionary<string, UpdateInfo>)value; 750 759 Dictionary<string, UpdateInfo>.KeyCollection files = tempFiles.Keys; 751 int currItem = 0;752 760 753 761 try 754 762 { 763 progress.Total = files.Count; 755 764 foreach (string path in files) 756 765 { 757 766 UpdateInfo item = tempFiles[path]; 758 float progress = (float)currItem++ / files.Count;759 OnProgress(new ProgressEventArgs(0.0f, progress ,767 ++progress.Completed; 768 OnProgress(new ProgressEventArgs(0.0f, progress.Progress, 760 769 item, S._("Installing {0}", item.Name))); 761 770 … … 767 776 process.WaitForExit(Int32.MaxValue); 768 777 if (process.ExitCode == 0) 769 OnProgress(new ProgressEventArgs(1.0f, progress ,778 OnProgress(new ProgressEventArgs(1.0f, progress.Progress, 770 779 item, S._("Installed {0}", item.Name))); 771 780 else 772 781 OnProgress(new ProgressErrorEventArgs(new ProgressEventArgs(1.0f, 773 progress , item, S._("Error installing {0}", item.Name)),782 progress.Progress, item, S._("Error installing {0}", item.Name)), 774 783 new ApplicationException(S._("The installer exited with an error code {0}", 775 784 process.ExitCode))));
Note: See TracChangeset
for help on using the changeset viewer.
