using System;
using System.Reactive;
using System.Reactive.Threading.Tasks;
using Octokit.Reactive.Internal;
namespace Octokit.Reactive
{
///
/// A client for GitHub's Activity Notifications API.
///
///
/// See the Activity Notifications API documentation for more information.
///
public class ObservableNotificationsClient : IObservableNotificationsClient
{
readonly IConnection _connection;
readonly INotificationsClient _notificationsClient;
public ObservableNotificationsClient(IGitHubClient client)
{
Ensure.ArgumentNotNull(client, "client");
_connection = client.Connection;
_notificationsClient = client.Activity.Notifications;
}
///
/// Retrieves all of the s for the current user.
///
/// Thrown if the client is not authenticated.
public IObservable GetAllForCurrent()
{
return GetAllForCurrent(ApiOptions.None);
}
///
/// Retrieves all of the s for the current user.
///
/// Options for changing the API response
/// Thrown if the client is not authenticated.
public IObservable GetAllForCurrent(ApiOptions options)
{
Ensure.ArgumentNotNull(options, "options");
return _connection.GetAndFlattenAllPages(ApiUrls.Notifications(), options);
}
///
/// Retrieves all of the s for the current user specific to the specified repository.
///
/// The owner of the repository.
/// The name of the repository.
/// Thrown if the client is not authenticated.
public IObservable GetAllForRepository(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
return GetAllForRepository(owner, name, ApiOptions.None);
}
///
/// Retrieves all of the s for the current user specific to the specified repository.
///
/// The Id of the repository.
/// Thrown if the client is not authenticated.
public IObservable GetAllForRepository(int repositoryId)
{
return GetAllForRepository(repositoryId, ApiOptions.None);
}
///
/// Retrieves all of the s for the current user specific to the specified repository.
///
/// The owner of the repository.
/// The name of the repository.
/// Options for changing the API response
/// Thrown if the client is not authenticated.
public IObservable GetAllForRepository(string owner, string name, ApiOptions options)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNull(options, "options");
return _connection.GetAndFlattenAllPages(ApiUrls.Notifications(owner, name), options);
}
///
/// Retrieves all of the s for the current user specific to the specified repository.
///
/// The Id of the repository.
/// Options for changing the API response
/// Thrown if the client is not authenticated.
public IObservable GetAllForRepository(int repositoryId, ApiOptions options)
{
Ensure.ArgumentNotNull(options, "options");
return _connection.GetAndFlattenAllPages(ApiUrls.Notifications(repositoryId), options);
}
///
/// Retrieves all of the s for the current user.
///
/// Specifies the parameters to filter notifications by
/// Thrown if the client is not authenticated.
public IObservable GetAllForCurrent(NotificationsRequest request)
{
Ensure.ArgumentNotNull(request, "request");
return GetAllForCurrent(request, ApiOptions.None);
}
///
/// Retrieves all of the s for the current user.
///
/// Specifies the parameters to filter notifications by
/// Options for changing the API response
/// Thrown if the client is not authenticated.
public IObservable GetAllForCurrent(NotificationsRequest request, ApiOptions options)
{
Ensure.ArgumentNotNull(request, "request");
Ensure.ArgumentNotNull(options, "options");
return _connection.GetAndFlattenAllPages(ApiUrls.Notifications(), request.ToParametersDictionary(), options);
}
///
/// Retrieves all of the s for the current user specific to the specified repository.
///
/// The owner of the repository.
/// The name of the repository.
/// Specifies the parameters to filter notifications by
/// Thrown if the client is not authenticated.
public IObservable GetAllForRepository(string owner, string name, NotificationsRequest request)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNull(request, "request");
return GetAllForRepository(owner, name, request, ApiOptions.None);
}
///
/// Retrieves all of the s for the current user specific to the specified repository.
///
/// The Id of the repository.
/// Specifies the parameters to filter notifications by
/// Thrown if the client is not authenticated.
public IObservable GetAllForRepository(int repositoryId, NotificationsRequest request)
{
Ensure.ArgumentNotNull(request, "request");
return GetAllForRepository(repositoryId, request, ApiOptions.None);
}
///
/// Retrieves all of the s for the current user specific to the specified repository.
///
/// The owner of the repository.
/// The name of the repository.
/// Specifies the parameters to filter notifications by
/// Options for changing the API response
/// Thrown if the client is not authenticated.
public IObservable GetAllForRepository(string owner, string name, NotificationsRequest request, ApiOptions options)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNull(request, "request");
Ensure.ArgumentNotNull(options, "options");
return _connection.GetAndFlattenAllPages(ApiUrls.Notifications(owner, name), request.ToParametersDictionary(), options);
}
///
/// Retrieves all of the s for the current user specific to the specified repository.
///
/// The Id of the repository.
/// Specifies the parameters to filter notifications by
/// Options for changing the API response
/// Thrown if the client is not authenticated.
public IObservable GetAllForRepository(int repositoryId, NotificationsRequest request, ApiOptions options)
{
Ensure.ArgumentNotNull(request, "request");
Ensure.ArgumentNotNull(options, "options");
return _connection.GetAndFlattenAllPages(ApiUrls.Notifications(repositoryId), request.ToParametersDictionary(), options);
}
///
/// Marks all notifications as read.
///
/// http://developer.github.com/v3/activity/notifications/#mark-as-read
public IObservable MarkAsRead()
{
return _notificationsClient.MarkAsRead().ToObservable();
}
///
/// Marks all notifications as read.
///
/// The parameter which specifies which notifications to mark.
/// http://developer.github.com/v3/activity/notifications/#mark-as-read
public IObservable MarkAsRead(MarkAsReadRequest markAsReadRequest)
{
Ensure.ArgumentNotNull(markAsReadRequest, "markAsReadRequest");
return _notificationsClient.MarkAsRead(markAsReadRequest).ToObservable();
}
///
/// Marks the notifications for a given repository as read.
///
/// The owner of the repository
/// The name of the repository
/// http://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository
public IObservable MarkAsReadForRepository(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
return _notificationsClient.MarkAsReadForRepository(owner, name).ToObservable();
}
///
/// Marks the notifications for a given repository as read.
///
/// The Id of the repository
/// http://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository
public IObservable MarkAsReadForRepository(int repositoryId)
{
return _notificationsClient.MarkAsReadForRepository(repositoryId).ToObservable();
}
///
/// Marks the notifications for a given repository as read.
///
/// The owner of the repository
/// The name of the repository
/// The parameter which specifies which notifications to mark.
/// http://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository
public IObservable MarkAsReadForRepository(string owner, string name, MarkAsReadRequest markAsReadRequest)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNull(markAsReadRequest, "markAsReadRequest");
return _notificationsClient.MarkAsReadForRepository(owner, name, markAsReadRequest).ToObservable();
}
///
/// Marks the notifications for a given repository as read.
///
/// The Id of the repository
/// The parameter which specifies which notifications to mark.
/// http://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository
public IObservable MarkAsReadForRepository(int repositoryId, MarkAsReadRequest markAsReadRequest)
{
Ensure.ArgumentNotNull(markAsReadRequest, "markAsReadRequest");
return _notificationsClient.MarkAsReadForRepository(repositoryId, markAsReadRequest).ToObservable();
}
///
/// Retrives a single by Id.
///
/// The Id of the notification to retrieve.
/// http://developer.github.com/v3/activity/notifications/#view-a-single-thread
public IObservable Get(int id)
{
return _notificationsClient.Get(id).ToObservable();
}
///
/// Marks a single notification as read.
///
/// The id of the notification.
/// http://developer.github.com/v3/activity/notifications/#mark-a-thread-as-read
public IObservable MarkAsRead(int id)
{
return _notificationsClient.MarkAsRead(id).ToObservable();
}
///
/// Retrives a for the provided thread id.
///
/// The Id of the thread to retrieve subscription status.
/// http://developer.github.com/v3/activity/notifications/#get-a-thread-subscription
public IObservable GetThreadSubscription(int id)
{
return _notificationsClient.GetThreadSubscription(id).ToObservable();
}
///
/// Sets the authenticated user's subscription settings for a given thread.
///
/// The Id of the thread to update.
/// The subscription parameters to set.
/// http://developer.github.com/v3/activity/notifications/#set-a-thread-subscription
public IObservable SetThreadSubscription(int id, NewThreadSubscription threadSubscription)
{
Ensure.ArgumentNotNull(threadSubscription, "threadSubscription");
return _notificationsClient.SetThreadSubscription(id, threadSubscription).ToObservable();
}
///
/// Deletes the authenticated user's subscription to a given thread.
///
/// The Id of the thread to delete subscription from.
/// http://developer.github.com/v3/activity/notifications/#delete-a-thread-subscription
public IObservable DeleteThreadSubscription(int id)
{
return _notificationsClient.DeleteThreadSubscription(id).ToObservable();
}
}
}