示例#1
0
        private void ProcessWebRequestError(WebRequestError e, bool isSecurityCode)
        {
            if (e.webRequest.responseCode == 401 &&
                isSecurityCode)
            {
                if (onSecurityCodeRefused != null)
                {
                    onSecurityCodeRefused(e.errorMessage);
                }
            }
            else if (e.webRequest.responseCode == 422 &&
                     !isSecurityCode)
            {
                if (onEmailRefused != null)
                {
                    onEmailRefused(emailRefusedMessage);
                }
            }
            else
            {
                if (onWebRequestError != null)
                {
                    onWebRequestError(e);
                }
            }


            inputField.interactable = true;
        }
        private IEnumerator FetchUserProfile()
        {
            bool        isUnresolvable = false;
            UserProfile profile        = null;

            float  nextRetrySeconds = 0;
            string errorMessage     = null;

            while (!isUnresolvable &&
                   profile == null &&
                   this != null)
            {
                WebRequestError error  = null;
                bool            isDone = false;

                ModManager.GetAuthenticatedUserProfile((p) => { isDone = true; profile = p; },
                                                       (e) => { isDone = true; error = e; });

                while (!isDone)
                {
                    yield return(null);
                }

                if (error != null)
                {
                    isUnresolvable = error.isRequestUnresolvable;

                    if (isUnresolvable)
                    {
                        errorMessage = ("Unable to get your profile from the mod.io servers.\n"
                                        + error.displayMessage);
                    }
                    else
                    {
                        yield return(new WaitForSecondsRealtime(nextRetrySeconds));

                        nextRetrySeconds += 5f;
                    }
                }
                else if (profile == null)
                {
                    errorMessage = ("Unable to get your profile from the mod.io servers.\n"
                                    + "An unknown error has occurred.");
                    isUnresolvable = true;
                }
            }

            if (isUnresolvable)
            {
                MessageSystem.QueueMessage(MessageDisplayData.Type.Error, errorMessage);
            }
            else if (this != null)
            {
                Debug.Assert(profile != null);

                view.DisplayUser(profile);
            }
        }
示例#3
0
        /// <summary>Handles the completion of an image download.</summary>
        protected virtual void OnDownloadCompleted(UnityWebRequest webRequest, string imageURL)
        {
            // early out if destroyed
            if (this == null)
            {
                return;
            }

            Debug.Assert(webRequest != null);

            // handle callbacks
            Callbacks callbacks;
            bool      isURLMapped = this.m_callbackMap.TryGetValue(imageURL, out callbacks);

            if (callbacks == null)
            {
                Debug.LogWarning("[mod.io] ImageRequestManager completed a download but the callbacks"
                                 + " entry for the download was null."
                                 + "\nImageURL = " + imageURL
                                 + "\nWebRequest.URL = " + webRequest.url
                                 + "\nm_callbackMap.TryGetValue() = " + isURLMapped.ToString()
                                 );
                return;
            }

            if (webRequest.isHttpError || webRequest.isNetworkError)
            {
                if (callbacks.failed.Count > 0)
                {
                    WebRequestError error = WebRequestError.GenerateFromWebRequest(webRequest);

                    foreach (var errorCallback in callbacks.failed)
                    {
                        errorCallback(error);
                    }
                }
            }
            else
            {
                Texture2D texture = ((DownloadHandlerTexture)webRequest.downloadHandler).texture;

                if (this.isActiveAndEnabled || !this.clearCacheOnDisable)
                {
                    this.cache[imageURL] = texture;
                }

                foreach (var successCallback in callbacks.succeeded)
                {
                    successCallback(texture);
                }
            }

            // remove from "in progress"
            this.m_callbackMap.Remove(imageURL);
        }
示例#4
0
        private string ConvertErrorToHelpString(WebRequestError error)
        {
            if (error.fieldValidationMessages != null &&
                error.fieldValidationMessages.Count > 0)
            {
                var helpString = new System.Text.StringBuilder();

                foreach (string message in error.fieldValidationMessages.Values)
                {
                    helpString.Append(message + "\n");
                }

                helpString.Length -= 1;

                return(helpString.ToString());
            }
            else
            {
                return(error.displayMessage);
            }
        }
示例#5
0
        private void ProcessWebRequestError(WebRequestError e, bool isSecurityCode)
        {
            if (e.webRequest.responseCode == 401 &&
                isSecurityCode)
            {
                MessageSystem.QueueMessage(MessageDisplayData.Type.Error,
                                           e.errorMessage);
            }
            else if (e.webRequest.responseCode == 422 &&
                     !isSecurityCode)
            {
                MessageSystem.QueueMessage(MessageDisplayData.Type.Error,
                                           emailRefusedMessage);
            }
            else
            {
                MessageSystem.QueueMessage(MessageDisplayData.Type.Warning,
                                           e.displayMessage);
            }


            inputField.interactable = true;
        }
