コード例 #1
0
		async Task StartSyncing ()
		{
			if (String.IsNullOrEmpty (userTextField.StringValue))
				return;

			var startTime = DateTime.UtcNow;

			statusTextField.StringValue = String.Empty;
			detailedStatusTextField.StringValue = String.Empty;

			indeterminateProgressIndicator.StartAnimation (userTextField);
			indeterminateProgressIndicator.Hidden = false;
			progressIndicator.Hidden = true;
			progressIndicator.DoubleValue = 0;

			saveButton.Hidden = true;
			savedExportedDataUrl = null;
			saveButton.Title = "Save Exported Data…";

			tabView.SelectAt (1);

			syncController = new UserSyncController (userTextField.StringValue, new RdioObjectStore ());

			do {
				SyncState currentState;
				var previousState = syncController.SyncState;

				try {
					currentState = await syncController.SyncStepAsync (() => BeginInvokeOnMainThread (() => {
						progressIndicator.MinValue = 0;
						progressIndicator.MaxValue = syncController.TotalObjects;
						progressIndicator.DoubleValue = syncController.SyncedObjects;
						detailedStatusTextField.StringValue = String.Format ("{0} / {1}",
							syncController.SyncedObjects, syncController.TotalObjects);
					}));
				} catch (Exception e) {
					if (!(e is OperationCanceledException))
						Console.Error.WriteLine (e);
				
					progressIndicator.Hidden = true;
					indeterminateProgressIndicator.Hidden = true;
					detailedStatusTextField.Hidden = true;
					actionButton.Title = "Go Back";

					var webException = e as WebException;
					if (webException != null)
						statusTextField.StringValue = "connection error";
					else if (e is UserNotFoundException)
						statusTextField.StringValue = "could not find Rdio user "
							+ syncController.UserIdentifier;
					else if (e is OperationCanceledException)
						statusTextField.StringValue = "canceled";
					else
						statusTextField.StringValue = e.Message;

					syncController = null;
					return;
				}

				Console.WriteLine ("{0} -> {1}", previousState, currentState);

				switch (syncController.SyncState) {
				case SyncState.Start:
					break;
				case SyncState.FindingUser:
					statusTextField.StringValue = "searching for "
						+ syncController.UserIdentifier + "…";
					break;
				case SyncState.FoundUser:
					break;
				case SyncState.SyncingUserKeys:
					statusTextField.StringValue = "fetching user keys…";
					break;
				case SyncState.SyncedUserKeys:
					break;
				case SyncState.SyncingObjects:
					detailedStatusTextField.Hidden = false;
					indeterminateProgressIndicator.Hidden = true;
					progressIndicator.Hidden = false;
					statusTextField.StringValue = "fetching objects…";
					break;
				case SyncState.SyncedObjects:
					break;
				case SyncState.Finished:
					statusTextField.StringValue = "done in " + (DateTime.UtcNow - startTime).ToFriendlyString ();
					progressIndicator.Hidden = true;
					indeterminateProgressIndicator.Hidden = true;
					detailedStatusTextField.Hidden = true;
					saveButton.Hidden = false;
					saveButton.BecomeFirstResponder ();
					saveButton.Highlight (true);
					saveButton.KeyEquivalent = "\r";
					actionButton.Title = "Start Over";
					break;
				}
			} while (syncController.SyncState != SyncState.Finished);
		}
コード例 #2
0
        async Task StartSyncing()
        {
            if (String.IsNullOrEmpty(userTextField.StringValue))
            {
                return;
            }

            var startTime = DateTime.UtcNow;

            statusTextField.StringValue         = String.Empty;
            detailedStatusTextField.StringValue = String.Empty;

            indeterminateProgressIndicator.StartAnimation(userTextField);
            indeterminateProgressIndicator.Hidden = false;
            progressIndicator.Hidden      = true;
            progressIndicator.DoubleValue = 0;

            saveButton.Hidden    = true;
            savedExportedDataUrl = null;
            saveButton.Title     = "Save Exported Data…";

            tabView.SelectAt(1);

            syncController = new UserSyncController(userTextField.StringValue, new RdioObjectStore());

            do
            {
                SyncState currentState;
                var       previousState = syncController.SyncState;

                try {
                    currentState = await syncController.SyncStepAsync(() => BeginInvokeOnMainThread (() => {
                        progressIndicator.MinValue = 0;
                        progressIndicator.MaxValue = syncController.TotalObjects;
                        progressIndicator.DoubleValue = syncController.SyncedObjects;
                        detailedStatusTextField.StringValue = String.Format("{0} / {1}",
                                                                            syncController.SyncedObjects, syncController.TotalObjects);
                    }));
                } catch (Exception e) {
                    if (!(e is OperationCanceledException))
                    {
                        Console.Error.WriteLine(e);
                    }

                    progressIndicator.Hidden = true;
                    indeterminateProgressIndicator.Hidden = true;
                    detailedStatusTextField.Hidden        = true;
                    actionButton.Title = "Go Back";

                    var webException  = e as WebException;
                    var httpException = e as HttpRequestException;
                    if (webException != null || httpException != null)
                    {
                        statusTextField.StringValue = "connection error. rdio has probably " +
                                                      "gone offline forever. RIP in Peace \ud83d\ude22";
                    }
                    else if (e is UserNotFoundException)
                    {
                        statusTextField.StringValue = "could not find Rdio user "
                                                      + syncController.UserIdentifier;
                    }
                    else if (e is OperationCanceledException)
                    {
                        statusTextField.StringValue = "canceled";
                    }
                    else
                    {
                        statusTextField.StringValue = e.Message;
                    }

                    syncController = null;
                    return;
                }

                Console.WriteLine("{0} -> {1}", previousState, currentState);

                switch (syncController.SyncState)
                {
                case SyncState.Start:
                    break;

                case SyncState.FindingUser:
                    statusTextField.StringValue = "searching for "
                                                  + syncController.UserIdentifier + "…";
                    break;

                case SyncState.FoundUser:
                    break;

                case SyncState.SyncingUserKeys:
                    statusTextField.StringValue = "fetching user keys…";
                    break;

                case SyncState.SyncedUserKeys:
                    break;

                case SyncState.SyncingObjects:
                    detailedStatusTextField.Hidden        = false;
                    indeterminateProgressIndicator.Hidden = true;
                    progressIndicator.Hidden    = false;
                    statusTextField.StringValue = "fetching objects…";
                    break;

                case SyncState.SyncedObjects:
                    break;

                case SyncState.Finished:
                    statusTextField.StringValue           = "done in " + (DateTime.UtcNow - startTime).ToFriendlyString();
                    progressIndicator.Hidden              = true;
                    indeterminateProgressIndicator.Hidden = true;
                    detailedStatusTextField.Hidden        = true;
                    saveButton.Hidden = false;
                    saveButton.BecomeFirstResponder();
                    saveButton.Highlight(true);
                    saveButton.KeyEquivalent = "\r";
                    actionButton.Title       = "Start Over";
                    break;
                }
            } while (syncController.SyncState != SyncState.Finished);
        }