private void UpdateFiles(List <UpdateFileEntryYaml> updateFileEntries) { if (Cancelled) { return; } Label_ProgressBar1.SafeInvoke(() => Label_ProgressBar1.Text = Label_ProgressBar3.Text); try { PercentageProgressBar.SafeInvoke(delegate { PercentageProgressBar.Maximum = updateFileEntries.Count; PercentageProgressBar.Step = 1; PercentageProgressBar.Value = 0; }); Parallel.ForEach(updateFileEntries, (updateFileEntry, state) => { if (Cancelled) { state.Stop(); } var dlUri = new Uri(DLUri, updateFileEntry.AbsoluteFilePath); var tempFile = new TempFile(updateFileEntry.AbsoluteFilePath); using (var downloader = new WebClient()) { downloader.DownloadFile(dlUri, tempFile.Path); PercentageProgressBar.SafeInvoke(() => PercentageProgressBar.PerformStep()); } }); } catch (UriFormatException) { DownloadErrorMessage(); return; } catch (UnauthorizedAccessException) { DownloadErrorMessage(); return; } catch (IOException) { DownloadErrorMessage(); return; } catch (WebException) { DownloadErrorMessage(); return; } ReplaceFiles(updateFileEntries); }
private List <UpdateFileEntryYaml> StartUpdate() { if (Cancelled) { return(new List <UpdateFileEntryYaml>()); } Label_ProgressBar1.SafeInvoke(() => Label_ProgressBar1.Text = Label_ProgressBar2.Text); var newUpdateInfo = UpdateInfoYaml.Deserialize(NewUpdateInfoFile.ReadAllText()); var crc32 = new Crc32(); var sha1 = new SHA1Managed(); var notValidFileEntries = new List <UpdateFileEntryYaml>(); PercentageProgressBar.SafeInvoke(delegate { PercentageProgressBar.Maximum = newUpdateInfo.Count(); PercentageProgressBar.Step = 1; PercentageProgressBar.Value = 0; }); Parallel.ForEach(newUpdateInfo, (updateFileEntry, state) => { if (Cancelled) { state.Stop(); } PercentageProgressBar.SafeInvoke(() => PercentageProgressBar.PerformStep()); if (UpdatedFolder.CheckExists(updateFileEntry.AbsoluteFilePath) != ExistenceCheckResult.FileExists) { notValidFileEntries.Add(updateFileEntry); return; } using (var fs = UpdatedFolder.GetFile(updateFileEntry.AbsoluteFilePath).Open(PCLExt.FileStorage.FileAccess.Read)) { var crc32Hash = string.Empty; var sha1Hash = string.Empty; crc32Hash = crc32.ComputeHash(fs).Aggregate(crc32Hash, (current, b) => current + b.ToString("x2").ToLower()); if (crc32Hash == updateFileEntry.CRC32) { sha1Hash = sha1.ComputeHash(fs).Aggregate(sha1Hash, (current, b) => current + b.ToString("x2").ToLower()); if (sha1Hash == updateFileEntry.SHA1) { return; } else { notValidFileEntries.Add(updateFileEntry); return; } } else { notValidFileEntries.Add(updateFileEntry); return; } } }); return(notValidFileEntries); }
private async void DownloadUpdateInfoFiles() { OldUpdateInfoFile.Delete(); NewUpdateInfoFile.Delete(); try { using (Downloader = new WebClient()) { Downloader.DownloadProgressChanged += (sender, args) => PercentageProgressBar.SafeInvoke(() => PercentageProgressBar.Value = (int)args.BytesReceived); PercentageProgressBar.SafeInvoke(() => PercentageProgressBar.Maximum = OldUpdateInfoAsset.Size); await Downloader.DownloadFileTaskAsync(new Uri(OldUpdateInfoAsset.BrowserDownloadUrl), OldUpdateInfoFile.Path); PercentageProgressBar.SafeInvoke(() => PercentageProgressBar.Maximum = NewUpdateInfoAsset.Size); await Downloader.DownloadFileTaskAsync(new Uri(NewUpdateInfoAsset.BrowserDownloadUrl), NewUpdateInfoFile.Path); } } catch (WebException) { DownloadErrorMessage(); return; } }
private void InitSubviews () { FitpulseTheme.Apply (View); scrollView = new UIScrollView (UIScreen.MainScreen.Bounds); Add (scrollView); if (UISwitch.Appearance.RespondsToSelector (new Selector ("onImage"))) { } else { bool showSwitchText = !UIDevice.CurrentDevice.CheckSystemVersion (7, 0); var onRect = new CGRect (72, 20, 76, 42); var offRect = new CGRect (176, 20, 76, 42); if (!showSwitchText) { onRect.X += 20; onRect.Width -= 20; offRect.Width -= 20; } var onSwitch = new SwitchOnOff (onRect); onSwitch.SetOn (true); var offSwitch = new SwitchOnOff (offRect); offSwitch.SetOn (false); onSwitch.ShowText (showSwitchText); offSwitch.ShowText (showSwitchText); scrollView.AddSubviews (onSwitch, offSwitch); } progressBar = new PercentageProgressBar (new CGRect (20, 68, 280, 24)); progressBar.Progress = 0.5f; scrollView.Add (progressBar); var loadingLabel = new UILabel (new CGRect (118, 91, 84, 19)); loadingLabel.Text = "Loading..."; loadingLabel.Font = UIFont.BoldSystemFontOfSize (15); loadingLabel.TextColor = UIColor.FromRGB (135, 141, 138); loadingLabel.BackgroundColor = UIColor.Clear; loadingLabel.TextAlignment = UITextAlignment.Center; scrollView.Add (loadingLabel); slider = new UISlider (new CGRect (18, 121, 284, 23)); slider.MinValue = 0; slider.MaxValue = 1; slider.Value = 0.5f; slider.ValueChanged += (sender, e) => { progressBar.Progress = slider.Value; }; scrollView.Add (slider); var uiSegmentedControl = new UISegmentedControl (new [] {"Yes", "No", "Maybe"}) { SelectedSegment = 0 }; FitpulseTheme.Apply (uiSegmentedControl); uiSegmentedControl.SetWidth (80.0f, 0); uiSegmentedControl.SetWidth (80.0f, 1); uiSegmentedControl.Frame = new CGRect (26, 161, 268, 44); scrollView.Add (uiSegmentedControl); textField = new UITextField (new CGRect (20, 221, 280, 31)); textField.LeftView = new UIView (new CGRect (0, 0, 5, 31)); textField.LeftViewMode = UITextFieldViewMode.Always; textField.Font = UIFont.SystemFontOfSize (14); textField.TextColor = UIColor.White; textField.Background = UIImage.FromFile ("text-input.png"); textField.VerticalAlignment = UIControlContentVerticalAlignment.Center; textField.Placeholder = "Text"; FitpulseTheme.Apply (textField); textField.Delegate = new TextFieldDelegate (); scrollView.Add (textField); var leftTopButton = Buttons.ElementsButton ("Button", FitpulseTheme.SharedTheme.GrayButtonImage); var rightTopButton = Buttons.ElementsButton ("Button", FitpulseTheme.SharedTheme.GrayPressedButtonImage); var leftBottomButton = Buttons.ElementsButton ("Button", FitpulseTheme.SharedTheme.BlueButtonImage); var rightBottomButton = Buttons.ElementsButton ("Button", FitpulseTheme.SharedTheme.BluePressedButtonImage); leftBottomButton.SetTitleColor (UIColor.White, UIControlState.Normal); leftBottomButton.SetTitleColor (UIColor.DarkGray, UIControlState.Highlighted); rightBottomButton.SetTitleColor (UIColor.White, UIControlState.Normal); rightBottomButton.SetTitleColor (UIColor.DarkGray, UIControlState.Highlighted); leftBottomButton.SetTitleShadowColor (UIColor.DarkGray, UIControlState.Normal); leftBottomButton.SetTitleShadowColor (UIColor.Gray, UIControlState.Highlighted); rightBottomButton.SetTitleShadowColor (UIColor.DarkGray, UIControlState.Normal); rightBottomButton.SetTitleShadowColor (UIColor.Gray, UIControlState.Highlighted); leftTopButton.Frame = new CGRect (20, 268, 126, 42); leftBottomButton.Frame = new CGRect (20, 318, 126, 42); rightTopButton.Frame = new CGRect (174, 268, 126, 42); rightBottomButton.Frame = new CGRect (174, 318, 126, 42); scrollView.AddSubviews (leftTopButton, leftBottomButton, rightTopButton, rightBottomButton); }
private void CheckOldFiles() { var oldUpdateInfo = UpdateInfoYaml.Deserialize(OldUpdateInfoFile.ReadAllText()); var newUpdateInfo = UpdateInfoYaml.Deserialize(NewUpdateInfoFile.ReadAllText()); var toBeDeleted = new List <IFile>(); var crc32 = new Crc32(); var sha1 = new SHA1Managed(); PercentageProgressBar.SafeInvoke(delegate { PercentageProgressBar.Maximum = oldUpdateInfo.Count(); PercentageProgressBar.Step = 1; PercentageProgressBar.Value = 0; }); Parallel.ForEach(oldUpdateInfo, (oldUpdateFileEntry, state) => { var newUpdateFileEntry = newUpdateInfo.FirstOrDefault(newUpdateInfoFile => newUpdateInfoFile.AbsoluteFilePath == oldUpdateFileEntry.AbsoluteFilePath); if (Cancelled) { state.Stop(); } PercentageProgressBar.SafeInvoke(() => PercentageProgressBar.PerformStep()); if (UpdatedFolder.CheckExists(oldUpdateFileEntry.AbsoluteFilePath) != ExistenceCheckResult.FileExists) { state.Break(); } var folder = UpdatedFolder; var folders = oldUpdateFileEntry.AbsoluteFilePath.Split('\\'); foreach (var folderName in folders.Reverse().Skip(1).Reverse()) { folder = folder.GetFolder(folderName); } var file = UpdatedFolder.GetFile(folders.Reverse().Take(1).ToArray()[0]); using (var fs = file.Open(PCLExt.FileStorage.FileAccess.Read)) { var crc32Hash = string.Empty; var sha1Hash = string.Empty; crc32Hash = crc32.ComputeHash(fs).Aggregate(crc32Hash, (current, b) => current + b.ToString("x2").ToLower()); if (crc32Hash == oldUpdateFileEntry.CRC32 && crc32Hash == newUpdateFileEntry.CRC32) { sha1Hash = sha1.ComputeHash(fs).Aggregate(sha1Hash, (current, b) => current + b.ToString("x2").ToLower()); if (sha1Hash == oldUpdateFileEntry.SHA1 && sha1Hash == newUpdateFileEntry.SHA1) { return; // -- Everything matches, do nothing. } else { toBeDeleted.Add(file); return; // -- Should be deleted; } } else { toBeDeleted.Add(file); return; // -- Should be deleted; } } }); foreach (var file in toBeDeleted) { file.Delete(); } }