示例#1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ExerciseSubmissionApi"/> class.
        /// </summary>
        /// <param name="account">The instance of the <see cref="Account"/> class to use to store the OAuth 2.0 account
        /// credentials.</param>
        /// <param name="activity">The user activity to submit.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="activity"/> is <c>null</c>.</exception>
        public ExerciseSubmissionApi(Account account, UserActivity activity)
            : base(Config.TellOPConfiguration.GetEndpointAsUri("TellOP.API.Exercise"), HttpMethod.Post, account)
        {
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }

            this.PostBody = "id=" + Uri.EscapeDataString(activity.ActivityId.ToString(System.Globalization.CultureInfo.InvariantCulture));

            if (activity is UserActivityEssay)
            {
                UserActivityEssay essay = activity as UserActivityEssay;
                this.PostBody += "&type=" + UserActivityEssay.UserActivityType + "&text=" + Uri.EscapeDataString(essay.Text);
            }
            else if (activity is UserActivityDictionarySearch)
            {
                UserActivityDictionarySearch dictSearch = activity as UserActivityDictionarySearch;
                this.PostBody += "&type=" + UserActivityDictionarySearch.UserActivityType + "&word=" + Uri.EscapeDataString(dictSearch.Word);
            }
            else
            {
                throw new ArgumentException("The activity type is not supported at this time", "activity");
            }
        }
示例#2
0
        /// <summary>
        /// Save the current search online.
        /// </summary>
        /// <param name="word">String searched</param>
        /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns>
        private static async Task SaveDictionarySearchAsync(string word)
        {
            UserActivityDictionarySearch dictSearch = new UserActivityDictionarySearch()
            {
                ActivityId = BritishEnglishDictionarySearchID,
                Word       = word
            };

            Tools.Logger.Log("DictionaryLog", "Start logging procedure (ID: " + dictSearch.ActivityId + ", Word: " + dictSearch.Word + ")");
            ExerciseSubmissionApi dictSearchSubmissionEndpoint = new ExerciseSubmissionApi(App.OAuth2Account, dictSearch);

            Tools.Logger.Log("DictionaryLog", "Send data to the server");
            Task  dictSearchSubmissionTask = Task.Run(async() => await dictSearchSubmissionEndpoint.CallEndpointAsync());
            await dictSearchSubmissionTask;

            if (dictSearchSubmissionTask.IsFaulted)
            {
                Tools.Logger.Log("DictionaryLog", "Exception", dictSearchSubmissionTask.Exception);

                // Prevent the inner exception from terminating the program.
                foreach (Exception ex in dictSearchSubmissionTask.Exception.InnerExceptions)
                {
                    Tools.Logger.Log("DictionaryLog", "Inner exception", ex);
                }
            }
            else
            {
                Tools.Logger.Log("DictionaryLog", "Data received. Everything is OK!");
            }
        }
示例#3
0
文件: ExerciseAPI.cs 项目: TellOP/APP
        /// <summary>
        /// Converts an <see cref="Activity"/> to the most specific subclass of <see cref="Exercise"/> and fills in the
        /// relevant details.
        /// </summary>
        /// <param name="activity">An instance of <see cref="Activity"/> containing the data returned by an API
        /// endpoint.</param>
        /// <returns>A subclass of <see cref="Exercise"/> containing the data converted from <paramref name="activity"/>.
        /// </returns>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="activity"/> is <c>null</c>.</exception>
        /// <exception cref="NotImplementedException">Thrown if <paramref name="activity"/> is an activity type that is
        /// not supported by the app at this time.</exception>
        public static Exercise ConvertActivityToExercise(Activity activity)
        {
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }

            if (activity.GetType() == typeof(ActivityEssay))
            {
                ActivityEssay resultEssay = (ActivityEssay)activity;
                EssayExercise essay       = new EssayExercise()
                {
                    Title           = resultEssay.Title,
                    Description     = resultEssay.Description,
                    MinimumWords    = resultEssay.MinimumWords,
                    MaximumWords    = resultEssay.MaximumWords,
                    PreliminaryText = resultEssay.PreliminaryText,
                    Contents        = (resultEssay.UserActivity != null) ? ((UserActivityEssay)resultEssay.UserActivity).Text : string.Empty,
                    Featured        = resultEssay.Featured,
                    Uid             = resultEssay.Id,
                    Language        = resultEssay.Language,
                    Level           = resultEssay.Level
                };
                foreach (string tag in resultEssay.Tags)
                {
                    essay.Tags.Add(tag);
                }

                UserActivity uActivity = resultEssay.UserActivity;
                if (uActivity != null)
                {
                    UserActivityEssay uActivityEss = uActivity as UserActivityEssay;
                    if (uActivityEss != null)
                    {
                        if (!string.IsNullOrEmpty(uActivityEss.Text))
                        {
                            essay.Contents = uActivityEss.Text;
                        }
                    }
                }

                return(essay);
            }

            if (activity.GetType() == typeof(ActivityDictionarySearch))
            {
                ActivityDictionarySearch resultDictSearch = (ActivityDictionarySearch)activity;
                DictionarySearchExercise dictionarySearch = new DictionarySearchExercise()
                {
                    Featured = resultDictSearch.Featured,
                    Uid      = resultDictSearch.Id,
                    Language = resultDictSearch.Language,
                    Level    = resultDictSearch.Level
                };

                UserActivity uActivity = resultDictSearch.UserActivity;
                if (uActivity != null)
                {
                    UserActivityDictionarySearch uActivityDs = uActivity as UserActivityDictionarySearch;
                    if (uActivityDs != null)
                    {
                        if (!string.IsNullOrEmpty(uActivityDs.Word))
                        {
                            dictionarySearch.Word = uActivityDs.Word;
                        }
                    }
                }

                return(dictionarySearch);
            }

            throw new NotImplementedException("The returned exercise type is not supported yet");
        }