using Google.Apis.Auth.OAuth2; using Google.Apis.Oauth2.v2; using Google.Apis.Oauth2.v2.Data; using Google.Apis.Services; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data; using System.Collections.Generic; using System.Threading.Tasks; using YouTube; using YoutubeExplode; namespace FoxTube.Models { public class User { public Userinfoplus UserInfo { get; private set; } public UserCredential Credential { get; private set; } public Channel Channel { get; private set; } public List Subscriptions { get; } = new List(); public ExtendedYouTubeService Service { get; private set; } public YoutubeClient Client { get; private set; } public static async Task GetUser(UserCredential credential) { User user = new User(); user.Credential = credential; BaseClientService.Initializer initializer = new BaseClientService.Initializer { ApplicationName = "FoxTube", HttpClientInitializer = credential }; user.Service = new ExtendedYouTubeService(initializer); user.UserInfo = await new Oauth2Service(initializer).Userinfo.Get().ExecuteAsync(); // TODO: Retrieve history and WL SubscriptionsResource.ListRequest subRequest = user.Service.Subscriptions.List("snippet"); subRequest.Mine = true; subRequest.MaxResults = 50; subRequest.Order = SubscriptionsResource.ListRequest.OrderEnum.Relevance; SubscriptionListResponse subResponse; do { subResponse = await subRequest.ExecuteAsync(); subRequest.PageToken = subResponse.NextPageToken; user.Subscriptions.AddRange(subResponse.Items); } while (!string.IsNullOrWhiteSpace(subRequest.PageToken)); var request = user.Service.Channels.List("snippet,contentDetails,brandingSettings"); request.Mine = true; user.Channel = request.Execute().Items[0]; return user; } } }