cleanup and added api key as a setting, this will probably need documenting how to set this up in the Google Cloud Console

This commit is contained in:
Tyler Mayoff 2025-06-19 21:12:10 -04:00
parent f8fc85c8dd
commit 33f7ab8cd1
4 changed files with 10 additions and 30 deletions

View file

@ -13,7 +13,7 @@ using NzbDrone.Core.Parser.Model;
namespace NzbDrone.Core.ImportLists.Youtube namespace NzbDrone.Core.ImportLists.Youtube
{ {
public abstract class YoutubeImportListBase<TSettings> : ImportListBase<TSettings> public abstract class YoutubeImportListBase<TSettings> : ImportListBase<TSettings>
where TSettings : YoutubeSettingsBase<TSettings>, new() where TSettings : YoutubePlaylistSettings, new()
{ {
private IHttpClient _httpClient; private IHttpClient _httpClient;
@ -36,7 +36,7 @@ namespace NzbDrone.Core.ImportLists.Youtube
using (var service = new YouTubeService(new BaseClientService.Initializer() using (var service = new YouTubeService(new BaseClientService.Initializer()
{ {
ApiKey = "" ApiKey = Settings.YoutubeApiKey,
})) }))
{ {
releases = Fetch(service); releases = Fetch(service);

View file

@ -32,15 +32,15 @@ namespace NzbDrone.Core.ImportLists.Youtube
public IList<YoutubeImportListItemInfo> Fetch(YouTubeService service, string playlistId) public IList<YoutubeImportListItemInfo> Fetch(YouTubeService service, string playlistId)
{ {
// TODO playlist
var results = new List<YoutubeImportListItemInfo>(); var results = new List<YoutubeImportListItemInfo>();
var req = service.PlaylistItems.List("contentDetails,snippet"); var req = service.PlaylistItems.List("contentDetails,snippet");
req.PlaylistId = playlistId; req.PlaylistId = playlistId;
req.MaxResults = 50; req.MaxResults = 50;
var page = 0;
while (true)
{
var playlist = req.Execute(); var playlist = req.Execute();
do
{
page++;
req.PageToken = playlist.NextPageToken; req.PageToken = playlist.NextPageToken;
foreach (var song in playlist.Items) foreach (var song in playlist.Items)
@ -61,12 +61,9 @@ namespace NzbDrone.Core.ImportLists.Youtube
results.Add(listItem); results.Add(listItem);
} }
if (playlist.NextPageToken == null) playlist = req.Execute();
{
break;
} }
} while (playlist.NextPageToken != null && page < 10);
return results; return results;
} }
@ -97,10 +94,5 @@ namespace NzbDrone.Core.ImportLists.Youtube
{ {
return (playlistItem.ContentDetails.VideoPublishedAtDateTimeOffset ?? DateTimeOffset.UnixEpoch).DateTime; return (playlistItem.ContentDetails.VideoPublishedAtDateTimeOffset ?? DateTimeOffset.UnixEpoch).DateTime;
} }
public override object RequestAction(string action, IDictionary<string, string> query)
{
return base.RequestAction(action, query);
}
} }
} }

View file

@ -23,7 +23,8 @@ namespace NzbDrone.Core.ImportLists.Youtube
PlaylistIds = System.Array.Empty<string>(); PlaylistIds = System.Array.Empty<string>();
} }
// public override string Scope => "playlist-read-private"; [FieldDefinition(1, Label = "Youtube API key", Type = FieldType.Textbox)]
public string YoutubeApiKey { get; set; }
[FieldDefinition(1, Label = "Playlists", Type = FieldType.Textbox)] [FieldDefinition(1, Label = "Playlists", Type = FieldType.Textbox)]
public IEnumerable<string> PlaylistIds { get; set; } public IEnumerable<string> PlaylistIds { get; set; }

View file

@ -1,6 +1,4 @@
using System;
using FluentValidation; using FluentValidation;
using NzbDrone.Core.Annotations;
using NzbDrone.Core.Validation; using NzbDrone.Core.Validation;
namespace NzbDrone.Core.ImportLists.Youtube namespace NzbDrone.Core.ImportLists.Youtube
@ -17,17 +15,6 @@ namespace NzbDrone.Core.ImportLists.Youtube
public string BaseUrl { get; set; } public string BaseUrl { get; set; }
public virtual string Scope => "";
[FieldDefinition(0, Label = "Access Token", Type = FieldType.Textbox, Hidden = HiddenType.Hidden)]
public string AccessToken { get; set; }
[FieldDefinition(0, Label = "Refresh Token", Type = FieldType.Textbox, Hidden = HiddenType.Hidden)]
public string RefreshToken { get; set; }
[FieldDefinition(0, Label = "Expires", Type = FieldType.Textbox, Hidden = HiddenType.Hidden)]
public DateTime Expires { get; set; }
public NzbDroneValidationResult Validate() public NzbDroneValidationResult Validate()
{ {
return new NzbDroneValidationResult(Validator.Validate((TSettings)this)); return new NzbDroneValidationResult(Validator.Validate((TSettings)this));