using System;
using System.Reactive.Linq;
using System.Reactive.Threading.Tasks;
namespace Octokit.Reactive
{
public class ObservableRepositoryTrafficClient : IObservableRepositoryTrafficClient
{
readonly IRepositoryTrafficClient _client;
public ObservableRepositoryTrafficClient(IGitHubClient client)
{
Ensure.ArgumentNotNull(client, nameof(client));
_client = client.Repository.Traffic;
}
///
/// List the top 10 popular contents over the last 14 days
///
/// https://developer.github.com/v3/repos/traffic/#list-paths
/// The owner of the repository
public IObservable GetAllPaths(long repositoryId)
{
return _client.GetAllPaths(repositoryId).ToObservable().SelectMany(x => x);
}
///
/// List the top 10 popular contents over the last 14 days
///
/// https://developer.github.com/v3/repos/traffic/#list-paths
/// The owner of the repository
/// The name of the repository
public IObservable GetAllPaths(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
return _client.GetAllPaths(owner, name).ToObservable().SelectMany(x => x);
}
///
/// List the top 10 referrers over the last 14 days
///
/// https://developer.github.com/v3/repos/traffic/#list-referrers
/// The owner of the repository
public IObservable GetAllReferrers(long repositoryId)
{
return _client.GetAllReferrers(repositoryId).ToObservable().SelectMany(x => x);
}
///
/// List the top 10 referrers over the last 14 days
///
/// https://developer.github.com/v3/repos/traffic/#list-referrers
/// The owner of the repository
/// The name of the repository
public IObservable GetAllReferrers(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
return _client.GetAllReferrers(owner, name).ToObservable().SelectMany(x => x);
}
///
/// Get the total number of clones and breakdown per day or week for the last 14 days
///
/// https://developer.github.com/v3/repos/traffic/#clones
/// The owner of the repository
/// Breakdown per day or week
public IObservable GetClones(long repositoryId, RepositoryTrafficRequest per)
{
Ensure.ArgumentNotNull(per, nameof(per));
return _client.GetClones(repositoryId, per).ToObservable();
}
///
/// Get the total number of clones and breakdown per day or week for the last 14 days
///
/// https://developer.github.com/v3/repos/traffic/#clones
/// The owner of the repository
/// The name of the repository
/// Breakdown per day or week
public IObservable GetClones(string owner, string name, RepositoryTrafficRequest per)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(per, nameof(per));
return _client.GetClones(owner, name, per).ToObservable();
}
///
/// Get the total number of views and breakdown per day or week for the last 14 days
///
/// https://developer.github.com/v3/repos/traffic/#views
/// The owner of the repository
/// Breakdown per day or week
public IObservable GetViews(long repositoryId, RepositoryTrafficRequest per)
{
Ensure.ArgumentNotNull(per, nameof(per));
return _client.GetViews(repositoryId, per).ToObservable();
}
///
/// Get the total number of views and breakdown per day or week for the last 14 days
///
/// https://developer.github.com/v3/repos/traffic/#views
/// The owner of the repository
/// The name of the repository
/// Breakdown per day or week
public IObservable GetViews(string owner, string name, RepositoryTrafficRequest per)
{
Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner));
Ensure.ArgumentNotNullOrEmptyString(name, nameof(name));
Ensure.ArgumentNotNull(per, nameof(per));
return _client.GetViews(owner, name, per).ToObservable();
}
}
}