コード例 #1
0
        private Task <HttpResponseMessage> RawListDiscussionTopics(string type,
                                                                   string id,
                                                                   string orderBy,
                                                                   DiscussionTopicScopes?scopes,
                                                                   bool?onlyAnnouncements,
                                                                   string filterBy,
                                                                   string searchTerm,
                                                                   bool?excludeContextModuleLockedTopics,
                                                                   DiscussionTopicInclusions includes)
        {
            var url = $"{type}/{id}/discussion_topics";


            var args = new List <(string, string)> {
                ("order_by", orderBy),
                ("scope", scopes?.GetString()),
                ("only_announcements", onlyAnnouncements?.ToShortString()),
                ("filter_by", filterBy),
                ("search_term", searchTerm),
                ("exclude_context_module_locked_topics",
                 excludeContextModuleLockedTopics?.ToShortString())
            };

            args.AddRange(includes.GetTuples());

            url += BuildQueryString(args.ToArray());

            return(_client.GetAsync(url));
        }
コード例 #2
0
        private Task <HttpResponseMessage> RawGetDiscussionTopic(string type,
                                                                 string baseId,
                                                                 string topicId,
                                                                 DiscussionTopicInclusions inclusions)
        {
            var url = $"{type}/{baseId}/discussion_topics/{topicId}" + BuildQueryString(inclusions.GetTuples().ToArray());

            return(_client.GetAsync(url));
        }
コード例 #3
0
        /// <summary>
        /// Gets a single course discussion topic by its id.
        /// </summary>
        /// <param name="courseId">The course id.</param>
        /// <param name="discussionId">The discussion id.</param>
        /// <param name="inclusions">Extra data to include in the result. See <see cref="DiscussionTopicInclusions"/>.</param>
        /// <returns>The discussion topic.</returns>
        public async Task <DiscussionTopic> GetCourseDiscussionTopic(ulong courseId,
                                                                     ulong discussionId,
                                                                     DiscussionTopicInclusions inclusions = DiscussionTopicInclusions.Default)
        {
            var response = await RawGetDiscussionTopic("courses",
                                                       courseId.ToString(),
                                                       discussionId.ToString(),
                                                       inclusions);

            response.AssertSuccess();

            var model = JsonConvert.DeserializeObject <DiscussionTopicModel>(await response.Content.ReadAsStringAsync());

            return(new DiscussionTopic(this, model, DiscussionTopic.DiscussionHome.Course, courseId));
        }
コード例 #4
0
        /// <summary>
        /// Returns the list of discussion topics for this course.
        /// </summary>
        /// <param name="id">The course id.</param>
        /// <param name="orderBy">The order of the list. <see cref="DiscussionTopicOrdering.Position"/> is the default.</param>
        /// <param name="scopes">Filter the results by those that match all of these states. No filtering by default.</param>
        /// <param name="onlyAnnouncements">Only return announcements.</param>
        /// <param name="filterByUnread">Only return unread by the current user.</param>
        /// <param name="searchTerm">An optional search term.</param>
        /// <param name="excludeContextModuleLockedTopics">For students, exclude topics that are locked by module progression.</param>
        /// <param name="includes">Extra data to include in the result. See <see cref="DiscussionTopicInclusions"/>.</param>
        /// <returns>The list of discussion topics.</returns>
        /// <seealso cref="DiscussionTopicInclusions"/>
        /// <seealso cref="DiscussionTopicOrdering"/>
        /// <seealso cref="DiscussionTopicScopes"/>
        public async Task <IEnumerable <DiscussionTopic> > ListCourseDiscussionTopics(ulong id,
                                                                                      DiscussionTopicOrdering?orderBy = null,
                                                                                      DiscussionTopicScopes?scopes    = null,
                                                                                      bool?onlyAnnouncements          = null,
                                                                                      bool filterByUnread             = false,
                                                                                      string searchTerm = null,
                                                                                      bool?excludeContextModuleLockedTopics = null,
                                                                                      DiscussionTopicInclusions includes    = DiscussionTopicInclusions.Default)
        {
            var response = await RawListDiscussionTopics("courses",
                                                         id.ToString(),
                                                         orderBy?.GetString(),
                                                         scopes,
                                                         onlyAnnouncements,
                                                         filterByUnread? "unread" : null,
                                                         searchTerm,
                                                         excludeContextModuleLockedTopics,
                                                         includes);

            response.AssertSuccess();

            var models = await AccumulateDeserializePages <DiscussionTopicModel>(response);

            return(from model in models
                   select new DiscussionTopic(this, model, DiscussionTopic.DiscussionHome.Course, id));
        }
コード例 #5
0
 internal static IEnumerable <(string, string)> GetTuples(this DiscussionTopicInclusions includes)
 {
     return(includes.GetFlags().Select(f => ("include[]", f.GetApiRepresentation())).ToList());
 }