Пример #1
0
        /// <summary>
        /// Easy to use Exception logger that shows the user a custom error message
        /// </summary>
        /// <param name="exception">Exception that occurs</param>
        /// <param name="dialogTitle">MessageDialog's title</param>
        /// <param name="dialogMessage">MessageDialog's message</param>
        /// <returns>Task</returns>
        public static async Task LogExceptionWithUserMessage(this Exception exception, string dialogMessage, string dialogTitle)
        {
            if (exception == null)
            {
                throw new ArgumentNullException(nameof(exception));
            }

            if (string.IsNullOrEmpty(dialogTitle))
            {
                throw new ArgumentNullException(nameof(dialogTitle));
            }

            if (string.IsNullOrEmpty(dialogMessage))
            {
                throw new ArgumentNullException(nameof(dialogMessage));
            }

            if (string.IsNullOrEmpty(dialogMessage))
            {
                dialogMessage = "Sorry, there has been an unexpected error. If you'd like to send a technical summary to the app development team, click Yes.";
            }

            var exceptionMessage = CreateErrorMessage(exception);

            // Manages and saves local log files
            await LogFileWriteAsync(exceptionMessage);

            var md = new MessageDialog(dialogMessage, dialogTitle);

            md.Commands.Add(new UICommand("yes (summary)"));
            md.Commands.Add(new UICommand("yes (full)"));
            md.Commands.Add(new UICommand("no"));

            var result = await md.ShowAsync();

            if (result.Label == "yes (summary)")
            {
                await FeedbackHelpers.Current.EmailErrorMessageAsync(exceptionMessage);
            }
            else if (result.Label == "yes (full)")
            {
                var text = await DiagnosticsHelper.DumpAsync(exception);

                await FeedbackHelpers.Current.EmailErrorMessageAsync(exceptionMessage + "\r\n\n" + text);
            }
        }
Пример #2
0
        /// <summary>
        /// Easy to use Exception logger that shows the user an error message with the following MessageDialog
        /// Title: Unexpected Error
        /// Message: Sorry, there has been an unexpected error. If you'd like to send a technical summary to the app development team, click Yes.
        /// </summary>
        /// <param name="exception"></param>
        /// <returns></returns>
        public static async Task LogExceptionWithUserMessage(this Exception exception)
        {
            if (exception == null)
            {
                throw new ArgumentNullException(nameof(exception));
            }

            var exceptionMessage = CreateErrorMessage(exception);

            var logFile = await LogFileWriteAsync(exceptionMessage);

            var md = new MessageDialog(
                "Sorry, something went wrong. Will you please send us the crash report? Just click an option and we'll automatically draft the email:",
                "Unexpected Error");

            md.Commands.Add(new UICommand("yes (recommended)", async command =>
            {
                var dumpDetails = await DiagnosticsHelper.DumpAsync(exception);
                var subject     = "MVP Companion Error Report";
                var body        = exceptionMessage + "\r\n\n" + dumpDetails;

                await FeedbackHelpers.Current.EmailErrorWithAttachmentAsync(subject, body, logFile);
            }));

            md.Commands.Add(new UICommand("yes (device info)", async command =>
            {
                var dumpDetailsWithDeviceInfo = await DiagnosticsHelper.DumpAsync(exception, true);
                var subject = "MVP Companion Error Report";
                var body    = exceptionMessage + "\r\n\n" + dumpDetailsWithDeviceInfo;

                await FeedbackHelpers.Current.EmailErrorWithAttachmentAsync(subject, body, logFile);
            }));

            md.Commands.Add(new UICommand("no"));

            await md.ShowAsync();
        }