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)); }
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)); }
/// <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)); }
/// <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)); }
internal static IEnumerable <(string, string)> GetTuples(this DiscussionTopicInclusions includes) { return(includes.GetFlags().Select(f => ("include[]", f.GetApiRepresentation())).ToList()); }