示例#6
0
        /// <summary>Callback for a failed report submission.</summary>
        private void OnReportFailed(WebRequestError error)
        {
            var messageData = new MessageDialog.Data()
            {
                header  = "Report Submission Status",
                message = ("Report submission failed.\n"
                           + error.displayMessage
                           + "\n[Error Code: " + error.webRequest.responseCode.ToString() + "]"),
                standardButtonCallback = () =>
                {
                    ViewManager.instance.CloseWindowedView(ViewManager.instance.reportDialog);
                    ViewManager.instance.CloseWindowedView(ViewManager.instance.messageDialog);
                },
                standardButtonText = "Done",
                onClose            = () =>
                {
                    ViewManager.instance.CloseWindowedView(ViewManager.instance.reportDialog);
                    ViewManager.instance.CloseWindowedView(ViewManager.instance.messageDialog);
                },
            };

            ViewManager.instance.ShowMessageDialog(messageData);
        }
        // ---------[ UTILITY ]---------
        /// <summary>Recursively fetches all of the mod profiles in the array.</summary>
        protected System.Collections.IEnumerator FetchAllModProfiles(int[] modIds,
                                                                     Action <List <ModProfile> > onSuccess,
                                                                     Action <WebRequestError> onError)
        {
            List <ModProfile> modProfiles = new List <ModProfile>();

            // pagination
            APIPaginationParameters pagination = new APIPaginationParameters()
            {
                limit  = APIPaginationParameters.LIMIT_MAX,
                offset = 0,
            };

            // filter
            RequestFilter filter = new RequestFilter();

            filter.AddFieldFilter(API.GetAllModsFilterFields.id,
                                  new InArrayFilter <int>()
            {
                filterArray = modIds,
            });

            bool isDone = false;

            while (!isDone)
            {
                RequestPage <ModProfile> page  = null;
                WebRequestError          error = null;

                APIClient.GetAllMods(filter, pagination,
                                     (r) => page  = r,
                                     (e) => error = e);

                while (page == null && error == null)
                {
                    yield return(null);
                }

                if (error != null)
                {
                    if (onError != null)
                    {
                        onError(error);
                    }

                    modProfiles = null;
                    isDone      = true;
                }
                else
                {
                    modProfiles.AddRange(page.items);

                    if (page.resultTotal <= (page.resultOffset + page.size))
                    {
                        isDone = true;
                    }
                    else
                    {
                        pagination.offset = page.resultOffset + page.size;
                    }
                }
            }

            if (isDone && modProfiles != null)
            {
                onSuccess(modProfiles);
            }
        }
示例#8
0
        // ------[ INITIALIZATION ]------
        protected virtual void OnEnable()
        {
            // Grab Serialized Properties
            serializedObject.Update();
            modIdProperty              = serializedObject.FindProperty("modId");
            initializedProfileId       = modIdProperty.intValue;
            editableModProfileProperty = serializedObject.FindProperty("editableModProfile");
            isModListLoading           = false;
            profileViewParts           = new IModProfileViewPart[]
            {
                new LoadingProfileViewPart()
            };

            // Profile Initialization
            if (modIdProperty.intValue == ScriptableModProfile.UNINITIALIZED_MOD_ID)
            {
                this.profile = null;

                if (!UserAuthenticationData.instance.Equals(UserAuthenticationData.NONE))
                {
                    this.isModListLoading = true;
                    this.modOptions       = new string[] { "Loading..." };

                    Action <WebRequestError> onError = (e) =>
                    {
                        WebRequestError.LogAsWarning(e);
                        isModListLoading = false;
                    };

                    ModManager.GetAuthenticatedUserProfile((userProfile) =>
                    {
                        this.user = userProfile;

                        // - Find User Mods -
                        Action <List <ModProfile> > onGetUserMods = (profiles) =>
                        {
                            modInitializationOptionIndex = 0;
                            modList    = profiles.ToArray();
                            modOptions = new string[modList.Length];
                            for (int i = 0; i < modList.Length; ++i)
                            {
                                ModProfile mod = modList[i];
                                modOptions[i]  = mod.name;
                            }

                            isModListLoading = false;
                        };

                        ModManager.GetAuthenticatedUserMods(onGetUserMods, onError);
                    },
                                                           onError);
                }
                else
                {
                    this.modOptions = new string[0];
                }

                modInitializationOptionIndex = 0;
            }
            else
            {
                // Initialize View
                profile = null;

                if (modIdProperty.intValue == 0)
                {
                    profile = null;

                    profileViewParts = CreateProfileViewParts();

                    foreach (IModProfileViewPart viewPart in profileViewParts)
                    {
                        viewPart.OnEnable(editableModProfileProperty, null, this.user);
                    }
                    ;
                }
                else
                {
                    System.Action <ModProfile> onGetProfile = (p) =>
                    {
                        profile = p;

                        profileViewParts = CreateProfileViewParts();

                        foreach (IModProfileViewPart viewPart in profileViewParts)
                        {
                            viewPart.OnEnable(editableModProfileProperty, p, this.user);
                        }
                        ;

                        profileGetErrorMessage = string.Empty;
                    };

                    System.Action <WebRequestError> onGetProfileError = (e) =>
                    {
                        profile = null;

                        profileViewParts = CreateProfileViewParts();

                        foreach (IModProfileViewPart viewPart in profileViewParts)
                        {
                            viewPart.OnEnable(editableModProfileProperty, null, this.user);
                        }
                        ;

                        profileGetErrorMessage = ("Unable to fetch the mod profile data on the server.\n"
                                                  + e.displayMessage);
                    };

                    ModManager.GetModProfile(modIdProperty.intValue,
                                             onGetProfile,
                                             onGetProfileError);
                }
            }

            scrollPos        = Vector2.zero;
            isProfileSyncing = false;

            // Events
            EditorApplication.update += OnUpdate;
            LoginWindow.userLoggedIn += OnUserLogin;
        }
        /// <summary>Handles the completion of an image download.</summary>
        protected virtual void OnDownloadCompleted(UnityWebRequest webRequest, string imageURL)
        {
            // early out if destroyed
            if (this == null)
            {
                return;
            }

            Debug.Assert(webRequest != null);

            // - logging -
            #if DEBUG
            if (PluginSettings.data.logAllRequests && logDownloads)
            {
                if (webRequest.isNetworkError || webRequest.isHttpError)
                {
                    WebRequestError.LogAsWarning(WebRequestError.GenerateFromWebRequest(webRequest));
                }
                else
                {
                    var headerString    = new System.Text.StringBuilder();
                    var responseHeaders = webRequest.GetResponseHeaders();
                    if (responseHeaders != null &&
                        responseHeaders.Count > 0)
                    {
                        headerString.Append("\n");
                        foreach (var kvp in responseHeaders)
                        {
                            headerString.AppendLine("- [" + kvp.Key + "] " + kvp.Value);
                        }
                    }
                    else
                    {
                        headerString.Append(" NONE");
                    }

                    var    responseTimeStamp = ServerTimeStamp.Now;
                    string logString         = ("IMAGE DOWNLOAD SUCCEEDED"
                                                + "\nURL: " + webRequest.url
                                                + "\nTime Stamp: " + responseTimeStamp + " ("
                                                + ServerTimeStamp.ToLocalDateTime(responseTimeStamp) + ")"
                                                + "\nResponse Headers: " + headerString.ToString()
                                                + "\nResponse Code: " + webRequest.responseCode
                                                + "\nResponse Error: " + webRequest.error
                                                + "\n");
                    Debug.Log(logString);
                }
            }
            #endif

            // handle callbacks
            Callbacks callbacks;
            bool      isURLMapped = this.m_callbackMap.TryGetValue(imageURL, out callbacks);
            if (callbacks == null)
            {
                Debug.LogWarning("[mod.io] ImageRequestManager completed a download but the callbacks"
                                 + " entry for the download was null."
                                 + "\nImageURL = " + imageURL
                                 + "\nWebRequest.URL = " + webRequest.url
                                 + "\nm_callbackMap.TryGetValue() = " + isURLMapped.ToString()
                                 );
                return;
            }

            if (webRequest.isHttpError || webRequest.isNetworkError)
            {
                if (callbacks.failed.Count > 0)
                {
                    WebRequestError error = WebRequestError.GenerateFromWebRequest(webRequest);

                    foreach (var errorCallback in callbacks.failed)
                    {
                        errorCallback(error);
                    }
                }
            }
            else
            {
                Texture2D texture = ((DownloadHandlerTexture)webRequest.downloadHandler).texture;

                if (this.isActiveAndEnabled || !this.clearCacheOnDisable)
                {
                    this.cache[imageURL] = texture;
                }

                foreach (var successCallback in callbacks.succeeded)
                {
                    successCallback(texture);
                }
            }

            // remove from "in progress"
            this.m_callbackMap.Remove(imageURL);
        }