SYMBOL INDEX (2440 symbols across 253 files) FILE: Tubifarry/Blocklisting/BaseBlocklist.cs class BaseBlocklist (line 9) | public abstract class BaseBlocklist(IBlocklistRepository bloc... method IsBlocklisted (line 15) | public bool IsBlocklisted(int artistId, ReleaseInfo release) => _block... method GetBlocklist (line 17) | public Blocklist GetBlocklist(DownloadFailedEvent message) => new() method SameRelease (line 32) | private static bool SameRelease(Blocklist item, ReleaseInfo release) =... FILE: Tubifarry/Blocklisting/Blocklists.cs class YoutubeBlocklist (line 6) | public class YoutubeBlocklist(IBlocklistRepository blocklistRepository) ... class SoulseekBlocklist (line 9) | public class SoulseekBlocklist(IBlocklistRepository blocklistRepository)... class QobuzBlocklist (line 12) | public class QobuzBlocklist(IBlocklistRepository blocklistRepository) : ... class LucidaBlocklist (line 15) | public class LucidaBlocklist(IBlocklistRepository blocklistRepository) :... class SubSonicBlocklist (line 18) | public class SubSonicBlocklist(IBlocklistRepository blocklistRepository)... FILE: Tubifarry/Core/Model/AlbumData.cs class AlbumData (line 10) | public partial class AlbumData(string name, string downloadProtocol) method ToReleaseInfo (line 51) | public ReleaseInfo ToReleaseInfo() => new() method ParseReleaseDate (line 71) | public void ParseReleaseDate() => ReleaseDateTime = ReleaseDatePrecisi... method ConstructTitle (line 83) | private string ConstructTitle() method NormalizeAlbumName (line 118) | private static string NormalizeAlbumName(string albumName) method FeatRegex (line 130) | [GeneratedRegex(@"(?i)\b(feat\.|ft\.|featuring)\b", RegexOptions.Ignor... method FeatReplaceRegex (line 133) | [GeneratedRegex(@"\((?!feat\.)[^)]*\)")] FILE: Tubifarry/Core/Model/ApiCircuitBreaker.cs type ICircuitBreaker (line 6) | public interface ICircuitBreaker method RecordSuccess (line 10) | void RecordSuccess(); method RecordFailure (line 12) | void RecordFailure(); method Reset (line 14) | void Reset(); class ApiCircuitBreaker (line 17) | public class ApiCircuitBreaker(int failureThreshold = 5, int resetTimeou... method RecordSuccess (line 45) | public void RecordSuccess() method RecordFailure (line 50) | public void RecordFailure() method Reset (line 59) | public void Reset() class CircuitBreakerFactory (line 65) | public static class CircuitBreakerFactory method GetBreaker (line 77) | public static ICircuitBreaker GetBreaker() => GetBreaker(typeof(T)); method GetBreaker (line 82) | public static ICircuitBreaker GetBreaker(object obj) => GetBreaker(obj... method GetBreaker (line 87) | public static ICircuitBreaker GetBreaker(Type type) method GetBreaker (line 100) | public static ICircuitBreaker GetBreaker(string name) method GetCustomBreaker (line 115) | public static ICircuitBreaker GetCustomBreaker(int failureThreshold... method CleanupIfNeeded (line 126) | private static void CleanupIfNeeded() method CleanupNamedBreakers (line 138) | private static void CleanupNamedBreakers() FILE: Tubifarry/Core/Model/AudioMetadataHandler.cs class AudioMetadataHandler (line 11) | internal class AudioMetadataHandler method AudioMetadataHandler (line 21) | public AudioMetadataHandler(string originalPath) method TryExtractCoverArtAsync (line 182) | private async Task TryExtractCoverArtAsync() method TryConvertToFormatAsync (line 232) | public async Task TryConvertToFormatAsync(AudioFormat audioForma... method IsVideoContainerAsync (line 345) | public async Task IsVideoContainerAsync() method TryExtractAudioFromVideoAsync (line 369) | public async Task TryExtractAudioFromVideoAsync() method TryDecryptAsync (line 429) | public async Task TryDecryptAsync(string decryptionKey, string? ... method TryCreateLrcFileAsync (line 473) | public async Task TryCreateLrcFileAsync(CancellationToken token) method EnsureFileExtAsync (line 499) | public async Task EnsureFileExtAsync() method TryEmbedMetadata (line 527) | public bool TryEmbedMetadata(Album albumInfo, Track trackInfo) method IsTargetFormatSupportedForEncoding (line 634) | public static bool IsTargetFormatSupportedForEncoding(AudioFormat form... method SupportsMetadataEmbedding (line 641) | public static bool SupportsMetadataEmbedding(AudioFormat format) => fo... method GetSupportedCodecAsync (line 660) | public static async Task GetSupportedCodecAsync(string fi... method CheckFFmpegInstalled (line 686) | public static bool CheckFFmpegInstalled() method IsExecutable (line 747) | private static bool IsExecutable(string filePath) method ResetFFmpegInstallationCheck (line 779) | public static void ResetFFmpegInstallationCheck() => _isFFmpegInstalle... method InstallFFmpeg (line 781) | public static Task InstallFFmpeg(string path) FILE: Tubifarry/Core/Model/FileCache.cs class FileCache (line 8) | public class FileCache method FileCache (line 13) | public FileCache(string cacheDirectory) method CleanupOldCacheFiles (line 26) | private void CleanupOldCacheFiles() method GetAsync (line 40) | public async Task GetAsync(string cacheKey) method SetAsync (line 66) | public async Task SetAsync(string cacheKey, T data, TimeSpan expira... method IsCacheValid (line 88) | public bool IsCacheValid(string cacheKey, TimeSpan expirationDuration) method GetCacheFilePath (line 104) | private string GetCacheFilePath(string cacheKey) method CheckDirectory (line 118) | public void CheckDirectory() class CachedData (line 141) | public class CachedData FILE: Tubifarry/Core/Model/PlaylistItem.cs type PlaylistItem (line 3) | public record PlaylistItem( type PlaylistSnapshot (line 11) | public record PlaylistSnapshot( type IPlaylistTrackSource (line 16) | public interface IPlaylistTrackSource method FetchTrackLevelItems (line 18) | List FetchTrackLevelItems(); FILE: Tubifarry/Core/Model/TrustedSessionException.cs class TrustedSessionException (line 6) | public class TrustedSessionException : Exception method TrustedSessionException (line 8) | public TrustedSessionException(string message) : base(message) method TrustedSessionException (line 12) | public TrustedSessionException(string message, Exception innerExceptio... method TrustedSessionException (line 16) | public TrustedSessionException() FILE: Tubifarry/Core/Records/Lyric.cs type Lyric (line 9) | public record Lyric(string? PlainLyrics, List? SyncedLyrics) type SyncLine (line 21) | public partial record class SyncLine FILE: Tubifarry/Core/Records/MappingAgent.cs type MappingAgent (line 3) | public record MappingAgent FILE: Tubifarry/Core/Records/MusicBrainzData.cs type MusicBrainzSearchItem (line 5) | public record MusicBrainzSearchItem(string? Title, string? AlbumId, stri... type MusicBrainzAlbumItem (line 17) | public record MusicBrainzAlbumItem(string? AlbumId, string? Title, strin... FILE: Tubifarry/Core/Records/YouTubeSession.cs type SessionTokens (line 8) | public record SessionTokens( type ClientSessionInfo (line 33) | public record ClientSessionInfo( FILE: Tubifarry/Core/Replacements/ExtendedHttpIndexerBase.cs class ExtendedHttpIndexerBase (line 21) | public abstract class ExtendedHttpIndexerBase GetE... method GetParser (line 39) | public abstract IParseIndexerResponse GetParser(); method ExtendedHttpIndexerBase (line 41) | protected ExtendedHttpIndexerBase( method FetchRecent (line 56) | public override async Task> FetchRecent() method Fetch (line 64) | public override async Task> Fetch(AlbumSearchCriter... method Fetch (line 72) | public override async Task> Fetch(ArtistSearchCrite... method GetDownloadRequest (line 79) | public override HttpRequest GetDownloadRequest(string link) => new(link); method FetchReleases (line 81) | protected virtual async Task> FetchReleases( method ShouldStopFetchingPages (line 168) | protected virtual bool ShouldStopFetchingPages(bool isRecent, IList page) => PageSize... method IsValidRelease (line 200) | protected virtual bool IsValidRelease(ReleaseInfo release) method UpdateRssSyncStatus (line 217) | private void UpdateRssSyncStatus(List releases, ReleaseIn... method HandleException (line 232) | private void HandleException(Exception ex, string url, TimeSpan minimu... method HandleWebException (line 275) | private void HandleWebException(WebException webException, string url) method HandleHttpException (line 288) | private void HandleHttpException(HttpException ex, string url) method HandleTooManyRequestsException (line 297) | private void HandleTooManyRequestsException(TooManyRequestsException e... method HandleRequestLimitReachedException (line 305) | private void HandleRequestLimitReachedException(RequestLimitReachedExc... method FetchPage (line 313) | protected virtual async Task> FetchPage(IndexerRequ... method FetchIndexerResponse (line 329) | protected virtual async Task FetchIndexerResponse(Ind... method Test (line 343) | protected override async Task Test(List failures) =... method TestConnection (line 345) | protected virtual async Task TestConnection() FILE: Tubifarry/Core/Replacements/FlexibleHttpDispatcher.cs class FlexibleHttpDispatcher (line 12) | public class FlexibleHttpDispatcher : ManagedHttpDispatcher, IHttpDispat... method FlexibleHttpDispatcher (line 16) | public FlexibleHttpDispatcher(IHttpProxySettingsProvider proxySettings... method GetResponseAsync (line 46) | async Task IHttpDispatcher.GetResponseAsync(HttpRequest ... method ExtractUserAgentFromUrl (line 52) | private static void ExtractUserAgentFromUrl(HttpRequest request) method AddRequestHeaders (line 67) | protected override void AddRequestHeaders(HttpRequestMessage webReques... FILE: Tubifarry/Core/Replacements/IIndexerRequestGenerator.cs type IIndexerRequestGenerator (line 10) | public interface IIndexerRequestGenerator method GetRecentRequests (line 16) | IndexerPageableRequestChain GetRecentRequests(); method GetSearchRequests (line 21) | IndexerPageableRequestChain GetSearchRequests... method GetSearchRequests (line 26) | IndexerPageableRequestChain GetSearchRequests... FILE: Tubifarry/Core/Telemetry/ISearchContextBuffer.cs type ISearchContextBuffer (line 3) | public interface ISearchContextBuffer method LogSearch (line 5) | void LogSearch(string searchId, string query, string? artist, string? ... method LogSearchSettings (line 7) | void LogSearchSettings(string searchId, int trackCountFilter, bool nor... method LogExpectedTracks (line 9) | void LogExpectedTracks(string searchId, List trackNames, int e... method LogParseResult (line 11) | void LogParseResult(string searchId, string folderPath, string regexMa... method UpdateSearchResultCount (line 13) | void UpdateSearchResultCount(string searchId, int actualResultCount); method LogGrab (line 15) | void LogGrab(string searchId, string downloadId, bool isInteractive); method GetContext (line 17) | SlskdBufferedContext? GetContext(string downloadId); method GetAndRemoveContext (line 19) | SlskdBufferedContext? GetAndRemoveContext(string downloadId); method AddBreadcrumb (line 21) | void AddBreadcrumb(string downloadId, string message); method RecordImport (line 23) | void RecordImport(string albumKey); method WasRecentlyImported (line 25) | bool WasRecentlyImported(string albumKey, out int daysSinceImport); FILE: Tubifarry/Core/Telemetry/ISentryHelper.cs type ISentryHelper (line 3) | public interface ISentryHelper method StartSpan (line 8) | ISpan? StartSpan(string operation, string? description = null); method FinishSpan (line 9) | void FinishSpan(ISpan? span, SpanStatus status = SpanStatus.Ok); method FinishSpan (line 10) | void FinishSpan(ISpan? span, Exception ex); method SetSpanData (line 11) | void SetSpanData(ISpan? span, string key, object? value); method SetSpanTag (line 12) | void SetSpanTag(ISpan? span, string key, string value); method AddBreadcrumb (line 15) | void AddBreadcrumb(string? message, string? category = null); method CaptureException (line 16) | void CaptureException(Exception ex, string? message = null); method CaptureEvent (line 17) | void CaptureEvent(string message, string[] fingerprint, Dictionary trackNames, int e... method LogParseResult (line 23) | void LogParseResult(string searchId, string folderPath, string regexMa... method UpdateSearchResultCount (line 24) | void UpdateSearchResultCount(string searchId, int actualResultCount); method LogGrab (line 25) | void LogGrab(string searchId, string downloadId, bool isInteractive); method GetContext (line 26) | SlskdBufferedContext? GetContext(string downloadId); method GetAndRemoveContext (line 27) | SlskdBufferedContext? GetAndRemoveContext(string downloadId); method AddContextBreadcrumb (line 28) | void AddContextBreadcrumb(string downloadId, string message); method RecordImport (line 29) | void RecordImport(string albumKey); method WasRecentlyImported (line 30) | bool WasRecentlyImported(string albumKey, out int daysSinceImport); FILE: Tubifarry/Core/Telemetry/NoopSentryHelper.cs class NoopSentryHelper (line 3) | public class NoopSentryHelper : ISentryHelper method StartSpan (line 7) | public ISpan? StartSpan(string operation, string? description = null) ... method FinishSpan (line 9) | public void FinishSpan(ISpan? span, SpanStatus status = SpanStatus.Ok)... method FinishSpan (line 11) | public void FinishSpan(ISpan? span, Exception ex) { } method SetSpanData (line 13) | public void SetSpanData(ISpan? span, string key, object? value) { } method SetSpanTag (line 15) | public void SetSpanTag(ISpan? span, string key, string value) { } method AddBreadcrumb (line 17) | public void AddBreadcrumb(string? message, string? category = null) { } method CaptureException (line 19) | public void CaptureException(Exception ex, string? message = null) { } method CaptureEvent (line 21) | public void CaptureEvent(string message, string[] fingerprint, Diction... method LogSearch (line 23) | public void LogSearch(string searchId, string query, string? artist, s... method LogSearchSettings (line 25) | public void LogSearchSettings(string searchId, int trackCountFilter, b... method LogExpectedTracks (line 27) | public void LogExpectedTracks(string searchId, List trackNames... method LogParseResult (line 29) | public void LogParseResult(string searchId, string folderPath, string ... method UpdateSearchResultCount (line 31) | public void UpdateSearchResultCount(string searchId, int actualResultC... method LogGrab (line 33) | public void LogGrab(string searchId, string downloadId, bool isInterac... method GetContext (line 35) | public SlskdBufferedContext? GetContext(string downloadId) => null; method GetAndRemoveContext (line 37) | public SlskdBufferedContext? GetAndRemoveContext(string downloadId) =>... method AddContextBreadcrumb (line 39) | public void AddContextBreadcrumb(string downloadId, string message) { } method RecordImport (line 41) | public void RecordImport(string albumKey) { } method WasRecentlyImported (line 43) | public bool WasRecentlyImported(string albumKey, out int daysSinceImpo... FILE: Tubifarry/Core/Telemetry/SearchContextBuffer.cs class SearchContextBuffer (line 7) | public class SearchContextBuffer : ISearchContextBuffer method LogSearch (line 16) | public void LogSearch(string searchId, string query, string? artist, s... method LogSearchSettings (line 34) | public void LogSearchSettings(string searchId, int trackCountFilter, b... method LogExpectedTracks (line 49) | public void LogExpectedTracks(string searchId, List trackNames... method LogParseResult (line 58) | public void LogParseResult( method UpdateSearchResultCount (line 117) | public void UpdateSearchResultCount(string searchId, int actualResultC... method LogGrab (line 128) | public void LogGrab(string searchId, string downloadId, bool isInterac... method GetContext (line 163) | public SlskdBufferedContext? GetContext(string downloadId) method GetAndRemoveContext (line 169) | public SlskdBufferedContext? GetAndRemoveContext(string downloadId) method AddBreadcrumb (line 176) | public void AddBreadcrumb(string downloadId, string message) method RecordImport (line 182) | public void RecordImport(string albumKey) method WasRecentlyImported (line 188) | public bool WasRecentlyImported(string albumKey, out int daysSinceImport) method CleanupIfNeeded (line 203) | private void CleanupIfNeeded() FILE: Tubifarry/Core/Telemetry/SentryEventFilter.cs class SentryEventFilter (line 12) | public static class SentryEventFilter method FilterEvent (line 43) | public static SentryEvent? FilterEvent(SentryEvent? sentryEvent, Sentr... method EnrichFingerprint (line 79) | private static void EnrichFingerprint(SentryEvent sentryEvent, Excepti... method ClassifyException (line 103) | private static (string? Operation, string Component) ClassifyException... FILE: Tubifarry/Core/Telemetry/SentryHelper.cs class SentryHelper (line 4) | public class SentryHelper : ISentryHelper method SentryHelper (line 8) | public SentryHelper(ISearchContextBuffer contextBuffer) => _contextBuf... method StartSpan (line 12) | public ISpan? StartSpan(string operation, string? description = null) method FinishSpan (line 24) | public void FinishSpan(ISpan? span, SpanStatus status = SpanStatus.Ok) method FinishSpan (line 27) | public void FinishSpan(ISpan? span, Exception ex) method SetSpanData (line 44) | public void SetSpanData(ISpan? span, string key, object? value) method SetSpanTag (line 50) | public void SetSpanTag(ISpan? span, string key, string value) method AddBreadcrumb (line 53) | public void AddBreadcrumb(string? message, string? category = null) method CaptureException (line 59) | public void CaptureException(Exception ex, string? message = null) method CaptureEvent (line 67) | public void CaptureEvent(string message, string[] fingerprint, Diction... method LogSearch (line 86) | public void LogSearch(string searchId, string query, string? artist, s... method LogSearchSettings (line 89) | public void LogSearchSettings(string searchId, int trackCountFilter, b... method LogExpectedTracks (line 92) | public void LogExpectedTracks(string searchId, List trackNames... method LogParseResult (line 95) | public void LogParseResult(string searchId, string folderPath, string ... method UpdateSearchResultCount (line 98) | public void UpdateSearchResultCount(string searchId, int actualResultC... method LogGrab (line 101) | public void LogGrab(string searchId, string downloadId, bool isInterac... method GetContext (line 104) | public SlskdBufferedContext? GetContext(string downloadId) method GetAndRemoveContext (line 107) | public SlskdBufferedContext? GetAndRemoveContext(string downloadId) method AddContextBreadcrumb (line 110) | public void AddContextBreadcrumb(string downloadId, string message) method RecordImport (line 113) | public void RecordImport(string albumKey) method WasRecentlyImported (line 116) | public bool WasRecentlyImported(string albumKey, out int daysSinceImport) FILE: Tubifarry/Core/Telemetry/SlskdBufferedContext.cs class SlskdBufferedContext (line 3) | public class SlskdBufferedContext class ParseCandidate (line 59) | public class ParseCandidate FILE: Tubifarry/Core/Telemetry/SlskdSentryEvents.cs class SlskdSentryEvents (line 4) | public static class SlskdSentryEvents type ImportFailureReason (line 6) | public enum ImportFailureReason type DownloadFailureReason (line 15) | public enum DownloadFailureReason method EmitImportFailed (line 24) | public static void EmitImportFailed( method EmitImportSuccess (line 130) | public static void EmitImportSuccess( method EmitUserReplaced (line 182) | public static void EmitUserReplaced( method EmitDownloadFailed (line 217) | public static void EmitDownloadFailed( method CategorizeDownloadError (line 264) | public static DownloadFailureReason CategorizeDownloadError(string? er... FILE: Tubifarry/Core/Telemetry/SlskdTrackingService.cs class SlskdTrackingService (line 11) | public class SlskdTrackingService(ISentryHelper sentry, Logger logger) : method Handle (line 20) | public void Handle(AlbumGrabbedEvent message) method Handle (line 43) | public void Handle(AlbumImportIncompleteEvent message) method Handle (line 70) | public void Handle(TrackImportedEvent message) method Handle (line 119) | public void Handle(DownloadFailedEvent message) method IsSlskdDownload (line 136) | private static bool IsSlskdDownload(TrackedDownload trackedDownload) method DetermineFailureReason (line 146) | private static SlskdSentryEvents.ImportFailureReason DetermineFailureR... method ExtractStatusMessages (line 169) | private static List ExtractStatusMessages(TrackedDownload trac... method ExtractSearchIdFromInfoUrl (line 173) | private static string? ExtractSearchIdFromInfoUrl(string infoUrl) method GetAlbumKey (line 181) | private static string GetAlbumKey(TrackImportedEvent message) => $"{me... method DetermineReplacementSource (line 183) | private static string DetermineReplacementSource(TrackImportedEvent me... FILE: Tubifarry/Core/Telemetry/TubifarrySentry.cs class TubifarrySentry (line 9) | public static class TubifarrySentry method Initialize (line 18) | public static void Initialize() method GetEnvironment (line 67) | private static string GetEnvironment() method ConfigureDefaultScope (line 78) | private static void ConfigureDefaultScope() method Shutdown (line 102) | public static void Shutdown() method ConfigureScope (line 118) | public static void ConfigureScope(Action configure) FILE: Tubifarry/Core/Telemetry/TubifarrySentryTarget.cs class TubifarrySentryTarget (line 7) | [Target("TubifarrySentry")] method Write (line 34) | protected override void Write(LogEventInfo logEvent) method CaptureEvent (line 70) | private void CaptureEvent(LogEventInfo logEvent) FILE: Tubifarry/Core/Utilities/AudioFormat.cs type AudioFormat (line 5) | public enum AudioFormat class AudioFormatHelper (line 26) | internal static class AudioFormatHelper method GetFileExtensionForCodec (line 93) | public static string GetFileExtensionForCodec(string codec) => codec s... method GetAudioFormatFromCodec (line 111) | public static AudioFormat GetAudioFormatFromCodec(string codec) => cod... method GetFileExtensionForFormat (line 134) | public static string GetFileExtensionForFormat(AudioFormat format) => ... method ConvertOptionToAudioFormat (line 158) | public static AudioFormat ConvertOptionToAudioFormat(ReEncodeOptions r... method IsLossyFormat (line 170) | public static bool IsLossyFormat(AudioFormat format) => _lossyFormats.... method GetAudioCodecFromExtension (line 175) | public static AudioFormat GetAudioCodecFromExtension(string extension)... method GetDefaultBitrate (line 198) | public static int GetDefaultBitrate(AudioFormat format) => method ClampBitrate (line 204) | public static int ClampBitrate(AudioFormat format, int requestedBitrate) method MapBitrateToVorbisQuality (line 210) | public static int MapBitrateToVorbisQuality(int targetBitrate) => Vorb... method RoundToStandardBitrate (line 217) | public static int RoundToStandardBitrate(int bitrateKbps) => _standard... FILE: Tubifarry/Core/Utilities/CacheService.cs class CacheService (line 9) | public class CacheService method CacheService (line 33) | public CacheService() => _logger = NzbDroneLogger.GetLogger(this); method GetAsync (line 49) | public async Task GetAsync(string key) method SetAsync (line 59) | public async Task SetAsync(string key, TData value) method FetchAndCacheAsync (line 76) | public async Task FetchAndCacheAsync(string key, Func UpdateAsync(string key, Func entry) => type CacheType (line 106) | public enum CacheType FILE: Tubifarry/Core/Utilities/CookieManager.cs class CookieManager (line 5) | internal static class CookieManager method ParseCookieFile (line 7) | internal static Cookie[] ParseCookieFile(string filePath) FILE: Tubifarry/Core/Utilities/DynamicSchemaInjector.cs class DynamicSchemaInjector (line 7) | public static class DynamicSchemaInjector method InjectDynamic (line 12) | public static void InjectDynamic(IEnumerable ... FILE: Tubifarry/Core/Utilities/DynamicStateSettings.cs class DynamicStateSettings (line 9) | public abstract class DynamicStateSettings : IProviderConfig method GetAllBoolStates (line 14) | protected Dictionary GetAllBoolStates() => method GetBoolState (line 18) | public bool GetBoolState(string key) => method SetBoolState (line 21) | public void SetBoolState(string key, bool value) method Validate (line 28) | public abstract NzbDroneValidationResult Validate(); method BuildMappings (line 30) | public static FieldMapping[] BuildMappings(IEnumerable\d+)(?[\s_-]+)(?[a-z0-9,\(\)\... method TrackArtistTagTitlePattern1 (line 102) | [GeneratedRegex(@"^(?\d+)(?[\s_-]+)(?[a-z0-9,\(\)\... method TrackArtistTitlePattern1 (line 105) | [GeneratedRegex(@"^(?\d+)(?[\s_-]+)(?[a-z0-9,\(\)\... method ArtistTagTrackTitlePattern1 (line 108) | [GeneratedRegex(@"^(?[a-z0-9,\(\)\.&'']+)(?[\s_-]+)(?[a-z0-9,\(\)\.&'']+)(?[\s_-]+)(?[a-z0-9,\(\)\.&'']+)(?[\s_-]+)(?[a-z0-9,\(\)\.&'']+)(?[\s_-]+)(?[a-z0-9,\(\)\.&'']+)(?[\s_-]+)(?[a-z0-9,\(\)\.&'']+)(?[\s_-]+)(?\d+)(?[\s_-]+)(?[a-z0-9,\(\)\.... method TrackTagTitlePattern1 (line 129) | [GeneratedRegex(@"^(?<track>\d+)(?<sep>[\s_-]+)(?<tag>[a-z0-9,\(\)\.&'... method TrackTitleTagPattern1 (line 132) | [GeneratedRegex(@"^(?<track>\d+)(?<sep>[\s_-]+)(?<title>[a-z0-9,\(\)\.... method TrackArtistTitleTagPattern2 (line 136) | [GeneratedRegex(@"^(?<track>\d+)(?<sep>[\s-]+)(?<artist>[a-z0-9,\(\)\.... method TrackArtistTagTitlePattern2 (line 139) | [GeneratedRegex(@"^(?<track>\d+)(?<sep>[\s-]+)(?<artist>[a-z0-9,\(\)\.... method TrackArtistTitlePattern2 (line 142) | [GeneratedRegex(@"^(?<track>\d+)(?<sep>[\s-]+)(?<artist>[a-z0-9,\(\)\.... method ArtistTagTrackTitlePattern2 (line 145) | [GeneratedRegex(@"^(?<artist>[a-z0-9,\(\)\.\&''_]+)(?<sep>[\s-]+)(?<ta... method ArtistTrackTitleTagPattern2 (line 148) | [GeneratedRegex(@"^(?<artist>[a-z0-9,\(\)\.\&''_]+)(?<sep>[\s-]+)(?<tr... method ArtistTrackTitlePattern2 (line 151) | [GeneratedRegex(@"^(?<artist>[a-z0-9,\(\)\.\&''_]+)(?<sep>[\s-]+)(?<tr... method ArtistTitleTagPattern2 (line 154) | [GeneratedRegex(@"^(?<artist>[a-z0-9,\(\)\.\&''_]+)(?<sep>[\s-]+)(?<ti... method ArtistTagTitlePattern2 (line 157) | [GeneratedRegex(@"^(?<artist>[a-z0-9,\(\)\.\&''_]+)(?<sep>[\s-]+)(?<ta... method ArtistTitlePattern2 (line 160) | [GeneratedRegex(@"^(?<artist>[a-z0-9,\(\)\.\&''_]+)(?<sep>[\s-]+)(?<ti... method TrackTitlePattern2 (line 163) | [GeneratedRegex(@"^(?<track>\d+)(?<sep>[\s-]+)(?<title>[a-z0-9,\(\)\.\... method TrackTagTitlePattern2 (line 166) | [GeneratedRegex(@"^(?<track>\d+)(?<sep>[\s-]+)(?<tag>[a-z0-9,\(\)\.\&'... method TrackTitleTagPattern2 (line 169) | [GeneratedRegex(@"^(?<track>\d+)(?<sep>[\s-]+)(?<title>[a-z0-9,\(\)\.\... method TitleOnlyPattern (line 173) | [GeneratedRegex(@"^(?<title>.+)$", RegexOptions.IgnoreCase)] FILE: Tubifarry/Core/Utilities/IndexerParserHelper.cs class IndexerParserHelper (line 10) | public static class IndexerParserHelper method ProcessItems (line 31) | public static void ProcessItems<T>( method DetermineFormat (line 54) | public static AudioFormat DetermineFormat( method EstimateSize (line 89) | public static long EstimateSize( method GetQualityInfo (line 114) | public static (AudioFormat Format, int Bitrate, int BitDepth) GetQuali... FILE: Tubifarry/Core/Utilities/JsonConverters.cs class StringConverter (line 9) | public class StringConverter : JsonConverter<string> method Read (line 11) | public override string Read(ref Utf8JsonReader reader, Type typeToConv... method Write (line 24) | public override void Write(Utf8JsonWriter writer, string value, JsonSe... class FloatConverter (line 30) | public class FloatConverter : JsonConverter<float> method Read (line 32) | public override float Read(ref Utf8JsonReader reader, Type typeToConve... method Write (line 43) | public override void Write(Utf8JsonWriter writer, float value, JsonSer... class BooleanConverter (line 49) | public class BooleanConverter : JsonConverter<bool> method Read (line 51) | public override bool Read(ref Utf8JsonReader reader, Type typeToConver... method Write (line 63) | public override void Write(Utf8JsonWriter writer, bool value, JsonSeri... class UnixTimestampConverter (line 69) | internal class UnixTimestampConverter : JsonConverter<DateTime?> method Read (line 73) | public override DateTime? Read(ref Utf8JsonReader reader, Type typeToC... method Write (line 91) | public override void Write(Utf8JsonWriter writer, DateTime? value, Jso... FILE: Tubifarry/Core/Utilities/LazyRequestChain.cs class LazyIndexerPageableRequest (line 11) | public class LazyIndexerPageableRequest(Func<IEnumerable<IndexerRequest>... method AreResultsUsable (line 15) | public bool AreResultsUsable(int resultsCount) => MinimumResultsThresh... class LazyEnumerable (line 20) | private class LazyEnumerable(Func<IEnumerable<IndexerRequest>> factory... method GetEnumerator (line 24) | public IEnumerator<IndexerRequest> GetEnumerator() => _factory().Get... method GetEnumerator (line 26) | IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); class IndexerPageableRequestChain (line 33) | public class IndexerPageableRequestChain<TRequest> where TRequest : Inde... method IndexerPageableRequestChain (line 38) | public IndexerPageableRequestChain() => _chains = [[]]; method GetAllTiers (line 42) | public virtual IEnumerable<TRequest> GetAllTiers() => _chains.SelectMa... method GetTier (line 44) | public virtual IEnumerable<TRequest> GetTier(int index) => index < _ch... method Add (line 46) | public virtual void Add(IEnumerable<IndexerRequest> request) method AddTier (line 57) | public virtual void AddTier(IEnumerable<IndexerRequest> request) method AddTier (line 63) | public virtual void AddTier() method AreTierResultsUsable (line 74) | public virtual bool AreTierResultsUsable(int tierIndex, int resultsCou... method ToStandardChain (line 79) | public virtual IndexerPageableRequestChain ToStandardChain() class LazyIndexerPageableRequestChain (line 106) | public class LazyIndexerPageableRequestChain(int defaultThreshold = 0) :... method AddFactory (line 114) | public void AddFactory(Func<IEnumerable<IndexerRequest>> requestFactor... method AddTierFactory (line 125) | public void AddTierFactory(Func<IEnumerable<IndexerRequest>> requestFa... method AreTierResultsUsable (line 131) | public override bool AreTierResultsUsable(int tierIndex, int resultsCo... method Add (line 145) | public override void Add(IEnumerable<IndexerRequest> request) method AddTier (line 151) | public override void AddTier(IEnumerable<IndexerRequest> request) class SearchTierGenerator (line 161) | public static class SearchTierGenerator method CreateConditionalTier (line 166) | public static Func<IEnumerable<IndexerRequest>> CreateConditionalTier(... method CreateTier (line 171) | public static Func<IEnumerable<IndexerRequest>> CreateTier(Func<IEnume... FILE: Tubifarry/Core/Utilities/PermissionTester.cs class PermissionTester (line 7) | public static class PermissionTester method TestReadWritePermissions (line 9) | public static ValidationFailure? TestReadWritePermissions(string direc... method TestExistance (line 47) | public static ValidationFailure? TestExistance(string directoryPath, I... method TestExecutePermissions (line 63) | public static ValidationFailure? TestExecutePermissions(string directo... method TestAllPermissions (line 78) | public static List<ValidationFailure> TestAllPermissions(string direct... FILE: Tubifarry/Core/Utilities/PluginSettings.cs type IPluginSettings (line 10) | public interface IPluginSettings method GetValue (line 12) | T GetValue<T>(string key, T? defaultValue = default); method SetValue (line 14) | void SetValue<T>(string key, T value); method HasKey (line 16) | bool HasKey(string key); method RemoveKey (line 18) | void RemoveKey(string key); method Save (line 20) | void Save(); method Load (line 22) | void Load(); class SettingChangedEventArgs (line 27) | public class SettingChangedEventArgs(string key, object? oldValue, objec... class PluginSettings (line 34) | public class PluginSettings : IPluginSettings method PluginSettings (line 45) | public PluginSettings(IAppFolderInfo appFolderInfo, Logger logger, boo... method GetValue (line 62) | public T GetValue<T>(string key, T? defaultValue = default) method TryDeserialize (line 70) | private T? TryDeserialize<T>(string json, T? defaultValue) method SetValue (line 82) | public void SetValue<T>(string key, T value) method HasKey (line 100) | public bool HasKey(string key) method RemoveKey (line 108) | public void RemoveKey(string key) method Save (line 125) | public void Save() method SaveInternal (line 133) | private void SaveInternal() method Load (line 153) | public void Load() method GetInt (line 185) | public int GetInt(string key, int defaultValue = 0) => GetValue(key, d... method GetBool (line 187) | public bool GetBool(string key, bool defaultValue = false) => GetValue... method GetString (line 189) | public string GetString(string key, string defaultValue = "") => GetVa... method GetDouble (line 191) | public double GetDouble(string key, double defaultValue = 0.0) => GetV... method SetValues (line 193) | public void SetValues<T>(Dictionary<string, T> values) method Clear (line 212) | public void Clear() method OnSettingChanged (line 223) | protected virtual void OnSettingChanged(string key, object? oldValue, ... method ObfuscateString (line 226) | private static string ObfuscateString(string input) => method DeobfuscateString (line 233) | private static string DeobfuscateString(string input) => FILE: Tubifarry/Core/Utilities/ReleaseFormatter.cs class ReleaseFormatter (line 8) | public partial class ReleaseFormatter(ReleaseInfo releaseInfo, Artist ar... method BuildTrackFilename (line 14) | public string BuildTrackFilename(string? pattern, Track track, Album a... method BuildAlbumFilename (line 22) | public string BuildAlbumFilename(string? pattern, Album album) method BuildArtistFolderName (line 30) | public string BuildArtistFolderName(string? pattern) method GetTokenHandlers (line 38) | private Dictionary<string, Func<string>> GetTokenHandlers(Track? track... method ReplaceTokens (line 79) | private static string ReplaceTokens(string pattern, Dictionary<string,... method CleanFileName (line 85) | private string CleanFileName(string fileName) method CleanTitle (line 118) | private static string CleanTitle(string? title) method TitleThe (line 124) | private static string TitleThe(string? title) method CleanTitleThe (line 130) | private static string CleanTitleThe(string? title) => CleanTitle(Title... method TitleFirstCharacter (line 132) | private static string TitleFirstCharacter(string? title) method FormatTrackNumber (line 138) | private static string FormatTrackNumber(string? trackNumber, string? f... method ReplaceTokensRegex (line 146) | [GeneratedRegex(@"\{([^}]+)\}")] method TitleTheRegex (line 149) | [GeneratedRegex(@"^(The|A|An)\s+(.+)$", RegexOptions.IgnoreCase, "de-D... method ColonReplaceRegex (line 152) | [GeneratedRegex(@":\s*")] FILE: Tubifarry/Core/Utilities/RepositorySettingsResolver.cs type IRepositorySettingsResolver (line 7) | public interface IRepositorySettingsResolver method Resolve (line 9) | TSettings Resolve<TRepository, TSettings>(string implementationName) class RepositorySettingsResolver (line 14) | public class RepositorySettingsResolver(Lazy<IServiceProvider> servicePr... method Resolve (line 19) | public TSettings Resolve<TRepository, TSettings>(string implementation... FILE: Tubifarry/Core/Utilities/UserAgentValidator.cs type IUserAgentValidator (line 8) | public interface IUserAgentValidator method IsAllowed (line 15) | bool IsAllowed(string userAgent); method Parse (line 22) | IEnumerable<UserAgentProduct> Parse(string userAgent); method AddAllowedPattern (line 28) | void AddAllowedPattern(string pattern); method AddBlacklistPattern (line 34) | void AddBlacklistPattern(string pattern); type UserAgentProduct (line 40) | public record UserAgentProduct(string Name, string Version) class UserAgentValidator (line 48) | public partial class UserAgentValidator : IUserAgentValidator method UserAgentValidator (line 62) | public UserAgentValidator(IEnumerable<string>? allowed = null, IEnumer... method IsAllowed (line 70) | public bool IsAllowed(string userAgent) method Parse (line 81) | public IEnumerable<UserAgentProduct> Parse(string userAgent) => userAg... method AddAllowedPattern (line 87) | public void AddAllowedPattern(string pattern) => AddPattern(pattern, _... method AddBlacklistPattern (line 90) | public void AddBlacklistPattern(string pattern) => AddPattern(pattern,... method IsValidFormat (line 92) | private bool IsValidFormat(string ua) method AddPattern (line 101) | private static void AddPattern(string p, HashSet<string> exact, List<R... method TokenPattern (line 112) | [GeneratedRegex(@"^[!#$%&'*+\-.0-9A-Z^_`a-z|~]+$")] FILE: Tubifarry/Download/Base/BaseDownloadManager.cs type IBaseDownloadManager (line 13) | public interface IBaseDownloadManager<TDownloadRequest, TOptions, TClient> method Download (line 17) | Task<string> Download(RemoteAlbum remoteAlbum, IIndexer indexer, Namin... method GetItems (line 19) | IEnumerable<DownloadClientItem> GetItems(); method RemoveItem (line 21) | void RemoveItem(DownloadClientItem item); class BaseDownloadManager (line 27) | public abstract class BaseDownloadManager<TDownloadRequest, TOptions, TC... method CreateDownloadRequest (line 38) | protected abstract Task<TDownloadRequest> CreateDownloadRequest(Remote... method Download (line 43) | public virtual async Task<string> Download(RemoteAlbum remoteAlbum, II... method GetItems (line 63) | public virtual IEnumerable<DownloadClientItem> GetItems() => _queue.Se... method RemoveItem (line 68) | public virtual void RemoveItem(DownloadClientItem item) FILE: Tubifarry/Download/Base/BaseDownloadOptions.cs type BaseDownloadOptions (line 11) | public record BaseDownloadOptions : RequestOptions<string, string> FILE: Tubifarry/Download/Base/BaseDownloadRequest.cs class BaseDownloadRequest (line 19) | public abstract partial class BaseDownloadRequest<TOptions> : Request<TO... method BaseDownloadRequest (line 62) | protected BaseDownloadRequest(RemoteAlbum remoteAlbum, TOptions? optio... method ProcessDownloadAsync (line 84) | protected abstract Task ProcessDownloadAsync(CancellationToken token); method GetAlbumTitle (line 89) | protected virtual string GetAlbumTitle() => ReleaseInfo.Album ?? Relea... method SanitizeFileName (line 94) | protected static string SanitizeFileName(string fileName) => string.Is... method LogAndAppendMessage (line 99) | protected void LogAndAppendMessage(string message, LogLevel logLevel) method CreateClientItem (line 108) | protected virtual DownloadClientItem CreateClientItem() => new() method GetRemainingTime (line 120) | protected virtual TimeSpan? GetRemainingTime() method GetDistinctMessages (line 144) | protected virtual string GetDistinctMessages() => string.Join(Environm... method GetRemainingSize (line 149) | protected virtual long GetRemainingSize() method GetDownloadItemStatus (line 168) | public virtual DownloadItemStatus GetDownloadItemStatus() => State switch method BuildTrackFilename (line 183) | protected string BuildTrackFilename(Track track, Album album, string e... method Start (line 185) | public override void Start() => throw new NotImplementedException(); method Pause (line 187) | public override void Pause() => throw new NotImplementedException(); method RunRequestAsync (line 189) | protected override Task<RequestReturn> RunRequestAsync() => throw new ... method FileNameSanitizerRegex (line 191) | [GeneratedRegex(@"[\\/:\*\?""<>\|]", RegexOptions.Compiled)] FILE: Tubifarry/Download/Base/BaseHttpClient.cs class BaseHttpClient (line 11) | public class BaseHttpClient method BaseHttpClient (line 23) | public BaseHttpClient(string baseUrl, IEnumerable<IHttpRequestIntercep... method CreateRequest (line 41) | public HttpRequestMessage CreateRequest(HttpMethod method, string url) method SendAsync (line 60) | public async Task<HttpResponseMessage> SendAsync(HttpRequestMessage re... method ConvertToNzbRequest (line 93) | private static HttpRequest ConvertToNzbRequest(HttpRequestMessage http... method ApplyNzbRequestToHttpRequestMessage (line 144) | private static void ApplyNzbRequestToHttpRequestMessage(HttpRequest nz... method ConvertToNzbResponse (line 187) | private static async Task<HttpResponse> ConvertToNzbResponse(HttpReque... method ConvertToHttpResponseMessage (line 213) | private static HttpResponseMessage ConvertToHttpResponseMessage(HttpRe... method GetStringAsync (line 239) | public async Task<string> GetStringAsync(string url, CancellationToken... method GetAsync (line 258) | public async Task<HttpResponseMessage> GetAsync(string url, Cancellati... method PostAsync (line 278) | public async Task<HttpResponseMessage> PostAsync(HttpRequestMessage re... method PostAsync (line 304) | public async Task<HttpResponseMessage> PostAsync(string url, HttpConte... FILE: Tubifarry/Download/Clients/DABMusic/DABMusicClient.cs class DABMusicClient (line 22) | public class DABMusicClient : DownloadClientBase<DABMusicProviderSettings> method DABMusicClient (line 29) | public DABMusicClient( method Download (line 51) | public override Task<string> Download(RemoteAlbum remoteAlbum, IIndexe... method GetItems (line 53) | public override IEnumerable<DownloadClientItem> GetItems() => _downloa... method RemoveItem (line 55) | public override void RemoveItem(DownloadClientItem item, bool deleteData) method GetStatus (line 62) | public override DownloadClientInfo GetStatus() => new() method Test (line 68) | protected override void Test(List<ValidationFailure> failures) FILE: Tubifarry/Download/Clients/DABMusic/DABMusicDownloadManager.cs type IDABMusicDownloadManager (line 12) | public interface IDABMusicDownloadManager : IBaseDownloadManager<DABMusi... class DABMusicDownloadManager (line 15) | public class DABMusicDownloadManager : BaseDownloadManager<DABMusicDownl... method DABMusicDownloadManager (line 20) | public DABMusicDownloadManager(IDABMusicSessionManager sessionManager,... method CreateDownloadRequest (line 26) | protected override async Task<DABMusicDownloadRequest> CreateDownloadR... FILE: Tubifarry/Download/Clients/DABMusic/DABMusicDownloadOptions.cs type DABMusicDownloadOptions (line 5) | public record DABMusicDownloadOptions : BaseDownloadOptions FILE: Tubifarry/Download/Clients/DABMusic/DABMusicDownloadRequest.cs class DABMusicDownloadRequest (line 19) | public class DABMusicDownloadRequest : BaseDownloadRequest<DABMusicDownl... method DABMusicDownloadRequest (line 32) | public DABMusicDownloadRequest(RemoteAlbum remoteAlbum, IDABMusicSessi... method ProcessDownloadAsync (line 59) | protected override async Task ProcessDownloadAsync(CancellationToken t... method ProcessSingleTrackAsync (line 69) | private async Task ProcessSingleTrackAsync(string trackId, Cancellatio... method ProcessAlbumAsync (line 101) | private async Task ProcessAlbumAsync(string albumId, CancellationToken... method RequestAsync (line 141) | private async Task<string> RequestAsync(string url, CancellationToken ... method GetTrackAsync (line 156) | private async Task<DABMusicTrack> GetTrackAsync(string trackId, Cancel... method GetAlbumAsync (line 175) | private async Task<DABMusicAlbum> GetAlbumAsync(string albumId, Cancel... method GetStreamUrlAsync (line 203) | private async Task<string> GetStreamUrlAsync(string trackId, Cancellat... method DownloadAlbumCoverAsync (line 219) | private async Task DownloadAlbumCoverAsync(string? coverUrl, Cancellat... method InitiateDownload (line 239) | private void InitiateDownload(string streamUrl, string fileName, DABMu... method PostProcessTrackAsync (line 284) | private async Task<bool> PostProcessTrackAsync(DABMusicTrack trackInfo... method CreateAlbumFromDABData (line 315) | private Album CreateAlbumFromDABData(DABMusicAlbum? albumInfo) method CreateTrackFromDABData (line 344) | private Track CreateTrackFromDABData(DABMusicTrack trackInfo, DABMusic... FILE: Tubifarry/Download/Clients/DABMusic/DABMusicProviderSettings.cs class DABMusicProviderSettingsValidator (line 9) | public class DABMusicProviderSettingsValidator : AbstractValidator<DABMu... method DABMusicProviderSettingsValidator (line 11) | public DABMusicProviderSettingsValidator() class DABMusicProviderSettings (line 53) | public class DABMusicProviderSettings : IProviderConfig method Validate (line 78) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/Download/Clients/Lucida/ILucidaRateLimiter.cs type ILucidaRateLimiter (line 3) | public interface ILucidaRateLimiter method WaitForAvailableWorkerAsync (line 25) | Task<string> WaitForAvailableWorkerAsync(CancellationToken cancellatio... method MarkWorkerRateLimited (line 27) | void MarkWorkerRateLimited(string workerName); method ReleaseWorker (line 29) | void ReleaseWorker(string workerName); method EnsureWorkerRegistered (line 31) | void EnsureWorkerRegistered(string workerName); method IsRateLimitedResponse (line 33) | bool IsRateLimitedResponse(string responseContent); method GetWorkerStates (line 35) | IReadOnlyDictionary<string, LucidaWorkerState> GetWorkerStates(); method AcquirePollingSlotAsync (line 37) | Task AcquirePollingSlotAsync(string workerName, CancellationToken canc... method ReleasePollingSlot (line 39) | void ReleasePollingSlot(string workerName); FILE: Tubifarry/Download/Clients/Lucida/LucidaClient.cs class LucidaClient (line 18) | public class LucidaClient : DownloadClientBase<LucidaProviderSettings> method LucidaClient (line 24) | public LucidaClient( method Download (line 44) | public override Task<string> Download(RemoteAlbum remoteAlbum, IIndexe... method GetItems (line 46) | public override IEnumerable<DownloadClientItem> GetItems() => _downloa... method RemoveItem (line 48) | public override void RemoveItem(DownloadClientItem item, bool deleteData) method GetStatus (line 55) | public override DownloadClientInfo GetStatus() => new() method Test (line 61) | protected override void Test(List<ValidationFailure> failures) method TestWorkerHealth (line 78) | private void TestWorkerHealth() FILE: Tubifarry/Download/Clients/Lucida/LucidaDownloadManager.cs type ILucidaDownloadManager (line 15) | public interface ILucidaDownloadManager : IBaseDownloadManager<LucidaDow... class LucidaDownloadManager (line 20) | public class LucidaDownloadManager( method CreateDownloadRequest (line 26) | protected override async Task<LucidaDownloadRequest> CreateDownloadReq... FILE: Tubifarry/Download/Clients/Lucida/LucidaDownloadOptions.cs type LucidaDownloadOptions (line 5) | public record LucidaDownloadOptions : BaseDownloadOptions FILE: Tubifarry/Download/Clients/Lucida/LucidaDownloadRequest.cs class LucidaDownloadRequest (line 19) | public class LucidaDownloadRequest : BaseDownloadRequest<LucidaDownloadO... method LucidaDownloadRequest (line 25) | public LucidaDownloadRequest(RemoteAlbum remoteAlbum, LucidaDownloadOp... method ProcessDownloadAsync (line 52) | protected override async Task ProcessDownloadAsync(CancellationToken t... method ProcessSingleTrackAsync (line 62) | private async Task ProcessSingleTrackAsync(string downloadUrl, Cancell... method ProcessAlbumAsync (line 95) | private async Task ProcessAlbumAsync(string downloadUrl, CancellationT... method InitiateDownload (line 130) | private void InitiateDownload(string url, string primaryToken, string ... method InitiateDownloadWithRetryAsync (line 200) | private async Task<LucidaInitiationResult> InitiateDownloadWithRetryAs... method InitiateDownloadRequestAsync (line 278) | private async Task<LucidaInitiationResult> InitiateDownloadRequestAsync( method PollForCompletionAsync (line 337) | private async Task<bool> PollForCompletionAsync(string handoffId, stri... method ExtractDomainFromUrl (line 416) | private static string ExtractDomainFromUrl(string url) method CreateAlbumFromLucidaData (line 423) | private Album CreateAlbumFromLucidaData(LucidaAlbumModel? albumInfo) method CreateTrackFromLucidaData (line 449) | private Track CreateTrackFromLucidaData(LucidaTrackModel trackInfo, Lu... FILE: Tubifarry/Download/Clients/Lucida/LucidaInitiationResult.cs type LucidaInitiationResult (line 3) | public sealed record LucidaInitiationResult FILE: Tubifarry/Download/Clients/Lucida/LucidaMetadataExtractor.cs class LucidaMetadataExtractor (line 16) | public static partial class LucidaMetadataExtractor method ExtractAlbumMetadataAsync (line 26) | public static async Task<LucidaAlbumModel> ExtractAlbumMetadataAsync(B... method ExtractViaApiAsync (line 79) | private static async Task<LucidaAlbumModel?> ExtractViaApiAsync(BaseHt... method ExtractViaHtmlAsync (line 136) | private static async Task<LucidaAlbumModel?> ExtractViaHtmlAsync(BaseH... method EnrichWithCsrfTokensAsync (line 195) | private static async Task EnrichWithCsrfTokensAsync( method ExtractInfoFromHtml (line 245) | private static LucidaInfo? ExtractInfoFromHtml(string html) method ExtractJsonArrayFromHtml (line 266) | private static string ExtractJsonArrayFromHtml(string html) method ParseDataArray (line 334) | private static LucidaInfo? ParseDataArray(string jsonArray) method ExecuteJintOnDataArray (line 367) | private static LucidaInfo? ExecuteJintOnDataArray(string jsonArray) method ConvertToAlbum (line 407) | private static LucidaAlbumModel ConvertToAlbum(LucidaInfo info) method ConvertSingleTrackToAlbum (line 472) | private static LucidaAlbumModel ConvertSingleTrackToAlbum(LucidaInfo i... method ApplyTokensToAlbum (line 529) | private static void ApplyTokensToAlbum(LucidaAlbumModel album, LucidaT... method IsCharIndexed404 (line 545) | private static bool IsCharIndexed404(string body) FILE: Tubifarry/Download/Clients/Lucida/LucidaProviderSettings.cs class LucidaProviderSettingsValidator (line 9) | public class LucidaProviderSettingsValidator : AbstractValidator<LucidaP... method LucidaProviderSettingsValidator (line 11) | public LucidaProviderSettingsValidator() class LucidaProviderSettings (line 54) | public class LucidaProviderSettings : IProviderConfig method Validate (line 76) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/Download/Clients/Lucida/LucidaRateLimitException.cs class LucidaRateLimitException (line 3) | public class LucidaRateLimitException : Exception method LucidaRateLimitException (line 6) | public LucidaRateLimitException(string message, string? workerName = n... method LucidaRateLimitException (line 9) | public LucidaRateLimitException(string message, Exception innerExcepti... FILE: Tubifarry/Download/Clients/Lucida/LucidaRateLimiter.cs class LucidaRateLimiter (line 8) | public sealed class LucidaRateLimiter : ILucidaRateLimiter method LucidaRateLimiter (line 18) | public LucidaRateLimiter(Logger logger) method EnsureWorkerRegistered (line 26) | public void EnsureWorkerRegistered(string workerName) method WaitForAvailableWorkerAsync (line 34) | public async Task<string> WaitForAvailableWorkerAsync(CancellationToke... method MarkWorkerRateLimited (line 65) | public void MarkWorkerRateLimited(string workerName) method ReleaseWorker (line 78) | public void ReleaseWorker(string workerName) method IsRateLimitedResponse (line 100) | public bool IsRateLimitedResponse(string responseContent) method GetWorkerStates (line 120) | public IReadOnlyDictionary<string, LucidaWorkerState> GetWorkerStates() method AcquirePollingSlotAsync (line 143) | public async Task AcquirePollingSlotAsync(string workerName, Cancellat... method ReleasePollingSlot (line 155) | public void ReleasePollingSlot(string workerName) method PickBestWorker (line 171) | private string? PickBestWorker() method EnforceGlobalDelayAsync (line 208) | private async Task EnforceGlobalDelayAsync(CancellationToken cancellat... method DecodeJsonEncodedHtml (line 231) | private static string DecodeJsonEncodedHtml(string jsonEncoded) class WorkerSlot (line 248) | private sealed class WorkerSlot method WorkerSlot (line 259) | public WorkerSlot(string name) FILE: Tubifarry/Download/Clients/Lucida/LucidaTokenExtractor.cs class LucidaTokenExtractor (line 10) | public static partial class LucidaTokenExtractor method ExtractTokensAsync (line 14) | public static async Task<LucidaTokens> ExtractTokensAsync(BaseHttpClie... method ExtractTokensFromHtml (line 29) | public static LucidaTokens ExtractTokensFromHtml(string html) method DoubleBase64Decode (line 67) | private static string DoubleBase64Decode(string encoded) method NormalizeBase64 (line 89) | private static string NormalizeBase64(string input) method TrackTokenRegex (line 102) | [GeneratedRegex(@"\b""?token""?\s*:\s*""([A-Za-z0-9+/=_-]{16,})""\s*,\... FILE: Tubifarry/Download/Clients/Lucida/LucidaWorkerState.cs type LucidaWorkerState (line 3) | public sealed record LucidaWorkerState FILE: Tubifarry/Download/Clients/Soulseek/ISlskdApiClient.cs class SlskdUserTransfers (line 6) | public class SlskdUserTransfers class SlskdEventRecord (line 12) | public class SlskdEventRecord type ISlskdApiClient (line 20) | public interface ISlskdApiClient method EnqueueDownloadAsync (line 22) | Task<(List<string> Enqueued, List<string> Failed)> EnqueueDownloadAsyn... method GetAllTransfersAsync (line 23) | Task<List<SlskdUserTransfers>> GetAllTransfersAsync(SlskdProviderSetti... method GetUserTransfersAsync (line 24) | Task<SlskdUserTransfers?> GetUserTransfersAsync(SlskdProviderSettings ... method GetTransferAsync (line 25) | Task<SlskdDownloadFile?> GetTransferAsync(SlskdProviderSettings settin... method GetQueuePositionAsync (line 26) | Task<int?> GetQueuePositionAsync(SlskdProviderSettings settings, strin... method DeleteTransferAsync (line 27) | Task DeleteTransferAsync(SlskdProviderSettings settings, string userna... method DeleteAllCompletedAsync (line 28) | Task DeleteAllCompletedAsync(SlskdProviderSettings settings); method GetDownloadPathAsync (line 29) | Task<string?> GetDownloadPathAsync(SlskdProviderSettings settings); method TestConnectionAsync (line 30) | Task<ValidationFailure?> TestConnectionAsync(SlskdProviderSettings set... method GetEventsAsync (line 31) | Task<(List<SlskdEventRecord> Events, int TotalCount)> GetEventsAsync(S... FILE: Tubifarry/Download/Clients/Soulseek/ISlskdDownloadManager.cs type ISlskdDownloadManager (line 7) | public interface ISlskdDownloadManager method DownloadAsync (line 9) | Task<string> DownloadAsync(RemoteAlbum remoteAlbum, int definitionId, ... method GetItems (line 10) | IEnumerable<DownloadClientItem> GetItems(int definitionId, SlskdProvid... method RemoveItem (line 11) | void RemoveItem(DownloadClientItem clientItem, bool deleteData, int de... FILE: Tubifarry/Download/Clients/Soulseek/Models/DownloadKey.cs type DownloadKey (line 3) | public readonly struct DownloadKey<TOuterKey, TInnerKey>(TOuterKey outer... method Equals (line 10) | public override readonly bool Equals(object? obj) => method GetHashCode (line 15) | public override readonly int GetHashCode() => FILE: Tubifarry/Download/Clients/Soulseek/Models/SlskdDownloadDirectory.cs type SlskdDownloadDirectory (line 6) | public record SlskdDownloadDirectory(string Directory, int FileCount, Li... FILE: Tubifarry/Download/Clients/Soulseek/Models/SlskdDownloadFile.cs type SlskdDownloadFile (line 6) | public record SlskdDownloadFile( FILE: Tubifarry/Download/Clients/Soulseek/Models/SlskdDownloadItem.cs class SlskdDownloadItem (line 11) | public class SlskdDownloadItem method SlskdDownloadItem (line 42) | public SlskdDownloadItem(ReleaseInfo releaseInfo) method GetStableMD5Id (line 51) | public static string GetStableMD5Id(IEnumerable<string?> filenames) method CompareFileStates (line 58) | private void CompareFileStates(SlskdDownloadDirectory? newDirectory) method GetFullFolderPath (line 90) | public OsPath GetFullFolderPath(OsPath downloadPath) => new(Path.Combine( FILE: Tubifarry/Download/Clients/Soulseek/Models/SlskdFileState.cs type TransferStates (line 5) | [Flags] class SlskdFileState (line 23) | public class SlskdFileState(SlskdDownloadFile file) method GetStatus (line 32) | public DownloadItemStatus GetStatus() method GetStatus (line 40) | public static DownloadItemStatus GetStatus(string stateStr) method GetStatus (line 47) | public static DownloadItemStatus GetStatus(TransferStates state) => st... method UpdateFile (line 62) | public void UpdateFile(SlskdDownloadFile file) method UpdateMaxRetryCount (line 72) | public void UpdateMaxRetryCount(int maxRetryCount) => MaxRetryCount = ... method IncrementAttempt (line 74) | public void IncrementAttempt() FILE: Tubifarry/Download/Clients/Soulseek/SlskdApiClient.cs class SlskdApiClient (line 10) | public class SlskdApiClient(IHttpClient httpClient) : ISlskdApiClient method EnqueueDownloadAsync (line 14) | public async Task<(List<string> Enqueued, List<string> Failed)> Enqueu... method GetAllTransfersAsync (line 39) | public async Task<List<SlskdUserTransfers>> GetAllTransfersAsync(Slskd... method GetUserTransfersAsync (line 64) | public async Task<SlskdUserTransfers?> GetUserTransfersAsync(SlskdProv... method GetTransferAsync (line 84) | public async Task<SlskdDownloadFile?> GetTransferAsync(SlskdProviderSe... method GetQueuePositionAsync (line 96) | public async Task<int?> GetQueuePositionAsync(SlskdProviderSettings se... method DeleteTransferAsync (line 115) | public async Task DeleteTransferAsync(SlskdProviderSettings settings, ... method DeleteAllCompletedAsync (line 122) | public async Task DeleteAllCompletedAsync(SlskdProviderSettings settin... method GetDownloadPathAsync (line 126) | public async Task<string?> GetDownloadPathAsync(SlskdProviderSettings ... method TestConnectionAsync (line 141) | public async Task<ValidationFailure?> TestConnectionAsync(SlskdProvide... method GetEventsAsync (line 191) | public async Task<(List<SlskdEventRecord> Events, int TotalCount)> Get... method BuildRequest (line 223) | private HttpRequest BuildRequest(SlskdProviderSettings settings, strin... FILE: Tubifarry/Download/Clients/Soulseek/SlskdClient.cs class SlskdClient (line 14) | public class SlskdClient : DownloadClientBase<SlskdProviderSettings> method SlskdClient (line 22) | public SlskdClient( method Download (line 36) | public override async Task<string> Download(RemoteAlbum remoteAlbum, I... method GetItems (line 39) | public override IEnumerable<DownloadClientItem> GetItems() method RemoveItem (line 49) | public override void RemoveItem(DownloadClientItem clientItem, bool de... method GetStatus (line 52) | public override DownloadClientInfo GetStatus() => new() method Test (line 58) | protected override void Test(List<ValidationFailure> failures) => method GetRemoteToLocal (line 61) | private OsPath GetRemoteToLocal() => FILE: Tubifarry/Download/Clients/Soulseek/SlskdDownloadManager.cs class SlskdEventTypes (line 17) | internal static class SlskdEventTypes class SlskdDownloadManager (line 23) | public class SlskdDownloadManager : ISlskdDownloadManager method SlskdDownloadManager (line 45) | public SlskdDownloadManager( method DownloadAsync (line 64) | public async Task<string> DownloadAsync(RemoteAlbum remoteAlbum, int d... method GetItems (line 98) | public IEnumerable<DownloadClientItem> GetItems(int definitionId, Slsk... method RemoveItem (line 146) | public void RemoveItem(DownloadClientItem clientItem, bool deleteData,... method RefreshAsync (line 164) | private async Task RefreshAsync(int definitionId, SlskdProviderSetting... method PollTransfersAsync (line 188) | private async Task PollTransfersAsync(int definitionId, SlskdProviderS... method ProcessUserTransfers (line 222) | private void ProcessUserTransfers( method PollEventsAsync (line 256) | private async Task PollEventsAsync(int definitionId, SlskdProviderSett... method HandleEventAsync (line 277) | private async Task HandleEventAsync(int definitionId, SlskdProviderSet... method EmitCompletionSpan (line 312) | private void EmitCompletionSpan(SlskdDownloadItem item, SlskdStatusRes... method SubscribeStateChanges (line 336) | private void SubscribeStateChanges(SlskdDownloadItem item, int definit... method RemoveItemFilesAsync (line 345) | private async Task RemoveItemFilesAsync(SlskdDownloadItem item, SlskdP... method CleanStaleDirectoriesAsync (line 391) | private async Task CleanStaleDirectoriesAsync(string directoryPath, Sl... method CreateReleaseInfoFromDirectory (line 430) | private ReleaseInfo CreateReleaseInfoFromDirectory(string username, Sl... method ExtractUsernameFromPath (line 441) | private static string ExtractUsernameFromPath(string path) method ParseFilesFromSource (line 447) | private static List<(string Filename, long Size)> ParseFilesFromSource... method GetItem (line 458) | private SlskdDownloadItem? GetItem(int definitionId, string id) => method GetItemsForDef (line 462) | private IEnumerable<SlskdDownloadItem> GetItemsForDef(int definitionId... method AddItem (line 467) | private void AddItem(int definitionId, SlskdDownloadItem item) => method RemoveItemFromDict (line 470) | private void RemoveItemFromDict(int definitionId, string id) => method GetActiveUsernames (line 473) | private HashSet<string> GetActiveUsernames(int definitionId) => FILE: Tubifarry/Download/Clients/Soulseek/SlskdProviderSettings.cs class SlskdProviderSettingsValidator (line 9) | internal class SlskdProviderSettingsValidator : AbstractValidator<SlskdP... method SlskdProviderSettingsValidator (line 11) | public SlskdProviderSettingsValidator() class SlskdProviderSettings (line 37) | public partial class SlskdProviderSettings : IProviderConfig method GetTimeout (line 74) | public TimeSpan? GetTimeout() => Timeout == null ? null : TimeSpan.Fro... method Validate (line 76) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... method HostRegex (line 78) | [GeneratedRegex(@"^(?:https?:\/\/)?([^\/:\?]+)(?::\d+)?(?:\/|$)", Rege... FILE: Tubifarry/Download/Clients/Soulseek/SlskdRetryHandler.cs class SlskdRetryHandler (line 9) | public class SlskdRetryHandler(ISlskdApiClient apiClient, ISentryHelper ... method OnFileStateChanged (line 15) | public void OnFileStateChanged(SlskdDownloadItem? item, SlskdFileState... method RetryDownloadAsync (line 28) | private async Task RetryDownloadAsync(SlskdDownloadItem item, SlskdFil... method ExtractUsernameFromPath (line 66) | private static string ExtractUsernameFromPath(string path) FILE: Tubifarry/Download/Clients/Soulseek/SlskdStatusResolver.cs class SlskdStatusResolver (line 6) | public static class SlskdStatusResolver type DownloadStatus (line 8) | public record DownloadStatus( method Resolve (line 16) | public static DownloadStatus Resolve(SlskdDownloadItem item, TimeSpan?... FILE: Tubifarry/Download/Clients/SubSonic/SubSonicClient.cs class SubSonicClient (line 23) | public class SubSonicClient : DownloadClientBase<SubSonicProviderSettings> method SubSonicClient (line 29) | public SubSonicClient( method Download (line 49) | public override Task<string> Download(RemoteAlbum remoteAlbum, IIndexe... method GetItems (line 52) | public override IEnumerable<DownloadClientItem> GetItems() method RemoveItem (line 55) | public override void RemoveItem(DownloadClientItem item, bool deleteData) method GetStatus (line 62) | public override DownloadClientInfo GetStatus() => new() method Test (line 68) | protected override void Test(List<ValidationFailure> failures) FILE: Tubifarry/Download/Clients/SubSonic/SubSonicDownloadManager.cs type ISubSonicDownloadManager (line 11) | public interface ISubSonicDownloadManager : IBaseDownloadManager<SubSoni... class SubSonicDownloadManager (line 17) | public class SubSonicDownloadManager(IEnumerable<IHttpRequestInterceptor... method CreateDownloadRequest (line 21) | protected override async Task<SubSonicDownloadRequest> CreateDownloadR... method ExtractIdFromUrl (line 65) | private static string ExtractIdFromUrl(string url) FILE: Tubifarry/Download/Clients/SubSonic/SubSonicDownloadOptions.cs type SubSonicDownloadOptions (line 8) | public record SubSonicDownloadOptions : BaseDownloadOptions FILE: Tubifarry/Download/Clients/SubSonic/SubSonicDownloadRequest.cs class SubSonicDownloadRequest (line 21) | public class SubSonicDownloadRequest : BaseDownloadRequest<SubSonicDownl... method SubSonicDownloadRequest (line 26) | public SubSonicDownloadRequest(RemoteAlbum remoteAlbum, SubSonicDownlo... method ProcessDownloadAsync (line 56) | protected override async Task ProcessDownloadAsync(CancellationToken t... method ProcessSingleTrackAsync (line 66) | private async Task ProcessSingleTrackAsync(string songId, Cancellation... method ProcessAlbumAsync (line 80) | private async Task ProcessAlbumAsync(string albumId, CancellationToken... method GetSongAsync (line 111) | private async Task<SubSonicSearchSong> GetSongAsync(string songId, Can... method GetAlbumAsync (line 131) | private async Task<SubSonicAlbumFull> GetAlbumAsync(string albumId, Ca... method TryGetAlbumAsync (line 151) | private async Task<SubSonicAlbumFull?> TryGetAlbumAsync(string albumId... method TryDownloadAlbumCoverAsync (line 164) | private async Task TryDownloadAlbumCoverAsync(string? coverArtId, Canc... method ExecuteApiRequestAsync (line 185) | private async Task<string> ExecuteApiRequestAsync(string endpoint, str... method ValidateApiResponse (line 196) | private static void ValidateApiResponse(SubSonicItemResponse? response) method BuildApiUrl (line 206) | private string BuildApiUrl(string endpoint, string id) method BuildStreamUrl (line 215) | private string BuildStreamUrl(string songId) method BuildCoverArtUrl (line 231) | private string BuildCoverArtUrl(string coverArtId) method AppendStandardApiParameters (line 240) | private void AppendStandardApiParameters(StringBuilder urlBuilder) method QueueTrackDownload (line 246) | private void QueueTrackDownload(SubSonicSearchSong track, Cancellation... method CreateDownloadRequest (line 263) | private LoadRequest CreateDownloadRequest(string streamUrl, string fil... method CreatePostProcessRequest (line 280) | private OwnRequest CreatePostProcessRequest(SubSonicSearchSong track, ... method PostProcessTrackAsync (line 292) | private async Task<bool> PostProcessTrackAsync(SubSonicSearchSong trac... method CreateAlbumFromSubSonicData (line 333) | private Album CreateAlbumFromSubSonicData(SubSonicSearchSong track, Su... method DetermineReleaseDate (line 359) | private DateTime DetermineReleaseDate(SubSonicAlbumFull? albumInfo, Su... method CreateTrackFromSubSonicData (line 369) | private static Track CreateTrackFromSubSonicData(SubSonicSearchSong tr... FILE: Tubifarry/Download/Clients/SubSonic/SubSonicProviderSettings.cs class SubSonicProviderSettingsValidator (line 9) | public class SubSonicProviderSettingsValidator : AbstractValidator<SubSo... method SubSonicProviderSettingsValidator (line 11) | public SubSonicProviderSettingsValidator() class SubSonicProviderSettings (line 62) | public class SubSonicProviderSettings : IProviderConfig method Validate (line 99) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type PreferredFormatEnum (line 105) | public enum PreferredFormatEnum FILE: Tubifarry/Download/Clients/TripleTriple/TripleTripleClient.cs class TripleTripleClient (line 17) | public class TripleTripleClient : DownloadClientBase<TripleTripleProvide... method TripleTripleClient (line 23) | public TripleTripleClient( method Download (line 43) | public override Task<string> Download(RemoteAlbum remoteAlbum, IIndexe... method GetItems (line 45) | public override IEnumerable<DownloadClientItem> GetItems() => _downloa... method RemoveItem (line 47) | public override void RemoveItem(DownloadClientItem item, bool deleteData) method GetStatus (line 54) | public override DownloadClientInfo GetStatus() => new() method Test (line 60) | protected override void Test(List<ValidationFailure> failures) FILE: Tubifarry/Download/Clients/TripleTriple/TripleTripleDownloadManager.cs type ITripleTripleDownloadManager (line 12) | public interface ITripleTripleDownloadManager : IBaseDownloadManager<Tri... class TripleTripleDownloadManager (line 14) | public class TripleTripleDownloadManager : BaseDownloadManager<TripleTri... method TripleTripleDownloadManager (line 18) | public TripleTripleDownloadManager(IEnumerable<IHttpRequestInterceptor... method CreateDownloadRequest (line 23) | protected override Task<TripleTripleDownloadRequest> CreateDownloadReq... FILE: Tubifarry/Download/Clients/TripleTriple/TripleTripleDownloadOptions.cs type TripleTripleDownloadOptions (line 6) | public record TripleTripleDownloadOptions : BaseDownloadOptions FILE: Tubifarry/Download/Clients/TripleTriple/TripleTripleDownloadRequest.cs class TripleTripleDownloadRequest (line 18) | public class TripleTripleDownloadRequest : BaseDownloadRequest<TripleTri... method TripleTripleDownloadRequest (line 24) | public TripleTripleDownloadRequest(RemoteAlbum remoteAlbum, TripleTrip... method ProcessDownloadAsync (line 50) | protected override async Task ProcessDownloadAsync(CancellationToken t... method ProcessSingleTrackAsync (line 62) | private async Task ProcessSingleTrackAsync(string asin, CancellationTo... method ProcessAlbumAsync (line 84) | private async Task ProcessAlbumAsync(string asin, CancellationToken to... method GetMediaAsync (line 132) | private async Task<TripleTripleMediaResponse?> GetMediaAsync(string as... method GetAlbumMetadataAsync (line 149) | private async Task<TripleTripleAlbumInfo?> GetAlbumMetadataAsync(strin... method GetAlbumMediaAsync (line 165) | private async Task<List<TripleTripleMediaResponse>?> GetAlbumMediaAsyn... method RequestAsync (line 181) | private async Task<string> RequestAsync(string url, CancellationToken ... method DownloadAlbumCoverAsync (line 191) | private async Task DownloadAlbumCoverAsync(string? coverUrl, Cancellat... method BuildCoverUrl (line 211) | private string BuildCoverUrl(string? template) method InitiateDownload (line 222) | private void InitiateDownload(TripleTripleMediaResponse media, string ... method PostProcessTrackAsync (line 267) | private async Task<bool> PostProcessTrackAsync(TripleTripleMediaRespon... method ParseSyncedLyrics (line 317) | private static Lyric? ParseSyncedLyrics(string syncedLyrics) method CreateAlbumFromMedia (line 338) | private Album CreateAlbumFromMedia(TripleTripleMediaResponse media) =>... method CreateAlbumFromMetadata (line 353) | private Album CreateAlbumFromMetadata(TripleTripleAlbumInfo albumInfo)... method CreateTrackFromMedia (line 368) | private Track CreateTrackFromMedia(TripleTripleMediaResponse media) =>... method CreateTrackFromAlbum (line 378) | private Track CreateTrackFromAlbum(TripleTripleTrackInfo track, Triple... FILE: Tubifarry/Download/Clients/TripleTriple/TripleTripleProviderSettings.cs class TripleTripleProviderSettingsValidator (line 10) | public class TripleTripleProviderSettingsValidator : AbstractValidator<T... method TripleTripleProviderSettingsValidator (line 12) | public TripleTripleProviderSettingsValidator() class TripleTripleProviderSettings (line 45) | public class TripleTripleProviderSettings : IProviderConfig method TripleTripleProviderSettings (line 49) | public TripleTripleProviderSettings() method Validate (line 93) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/Download/Clients/YouTube/SponsorBlock.cs class SponsorBlock (line 10) | public class SponsorBlock method SponsorBlock (line 17) | public SponsorBlock(string filePath, string videoId, string apiEndpoin... method LookupAndTrimAsync (line 36) | public async Task<bool> LookupAndTrimAsync(CancellationToken cancellat... method FetchNonMusicSegmentsAsync (line 64) | private async Task<List<SponsorSegment>> FetchNonMusicSegmentsAsync(Ca... method TrimSegmentsAsync (line 99) | private async Task<bool> TrimSegmentsAsync(List<SponsorSegment> segmen... type SponsorSegment (line 212) | private record SponsorSegment( FILE: Tubifarry/Download/Clients/YouTube/TrustedSessionHelper.cs class TrustedSessionHelper (line 21) | public class TrustedSessionHelper method GetTrustedSessionTokensAsync (line 50) | public static async Task<SessionTokens> GetTrustedSessionTokensAsync(s... method GetVideoBoundTokensAsync (line 100) | public static async Task<SessionTokens> GetVideoBoundTokensAsync(strin... method CreateSessionInfoAsync (line 130) | public static async Task<ClientSessionInfo> CreateSessionInfoAsync(str... method CreateAuthenticatedClient (line 152) | public static YouTubeMusicClient CreateAuthenticatedClient(ClientSessi... method CreateAuthenticatedClientAsync (line 176) | public static async Task<YouTubeMusicClient> CreateAuthenticatedClient... method UpdateClientWithVideoBoundTokensAsync (line 185) | public static async Task UpdateClientWithVideoBoundTokensAsync(YouTube... method LoadCookies (line 195) | public static Cookie[]? LoadCookies(string cookiePath) method GetTokensFromWebServiceAsync (line 224) | private static async Task<SessionTokens> GetTokensFromWebServiceAsync(... method ParseResponse (line 262) | private static SessionTokens ParseResponse(string responseJson, string... method GetOrCreateVisitorDataAsync (line 292) | private static async Task<string> GetOrCreateVisitorDataAsync(Cancella... method GetTokensFromLocalGeneratorAsync (line 329) | private static async Task<SessionTokens> GetTokensFromLocalGeneratorAs... method ValidateAuthenticationSettingsAsync (line 385) | public static async Task ValidateAuthenticationSettingsAsync(string? t... method IsNodeJsAvailable (line 437) | private static bool IsNodeJsAvailable() => NodeJsAvailable.Value; method ClearCache (line 439) | public static void ClearCache() method GetCachedTokens (line 447) | public static SessionTokens? GetCachedTokens() => _cachedTokens; class YouTubeSessionGeneratorLogger (line 452) | private class YouTubeSessionGeneratorLogger : Microsoft.Extensions.Log... method YouTubeSessionGeneratorLogger (line 456) | public YouTubeSessionGeneratorLogger(Logger nlogLogger) => _nlogLogg... method BeginScope (line 458) | public IDisposable? BeginScope<TState>(TState state) where TState : ... method IsEnabled (line 460) | public bool IsEnabled(Microsoft.Extensions.Logging.LogLevel logLevel... method Log (line 462) | public void Log<TState>(Microsoft.Extensions.Logging.LogLevel logLev... FILE: Tubifarry/Download/Clients/YouTube/YouTubeDownloadOptions.cs type YouTubeDownloadOptions (line 9) | public record YouTubeDownloadOptions : BaseDownloadOptions FILE: Tubifarry/Download/Clients/YouTube/YouTubeDownloadRequest.cs class YouTubeDownloadRequest (line 22) | public class YouTubeDownloadRequest : BaseDownloadRequest<YouTubeDownloa... method YouTubeDownloadRequest (line 24) | public YouTubeDownloadRequest(RemoteAlbum remoteAlbum, YouTubeDownload... method ProcessDownloadAsync (line 50) | protected override async Task ProcessDownloadAsync(CancellationToken t... method ProcessAlbumAsync (line 56) | private async Task ProcessAlbumAsync(string downloadUrl, CancellationT... method AddTrackDownloadRequest (line 110) | private void AddTrackDownloadRequest(AlbumInfo albumInfo, AlbumSong tr... method PostProcessTrackAsync (line 161) | private async Task<bool> PostProcessTrackAsync(AlbumInfo albumInfo, Al... method CreateAlbumFromYouTubeData (line 202) | private Album CreateAlbumFromYouTubeData(AlbumInfo albumInfo) => new() method CreateTrackFromYouTubeData (line 218) | private Track CreateTrackFromYouTubeData(AlbumSong trackInfo, AlbumInf... method TryDownloadCoverAsync (line 231) | private async Task<byte[]?> TryDownloadCoverAsync(AlbumInfo albumInfo,... method ApplyRandomDelayAsync (line 258) | private async Task ApplyRandomDelayAsync(CancellationToken token) method TryUpdateVideoBoundTokensAsync (line 267) | private async Task TryUpdateVideoBoundTokensAsync(string videoId, Canc... FILE: Tubifarry/Download/Clients/YouTube/YoutubeClient.cs class YoutubeClient (line 20) | public class YoutubeClient : DownloadClientBase<YoutubeProviderSettings> method YoutubeClient (line 25) | public YoutubeClient(IYoutubeDownloadManager dlManager, IConfigService... method Download (line 38) | public override Task<string> Download(RemoteAlbum remoteAlbum, IIndexe... method GetItems (line 40) | public override IEnumerable<DownloadClientItem> GetItems() => _dlManag... method RemoveItem (line 42) | public override void RemoveItem(DownloadClientItem item, bool deleteData) method GetStatus (line 49) | public override DownloadClientInfo GetStatus() => new() method Test (line 55) | protected override void Test(List<ValidationFailure> failures) method TestFFmpeg (line 74) | public async Task<ValidationFailure> TestFFmpeg() FILE: Tubifarry/Download/Clients/YouTube/YoutubeDownloadManager.cs type IYoutubeDownloadManager (line 15) | public interface IYoutubeDownloadManager : IBaseDownloadManager<YouTubeD... class YoutubeDownloadManager (line 20) | public class YoutubeDownloadManager : BaseDownloadManager<YouTubeDownloa... method YoutubeDownloadManager (line 26) | public YoutubeDownloadManager(Logger logger) : base(logger) method CreateDownloadRequest (line 31) | protected override async Task<YouTubeDownloadRequest> CreateDownloadRe... method UpdateClientAsync (line 66) | private async Task UpdateClientAsync(YoutubeClient provider) FILE: Tubifarry/Download/Clients/YouTube/YoutubeProviderSettings.cs class YoutubeProviderSettingsValidator (line 10) | public class YoutubeProviderSettingsValidator : AbstractValidator<Youtub... method YoutubeProviderSettingsValidator (line 12) | public YoutubeProviderSettingsValidator() class YoutubeProviderSettings (line 76) | public class YoutubeProviderSettings : IProviderConfig method Validate (line 116) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type ReEncodeOptions (line 119) | public enum ReEncodeOptions FILE: Tubifarry/ImportLists/ArrStack/ArrMedia.cs type ArrMedia (line 9) | internal record class ArrMedia type ArrTag (line 41) | internal record ArrTag FILE: Tubifarry/ImportLists/ArrStack/ArrSoundtrackImport.cs class ArrSoundtrackImport (line 17) | public class ArrSoundtrackImport : HttpImportListBase<ArrSoundtrackImpor... method ArrSoundtrackImport (line 36) | public ArrSoundtrackImport(IHttpClient httpClient, IImportListStatusSe... method GetRequestGenerator (line 40) | public override IImportListRequestGenerator GetRequestGenerator() => _... method GetParser (line 42) | public override IParseImportListResponse GetParser() => _parser ??= ne... method Test (line 44) | protected override void Test(List<ValidationFailure> failures) method TestArrConnection (line 52) | private ValidationFailure? TestArrConnection() method TestCacheDirectory (line 94) | private ValidationFailure? TestCacheDirectory() method GetDefinition (line 125) | private ImportListDefinition GetDefinition(string name, ArrSoundtrackI... method GetSettings (line 133) | private static ArrSoundtrackImportSettings GetSettings(string baseUrl,... FILE: Tubifarry/ImportLists/ArrStack/ArrSoundtrackImportParser.cs class ArrSoundtrackImportParser (line 22) | internal partial class ArrSoundtrackImportParser : IParseImportListResponse method ArrSoundtrackImportParser (line 45) | public ArrSoundtrackImportParser(ArrSoundtrackImportSettings settings,... method ParseResponse (line 59) | public IList<ImportListItemInfo> ParseResponse(ImportListResponse impo... method ParseResponseAsync (line 61) | public async Task<List<ImportListItemInfo>> ParseResponseAsync(ImportL... method ResolveTagIdsAsync (line 97) | private async Task<HashSet<int>?> ResolveTagIdsAsync() method DeserializeMediaItemsAsync (line 136) | private static async IAsyncEnumerable<ArrMedia?> DeserializeMediaItems... method ProcessMediaItem (line 145) | private async Task<List<ImportListItemInfo>> ProcessMediaItem(ArrMedia... method FetchSoundtracksForMedia (line 158) | private async Task<MediaProcessingResult> FetchSoundtracksForMedia(Arr... method SearchMusicBrainzSoundtracks (line 209) | private async Task<List<MusicBrainzSearchItem>> SearchMusicBrainzSound... method BuildSearchUrl (line 230) | private string BuildSearchUrl(string title) method ParseSearchResponse (line 253) | private List<MusicBrainzSearchItem> ParseSearchResponse(string xmlCont... method FetchAlbumDetails (line 271) | private async Task<MusicBrainzAlbumItem?> FetchAlbumDetails(string alb... method ParseAlbumDetails (line 290) | private MusicBrainzAlbumItem? ParseAlbumDetails(string xmlContent, str... method IsGoodMatch (line 309) | private bool IsGoodMatch(MusicBrainzAlbumItem album, string originalTi... method ContainsMovieNameAndSoundtrack (line 333) | private static bool ContainsMovieNameAndSoundtrack(string releaseTitle... method NormalizeTitle (line 342) | private static string NormalizeTitle(string title) method EscapeLuceneQuery (line 361) | private static string EscapeLuceneQuery(string query) method CreateImportItem (line 374) | private static ImportListItemInfo CreateImportItem(MusicBrainzSearchIt... method GenerateMediaCacheKey (line 383) | private static string GenerateMediaCacheKey(ArrMedia media) => $"media... method GenerateAlbumDetailsCacheKey (line 385) | private static string GenerateAlbumDetailsCacheKey(string albumId) => ... method GenerateStringHash (line 387) | private static string GenerateStringHash(string input) class MediaProcessingResult (line 400) | private class MediaProcessingResult method NormalizeTitleEmptyRegex (line 408) | [GeneratedRegex(@"[^a-zA-Z0-9\s]")] method NormalizeTitleSpaceRegex (line 411) | [GeneratedRegex(@"\s+")] FILE: Tubifarry/ImportLists/ArrStack/ArrSoundtrackImportSettings.cs class ArrSoundtrackImportSettingsValidator (line 9) | public class ArrSoundtrackImportSettingsValidator : AbstractValidator<Ar... method ArrSoundtrackImportSettingsValidator (line 11) | public ArrSoundtrackImportSettingsValidator() class ArrSoundtrackImportSettings (line 70) | public class ArrSoundtrackImportSettings : IImportListSettings method Validate (line 104) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/ImportLists/ArrStack/ArrSoundtrackRequestGenerator.cs class ArrSoundtrackRequestGenerator (line 9) | internal class ArrSoundtrackRequestGenerator(ArrSoundtrackImportSettings... method GetListItems (line 13) | public ImportListPageableRequestChain GetListItems() method GetPagedRequests (line 20) | private IEnumerable<ImportListRequest> GetPagedRequests() FILE: Tubifarry/ImportLists/LastFmRecommendation/LastFmRecomendRequestGenerator.cs class LastFmRecomendRequestGenerator (line 7) | public class LastFmRecomendRequestGenerator(LastFmRecommendSettings sett... method GetListItems (line 11) | public virtual ImportListPageableRequestChain GetListItems() method GetPagedRequests (line 20) | private IEnumerable<ImportListRequest> GetPagedRequests() FILE: Tubifarry/ImportLists/LastFmRecommendation/LastFmRecommend.cs class LastFmRecommend (line 14) | internal class LastFmRecommend : HttpImportListBase<LastFmRecommendSetti... method LastFmRecommend (line 24) | public LastFmRecommend(IHttpClient httpClient, IImportListStatusServic... method GetRequestGenerator (line 26) | public override IImportListRequestGenerator GetRequestGenerator() => n... method GetParser (line 28) | public override IParseImportListResponse GetParser() => new LastFmReco... method Test (line 30) | protected override void Test(List<ValidationFailure> failures) method TestConnection (line 35) | protected override ValidationFailure? TestConnection() method IsJsonContentType (line 82) | private static bool IsJsonContentType(string mediaType) => mediaType.E... FILE: Tubifarry/ImportLists/LastFmRecommendation/LastFmRecommendParser.cs class LastFmRecommendParser (line 13) | internal class LastFmRecommendParser : IParseImportListResponse method LastFmRecommendParser (line 20) | public LastFmRecommendParser(LastFmRecommendSettings settings, IHttpCl... method ParseResponse (line 27) | public IList<ImportListItemInfo> ParseResponse(ImportListResponse impo... method ProcessTopAlbumsResponse (line 58) | private List<ImportListItemInfo> ProcessTopAlbumsResponse(LastFmTopRes... method ProcessTopArtistsResponse (line 100) | private List<ImportListItemInfo> ProcessTopArtistsResponse(LastFmTopRe... method ProcessTopTracksResponse (line 136) | private List<ImportListItemInfo> ProcessTopTracksResponse(LastFmTopRes... method GroupAndSortSimilarArtists (line 176) | private static List<(LastFmArtist artist, int count, int bestRank)> Gr... method FetchTopAlbumsForArtist (line 208) | private List<LastFmAlbum> FetchTopAlbumsForArtist(LastFmArtist artist) method ConvertAlbumToImportListItems (line 216) | private static ImportListItemInfo ConvertAlbumToImportListItems(LastFm... method BuildRequest (line 224) | private HttpRequest BuildRequest(string method, Dictionary<string, str... method FetchImportListResponse (line 241) | protected virtual ImportListResponse FetchImportListResponse(HttpReque... method PreProcess (line 247) | protected virtual bool PreProcess(ImportListResponse importListResponse) FILE: Tubifarry/ImportLists/LastFmRecommendation/LastFmRecommendSettings.cs class LastFmRecommendSettingsValidator (line 9) | public class LastFmRecommendSettingsValidator : AbstractValidator<LastFm... method LastFmRecommendSettingsValidator (line 11) | public LastFmRecommendSettingsValidator() class LastFmRecommendSettings (line 35) | public class LastFmRecommendSettings : IImportListSettings method LastFmRecommendSettings (line 39) | public LastFmRecommendSettings() method Validate (line 70) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type LastFmRecommendMethodList (line 73) | public enum LastFmRecommendMethodList FILE: Tubifarry/ImportLists/LastFmRecommendation/LastFmRecords.cs type LastFmTopResponse (line 6) | public record LastFmTopResponse( type LastFmTrackList (line 12) | public record LastFmTrackList( type LastFmTrack (line 16) | public record LastFmTrack( type LastFmSimilarArtistsResponse (line 23) | public record LastFmSimilarArtistsResponse( type LastFmSimilarTracksResponse (line 27) | public record LastFmSimilarTracksResponse( type LastFmTopAlbumsResponse (line 31) | public record LastFmTopAlbumsResponse( FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzCFRecommendations/ListenBrainzCFRecommendationsImportList.cs class ListenBrainzCFRecommendationsImportList (line 14) | public class ListenBrainzCFRecommendationsImportList : HttpImportListBas... method ListenBrainzCFRecommendationsImportList (line 22) | public ListenBrainzCFRecommendationsImportList(IHttpClient httpClient, method GetRequestGenerator (line 29) | public override IImportListRequestGenerator GetRequestGenerator() => method GetParser (line 32) | public override IParseImportListResponse GetParser() => method IsValidRelease (line 35) | protected override bool IsValidRelease(ImportListItemInfo release) => method Test (line 40) | protected override void Test(List<ValidationFailure> failures) => method TestConnection (line 43) | protected override ValidationFailure TestConnection() FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzCFRecommendations/ListenBrainzCFRecommendationsParser.cs class ListenBrainzCFRecommendationsParser (line 11) | public class ListenBrainzCFRecommendationsParser : IParseImportListResponse method ListenBrainzCFRecommendationsParser (line 15) | public ListenBrainzCFRecommendationsParser() method ParseResponse (line 20) | public IList<ImportListItemInfo> ParseResponse(ImportListResponse impo... method ParseRecordingRecommendations (line 38) | private List<ImportListItemInfo> ParseRecordingRecommendations(string ... method GetJsonOptions (line 61) | private static JsonSerializerOptions GetJsonOptions() => new() method PreProcess (line 66) | private bool PreProcess(ImportListResponse importListResponse) FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzCFRecommendations/ListenBrainzCFRecommendationsRequestGenerator.cs class ListenBrainzCFRecommendationsRequestGenerator (line 6) | public class ListenBrainzCFRecommendationsRequestGenerator : IImportList... method ListenBrainzCFRecommendationsRequestGenerator (line 11) | public ListenBrainzCFRecommendationsRequestGenerator(ListenBrainzCFRec... method GetListItems (line 13) | public virtual ImportListPageableRequestChain GetListItems() method GetPagedRequests (line 20) | private IEnumerable<ImportListRequest> GetPagedRequests() method CreateRequest (line 29) | private ImportListRequest CreateRequest(int offset, int count) FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzCFRecommendations/ListenBrainzCFRecommendationsSettings.cs class ListenBrainzCFRecommendationsSettingsValidator (line 8) | public class ListenBrainzCFRecommendationsSettingsValidator : AbstractVa... method ListenBrainzCFRecommendationsSettingsValidator (line 10) | public ListenBrainzCFRecommendationsSettingsValidator() class ListenBrainzCFRecommendationsSettings (line 27) | public class ListenBrainzCFRecommendationsSettings : IImportListSettings method ListenBrainzCFRecommendationsSettings (line 31) | public ListenBrainzCFRecommendationsSettings() method Validate (line 52) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzCreatedForPlaylist/ListenBrainzCreatedForPlaylistImportList.cs class ListenBrainzCreatedForPlaylistImportList (line 14) | public class ListenBrainzCreatedForPlaylistImportList : HttpImportListBa... method ListenBrainzCreatedForPlaylistImportList (line 22) | public ListenBrainzCreatedForPlaylistImportList(IHttpClient httpClient, method GetRequestGenerator (line 29) | public override IImportListRequestGenerator GetRequestGenerator() => method GetParser (line 32) | public override IParseImportListResponse GetParser() => method IsValidRelease (line 35) | protected override bool IsValidRelease(ImportListItemInfo release) => method Test (line 40) | protected override void Test(List<ValidationFailure> failures) => method TestConnection (line 43) | protected override ValidationFailure TestConnection() FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzCreatedForPlaylist/ListenBrainzCreatedForPlaylistParser.cs class ListenBrainzCreatedForPlaylistParser (line 12) | public class ListenBrainzCreatedForPlaylistParser : IParseImportListResp... method ListenBrainzCreatedForPlaylistParser (line 20) | public ListenBrainzCreatedForPlaylistParser(ListenBrainzCreatedForPlay... method ParseResponse (line 30) | public IList<ImportListItemInfo> ParseResponse(ImportListResponse impo... method ParseCreatedForPlaylists (line 48) | private IList<ImportListItemInfo> ParseCreatedForPlaylists(string cont... method IsTargetPlaylistType (line 92) | private bool IsTargetPlaylistType(PlaylistInfo playlist, string target... method ExtractPlaylistMbid (line 115) | private static string ExtractPlaylistMbid(string identifier) => method FetchPlaylistItems (line 118) | private List<ImportListItemInfo> FetchPlaylistItems(string mbid) method ExtractAlbumInfo (line 167) | private ImportListItemInfo? ExtractAlbumInfo(TrackData track) method ExtractArtistMbid (line 193) | private string? ExtractArtistMbid(TrackData track) method PreProcess (line 224) | private static bool PreProcess(ImportListResponse importListResponse) FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzCreatedForPlaylist/ListenBrainzCreatedForPlaylistRequestGenerator.cs class ListenBrainzCreatedForPlaylistRequestGenerator (line 6) | public class ListenBrainzCreatedForPlaylistRequestGenerator : IImportLis... method ListenBrainzCreatedForPlaylistRequestGenerator (line 11) | public ListenBrainzCreatedForPlaylistRequestGenerator(ListenBrainzCrea... method GetListItems (line 13) | public virtual ImportListPageableRequestChain GetListItems() method GetPagedRequests (line 20) | private IEnumerable<ImportListRequest> GetPagedRequests() => (List<Imp... method CreateRequest (line 25) | private ImportListRequest CreateRequest(int offset, int count) method GetPlaylistTypeName (line 44) | public string GetPlaylistTypeName() => _settings.PlaylistType switch FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzCreatedForPlaylist/ListenBrainzCreatedForPlaylistSettings.cs class ListenBrainzCreatedForPlaylistSettingsValidator (line 8) | public class ListenBrainzCreatedForPlaylistSettingsValidator : AbstractV... method ListenBrainzCreatedForPlaylistSettingsValidator (line 10) | public ListenBrainzCreatedForPlaylistSettingsValidator() class ListenBrainzCreatedForPlaylistSettings (line 22) | public class ListenBrainzCreatedForPlaylistSettings : IImportListSettings method ListenBrainzCreatedForPlaylistSettings (line 26) | public ListenBrainzCreatedForPlaylistSettings() method Validate (line 47) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type ListenBrainzPlaylistType (line 50) | public enum ListenBrainzPlaylistType FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzPlaylist/ListenBrainzPlaylistImportList.cs class ListenBrainzPlaylistImportList (line 16) | public class ListenBrainzPlaylistImportList : HttpImportListBase<ListenB... method ListenBrainzPlaylistImportList (line 26) | public ListenBrainzPlaylistImportList(IHttpClient httpClient, method GetRequestGenerator (line 33) | public override IImportListRequestGenerator GetRequestGenerator() => method GetParser (line 36) | public override IParseImportListResponse GetParser() => method IsValidRelease (line 39) | protected override bool IsValidRelease(ImportListItemInfo release) => method TestConnection (line 44) | protected override ValidationFailure TestConnection() method RequestAction (line 72) | public override object RequestAction(string action, IDictionary<string... method FetchAvailablePlaylists (line 104) | private List<dynamic> FetchAvailablePlaylists() method ExtractPlaylistMbid (line 161) | private static string ExtractPlaylistMbid(string identifier) => method GetJsonOptions (line 164) | private static JsonSerializerOptions GetJsonOptions() => new() method FetchTrackLevelItems (line 169) | public List<PlaylistItem> FetchTrackLevelItems() FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzPlaylist/ListenBrainzPlaylistParser.cs class ListenBrainzPlaylistParser (line 12) | public class ListenBrainzPlaylistParser : IParseImportListResponse method ListenBrainzPlaylistParser (line 16) | public ListenBrainzPlaylistParser(ListenBrainzPlaylistSettings settings) method ParseResponse (line 21) | public IList<ImportListItemInfo> ParseResponse(ImportListResponse impo... method ParsePlaylistTracks (line 39) | private List<ImportListItemInfo> ParsePlaylistTracks(string content) method ExtractAlbumInfo (line 61) | private ImportListItemInfo? ExtractAlbumInfo(TrackData track) method ParseTrackLevelItems (line 87) | public List<PlaylistItem> ParseTrackLevelItems(string content) method ToPlaylistItem (line 109) | private PlaylistItem? ToPlaylistItem(TrackData track) method ExtractArtistMbid (line 128) | private string? ExtractArtistMbid(TrackData track) method GetJsonOptions (line 159) | private static JsonSerializerOptions GetJsonOptions() => new() method PreProcess (line 164) | private static bool PreProcess(ImportListResponse importListResponse) FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzPlaylist/ListenBrainzPlaylistRequestGenerator.cs class ListenBrainzPlaylistRequestGenerator (line 6) | public class ListenBrainzPlaylistRequestGenerator(ListenBrainzPlaylistSe... method GetListItems (line 10) | public virtual ImportListPageableRequestChain GetListItems() method CreatePlaylistRequest (line 30) | public ImportListRequest CreatePlaylistRequest(string playlistId) method GetEndpointUrl (line 46) | public string GetEndpointUrl() method CreateDiscoveryRequest (line 58) | public ImportListRequest CreateDiscoveryRequest(int count = 100, int o... FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzPlaylist/ListenBrainzPlaylistSettings.cs class ListenBrainzPlaylistSettingsValidator (line 8) | public class ListenBrainzPlaylistSettingsValidator : AbstractValidator<L... method ListenBrainzPlaylistSettingsValidator (line 10) | public ListenBrainzPlaylistSettingsValidator() class ListenBrainzPlaylistSettings (line 18) | public class ListenBrainzPlaylistSettings : IImportListSettings method ListenBrainzPlaylistSettings (line 22) | public ListenBrainzPlaylistSettings() method Validate (line 42) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type ListenBrainzPlaylistEndpointType (line 45) | public enum ListenBrainzPlaylistEndpointType FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzRecords.cs type ArtistStatsResponse (line 7) | public record ArtistStatsResponse( type ArtistStatsPayload (line 10) | public record ArtistStatsPayload( type ArtistStat (line 16) | public record ArtistStat( type ReleaseStatsResponse (line 21) | public record ReleaseStatsResponse( type ReleaseStatsPayload (line 24) | public record ReleaseStatsPayload( type ReleaseStat (line 30) | public record ReleaseStat( type ReleaseGroupStatsResponse (line 37) | public record ReleaseGroupStatsResponse( type ReleaseGroupStatsPayload (line 40) | public record ReleaseGroupStatsPayload( type ReleaseGroupStat (line 46) | public record ReleaseGroupStat( type RecordingRecommendationResponse (line 54) | public record RecordingRecommendationResponse( type RecordingRecommendationPayload (line 57) | public record RecordingRecommendationPayload( type RecordingRecommendation (line 63) | public record RecordingRecommendation( type PlaylistsResponse (line 68) | public record PlaylistsResponse( type PlaylistInfo (line 71) | public record PlaylistInfo( type PlaylistData (line 74) | public record PlaylistData( type PlaylistResponse (line 79) | public record PlaylistResponse( type PlaylistResponseData (line 82) | public record PlaylistResponseData( type TrackData (line 85) | public record TrackData( FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzUserStats/ListenBrainzUserStatsImportList.cs class ListenBrainzUserStatsImportList (line 14) | public class ListenBrainzUserStatsImportList : HttpImportListBase<Listen... method ListenBrainzUserStatsImportList (line 22) | public ListenBrainzUserStatsImportList(IHttpClient httpClient, method GetRequestGenerator (line 29) | public override IImportListRequestGenerator GetRequestGenerator() => method GetParser (line 32) | public override IParseImportListResponse GetParser() => method IsValidRelease (line 35) | protected override bool IsValidRelease(ImportListItemInfo release) => method Test (line 40) | protected override void Test(List<ValidationFailure> failures) => method TestConnection (line 43) | protected override ValidationFailure TestConnection() FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzUserStats/ListenBrainzUserStatsParser.cs class ListenBrainzUserStatsParser (line 11) | public class ListenBrainzUserStatsParser : IParseImportListResponse method ListenBrainzUserStatsParser (line 17) | public ListenBrainzUserStatsParser(ListenBrainzUserStatsSettings setti... method ParseResponse (line 23) | public IList<ImportListItemInfo> ParseResponse(ImportListResponse impo... method ParseArtistStats (line 48) | private List<ImportListItemInfo> ParseArtistStats(string content) method ParseReleaseStats (line 70) | private List<ImportListItemInfo> ParseReleaseStats(string content) method ParseReleaseGroupStats (line 94) | private List<ImportListItemInfo> ParseReleaseGroupStats(string content) method PreProcess (line 117) | private bool PreProcess(ImportListResponse importListResponse) FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzUserStats/ListenBrainzUserStatsRequestGenerator.cs class ListenBrainzUserStatsRequestGenerator (line 6) | public class ListenBrainzUserStatsRequestGenerator(ListenBrainzUserStats... method GetListItems (line 11) | public virtual ImportListPageableRequestChain GetListItems() method GetPagedRequests (line 18) | private IEnumerable<ImportListRequest> GetPagedRequests() method CreateRequest (line 27) | private ImportListRequest CreateRequest(int offset, int count) method GetEndpoint (line 48) | private string GetEndpoint() => _settings.StatType switch method GetTimeRange (line 56) | private string GetTimeRange() => _settings.Range switch FILE: Tubifarry/ImportLists/ListenBrainz/ListenBrainzUserStats/ListenBrainzUserStatsSettings.cs class ListenBrainzUserStatsSettingsValidator (line 8) | public class ListenBrainzUserStatsSettingsValidator : AbstractValidator<... method ListenBrainzUserStatsSettingsValidator (line 10) | public ListenBrainzUserStatsSettingsValidator() class ListenBrainzUserStatsSettings (line 27) | public class ListenBrainzUserStatsSettings : IImportListSettings method ListenBrainzUserStatsSettings (line 31) | public ListenBrainzUserStatsSettings() method Validate (line 60) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type ListenBrainzStatType (line 63) | public enum ListenBrainzStatType type ListenBrainzTimeRange (line 75) | public enum ListenBrainzTimeRange FILE: Tubifarry/ImportLists/Spotify/SpotifyUserPlaylistImport.cs class SpotifyUserPlaylistImport (line 16) | public class SpotifyUserPlaylistImport : SpotifyImportListBase<SpotifyUs... method SpotifyUserPlaylistImport (line 27) | public SpotifyUserPlaylistImport( method Fetch (line 51) | public override IList<SpotifyImportListItemInfo> Fetch(SpotifyWebAPI api) method ProcessPlaylists (line 91) | private void ProcessPlaylists(SpotifyWebAPI api, Paging<SimplePlaylist... method ProcessPlaylistWithCache (line 137) | private void ProcessPlaylistWithCache(SpotifyWebAPI api, SimplePlaylis... method ProcessPlaylistTracks (line 156) | private void ProcessPlaylistTracks(SpotifyWebAPI api, Paging<PlaylistT... method FetchTrackLevelItems (line 172) | public List<PlaylistItem> FetchTrackLevelItems() method CollectTrackItems (line 204) | private void CollectTrackItems(SpotifyWebAPI api, Paging<SimplePlaylis... method AppendTrackItems (line 223) | private void AppendTrackItems(SpotifyWebAPI api, Paging<PlaylistTrack>... class CachedPlaylistData (line 256) | private class CachedPlaylistData method GenerateCacheKey (line 262) | private static string GenerateCacheKey(string playlistId, string usern... method GetUserPlaylistsWithRetry (line 270) | private Paging<SimplePlaylist> GetUserPlaylistsWithRetry(SpotifyWebAPI... method GetPlaylistTracksWithRetry (line 292) | private Paging<PlaylistTrack> GetPlaylistTracksWithRetry(SpotifyWebAPI... method GetNextPageWithRetry (line 314) | private Paging<T> GetNextPageWithRetry<T>(SpotifyWebAPI api, Paging<T>... method Throttle (line 336) | private static void Throttle() method CalculateRateLimitDelay (line 355) | private static int CalculateRateLimitDelay(int retryCount) method ParsePlaylistTrack (line 363) | private SpotifyImportListItemInfo? ParsePlaylistTrack(PlaylistTrack pl... FILE: Tubifarry/ImportLists/Spotify/SpotifyUserPlaylistImportSettings.cs class SpotifyUserPlaylistImportSettingsValidator (line 7) | public class SpotifyUserPlaylistImportSettingsValidator : SpotifySetting... method SpotifyUserPlaylistImportSettingsValidator (line 9) | public SpotifyUserPlaylistImportSettingsValidator() : base() class SpotifyUserPlaylistImportSettings (line 25) | public class SpotifyUserPlaylistImportSettings : SpotifySettingsBase<Spo... FILE: Tubifarry/Indexers/DABMusic/DABMusicIndexer.cs class DABMusicIndexer (line 11) | public class DABMusicIndexer : HttpIndexerBase<DABMusicIndexerSettings> method DABMusicIndexer (line 26) | public DABMusicIndexer( method Test (line 42) | protected override async Task Test(List<ValidationFailure> failures) method GetRequestGenerator (line 64) | public override IIndexerRequestGenerator GetRequestGenerator() method GetParser (line 70) | public override IParseIndexerResponse GetParser() => _parser; FILE: Tubifarry/Indexers/DABMusic/DABMusicIndexerSettings.cs class DABMusicIndexerSettingsValidator (line 8) | public class DABMusicIndexerSettingsValidator : AbstractValidator<DABMus... method DABMusicIndexerSettingsValidator (line 10) | public DABMusicIndexerSettingsValidator() class DABMusicIndexerSettings (line 37) | public class DABMusicIndexerSettings : IIndexerSettings method DABMusicIndexerSettings (line 41) | public DABMusicIndexerSettings() method Validate (line 68) | public NzbDroneValidationResult Validate() => new(_validator.Validate(... FILE: Tubifarry/Indexers/DABMusic/DABMusicParser.cs type IDABMusicParser (line 11) | public interface IDABMusicParser : IParseIndexerResponse class DABMusicParser (line 14) | public class DABMusicParser : IDABMusicParser method DABMusicParser (line 18) | public DABMusicParser(Logger logger) => _logger = logger; method ParseResponse (line 20) | public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse) method CreateAlbumData (line 42) | private static AlbumData CreateAlbumData(DABMusicAlbum album) method CreateTrackData (line 64) | private static AlbumData CreateTrackData(DABMusicTrack track) method SanitizeForUrl (line 87) | private static string SanitizeForUrl(string input) => input.ToLowerInv... method GetQuality (line 95) | private static (AudioFormat Format, int Bitrate, int BitDepth) GetQual... FILE: Tubifarry/Indexers/DABMusic/DABMusicRecords.cs type DABMusicRequestData (line 11) | public record DABMusicRequestData( type DABMusicSearchResponse (line 19) | public record DABMusicSearchResponse( type DABMusicPagination (line 27) | public record DABMusicPagination( type DABMusicAlbumDetailsResponse (line 37) | public record DABMusicAlbumDetailsResponse( type DABMusicStreamResponse (line 43) | public record DABMusicStreamResponse( type DABMusicAlbum (line 53) | public record DABMusicAlbum( type DABMusicTrack (line 73) | public record DABMusicTrack( type DABMusicAudioQuality (line 101) | public record DABMusicAudioQuality( type DABMusicImages (line 109) | public record DABMusicImages( FILE: Tubifarry/Indexers/DABMusic/DABMusicRequestGenerator.cs type IDABMusicRequestGenerator (line 9) | public interface IDABMusicRequestGenerator : IIndexerRequestGenerator method SetSetting (line 11) | public void SetSetting(DABMusicIndexerSettings settings); class DABMusicRequestGenerator (line 17) | public class DABMusicRequestGenerator(Logger logger, IDABMusicSessionMan... method GetRecentRequests (line 23) | public IndexerPageableRequestChain GetRecentRequests() => new(); method GetSearchRequests (line 25) | public IndexerPageableRequestChain GetSearchRequests(AlbumSearchCriter... method GetSearchRequests (line 32) | public IndexerPageableRequestChain GetSearchRequests(ArtistSearchCrite... method SetSetting (line 34) | public void SetSetting(DABMusicIndexerSettings settings) => _settings ... method Generate (line 36) | private IndexerPageableRequestChain Generate(string query, bool isSingle) method CreateRequest (line 60) | private IndexerRequest CreateRequest(string url, string baseUrl, strin... FILE: Tubifarry/Indexers/DABMusic/DABMusicSessionHelper.cs type DABMusicSession (line 8) | public record DABMusicSession(string SessionCookie, DateTime ExpiryUtc, ... type DABMusicLoginRequest (line 14) | public record DABMusicLoginRequest(string Email, string Password); type DABMusicUser (line 15) | public record DABMusicUser(int Id, string Username, string Email); type IDABMusicSessionManager (line 17) | public interface IDABMusicSessionManager method GetOrCreateSession (line 19) | DABMusicSession? GetOrCreateSession(string baseUrl, string email, stri... method InvalidateSession (line 21) | void InvalidateSession(string email); method HasValidSession (line 23) | bool HasValidSession(string email); class DABMusicSessionHelper (line 26) | public class DABMusicSessionHelper(IHttpClient httpClient, Logger logger... method GetOrCreateSession (line 34) | public DABMusicSession? GetOrCreateSession(string baseUrl, string emai... method InvalidateSession (line 52) | public void InvalidateSession(string email) method HasValidSession (line 58) | public bool HasValidSession(string email) => _sessions.TryGetValue(ema... method Login (line 60) | private DABMusicSession? Login(string baseUrl, string email, string pa... method ExtractSessionCookie (line 102) | private string? ExtractSessionCookie(HttpResponse response) FILE: Tubifarry/Indexers/DownloadProtocols.cs class YoutubeDownloadProtocol (line 3) | public class YoutubeDownloadProtocol : IDownloadProtocol { } class SoulseekDownloadProtocol (line 4) | public class SoulseekDownloadProtocol : IDownloadProtocol { } class LucidaDownloadProtocol (line 5) | public class LucidaDownloadProtocol : IDownloadProtocol { } class QobuzDownloadProtocol (line 6) | public class QobuzDownloadProtocol : IDownloadProtocol { } class SubSonicDownloadProtocol (line 7) | public class SubSonicDownloadProtocol : IDownloadProtocol { } class AmazonMusicDownloadProtocol (line 8) | public class AmazonMusicDownloadProtocol : IDownloadProtocol { } FILE: Tubifarry/Indexers/Lucida/LucidaIndexer.cs class LucidaIndexer (line 12) | public partial class LucidaIndexer : HttpIndexerBase<LucidaIndexerSettings> method LucidaIndexer (line 29) | public LucidaIndexer( method Test (line 43) | protected override async Task Test(List<ValidationFailure> failures) method GetRequestGenerator (line 112) | public override IIndexerRequestGenerator GetRequestGenerator() method GetParser (line 118) | public override IParseIndexerResponse GetParser() => _parser; method LucidaHeaderRegex (line 120) | [GeneratedRegex("<title>.*?(Lucida|Music).*?", RegexOptions.Ig... FILE: Tubifarry/Indexers/Lucida/LucidaIndexerSettings.cs class LucidaIndexerSettingsValidator (line 8) | public class LucidaIndexerSettingsValidator : AbstractValidator new(_validator.Validate(... FILE: Tubifarry/Indexers/Lucida/LucidaRecords.cs type LucidaRequestData (line 11) | public record LucidaRequestData( type LucidaSearchResults (line 20) | public record LucidaSearchResults( type LucidaResultsContainer (line 26) | public record LucidaResultsContainer( type LucidaResultsData (line 33) | public record LucidaResultsData( type LucidaDataWrapper (line 42) | public record LucidaDataWrapper( type DataContainer (line 49) | public record DataContainer( type LucidaAlbum (line 63) | public record LucidaAlbum( type LucidaTrack (line 81) | public record LucidaTrack( type LucidaAlbumReference (line 103) | public record LucidaAlbumReference( type LucidaArtist (line 120) | public record LucidaArtist( type LucidaArtwork (line 132) | public record LucidaArtwork( type ServiceCountry (line 146) | public record ServiceCountry( type CountryResponse (line 156) | public record CountryResponse( type LucidaInfo (line 170) | public record LucidaInfo( type LucidaArtistInfo (line 211) | public record LucidaArtistInfo( type LucidaArtworkInfo (line 223) | public record LucidaArtworkInfo( type LucidaAlbumRef (line 235) | public record LucidaAlbumRef( type LucidaTrackInfo (line 248) | public record LucidaTrackInfo( type LucidaStats (line 277) | public record LucidaStats( class LucidaTrackModel (line 290) | public class LucidaTrackModel method GetBestCoverArtUrl (line 329) | public string GetBestCoverArtUrl() method FormatDuration (line 340) | public string FormatDuration() class LucidaAlbumModel (line 351) | public class LucidaAlbumModel method GetBestCoverArtUrl (line 385) | public string GetBestCoverArtUrl() method GetTotalDurationMs (line 396) | public long GetTotalDurationMs() => Tracks.Sum(t => t.DurationMs); method FormatTotalDuration (line 398) | public string FormatTotalDuration() type LucidaTokens (line 413) | public record LucidaTokens(string Primary, string Fallback, long Expiry) type LucidaDownloadRequestInfo (line 428) | public record LucidaDownloadRequestInfo( type LucidaAccountInfo (line 455) | public record LucidaAccountInfo( type LucidaUploadInfo (line 462) | public record LucidaUploadInfo( type LucidaTokenData (line 469) | public record LucidaTokenData( type LucidaDownloadResponse (line 477) | public record LucidaDownloadResponse( type LucidaStatsResponse (line 491) | public record LucidaStatsResponse( type LucidaStatusResponse (line 498) | public record LucidaStatusResponse( FILE: Tubifarry/Indexers/Lucida/LucidaRequestGenerator.cs type ILucidaRequestGenerator (line 9) | public interface ILucidaRequestGenerator : IIndexerRequestGenerator method SetSetting (line 11) | public void SetSetting(LucidaIndexerSettings settings); class LucidaRequestGenerator (line 17) | public class LucidaRequestGenerator : ILucidaRequestGenerator method LucidaRequestGenerator (line 23) | public LucidaRequestGenerator(IHttpClient httpClient, Logger logger) =... method GetRecentRequests (line 25) | public IndexerPageableRequestChain GetRecentRequests() => new(); method GetSearchRequests (line 27) | public IndexerPageableRequestChain GetSearchRequests(AlbumSearchCriter... method GetSearchRequests (line 31) | public IndexerPageableRequestChain GetSearchRequests(ArtistSearchCrite... method SetSetting (line 33) | public void SetSetting(LucidaIndexerSettings settings) => _settings = ... method Generate (line 35) | private IndexerPageableRequestChain Generate(string query, bool isSingle) FILE: Tubifarry/Indexers/Lucida/LucidaRequestParser.cs type ILucidaParser (line 13) | public interface ILucidaParser : IParseIndexerResponse class LucidaParser (line 16) | public partial class LucidaParser(Logger logger) : ILucidaParser method ParseResponse (line 22) | public IList ParseResponse(IndexerResponse indexerResponse) method GetRequestData (line 41) | private LucidaRequestData? GetRequestData(IndexerResponse indexerRespo... method ExtractSearchResults (line 54) | private (List? Albums, List? Tracks) Extract... method ExtractWithJintToRecords (line 93) | private static (List? Albums, List? Tracks) ... method ProcessResults (line 137) | private void ProcessResults(List? albums, List factory, List list, s... method CreateAlbumData (line 166) | private AlbumData CreateAlbumData(LucidaAlbum album, LucidaRequestData... method CreateTrackData (line 189) | private AlbumData CreateTrackData(LucidaTrack track, LucidaRequestData... method ProcessReleaseDate (line 212) | private static void ProcessReleaseDate(AlbumData albumData, string? re... method NormalizeJsonData (line 239) | private static string NormalizeJsonData(string js) method ReleaseDateDayRegex (line 248) | [GeneratedRegex("^\\d{4}-\\d{2}-\\d{2}$")] method ReleaseDateYearRegex (line 251) | [GeneratedRegex("^\\d{4}$")] method ReleaseDateYear2Regex (line 254) | [GeneratedRegex("\\b(\\d{4})\\b")] method Data1Regex (line 257) | [GeneratedRegex(@"data\s*=\s*(\[(?:[^\[\]]|\[(?:[^\[\]]|\[(?:[^\[\]]|\... method Data2Regex (line 260) | [GeneratedRegex(@"__INITIAL_DATA__\s*=\s*({.+?});", RegexOptions.Compi... FILE: Tubifarry/Indexers/Lucida/LucidaServiceHelper.cs class LucidaServiceHelper (line 14) | public static class LucidaServiceHelper method GetServicesAsync (line 47) | public static Task>> GetServic... method HasAvailableServices (line 59) | public static bool HasAvailableServices(string baseUrl) method GetAvailableServices (line 72) | public static Dictionary> GetAvailableSer... method GetServiceDisplayName (line 83) | public static string GetServiceDisplayName(string serviceValue) method GetServiceKey (line 91) | public static string? GetServiceKey(string displayName) method GetServiceQuality (line 97) | public static (AudioFormat Format, int Bitrate, int BitDepth) GetServi... method ClearCache (line 104) | public static void ClearCache(string baseUrl) => _cache.TryRemove(base... method ClearAllCaches (line 109) | public static void ClearAllCaches() => _cache.Clear(); method FetchServicesAsync (line 111) | private static async Task>> Fe... FILE: Tubifarry/Indexers/Soulseek/ISlskdItemsParser.cs type ISlskdItemsParser (line 5) | public interface ISlskdItemsParser method ParseFolderName (line 7) | SlskdFolderData ParseFolderName(string folderPath); method CreateAlbumData (line 8) | AlbumData CreateAlbumData(string searchId, IGrouping true; method CanExecute (line 20) | public abstract bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 21) | public abstract string? GetQuery(SearchContext context, QueryType quer... FILE: Tubifarry/Indexers/Soulseek/Search/Core/QueryAnalyzer.cs class QueryAnalyzer (line 5) | public static partial class QueryAnalyzer method Analyze (line 16) | public static QueryType Analyze(SearchContext context) method IsVariousArtists (line 44) | public static bool IsVariousArtists(string? artist) method IsSelfTitled (line 51) | public static bool IsSelfTitled(string? artist, string? album) method IsShortName (line 80) | public static bool IsShortName(string? album) method NeedsTypeDisambiguation (line 87) | public static bool NeedsTypeDisambiguation(SearchContext context) method HasVolumeReference (line 113) | public static bool HasVolumeReference(string? album) => method HasStandaloneRomanNumeral (line 116) | public static bool HasStandaloneRomanNumeral(string? album) method NeedsNormalization (line 134) | public static bool NeedsNormalization(string? artist, string? album) => method HasSpecialCharacters (line 138) | private static bool HasSpecialCharacters(string? text) => method HasPunctuation (line 141) | private static bool HasPunctuation(string? text) => method NormalizeName (line 144) | private static string NormalizeName(string name) method ArticleRegex (line 151) | [GeneratedRegex(@"\b(the|a|an)\s+", RegexOptions.IgnoreCase | RegexOpt... method CollapseWhitespaceRegex (line 154) | [GeneratedRegex(@"\s+")] method PunctuationRegex (line 157) | [GeneratedRegex(@"[^\w\s]", RegexOptions.Compiled)] method SpecialCharRegex (line 160) | [GeneratedRegex(@"[àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓ... method StandaloneRomanRegex (line 163) | [GeneratedRegex(@"\b([IVXLCDM]{1,4})\b", RegexOptions.Compiled)] method VolumeRegex (line 166) | [GeneratedRegex(@"\b(?:Vol(?:ume)?\.?)\s*([0-9]+|[IVXLCDM]+)\b", Regex... FILE: Tubifarry/Indexers/Soulseek/Search/Core/SearchContext.cs type QueryType (line 7) | [Flags] type SearchContext (line 20) | public sealed record SearchContext type SearchQuery (line 82) | public sealed record SearchQuery type SearchTier (line 106) | public enum SearchTier FILE: Tubifarry/Indexers/Soulseek/Search/Core/SearchPipeline.cs type ISlskdSearchChain (line 8) | public interface ISlskdSearchChain method BuildChain (line 10) | LazyIndexerPageableRequestChain BuildChain(SearchContext context, Sear... class SearchPipeline (line 13) | public sealed class SearchPipeline : ISlskdSearchChain method SearchPipeline (line 18) | public SearchPipeline(IEnumerable strategies, Logger ... method BuildChain (line 30) | public LazyIndexerPageableRequestChain BuildChain(SearchContext contex... method ApplyNormalization (line 62) | private SearchContext ApplyNormalization(SearchContext context, QueryT... method ExecuteStrategy (line 75) | private IEnumerable ExecuteStrategy( FILE: Tubifarry/Indexers/Soulseek/Search/Strategies/BaseSearchStrategy.cs class BaseSearchStrategy (line 6) | public sealed class BaseSearchStrategy : SearchStrategyBase method CanExecute (line 12) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 25) | public override string? GetQuery(SearchContext context, QueryType quer... FILE: Tubifarry/Indexers/Soulseek/Search/Strategies/FallbackStrategy.cs class WildcardStrategy (line 6) | public sealed class WildcardStrategy : SearchStrategyBase method IsEnabled (line 12) | public override bool IsEnabled(SlskdSettings settings) => settings.Use... method CanExecute (line 14) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 21) | public override string? GetQuery(SearchContext context, QueryType quer... class PartialAlbumStrategy (line 40) | public sealed class PartialAlbumStrategy : SearchStrategyBase method IsEnabled (line 46) | public override bool IsEnabled(SlskdSettings settings) => settings.Use... method CanExecute (line 48) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 52) | public override string? GetQuery(SearchContext context, QueryType quer... class AliasStrategy (line 62) | public sealed class AliasStrategy : SearchStrategyBase method IsEnabled (line 70) | public override bool IsEnabled(SlskdSettings settings) => settings.Use... method CanExecute (line 72) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 77) | public override string? GetQuery(SearchContext context, QueryType quer... class TrackFallbackStrategy (line 91) | public sealed class TrackFallbackStrategy : SearchStrategyBase method IsEnabled (line 99) | public override bool IsEnabled(SlskdSettings settings) => settings.Use... method CanExecute (line 101) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 105) | public override string? GetQuery(SearchContext context, QueryType quer... class DistinctiveAlbumStrategy (line 121) | public sealed class DistinctiveAlbumStrategy : SearchStrategyBase method IsEnabled (line 127) | public override bool IsEnabled(SlskdSettings settings) => settings.Use... method CanExecute (line 129) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 133) | public override string? GetQuery(SearchContext context, QueryType quer... FILE: Tubifarry/Indexers/Soulseek/Search/Strategies/SpecialCaseStrategy.cs class VariousArtistsStrategy (line 6) | public sealed class VariousArtistsStrategy : SearchStrategyBase method CanExecute (line 12) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 16) | public override string? GetQuery(SearchContext context, QueryType quer... class SelfTitledStrategy (line 28) | public sealed class SelfTitledStrategy : SearchStrategyBase method CanExecute (line 34) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 39) | public override string? GetQuery(SearchContext context, QueryType quer... class ShortNameStrategy (line 51) | public sealed class ShortNameStrategy : SearchStrategyBase method CanExecute (line 57) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 62) | public override string? GetQuery(SearchContext context, QueryType quer... FILE: Tubifarry/Indexers/Soulseek/Search/Strategies/TemplateSearchStrategy.cs class TemplateSearchStrategy (line 12) | public sealed class TemplateSearchStrategy : SearchStrategyBase method IsEnabled (line 18) | public override bool IsEnabled(SlskdSettings settings) => method CanExecute (line 21) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 24) | public override string? GetQuery(SearchContext context, QueryType quer... FILE: Tubifarry/Indexers/Soulseek/Search/Strategies/VariationStrategy.cs class VolumeVariationStrategy (line 6) | public sealed class VolumeVariationStrategy : SearchStrategyBase method IsEnabled (line 12) | public override bool IsEnabled(SlskdSettings settings) => settings.Han... method CanExecute (line 14) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 18) | public override string? GetQuery(SearchContext context, QueryType quer... class RomanNumeralVariationStrategy (line 28) | public sealed class RomanNumeralVariationStrategy : SearchStrategyBase method IsEnabled (line 34) | public override bool IsEnabled(SlskdSettings settings) => settings.Han... method CanExecute (line 36) | public override bool CanExecute(SearchContext context, QueryType query... method GetQuery (line 40) | public override string? GetQuery(SearchContext context, QueryType quer... FILE: Tubifarry/Indexers/Soulseek/Search/Templates/TemplateEngine.cs class TemplateEngine (line 9) | public static partial class TemplateEngine method ParseTemplates (line 18) | public static IReadOnlyList ParseTemplates(string? templateCon... method ValidateTemplates (line 31) | public static IReadOnlyList ValidateTemplates(string? template... method ValidatePath (line 57) | private static string? ValidatePath(string path) method Apply (line 89) | public static string? Apply(string template, object? context) method ResolvePath (line 116) | private static object? ResolvePath(object? obj, string path) method GetValue (line 144) | private static object? GetValue(object obj, string name) method GetIndexed (line 157) | private static object? GetIndexed(object? col, int idx) => col switch method GetCachedProperty (line 165) | private static PropertyInfo? GetCachedProperty(Type type, string name) method GetCachedField (line 169) | private static FieldInfo? GetCachedField(Type type, string name) method ClearCaches (line 173) | public static void ClearCaches() method CreatePlaceholderRegex (line 179) | [GeneratedRegex(@"\{\{([^}]+)\}\}", RegexOptions.Compiled)] method CreateIndexerRegex (line 182) | [GeneratedRegex(@"^(\w+)\[(\d+)\]$", RegexOptions.Compiled)] method MultiSpaceRegex (line 185) | [GeneratedRegex(@"\s{2,}", RegexOptions.Compiled)] FILE: Tubifarry/Indexers/Soulseek/Search/Transformers/QueryBuilder.cs class QueryBuilder (line 5) | public static partial class QueryBuilder method Build (line 18) | public static string Build(params string?[] parts) => method DeduplicateTerms (line 21) | public static string DeduplicateTerms(string? text) method BuildTrimmed (line 57) | public static string BuildTrimmed(string? text) method BuildPartial (line 71) | public static string? BuildPartial(string? text) method ExtractDistinctive (line 103) | public static string ExtractDistinctive(string? text, int maxWords = 3) method ConvertVolumeFormat (line 129) | public static string? ConvertVolumeFormat(string? album) method ConvertRomanNumeral (line 153) | public static string? ConvertRomanNumeral(string? album) method ConvertNumber (line 195) | private static string ConvertNumber(string number) method ParenthesesRegex (line 210) | [GeneratedRegex(@"\([^)]*\)|\[[^\]]*\]", RegexOptions.Compiled)] method StandaloneRomanRegex (line 212) | [GeneratedRegex(@"\b([IVXLCDM]{1,4})\b", RegexOptions.Compiled)] method VolumeRegex (line 214) | [GeneratedRegex(@"\b(Vol(?:ume)?\.?)\s*([0-9]+|[IVXLCDM]+)\b", RegexOp... FILE: Tubifarry/Indexers/Soulseek/Search/Transformers/QueryNormalizer.cs class QueryNormalizer (line 8) | public static partial class QueryNormalizer method Normalize (line 10) | public static SearchContext Normalize(SearchContext context) method NormalizeText (line 31) | public static string NormalizeText(string? input) method PunctuationRegex (line 61) | [GeneratedRegex(@"[^\w\s\-&]", RegexOptions.Compiled)] method PlusRegex (line 64) | [GeneratedRegex(@"\+")] method WhitespaceRegex (line 67) | [GeneratedRegex(@"\s+")] FILE: Tubifarry/Indexers/Soulseek/SlsdkRecords.cs type SlskdSearchResponse (line 7) | public record SlskdSearchResponse( type SlskdLockedFile (line 20) | public record SlskdLockedFile( type SlskdFileData (line 24) | public record SlskdFileData( type SlskdFolderData (line 53) | public record SlskdFolderData( type SlskdSearchData (line 131) | public record SlskdSearchData( type SlskdDirectoryApiResponse (line 143) | public record SlskdDirectoryApiResponse( type SlskdDirectoryApiFile (line 147) | public record SlskdDirectoryApiFile( FILE: Tubifarry/Indexers/Soulseek/SlskdIndexer.cs class SlskdIndexer (line 21) | public class SlskdIndexer : ExtendedHttpIndexerBase inde... method CleanupReleases (line 42) | protected override IList CleanupReleases(IEnumerable failures) =... method GetExtendedRequestGenerator (line 61) | public override IIndexerRequestGenerator G... method GetParser (line 63) | public override IParseIndexerResponse GetParser() => _parseIndexerResp... method TestConnection (line 65) | protected override async Task TestConnection() FILE: Tubifarry/Indexers/Soulseek/SlskdIndexerParser.cs class SlskdIndexerParser (line 20) | public class SlskdIndexerParser : IParseIndexerResponse, IHandle ... method ParseResponse (line 53) | public IList ParseResponse(IndexerResponse indexerResponse) method TryExpandDirectory (line 139) | private IGrouping? TryExpandDirectory(SlskdSear... method RemoveSearch (line 172) | public void RemoveSearch(string searchId, bool delay = false) method Handle (line 195) | public void Handle(AlbumGrabbedEvent message) method Handle (line 203) | public void Handle(ApplicationShutdownRequested message) method InvalidIgnoreCache (line 215) | public static void InvalidIgnoreCache(string path) => _ignoreListCache... method GetRateLimitedUsers (line 217) | private HashSet GetRateLimitedUsers() method GetGrabCounts (line 245) | private Dictionary GetGrabCounts() method GetQueuedCounts (line 282) | private Dictionary GetQueuedCounts() method ExtractUsernameFromUrl (line 311) | private static string? ExtractUsernameFromUrl(string? url) method ExecuteRemovalAsync (line 323) | private async Task ExecuteRemovalAsync(SlskdSettings settings, string ... method GetIgnoredUsers (line 339) | private HashSet? GetIgnoredUsers(string? ignoreListPath) FILE: Tubifarry/Indexers/Soulseek/SlskdItemsParser.cs class SlskdItemsParser (line 13) | public partial class SlskdItemsParser : ISlskdItemsParser method SlskdItemsParser (line 47) | public SlskdItemsParser(ISentryHelper sentry, Logger logger) method ParseFolderName (line 53) | public SlskdFolderData ParseFolderName(string folderPath) method CreateAlbumData (line 81) | public AlbumData CreateAlbumData(string searchId, IGrouping path.S... method ParseFromRegexPatterns (line 174) | private static (string? artist, string? album, string? year) ParseFrom... method GetArtistFromParentFolder (line 217) | private static string? GetArtistFromParentFolder(string[] pathComponents) method CheckVolumeSeriesMatch (line 227) | private bool CheckVolumeSeriesMatch(string directoryPath, string? sear... method NormalizeVolume (line 255) | public string NormalizeVolume(string volume) method NormalizeRomanNumeral (line 277) | private static string NormalizeRomanNumeral(string roman) method ConvertRomanToNumber (line 291) | private int ConvertRomanToNumber(string roman) method NormalizeString (line 317) | public static string NormalizeString(string input) method CleanComponent (line 328) | private static string CleanComponent(string component) method ExtractExplicitTag (line 336) | private bool ExtractExplicitTag(string path) method ExtractEdition (line 353) | private static string? ExtractEdition(string path) method ExtractYearFromPath (line 359) | private static string? ExtractYearFromPath(string path) method TryMatchRegex (line 365) | private static Match? TryMatchRegex(string input, Regex regex) method IsFuzzyArtistMatch (line 371) | private static bool IsFuzzyArtistMatch(string dirNameNorm, string sear... method IsFuzzyAlbumMatch (line 379) | private static bool IsFuzzyAlbumMatch(string dirNameNorm, string searc... method GetCachedFuzzyScores (line 392) | private static (int Partial, int TokenSort) GetCachedFuzzyScores(strin... method DetermineRegexMatchType (line 417) | public static string DetermineRegexMatchType(string folderPath) method DetermineFinalArtist (line 437) | private static string DetermineFinalArtist(bool isArtistMatch, SlskdFo... method DetermineFinalAlbum (line 446) | private static string DetermineFinalAlbum(bool isAlbumMatch, SlskdFold... method AnalyzeAudioQuality (line 459) | private (AudioFormat Codec, int? BitRate, int? BitDepth, int? SampleRa... method GetMostCommonExtension (line 480) | public static string? GetMostCommonExtension(IEnumerable[^(\[]+)(?:\s*[\(\[](?19\d{2}|20\d{2... method YearArtistAlbumRegex (line 532) | [GeneratedRegex(@"^(?19\d{2}|20\d{2})\s*-\s*(?[^-]+)\s*-... method ArtistAlbumYearRegex (line 535) | [GeneratedRegex(@"^(?[^-]+)\s*-\s*(?[^(\[]+)(?:\s*[\(\[... method YearExtractionRegex (line 538) | [GeneratedRegex(@"(?19\d{2}|20\d{2})", RegexOptions.ExplicitCapt... method ExplicitTagRegex (line 541) | [GeneratedRegex(@"(?:^|\s|\(|\[)(?Non-?|Not\s+)?Explicit(?:\... method EditionRegex (line 544) | [GeneratedRegex(@"[\(\[](?(?:(?:Super\s+)?Deluxe|Limited|Spec... method RemoveWordsRegex (line 547) | [GeneratedRegex(@"\b(?:the|a|an|feat|featuring|ft|presents|pres|with|a... method VolumeRangeRegex (line 550) | [GeneratedRegex(@"(\d+)(?:[-to&]\s*\d+)?", RegexOptions.ExplicitCaptur... method RomanNumeralRegex (line 553) | [GeneratedRegex(@"^M{0,4}(?:CM|CD|D?C{0,3})(?:XC|XL|L?X{0,3})(?:IX|IV|... method ReduceWhitespaceRegex (line 556) | [GeneratedRegex(@"\s+", RegexOptions.Compiled)] method RemoveNonAlphanumericRegex (line 559) | [GeneratedRegex(@"[^\w\s$-]", RegexOptions.Compiled)] method NormalizeCharactersRegex (line 562) | [GeneratedRegex(@"[._/]+", RegexOptions.Compiled)] FILE: Tubifarry/Indexers/Soulseek/SlskdRequestGenerator.cs class SlskdRequestGenerator (line 19) | internal class SlskdRequestGenerator : IIndexerRequestGenerator GetRece... method GetSearchRequests (line 42) | public IndexerPageableRequestChain GetSear... method GetSearchRequests (line 72) | public IndexerPageableRequestChain GetSear... method ExecuteSearch (line 102) | private IEnumerable ExecuteSearch(SearchQuery query) method GetRequestsAsync (line 142) | private async Task GetRequestsAsync(SearchQuery query... method CreateSearchData (line 188) | private dynamic CreateSearchData(string searchText) => new method CreateSearchRequest (line 201) | private HttpRequest CreateSearchRequest(dynamic searchData) method ExecuteSearchAsync (line 213) | private async Task ExecuteSearchAsync(HttpRequest searchRequest, strin... method CreateResultRequest (line 219) | private HttpRequest CreateResultRequest(string searchId, SearchQuery q... method WaitOnSearchCompletionAsync (line 255) | private async Task WaitOnSearchCompletionAsync(string searchId, TimeSp... method GetSearchResultsAsync (line 294) | private async Task GetSearchResultsAsync(string searchId) method CalculateQuadraticDelay (line 310) | private static double CalculateQuadraticDelay(double progress) method GetPrimaryAlbumType (line 320) | private static PrimaryAlbumType GetPrimaryAlbumType(string? albumType) method ExpandDirectory (line 331) | public async Task?> ExpandDirectory(s... FILE: Tubifarry/Indexers/Soulseek/SlskdSettings.cs class SlskdSettingsValidator (line 10) | internal class SlskdSettingsValidator : AbstractValidator method SlskdSettingsValidator (line 12) | public SlskdSettingsValidator() class SlskdSettings (line 97) | public class SlskdSettings : IIndexerSettings method Validate (line 179) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type GrabLimitIntervalType (line 183) | public enum GrabLimitIntervalType type TrackCountFilterType (line 195) | public enum TrackCountFilterType FILE: Tubifarry/Indexers/Soulseek/SlskdTextProcessor.cs class SlskdTextProcessor (line 10) | public static partial class SlskdTextProcessor method BuildSearchText (line 25) | public static string BuildSearchText(string? artist, string? album) method ShouldNormalizeCharacters (line 28) | public static bool ShouldNormalizeCharacters(string? artist, string? a... method ShouldStripPunctuation (line 36) | public static bool ShouldStripPunctuation(string? artist, string? album) method IsVariousArtists (line 44) | public static bool IsVariousArtists(string artist) method ContainsVolumeReference (line 47) | public static bool ContainsVolumeReference(string album) method ShouldGenerateRomanVariations (line 50) | public static bool ShouldGenerateRomanVariations(string album) method StripPunctuation (line 59) | public static string StripPunctuation(string? input) method NormalizeSpecialCharacters (line 67) | public static string NormalizeSpecialCharacters(string? input) method GenerateVolumeVariations (line 84) | public static IEnumerable GenerateVolumeVariations(string album) method GenerateRomanNumeralVariations (line 117) | public static IEnumerable GenerateRomanNumeralVariations(strin... method GetDirectoryFromFilename (line 132) | public static string GetDirectoryFromFilename(string? filename) method ParseListContent (line 140) | public static HashSet ParseListContent(string content) method StripPunctuationRegex (line 152) | [GeneratedRegex(@"\s+")] FILE: Tubifarry/Indexers/Spotify/SpotifyIndexerSettings.cs class SpotifyIndexerSettingsValidator (line 8) | public class SpotifyIndexerSettingsValidator : AbstractValidator new(Validator.V... FILE: Tubifarry/Indexers/Spotify/SpotifyParser.cs type ISpotifyParser (line 9) | public interface ISpotifyParser : IParseIndexerResponse method UpdateSettings (line 11) | void UpdateSettings(SpotifyIndexerSettings settings); class SpotifyParser (line 17) | internal class SpotifyParser(Logger logger, ISpotifyToYouTubeEnricher en... method UpdateSettings (line 23) | public void UpdateSettings(SpotifyIndexerSettings settings) method ParseResponse (line 29) | public IList ParseResponse(IndexerResponse indexerResponse) method ParseAlbumItems (line 68) | private List ParseAlbumItems(JsonElement itemsElement) method ExtractAlbumInfo (line 89) | private static AlbumData ExtractAlbumInfo(JsonElement album) => new("S... method ExtractArtistName (line 103) | private static string ExtractArtistName(JsonElement album) method ExtractAlbumArtUrl (line 110) | private static string ExtractAlbumArtUrl(JsonElement album) method ExtractCoverResolution (line 117) | private static string ExtractCoverResolution(JsonElement album) FILE: Tubifarry/Indexers/Spotify/SpotifyRequestGenerator.cs type ISpotifyRequestGenerator (line 13) | public interface ISpotifyRequestGenerator : IIndexerRequestGenerator _settin... method GetRecentRequests (line 42) | public IndexerPageableRequestChain GetRece... method GetRecentReleaseRequests (line 58) | private IEnumerable GetRecentReleaseRequests() method GetSearchRequests (line 71) | public IndexerPageableRequestChain GetSear... method GetSearchRequests (line 108) | public IndexerPageableRequestChain GetSear... method GetAllPagesForQuery (line 130) | private IEnumerable GetAllPagesForQuery(string searchQ... method GetRequests (line 139) | private IEnumerable GetRequests(string searchQuery, st... method HandleToken (line 152) | private void HandleToken() method TokenIsExpired (line 160) | public bool TokenIsExpired() => DateTime.Now >= _tokenExpiry; method RequestNewToken (line 162) | public bool RequestNewToken() => DateTime.Now >= _tokenExpiry.AddMinut... method StartTokenRequest (line 164) | public void StartTokenRequest() FILE: Tubifarry/Indexers/Spotify/SpotifyToYouTubeEnricher.cs type ISpotifyToYouTubeEnricher (line 15) | public interface ISpotifyToYouTubeEnricher method UpdateSettings (line 17) | void UpdateSettings(SpotifyIndexerSettings settings); method EnrichWithYouTubeData (line 19) | List EnrichWithYouTubeData(List albums); method EnrichSingleAlbumAsync (line 21) | Task EnrichSingleAlbumAsync(AlbumData albumData); class SpotifyToYouTubeEnricher (line 27) | internal class SpotifyToYouTubeEnricher(Logger logger) : ISpotifyToYouTu... method UpdateSettings (line 37) | public void UpdateSettings(SpotifyIndexerSettings settings) method EnrichWithYouTubeData (line 57) | public List EnrichWithYouTubeData(List albums) method EnrichSingleAlbumAsync (line 92) | public async Task EnrichSingleAlbumAsync(AlbumData albumData) method IsAlbumMatch (line 193) | private bool IsAlbumMatch(AlbumData spotifyAlbum, AlbumSearchResult yt... method IsTrackCountValid (line 226) | private bool IsTrackCountValid(int spotifyTrackCount, int ytTrackCount) method NormalizeString (line 235) | private static string NormalizeString(string input) method AreNamesSimilar (line 247) | private static bool AreNamesSimilar(string name1, string name2, bool e... method SettingsEqual (line 260) | private static bool SettingsEqual(SpotifyIndexerSettings? settings1, S... FILE: Tubifarry/Indexers/Spotify/TubifarryIndexer.cs class TubifarryIndexer (line 16) | internal class TubifarryIndexer : ExtendedHttpIndexerBase failures) method UpdateComponentSettings (line 71) | private void UpdateComponentSettings() method GetExtendedRequestGenerator (line 77) | public override IIndexerRequestGenerator G... method GetParser (line 83) | public override IParseIndexerResponse GetParser() FILE: Tubifarry/Indexers/SubSonic/SubSonicAuthHelper.cs class SubSonicAuthHelper (line 9) | public static class SubSonicAuthHelper method GenerateToken (line 14) | public static (string Salt, string Token) GenerateToken(string password) method AppendAuthParameters (line 21) | public static void AppendAuthParameters(StringBuilder urlBuilder, stri... method GenerateSaltFromAssembly (line 41) | private static string GenerateSaltFromAssembly() => method CalculateMd5Hash (line 44) | private static string CalculateMd5Hash(string input) FILE: Tubifarry/Indexers/SubSonic/SubSonicIndexer.cs class SubSonicIndexer (line 14) | public class SubSonicIndexer : HttpIndexerBase method SubSonicIndexer (line 30) | public SubSonicIndexer( method Test (line 44) | protected override async Task Test(List failures) method GetRequestGenerator (line 111) | public override IIndexerRequestGenerator GetRequestGenerator() method GetParser (line 117) | public override IParseIndexerResponse GetParser() FILE: Tubifarry/Indexers/SubSonic/SubSonicIndexerParser.cs type ISubSonicParser (line 12) | public interface ISubSonicParser : IParseIndexerResponse method SetSettings (line 14) | void SetSettings(SubSonicIndexerSettings settings); class SubSonicIndexerParser (line 17) | public class SubSonicIndexerParser(Logger logger, IHttpClient httpClient... method SetSettings (line 29) | public void SetSettings(SubSonicIndexerSettings settings) => _settings... method ParseResponse (line 31) | public IList ParseResponse(IndexerResponse indexerResponse) method ParseSearch3Response (line 54) | private void ParseSearch3Response(string responseContent, List? albums, List? songs, List s... method CreateTrackData (line 265) | private AlbumData CreateTrackData(SubSonicSearchSong song) method BuildInfoUrl (line 291) | private string BuildInfoUrl(string type, string id) => FILE: Tubifarry/Indexers/SubSonic/SubSonicIndexerSettings.cs class SubSonicIndexerSettingsValidator (line 8) | public class SubSonicIndexerSettingsValidator : AbstractValidator new(Validator.Validate(t... FILE: Tubifarry/Indexers/SubSonic/SubSonicRecords.cs type SubSonicResponseWrapper (line 9) | internal record SubSonicResponseWrapper( type SubSonicResponse (line 15) | internal record SubSonicResponse( type SubSonicPingResponse (line 24) | internal record SubSonicPingResponse( type SubSonicPingData (line 30) | internal record SubSonicPingData( type SubSonicError (line 38) | internal record SubSonicError( type SubSonicSearchResponse (line 45) | internal record SubSonicSearchResponse( type SubSonicSearchArtist (line 53) | internal record SubSonicSearchArtist( type SubSonicSearchAlbum (line 62) | internal record SubSonicSearchAlbum( type SubSonicAlbumFull (line 81) | internal record SubSonicAlbumFull( type SubSonicAlbumResponseWrapper (line 101) | internal record SubSonicAlbumResponseWrapper( type SubSonicSongResponseWrapper (line 107) | internal record SubSonicSongResponseWrapper( type SubSonicItemResponse (line 113) | internal record SubSonicItemResponse( type SubSonicSearchSong (line 123) | internal record SubSonicSearchSong( FILE: Tubifarry/Indexers/SubSonic/SubSonicRequestGenerator.cs type ISubSonicRequestGenerator (line 9) | public interface ISubSonicRequestGenerator : IIndexerRequestGenerator method SetSetting (line 11) | void SetSetting(SubSonicIndexerSettings settings); class SubSonicRequestGenerator (line 14) | public class SubSonicRequestGenerator(Logger logger) : ISubSonicRequestG... method GetRecentRequests (line 19) | public IndexerPageableRequestChain GetRecentRequests() => new(); method GetSearchRequests (line 21) | public IndexerPageableRequestChain GetSearchRequests(AlbumSearchCriter... method GetSearchRequests (line 30) | public IndexerPageableRequestChain GetSearchRequests(ArtistSearchCrite... method SetSetting (line 35) | public void SetSetting(SubSonicIndexerSettings settings) => _settings ... method Generate (line 37) | private IndexerPageableRequestChain Generate(string query, bool isSingle) method BuildSearch3Url (line 70) | private string BuildSearch3Url(string baseUrl, string query, bool isSi... method CreateRequest (line 82) | private IndexerRequest CreateRequest(string url, string contentType) FILE: Tubifarry/Indexers/TripleTriple/TripleTripleIndexer.cs class TripleTripleIndexer (line 13) | public class TripleTripleIndexer : HttpIndexerBase failures) method GetRequestGenerator (line 74) | public override IIndexerRequestGenerator GetRequestGenerator() method GetParser (line 80) | public override IParseIndexerResponse GetParser() => _parser; FILE: Tubifarry/Indexers/TripleTriple/TripleTripleIndexerSettings.cs class TripleTripleIndexerSettingsValidator (line 8) | public class TripleTripleIndexerSettingsValidator : AbstractValidator new(_validator.Validate(... type TripleTripleCountry (line 64) | public enum TripleTripleCountry type TripleTripleCodec (line 100) | public enum TripleTripleCodec FILE: Tubifarry/Indexers/TripleTriple/TripleTripleParser.cs type ITripleTripleParser (line 10) | public interface ITripleTripleParser : IParseIndexerResponse { } class TripleTripleParser (line 12) | public class TripleTripleParser(Logger logger) : ITripleTripleParser method ParseResponse (line 14) | public IList ParseResponse(IndexerResponse indexerResponse) method CreateAlbumRelease (line 72) | private AlbumData CreateAlbumRelease(TripleTripleDocument album) method CreateTrackRelease (line 97) | private AlbumData CreateTrackRelease(TripleTripleDocument track) method GetQualityForCodec (line 122) | private static (AudioFormat Format, int Bitrate, int BitDepth) GetQual... FILE: Tubifarry/Indexers/TripleTriple/TripleTripleRecords.cs type TripleTripleStatusResponse (line 5) | public record TripleTripleStatusResponse( type TripleTripleSearchResponse (line 8) | public record TripleTripleSearchResponse( type TripleTripleResult (line 11) | public record TripleTripleResult( type TripleTripleSearchHit (line 14) | public record TripleTripleSearchHit( type TripleTripleDocument (line 17) | public record TripleTripleDocument( type TripleTripleArt (line 38) | public record TripleTripleArt( type TripleTripleMediaResponse (line 42) | public record TripleTripleMediaResponse( type TripleTripleTags (line 56) | public record TripleTripleTags( type TripleTripleStreamInfo (line 74) | public record TripleTripleStreamInfo( type TripleTripleLyrics (line 82) | public record TripleTripleLyrics( type TripleTripleAlbumMetadata (line 86) | public record TripleTripleAlbumMetadata( type TripleTripleAlbumInfo (line 89) | public record TripleTripleAlbumInfo( type TripleTripleArtistInfo (line 103) | public record TripleTripleArtistInfo( type TripleTripleTrackInfo (line 107) | public record TripleTripleTrackInfo( type TripleTripleRequestData (line 117) | public record TripleTripleRequestData( FILE: Tubifarry/Indexers/TripleTriple/TripleTripleRequestGenerator.cs type ITripleTripleRequestGenerator (line 9) | public interface ITripleTripleRequestGenerator : IIndexerRequestGenerator method SetSetting (line 11) | void SetSetting(TripleTripleIndexerSettings settings); class TripleTripleRequestGenerator (line 14) | public class TripleTripleRequestGenerator : ITripleTripleRequestGenerator method TripleTripleRequestGenerator (line 19) | public TripleTripleRequestGenerator(Logger logger) => _logger = logger; method GetRecentRequests (line 21) | public IndexerPageableRequestChain GetRecentRequests() => new(); method GetSearchRequests (line 23) | public IndexerPageableRequestChain GetSearchRequests(AlbumSearchCriter... method GetSearchRequests (line 30) | public IndexerPageableRequestChain GetSearchRequests(ArtistSearchCrite... method SetSetting (line 32) | public void SetSetting(TripleTripleIndexerSettings settings) => _setti... method Generate (line 34) | private IndexerPageableRequestChain Generate(string query, bool isSingle) FILE: Tubifarry/Indexers/YouTube/YoutubeIndexer.cs class YouTubeIndexer (line 16) | internal class YouTubeIndexer : ExtendedHttpIndexerBase failures) method GetExtendedRequestGenerator (line 66) | public override IIndexerRequestGenerator G... method GetParser (line 68) | public override IParseIndexerResponse GetParser() => _parser; FILE: Tubifarry/Indexers/YouTube/YoutubeIndexerSettings.cs class YouTubeIndexerSettingsValidator (line 9) | public class YouTubeIndexerSettingsValidator : AbstractValidator new(Validator.Va... FILE: Tubifarry/Indexers/YouTube/YoutubeParser.cs class YouTubeParser (line 22) | internal class YouTubeParser : IParseIndexerResponse method YouTubeParser (line 44) | public YouTubeParser(YouTubeIndexer indexer) method ParseResponse (line 50) | public IList ParseResponse(IndexerResponse indexerResponse) method TryParseWithDelegate (line 79) | private Page? TryParseWithDelegate(JObject jsonResponse) method ProcessSearchResults (line 103) | private void ProcessSearchResults(IReadOnlyList searchRe... method EnrichAlbumWithYouTubeDataAsync (line 132) | private async Task EnrichAlbumWithYouTubeDataAsync(AlbumData albumData) method UpdateClient (line 186) | private void UpdateClient() method ExtractAlbumInfo (line 194) | private static AlbumData ExtractAlbumInfo(AlbumSearchResult album) => ... FILE: Tubifarry/Indexers/YouTube/YoutubeRequestGenerator.cs class YouTubeRequestGenerator (line 17) | internal class YouTubeRequestGenerator : IIndexerRequestGenerator GetRece... method GetSearchRequests (line 38) | public IndexerPageableRequestChain GetSear... method GetSearchRequests (line 66) | public IndexerPageableRequestChain GetSear... method UpdateTokens (line 77) | private void UpdateTokens() method GetRequests (line 84) | private IEnumerable GetRequests(string searchQuery, Se... method ToParams (line 125) | public static string? ToParams(SearchCategory? value) => FILE: Tubifarry/Metadata/Converter/AudioConverter.cs class AudioConverter (line 13) | public class AudioConverter(Logger logger, Lazy tagService)... method FindMetadataFile (line 20) | public override MetadataFile FindMetadataFile(Artist artist, string pa... method ArtistMetadata (line 22) | public override MetadataFileResult ArtistMetadata(Artist artist) => de... method AlbumMetadata (line 24) | public override MetadataFileResult AlbumMetadata(Artist artist, Album ... method ArtistImages (line 26) | public override List ArtistImages(Artist artist) => d... method AlbumImages (line 28) | public override List AlbumImages(Artist artist, Album... method TrackImages (line 30) | public override List TrackImages(Artist artist, Track... method TrackMetadata (line 32) | public override MetadataFileResult TrackMetadata(Artist artist, TrackF... method ConvertTrack (line 41) | private async Task ConvertTrack(TrackFile trackFile) method PerformConversion (line 58) | private async Task PerformConversion(TrackFile trackFile, ConversionRe... method GetTrackBitrateAsync (line 70) | private async Task GetTrackBitrateAsync(string filePath) method GetTrackBitDepthAsync (line 89) | private async Task GetTrackBitDepthAsync(string filePath) method ShouldBlockConversion (line 130) | private ConversionResult ShouldBlockConversion(ConversionRule rule, Au... method GetTargetConversionForTrack (line 167) | private async Task GetTargetConversionForTrack(Audio... method ShouldConvertTrack (line 211) | private async Task ShouldConvertTrack(TrackFile trackFile) method GetArtistTagRule (line 234) | private ConversionRule? GetArtistTagRule(TrackFile trackFile) method MatchesAnyCustomRule (line 250) | private bool MatchesAnyCustomRule(AudioFormat trackFormat, int? curren... method IsRuleMatching (line 253) | private bool IsRuleMatching(ConversionRule rule, AudioFormat trackForm... method GetTrackAudioFormatAsync (line 265) | private async Task GetTrackAudioFormatAsync(string trackP... method LogConversionPlan (line 289) | private void LogConversionPlan(AudioFormat sourceFormat, int? sourceBi... method FormatDescriptionWithBitrate (line 297) | private static string FormatDescriptionWithBitrate(AudioFormat format,... method IsFormatEnabledForConversion (line 300) | private bool IsFormatEnabledForConversion(AudioFormat format) => forma... FILE: Tubifarry/Metadata/Converter/AudioConverterSettings.cs class AudioConverterSettingsValidator (line 12) | public class AudioConverterSettingsValidator : AbstractValidator rule) method IsValidLossyConversion (line 49) | private bool IsValidLossyConversion(KeyValuePair rule) method IsValidCBRUsage (line 65) | private bool IsValidCBRUsage(KeyValuePair rule) method IsValidStaticConversion (line 77) | private static bool IsValidStaticConversion(AudioConverterSettings set... method TestFFmpeg (line 80) | private static async Task TestFFmpeg(string ffmpegPath) class AudioConverterSettings (line 106) | public class AudioConverterSettings : IProviderConfig method Validate (line 137) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type TargetAudioFormat (line 140) | public enum TargetAudioFormat FILE: Tubifarry/Metadata/Converter/BitrateRules.cs class ConversionResult (line 9) | public class ConversionResult method Blocked (line 17) | public static ConversionResult Blocked() => new() { IsBlocked = true, ... method Success (line 19) | public static ConversionResult Success(AudioFormat format, int? bitrat... method FromRule (line 28) | public static ConversionResult FromRule(ConversionRule rule) => new() class ConversionRule (line 38) | public class ConversionRule method MatchesBitrate (line 57) | public bool MatchesBitrate(int? currentBitrate) method MatchesFormat (line 67) | public bool MatchesFormat(AudioFormat trackFormat) method HasBitrateConstraints (line 81) | private bool HasBitrateConstraints() => SourceBitrateOperator.HasValue... method EvaluateBitrateCondition (line 83) | private bool EvaluateBitrateCondition(int currentBitrate) method GetOperatorSymbol (line 100) | private string GetOperatorSymbol() => SourceBitrateOperator.HasValue ?... method ToString (line 102) | public override string ToString() => $"{FormatSourcePart()}->{FormatTa... method FormatSourcePart (line 104) | private string FormatSourcePart() method FormatTargetPart (line 121) | private string FormatTargetPart() class OperatorSymbols (line 136) | public static class OperatorSymbols method GetSymbol (line 145) | public static string GetSymbol(ComparisonOperator op) method FromSymbol (line 159) | public static ComparisonOperator? FromSymbol(string symbol) type ComparisonOperator (line 174) | public enum ComparisonOperator class RuleParser (line 184) | public static partial class RuleParser method TryParseRule (line 192) | public static bool TryParseRule(string sourceKey, string targetValue, ... method TryParseArtistTag (line 206) | public static bool TryParseArtistTag(string tagLabel, out ConversionRu... method ParseSourcePart (line 248) | private static bool ParseSourcePart(string sourceKey, ConversionRule r... method ParseSourceFormat (line 282) | private static bool ParseSourceFormat(string formatName, ConversionRul... method ParseSourceBitrateConstraints (line 315) | private static bool ParseSourceBitrateConstraints(string operatorStr, ... method ParseTargetPart (line 335) | private static bool ParseTargetPart(string targetValue, ConversionRule... method ParseTargetFormat (line 366) | private static bool ParseTargetFormat(string formatName, ConversionRul... method ParseTargetBitrate (line 384) | private static bool ParseTargetBitrate(string bitrateStr, ConversionRu... method SourceFormatRegex (line 416) | [GeneratedRegex(@"^([a-zA-Z0-9]+)(?:([!<>=]{1,2})(\d+))?$", RegexOptio... method TargetFormatRegex (line 419) | [GeneratedRegex(@"^([a-zA-Z0-9]+)(?::(\d+)k?)?(?::(cbr))?$", RegexOpti... method ArtistTagRegex (line 422) | [GeneratedRegex(@"^([a-zA-Z]+)(?:-(\d+)k?)?$", RegexOptions.Compiled)] FILE: Tubifarry/Metadata/Lyrics/LyricEnhancerSettings.cs class LyricsEnhancerSettingsValidator (line 10) | public class LyricsEnhancerSettingsValidator : AbstractValidator Instance = this; method Validate (line 80) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... class LyricsUpdateCommand (line 86) | public class LyricsUpdateCommand : Command method SetCompletionMessage (line 95) | public void SetCompletionMessage(string message) => _completionMessage... type LyricOptions (line 98) | public enum LyricOptions FILE: Tubifarry/Metadata/Lyrics/LyricsEnhancer.cs class LyricsEnhancer (line 20) | public class LyricsEnhancer : ScheduledTaskBase,... method LyricsEnhancer (line 35) | public LyricsEnhancer( method Execute (line 68) | public void Execute(LyricsUpdateCommand message) method ProcessTrackBatch (line 128) | private ProcessingResult ProcessTrackBatch(List batch) method SyncExistingLrcFile (line 176) | private void SyncExistingLrcFile(Artist artist, TrackFile trackFile) method WriteLrcFile (line 184) | private void WriteLrcFile(Artist artist, TrackFile trackFile, Metadata... method EmbedLyrics (line 192) | private void EmbedLyrics(Lyric lyric, TrackFile trackFile) method GetFilenameAfterMove (line 221) | public override string GetFilenameAfterMove(Artist artist, TrackFile t... method TrackMetadata (line 230) | public override MetadataFileResult TrackMetadata(Artist artist, TrackF... method ProcessTrackLyricsAsync (line 255) | private async Task ProcessTrackLyricsAsync(Artist ... method FetchLyricsAsync (line 283) | private async Task FetchLyricsAsync((string Artist, string Tit... method CreateLrcFileContent (line 304) | private string? CreateLrcFileContent(Lyric lyric, (string Artist, stri... class ProcessingResult (line 319) | private class ProcessingResult FILE: Tubifarry/Metadata/Lyrics/LyricsHelper.cs class LyricsHelper (line 14) | public static class LyricsHelper method ScoreAndSelectBestMatch (line 16) | public static JToken? ScoreAndSelectBestMatch(List artistMatch... method CreateRawLrcContent (line 63) | public static string? CreateRawLrcContent(List? syncedLyrics) method CreateLrcFileContent (line 76) | public static string? CreateLrcFileContent(Lyric lyric, string artistN... method GetLyricsForEmbedding (line 101) | public static string? GetLyricsForEmbedding(Lyric lyric, LyricOptions ... method GetLyricsForLrcFile (line 110) | public static string? GetLyricsForLrcFile(Lyric lyric, LyricOptions op... method EmbedLyricsInAudioFile (line 119) | public static bool EmbedLyricsInAudioFile(string filePath, string lyri... method ExtractTrackInfo (line 139) | public static (string Artist, string Title, string Album, int Duration... method LrcFileExistsOnDisk (line 167) | public static bool LrcFileExistsOnDisk(string trackFilePath, IDiskProv... FILE: Tubifarry/Metadata/Lyrics/LyricsProviders.cs class LyricsProviders (line 11) | public partial class LyricsProviders method LyricsProviders (line 17) | public LyricsProviders(HttpClient httpClient, Logger logger, LyricsEnh... method FetchFromLrcLibAsync (line 26) | public async Task FetchFromLrcLibAsync(string artistName, stri... method FetchFromGeniusAsync (line 77) | public async Task FetchFromGeniusAsync(string artistName, stri... method SearchSongOnGeniusAsync (line 105) | private async Task SearchSongOnGeniusAsync(string artistName,... method ExtractLyricsFromGeniusPageAsync (line 151) | private async Task ExtractLyricsFromGeniusPageAsync(string so... method ExtractLyricsFromHtml (line 178) | private string? ExtractLyricsFromHtml(string html) method DataLyricsContainerRegex (line 207) | [GeneratedRegex(@"]*data-lyrics-container[^>]*>(.*?)<\/div>", R... method ClassicLyricsClassRegex (line 210) | [GeneratedRegex(@"]*class=""[^""]*lyrics[^""]*""[^>]*>(.*?)<\/d... method LyricsRootIdRegex (line 213) | [GeneratedRegex(@"]*id=""lyrics-root[^""]*""[^>]*>(.*?)<\/div>"... method BrTagRegex (line 216) | [GeneratedRegex(@"]*>", RegexOptions.Compiled)] method ItalicTagRegex (line 219) | [GeneratedRegex(@"]*>", RegexOptions.Compiled)] method BoldTagRegex (line 222) | [GeneratedRegex(@"]*>", RegexOptions.Compiled)] method AnchorTagRegex (line 225) | [GeneratedRegex(@"]*>", RegexOptions.Compiled)] method AllHtmlTagsRegex (line 228) | [GeneratedRegex(@"<[^>]*>", RegexOptions.Compiled)] FILE: Tubifarry/Metadata/Lyrics/TrackFileRepositoryHelper.cs class TrackFileRepositoryHelper (line 17) | public sealed class TrackFileRepositoryHelper : BasicRepository method TrackFileRepositoryHelper (line 24) | public TrackFileRepositoryHelper( method GetTracksWithoutLrcFilesCount (line 42) | public int GetTracksWithoutLrcFilesCount() method GetTracksWithoutLrcFilesBatch (line 75) | public List GetTracksWithoutLrcFilesBatch(int offset, int l... method CreateAndUpsertLyricFile (line 114) | public LyricFile? CreateAndUpsertLyricFile(Artist artist, TrackFile tr... method Builder (line 151) | public new SqlBuilder Builder() => base.Builder(); method Query (line 156) | public new List Query(SqlBuilder builder) => base.Query(bui... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/AlbumMapper.cs class AlbumMapper (line 10) | public static class AlbumMapper method GetLinkNameFromUrl (line 70) | public static string GetLinkNameFromUrl(string url) method DetermineSecondaryTypesFromTitle (line 102) | public static List DetermineSecondaryTypesFromTitl... method FilterAlbums (line 147) | public static List FilterAlbums(IEnumerable albums, int ... method MapAlbumTypes (line 167) | public static void MapAlbumTypes(IEnumerable? formatDescriptio... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/CustomLidarr/CustomLidarrMetadataProxy.cs class CustomLidarrMetadataProxy (line 13) | [Proxy(ProxyMode.Public)] method CustomLidarrMetadataProxy (line 29) | public CustomLidarrMetadataProxy(IConfigService configService, ILidarr... method SearchForNewAlbum (line 36) | public List SearchForNewAlbum(string title, string artist) => method SearchForNewArtist (line 39) | public List SearchForNewArtist(string title) => method SearchForNewEntity (line 42) | public List SearchForNewEntity(string title) => method GetAlbumInfo (line 45) | public Tuple> GetAlbumInfo(string ... method GetArtistInfo (line 48) | public Artist GetArtistInfo(string lidarrId, int metadataProfileId) => method GetChangedAlbums (line 51) | public HashSet GetChangedAlbums(DateTime startTime) => method GetChangedArtists (line 54) | public HashSet GetChangedArtists(DateTime startTime) => method SearchForNewAlbumByRecordingIds (line 57) | public List SearchForNewAlbumByRecordingIds(List record... method GetRequestBuilder (line 60) | public IHttpRequestBuilderFactory GetRequestBuilder() method CanHandleSearch (line 76) | public MetadataSupportLevel CanHandleSearch(string? albumTitle, string... method CanHandleIRecordingIds (line 87) | public MetadataSupportLevel CanHandleIRecordingIds(params string[] rec... method CanHandleChanged (line 92) | public MetadataSupportLevel CanHandleChanged() method SupportsLink (line 104) | public string? SupportsLink(List links) method CanHandleId (line 125) | public MetadataSupportLevel CanHandleId(string id) FILE: Tubifarry/Metadata/Proxy/MetadataProvider/CustomLidarr/CustomLidarrMetadataProxySettings.cs class CustomLidarrMetadataProxySettingsValidator (line 9) | public class CustomLidarrMetadataProxySettingsValidator : AbstractValida... method CustomLidarrMetadataProxySettingsValidator (line 13) | public CustomLidarrMetadataProxySettingsValidator() method NotBeRestrictedDomain (line 30) | private static bool NotBeRestrictedDomain(string url) => !_restrictedD... class CustomLidarrMetadataProxySettings (line 34) | public class CustomLidarrMetadataProxySettings : IProviderConfig method CustomLidarrMetadataProxySettings (line 47) | public CustomLidarrMetadataProxySettings() => Instance = this; method Validate (line 51) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/CustomLidarr/CustomLidarrProxy.cs class CustomLidarrProxy (line 18) | public partial class CustomLidarrProxy : ICustomLidarrProxy method CustomLidarrProxy (line 30) | public CustomLidarrProxy(IHttpClient httpClient, method GetChangedArtists (line 45) | public HashSet GetChangedArtists(CustomLidarrMetadataProxySett... method GetArtistInfo (line 65) | public Artist GetArtistInfo(CustomLidarrMetadataProxySettings settings... method GetChangedAlbums (line 107) | public HashSet GetChangedAlbums(CustomLidarrMetadataProxySetti... method GetChangedAlbumsUncached (line 112) | private HashSet GetChangedAlbumsUncached(CustomLidarrMetadataP... method FilterAlbums (line 132) | public IEnumerable FilterAlbums(IEnumerable> GetAlbumInfo(CustomL... method SearchNewArtist (line 182) | public List SearchNewArtist(CustomLidarrMetadataProxySettings ... method SearchNewAlbum (line 244) | public List SearchNewAlbum(CustomLidarrMetadataProxySettings se... method SearchNewAlbumByRecordingIds (line 311) | public List SearchNewAlbumByRecordingIds(CustomLidarrMetadataPr... method SearchNewEntity (line 328) | public List SearchNewEntity(CustomLidarrMetadataProxySettings ... method ExtractMbid (line 380) | public string? ExtractMbid(string? query) method MapSearchResult (line 391) | private Artist MapSearchResult(ArtistResource resource) method MapSearchResult (line 402) | private Album? MapSearchResult(AlbumResource resource) method MapSearchResult (line 424) | private object? MapSearchResult(EntityResource resource) method MapAlbum (line 440) | private static Album MapAlbum(AlbumResource resource, Dictionary new() method MapTrack (line 533) | private static Track MapTrack(TrackResource resource, Dictionary new() method MapCoverType (line 607) | private static MediaCoverTypes MapCoverType(string coverType) => cover... method MapSecondaryTypes (line 618) | public static SecondaryAlbumType MapSecondaryTypes(string albumType) =... method IsMbidQuery (line 634) | public static bool IsMbidQuery(string? query) => MusicBrainzRegex().Is... method GetRequestBuilder (line 636) | private static IHttpRequestBuilderFactory GetRequestBuilder(CustomLida... method MusicBrainzRegex (line 637) | [GeneratedRegex(@"\b(?:lidarr:|lidarrid:|mbid:|cl:|clid:|customlidarri... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/CustomLidarr/ICustomLidarrProxy.cs type ICustomLidarrProxy (line 5) | public interface ICustomLidarrProxy method SearchNewAlbum (line 7) | List SearchNewAlbum(CustomLidarrMetadataProxySettings settings,... method SearchNewArtist (line 9) | List SearchNewArtist(CustomLidarrMetadataProxySettings setting... method SearchNewEntity (line 11) | List SearchNewEntity(CustomLidarrMetadataProxySettings setting... method SearchNewAlbumByRecordingIds (line 13) | List SearchNewAlbumByRecordingIds(CustomLidarrMetadataProxySett... method GetAlbumInfo (line 15) | Tuple> GetAlbumInfo(CustomLidarrMe... method GetArtistInfo (line 17) | Artist GetArtistInfo(CustomLidarrMetadataProxySettings settings, strin... method GetChangedAlbums (line 19) | HashSet GetChangedAlbums(CustomLidarrMetadataProxySettings set... method GetChangedArtists (line 21) | HashSet GetChangedArtists(CustomLidarrMetadataProxySettings se... method ExtractMbid (line 23) | string? ExtractMbid(string? query); FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Deezer/DeezerAPIService.cs class DeezerApiService (line 11) | public class DeezerApiService method DeezerApiService (line 31) | public DeezerApiService(IHttpClient httpClient, string userAgent) method BuildRequest (line 43) | private HttpRequestBuilder BuildRequest(string endpoint) method ExecuteRequestWithRetryAsync (line 59) | private async Task ExecuteRequestWithRetryAsync(HttpReque... method HandleErrorResponse (line 106) | private void HandleErrorResponse(HttpResponse response) method FetchPaginatedResultsAsync (line 127) | private async Task?> FetchPaginatedResultsAsync(HttpRequest... method GetPaginatedDataAsync (line 161) | private async Task?> GetPaginatedDataAsync(string endpoint,... method GetAlbumAsync (line 167) | public async Task GetAlbumAsync(long albumId) method GetArtistAsync (line 174) | public async Task GetArtistAsync(long artistId) method GetChartAsync (line 180) | public async Task GetChartAsync(int chartId = 0) method GetEditorialAsync (line 186) | public async Task GetEditorialAsync(long editorialId) method GetGenreAsync (line 192) | public async Task GetGenreAsync(long genreId) method ListGenresAsync (line 198) | public async Task?> ListGenresAsync() method GetPlaylistAsync (line 204) | public async Task GetPlaylistAsync(long playlistId) method GetPodcastAsync (line 210) | public async Task GetPodcastAsync(long podcastId) method GetRadioAsync (line 216) | public async Task GetRadioAsync(long radioId) method GetTrackAsync (line 222) | public async Task GetTrackAsync(long trackId) method GetUserAsync (line 228) | public async Task GetUserAsync(long? userId = null) method GetOptionsAsync (line 235) | public async Task GetOptionsAsync() method SearchAsync (line 253) | public async Task?> SearchAsync(DeezerSearchParameter searc... method BuildAdvancedSearchQuery (line 265) | private static string BuildAdvancedSearchQuery(DeezerSearchParameter s... method SearchAsync (line 289) | public async Task?> SearchAsync(DeezerSearchPar... method GetChartDataAsync (line 305) | public async Task?> GetChartDataAsync(int? maxPages = null)... method GetArtistDataAsync (line 322) | public async Task?> GetArtistDataAsync(long artistId, int? ... method GetAlbumDataAsync (line 333) | public async Task?> GetAlbumDataAsync(long albumId, int? ma... method GetRadioListsAsync (line 342) | public Task?> GetRadioListsAsync(int? maxPages = nul... method GetRadioTopAsync (line 345) | public Task?> GetRadioTopAsync(int? maxPages = null) => method GetRadioGenresAsync (line 348) | public Task?> GetRadioGenresAsync(int? maxPages = nu... method GetPlaylistRadioAsync (line 351) | public Task?> GetPlaylistRadioAsync(long playlistId,... method GetRadiosAsync (line 354) | public Task?> GetRadiosAsync(int? maxPages = null) => method GetPlaylistTracksAsync (line 357) | public Task?> GetPlaylistTracksAsync(long playlistId... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Deezer/DeezerAuthService.cs class DeezerAuthService (line 12) | public class DeezerAuthService method DeezerAuthService (line 17) | public DeezerAuthService(IHttpClient httpClient) method AuthenticateAsync (line 26) | public async Task AuthenticateAsync(string appId, string appS... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Deezer/DeezerMappingHelper.cs class DeezerMappingHelper (line 9) | public static class DeezerMappingHelper method MapAlbumFromDeezerAlbum (line 16) | public static Album MapAlbumFromDeezerAlbum(DeezerAlbum dAlbum, Artist... method MapArtistFromDeezerArtist (line 94) | public static Artist MapArtistFromDeezerArtist(DeezerArtist dArtist) method GetArtistImages (line 127) | private static List GetArtistImages(DeezerArtist artist) method MapTrack (line 138) | public static Track MapTrack(DeezerTrack dTrack, Album album, AlbumRel... method MergeAlbums (line 158) | public static Album MergeAlbums(Album existingAlbum, Album mappedAlbum) FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Deezer/DeezerMetadataProxy.cs class DeezerMetadataProxy (line 10) | [Proxy(ProxyMode.Public)] method DeezerMetadataProxy (line 24) | public DeezerMetadataProxy(IDeezerProxy deezerProxy, Logger logger) method SearchForNewAlbum (line 30) | public List SearchForNewAlbum(string title, string artist) => _... method SearchForNewArtist (line 32) | public List SearchForNewArtist(string title) => _deezerProxy.S... method SearchForNewEntity (line 34) | public List SearchForNewEntity(string title) => _deezerProxy.S... method GetAlbumInfo (line 36) | public Tuple> GetAlbumInfo(string ... method GetArtistInfo (line 38) | public Artist GetArtistInfo(string lidarrId, int metadataProfileId) =>... method GetChangedAlbums (line 40) | public HashSet GetChangedAlbums(DateTime startTime) method GetChangedArtists (line 46) | public HashSet GetChangedArtists(DateTime startTime) method SearchForNewAlbumByRecordingIds (line 52) | public List SearchForNewAlbumByRecordingIds(List record... method CanHandleSearch (line 58) | public MetadataSupportLevel CanHandleSearch(string? albumTitle, string... method CanHandleId (line 69) | public MetadataSupportLevel CanHandleId(string id) method CanHandleIRecordingIds (line 77) | public MetadataSupportLevel CanHandleIRecordingIds(params string[] rec... method CanHandleChanged (line 82) | public MetadataSupportLevel CanHandleChanged() method SupportsLink (line 87) | public string? SupportsLink(List links) method DeezerRegex (line 105) | [GeneratedRegex(@"deezer\.com\/(?:album|artist|track)\/(\d+)", RegexOp... method FormatRegex (line 108) | [GeneratedRegex(@"^\s*\w+:\s*\w+", RegexOptions.Compiled)] FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Deezer/DeezerMetadataProxySettings.cs class DeezerMetadataProxySettingsValidator (line 10) | public class DeezerMetadataProxySettingsValidator : AbstractValidator Instance = this; method Validate (line 69) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Deezer/DeezerProxy.cs class DeezerProxy (line 10) | public class DeezerProxy : IDeezerProxy method DeezerProxy (line 20) | public DeezerProxy(Logger logger, IHttpClient httpClient, IArtistServi... method UpdateCache (line 30) | private void UpdateCache(DeezerMetadataProxySettings settings) method CachedSearchAsync (line 36) | private async Task> CachedSearchAsync(... method GetArtistAlbumsAsync (line 52) | public async Task> GetArtistAlbumsAsync(DeezerMetadataProx... method SearchNewAlbum (line 74) | public List SearchNewAlbum(DeezerMetadataProxySettings settings... method SearchNewArtist (line 98) | public List SearchNewArtist(DeezerMetadataProxySettings settin... method SearchNewEntity (line 109) | public List SearchNewEntity(DeezerMetadataProxySettings settin... method GetAlbumInfoAsync (line 164) | public async Task>> GetAlbum... method EnsureAllTracksAsync (line 192) | private async Task EnsureAllTracksAsync(DeezerAlbum album... method GetArtistInfoAsync (line 205) | public async Task GetArtistInfoAsync(DeezerMetadataProxySettin... method IsDeezerIdQuery (line 228) | public static bool IsDeezerIdQuery(string? query) => query?.StartsWith... method SanitizeToUnicode (line 230) | private static string SanitizeToUnicode(string input) => string.IsNull... method RemoveIdentifier (line 232) | private static string RemoveIdentifier(string input) => input.EndsWith... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Deezer/DeezerRecords.cs type ExplicitContent (line 6) | public enum ExplicitContent type DeezerAlbum (line 18) | public record DeezerAlbum( type DeezerFallbackAlbum (line 50) | public record DeezerFallbackAlbum( type DeezerArtist (line 55) | public record DeezerArtist( type DeezerChart (line 72) | public record DeezerChart( type DeezerEditorial (line 82) | public record DeezerEditorial( type DeezerEpisode (line 92) | public record DeezerEpisode( type DeezerGenresWrapper (line 110) | public record DeezerGenresWrapper( type DeezerGenre (line 114) | public record DeezerGenre( type DeezerPlaylist (line 121) | public record DeezerPlaylist( type DeezerOptions (line 144) | public record DeezerOptions( type DeezerPodcast (line 159) | public record DeezerPodcast( type DeezerRadio (line 174) | public record DeezerRadio( type DeezerTrackWrapper (line 188) | public record DeezerTrackWrapper( type DeezerTrack (line 192) | public record DeezerTrack( type DeezerUser (line 223) | public record DeezerUser( type DeezerSearchParameter (line 252) | public record DeezerSearchParameter( type DeezerSearchItem (line 284) | public record DeezerSearchItem( FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Deezer/IDeezerProxy.cs type IDeezerProxy (line 5) | public interface IDeezerProxy method SearchNewAlbum (line 7) | List SearchNewAlbum(DeezerMetadataProxySettings settings, strin... method SearchNewArtist (line 9) | List SearchNewArtist(DeezerMetadataProxySettings settings, str... method SearchNewEntity (line 11) | List SearchNewEntity(DeezerMetadataProxySettings settings, str... method GetAlbumInfoAsync (line 13) | Task>> GetAlbumInfoAsync(Dee... method GetArtistInfoAsync (line 15) | Task GetArtistInfoAsync(DeezerMetadataProxySettings settings, ... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Discogs/DiscogsAPIService.cs class DiscogsApiService (line 11) | public class DiscogsApiService method DiscogsApiService (line 31) | public DiscogsApiService(IHttpClient httpClient, string userAgent) method GetReleaseAsync (line 39) | public async Task GetReleaseAsync(int releaseId, stri... method GetMasterReleaseAsync (line 48) | public async Task GetMasterReleaseAsync(int mas... method GetMasterVersionsAsync (line 55) | public async Task> GetMasterVersions... method GetArtistAsync (line 68) | public async Task GetArtistAsync(int artistId) method GetArtistReleasesAsync (line 74) | public async Task> GetArtistReleasesAsync(i... method GetLabelAsync (line 82) | public async Task GetLabelAsync(int labelId) method GetLabelReleasesAsync (line 88) | public async Task> GetLabelReleasesAsync(int... method SearchAsync (line 93) | public async Task> SearchAsync(DiscogsSearchPa... method GetReleaseStatsAsync (line 100) | public async Task GetReleaseStatsAsync(int releaseId) method GetCommunityRatingAsync (line 106) | public async Task GetCommunityRatingAsync(int releaseId) method BuildRequest (line 112) | private HttpRequestBuilder BuildRequest(string? endpoint) method ExecuteRequestWithRetryAsync (line 125) | private async Task ExecuteRequestWithRetryAsync(HttpReque... method WaitForRateLimit (line 175) | private async Task WaitForRateLimit() method UpdateRateLimitTracking (line 191) | private void UpdateRateLimitTracking(HttpResponse response) method FetchPaginatedResultsAsync (line 210) | private async Task?> FetchPaginatedResultsAsync(HttpRequest... method AddSearchParams (line 246) | private static void AddSearchParams(HttpRequestBuilder requestBuilder,... method HandleErrorResponse (line 252) | private void HandleErrorResponse(HttpResponse response) method AddQueryParamIfNotNull (line 267) | private static HttpRequestBuilder AddQueryParamIfNotNull(HttpRequestBu... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Discogs/DiscogsMappingHelper.cs class DiscogsMappingHelper (line 11) | public static partial class DiscogsMappingHelper method MapFormat (line 40) | private static string MapFormat(string discogsFormat) method ParseReleaseDate (line 50) | public static DateTime? ParseReleaseDate(DiscogsRelease release) method ParseReleaseDate (line 60) | public static DateTime? ParseReleaseDate(int? year) => year > 0 ? new ... method DetermineMedia (line 65) | private static List DetermineMedia(List? trackli... method ParseTrackPosition (line 91) | private static DiscogsTrackPosition ParseTrackPosition(string? positio... method ParseDuration (line 151) | public static int ParseDuration(string duration) method MapImage (line 166) | public static MediaCover? MapImage(DiscogsImage img, bool isArtist) =>... method MapCoverType (line 176) | public static MediaCoverTypes MapCoverType(string? type, bool isArtist) method MapAlbumTypes (line 200) | public static void MapAlbumTypes(DiscogsRelease release, Album album) method MapAlbumTypes (line 225) | public static void MapAlbumTypes(DiscogsArtistRelease release, Album a... method InferTypeFromPhysicalFormat (line 241) | private static string? InferTypeFromPhysicalFormat(List? phys... method InferTypeFromMetadata (line 266) | private static string InferTypeFromMetadata(int trackCount, int totalD... method MapAlbumFromMasterRelease (line 291) | public static Album MapAlbumFromMasterRelease(DiscogsMasterRelease mas... method MapAlbumFromRelease (line 336) | public static Album MapAlbumFromRelease(DiscogsRelease release) method MapTrack (line 381) | public static Track MapTrack(DiscogsTrack t, DiscogsMasterRelease mast... method MapTrack (line 409) | public static Track MapTrack(DiscogsTrack t, DiscogsRelease release, A... method MapAlbumFromArtistRelease (line 437) | public static Album MapAlbumFromArtistRelease(DiscogsArtistRelease rel... method MapArtistFromDiscogsArtist (line 474) | public static Artist MapArtistFromDiscogsArtist(DiscogsArtist discogsA... method MergeAlbums (line 494) | public static Album MergeAlbums(Album existingAlbum, Album mappedAlbum) method MapTracks (line 506) | public static List MapTracks(object releaseForTracks, Album alb... method FilterTracklist (line 523) | private static List FilterTracklist(List? ... method BuildArtistOverview (line 531) | private static string BuildArtistOverview(DiscogsArtist discogsArtist) method MapArtistFromSearchItem (line 556) | public static Artist MapArtistFromSearchItem(DiscogsSearchItem searchI... method MapDiscogsMember (line 570) | private static Member MapDiscogsMember(DiscogsMember discogsMember) =>... method ComputeCommunityRating (line 572) | public static Ratings ComputeCommunityRating(DiscogsCommunityInfo? com... method PositionPattern (line 597) | [GeneratedRegex(@"^(?:[A-Za-z]+(?=\d))?(?[A-Za-z]+)?(?... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Discogs/DiscogsMetadataProxy.cs class DiscogsMetadataProxy (line 10) | [Proxy(ProxyMode.Public)] method DiscogsMetadataProxy (line 24) | public DiscogsMetadataProxy(DiscogsProxy discogsProxy, Logger logger) method SearchForNewAlbum (line 30) | public List SearchForNewAlbum(string title, string artist) => _... method SearchForNewArtist (line 32) | public List SearchForNewArtist(string title) => _discogsProxy.... method SearchForNewEntity (line 34) | public List SearchForNewEntity(string title) => _discogsProxy.... method GetAlbumInfo (line 36) | public Tuple> GetAlbumInfo(string ... method GetArtistInfo (line 38) | public Artist GetArtistInfo(string lidarrId, int metadataProfileId) =>... method GetChangedAlbums (line 40) | public HashSet GetChangedAlbums(DateTime startTime) method GetChangedArtists (line 46) | public HashSet GetChangedArtists(DateTime startTime) method SearchForNewAlbumByRecordingIds (line 52) | public List SearchForNewAlbumByRecordingIds(List record... method CanHandleSearch (line 58) | public MetadataSupportLevel CanHandleSearch(string? albumTitle, string... method CanHandleId (line 69) | public MetadataSupportLevel CanHandleId(string id) method CanHandleIRecordingIds (line 76) | public MetadataSupportLevel CanHandleIRecordingIds(params string[] rec... method CanHandleChanged (line 79) | public MetadataSupportLevel CanHandleChanged() => MetadataSupportLevel... method SupportsLink (line 81) | public string? SupportsLink(List links) method FormatRegex (line 98) | [GeneratedRegex(@"^\s*\w+:\s*\w+", RegexOptions.Compiled)] method DiscogsRegex (line 101) | [GeneratedRegex(@"discogs\.com\/(?:artist|release|master)\/(\d+)", Reg... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Discogs/DiscogsMetadataProxySettings.cs class DiscogsMetadataProxySettingsValidator (line 10) | public class DiscogsMetadataProxySettingsValidator : AbstractValidator Instance = this; method Validate (line 74) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Discogs/DiscogsProxy.cs class DiscogsProxy (line 11) | public class DiscogsProxy : IDiscogsProxy method DiscogsProxy (line 22) | public DiscogsProxy(Logger logger, IPluginSettings pluginSettings, IHt... method CachedSearchAsync (line 33) | private async Task> CachedSearchAsync(DiscogsMetadataProxyS... method UpdateCache (line 49) | private void UpdateCache(DiscogsMetadataProxySettings settings) method SearchNewAlbum (line 55) | public List SearchNewAlbum(DiscogsMetadataProxySettings setting... method SearchNewArtist (line 78) | public List SearchNewArtist(DiscogsMetadataProxySettings setti... method SearchNewEntity (line 84) | public List SearchNewEntity(DiscogsMetadataProxySettings setti... method GetAlbumInfoAsync (line 156) | public async Task>> GetAlbum... method GetMasterReleaseDetailsAsync (line 197) | private async Task<(Album, object)> GetMasterReleaseDetailsAsync(strin... method GetReleaseDetailsAsync (line 205) | private async Task<(Album, object)> GetReleaseDetailsAsync(string id, ... method GetPrimaryArtistAsync (line 213) | private async Task GetPrimaryArtistAsync(string id, bo... method GetArtistInfoAsync (line 224) | public async Task GetArtistInfoAsync(DiscogsMetadataProxySetti... method FetchAlbumsForArtistAsync (line 248) | private async Task> FetchAlbumsForArtistAsync(DiscogsMetad... method IsDiscogsidQuery (line 275) | public bool IsDiscogsidQuery(string? query) => query?.StartsWith("disc... method SanitizeToUnicode (line 277) | private static string SanitizeToUnicode(string input) => string.IsNull... method RemoveIdentifier (line 279) | private static string RemoveIdentifier(string input) => input.EndsWith... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Discogs/DiscogsRecords.cs type DiscogsArtist (line 6) | public record DiscogsArtist( type DiscogsArtistRelease (line 23) | public record DiscogsArtistRelease( type DiscogsCommunityInfo (line 38) | public record DiscogsCommunityInfo( type DiscogsCompany (line 48) | public record DiscogsCompany( type DiscogsContributor (line 57) | public record DiscogsContributor( type DiscogsFormat (line 62) | public record DiscogsFormat( type DiscogsImage (line 68) | public record DiscogsImage( type DiscogsIdentifier (line 77) | public record DiscogsIdentifier( type DiscogsLabel (line 82) | public record DiscogsLabel( type DiscogsLabelRelease (line 98) | public record DiscogsLabelRelease( type DiscogsMasterRelease (line 110) | public record DiscogsMasterRelease( type DiscogsMasterReleaseVersion (line 130) | public record DiscogsMasterReleaseVersion( type DiscogsMember (line 145) | public record DiscogsMember( type DiscogsRating (line 152) | public record DiscogsRating( type DiscogsRelease (line 157) | public record DiscogsRelease( type DiscogsSearchItem (line 193) | public record DiscogsSearchItem( type DiscogsSeries (line 210) | public record DiscogsSeries( type DiscogsStats (line 220) | public record DiscogsStats( type DiscogsUserStats (line 225) | public record DiscogsUserStats( type DiscogsCommunityStats (line 230) | public record DiscogsCommunityStats( type DiscogsSublabel (line 235) | public record DiscogsSublabel( type DiscogsTrack (line 241) | public record DiscogsTrack( type DiscogsTrackPosition (line 248) | public record DiscogsTrackPosition( type DiscogsVideo (line 253) | public record DiscogsVideo( type DiscogsSearchParameter (line 261) | public record DiscogsSearchParameter( FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Discogs/IDiscogsProxy.cs type IDiscogsProxy (line 5) | public interface IDiscogsProxy method SearchNewAlbum (line 7) | List SearchNewAlbum(DiscogsMetadataProxySettings settings, stri... method SearchNewArtist (line 9) | List SearchNewArtist(DiscogsMetadataProxySettings settings, st... method SearchNewEntity (line 11) | List SearchNewEntity(DiscogsMetadataProxySettings settings, st... method GetAlbumInfoAsync (line 13) | Task>> GetAlbumInfoAsync(Dis... method GetArtistInfoAsync (line 15) | Task GetArtistInfoAsync(DiscogsMetadataProxySettings settings,... method IsDiscogsidQuery (line 17) | bool IsDiscogsidQuery(string? artistName); FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/ILastfmProxy.cs type ILastfmProxy (line 5) | public interface ILastfmProxy method SearchNewAlbum (line 7) | List SearchNewAlbum(LastfmMetadataProxySettings settings, strin... method SearchNewArtist (line 9) | List SearchNewArtist(LastfmMetadataProxySettings settings, str... method SearchNewEntity (line 11) | List SearchNewEntity(LastfmMetadataProxySettings settings, str... method GetAlbumInfoAsync (line 13) | Task>> GetAlbumInfoAsync(Las... method GetArtistInfoAsync (line 15) | Task GetArtistInfoAsync(LastfmMetadataProxySettings settings, ... method IsLastfmIdQuery (line 17) | bool IsLastfmIdQuery(string? query); FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/LastfmApiService.cs class LastfmApiService (line 11) | public class LastfmApiService method LastfmApiService (line 27) | public LastfmApiService(IHttpClient httpClient, string userAgent) method GetArtistInfoAsync (line 38) | public async Task GetArtistInfoAsync(string artistName) method GetArtistInfoByMbidAsync (line 61) | public async Task GetArtistInfoByMbidAsync(string mbid) method SearchArtistsAsync (line 84) | public async Task?> SearchArtistsAsync(string query... method GetTopAlbumsAsync (line 90) | public async Task?> GetTopAlbumsAsync(string? art... method GetAlbumInfoAsync (line 114) | public async Task GetAlbumInfoAsync(string artistName, s... method GetAlbumInfoByMbidAsync (line 141) | public async Task GetAlbumInfoByMbidAsync(string mbid) method SearchAlbumsAsync (line 164) | public async Task?> SearchAlbumsAsync(string query, ... method GetTrackInfoAsync (line 170) | public async Task GetTrackInfoAsync(string artistName, s... method GetTrackInfoByMbidAsync (line 197) | public async Task GetTrackInfoByMbidAsync(string mbid) method SearchTracksAsync (line 220) | public async Task?> SearchTracksAsync(string query, ... method FetchPaginatedResultsAsync (line 227) | private async Task?> FetchPaginatedResultsAsync(HttpRequest... method BuildRequest (line 375) | private HttpRequestBuilder BuildRequest(string method, Dictionary ExecuteRequestWithRetryAsync(HttpReque... method HandleErrorResponse (line 449) | private void HandleErrorResponse(HttpResponse response) FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/LastfmImageScraper.cs class LastfmImageScraper (line 16) | public partial class LastfmImageScraper method LastfmImageScraper (line 24) | public LastfmImageScraper(IHttpClient httpClient, string userAgent, Ca... method GetArtistImagesAsync (line 38) | public async Task> GetArtistImagesAsync(string artistName) method FetchArtistImagesAsync (line 75) | private async Task> FetchArtistImagesAsync(string artistN... method ExtractImageUrls (line 120) | private List ExtractImageUrls(string html) method UlContainerRegex (line 155) | [GeneratedRegex(@"(.+?)", RegexOptions... method ImageIdRegex (line 158) | [GeneratedRegex(@"href=""[^""]*\/\+images\/([0-9a-f]{32})""", RegexOpt... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/LastfmMappingHelper.cs class LastfmMappingHelper (line 9) | public static class LastfmMappingHelper method MapAlbumFromLastfmAlbum (line 16) | public static Album MapAlbumFromLastfmAlbum(LastfmAlbum lastfmAlbum, A... method MapArtistFromLastfmArtist (line 133) | public static Artist MapArtistFromLastfmArtist(LastfmArtist lastfmArtist) method MapAlbumFromLastfmTopAlbum (line 189) | public static Album MapAlbumFromLastfmTopAlbum(LastfmTopAlbum topAlbum... method MapTrack (line 228) | public static Track MapTrack(LastfmTrack lastfmTrack, Album album, Alb... method MergeAlbums (line 251) | public static Album MergeAlbums(Album existingAlbum, Album mappedAlbum) method MapImages (line 275) | private static List MapImages(List? images, s... method AddMusicBrainzLink (line 290) | private static void AddMusicBrainzLink(List links, string? mbid... method MapCoverType (line 305) | private static MediaCoverTypes MapCoverType(string size, bool isArtist) method SanitizeName (line 332) | private static string SanitizeName(string name) method ComputeLastfmRating (line 343) | public static Ratings ComputeLastfmRating(string listenersStr, int pla... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/LastfmMetadataProxy.cs class LastfmMetadataProxy (line 10) | [Proxy(ProxyMode.Public)] method SearchForNewAlbum (line 24) | public List SearchForNewAlbum(string title, string artist) => _... method SearchForNewArtist (line 26) | public List SearchForNewArtist(string title) => _lastfmProxy.S... method SearchForNewEntity (line 28) | public List SearchForNewEntity(string title) => _lastfmProxy.S... method GetAlbumInfo (line 30) | public Tuple> GetAlbumInfo(string ... method GetArtistInfo (line 32) | public Artist GetArtistInfo(string lidarrId, int metadataProfileId) =>... method GetChangedAlbums (line 34) | public HashSet GetChangedAlbums(DateTime startTime) method GetChangedArtists (line 40) | public HashSet GetChangedArtists(DateTime startTime) method SearchForNewAlbumByRecordingIds (line 46) | public List SearchForNewAlbumByRecordingIds(List record... method CanHandleSearch (line 52) | public MetadataSupportLevel CanHandleSearch(string? albumTitle, string... method CanHandleId (line 63) | public MetadataSupportLevel CanHandleId(string id) method CanHandleIRecordingIds (line 71) | public MetadataSupportLevel CanHandleIRecordingIds(params string[] rec... method CanHandleChanged (line 73) | public MetadataSupportLevel CanHandleChanged() => MetadataSupportLevel... method SupportsLink (line 75) | public string? SupportsLink(List links) method FormatRegex (line 96) | [GeneratedRegex(@"^\s*\w+:\s*\w+", RegexOptions.Compiled)] method LastfmRegex (line 99) | [GeneratedRegex(@"last\.fm\/music\/([^\/]+)", RegexOptions.IgnoreCase ... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/LastfmMetadataProxySettings.cs class LastfmMetadataProxySettingsValidator (line 10) | public class LastfmMetadataProxySettingsValidator : AbstractValidator Instance = this; method Validate (line 117) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/LastfmProxy.cs class LastfmProxy (line 12) | public class LastfmProxy : ILastfmProxy method LastfmProxy (line 22) | public LastfmProxy(Logger logger, IHttpClient httpClient, IArtistServi... method UpdateCache (line 32) | private void UpdateCache(LastfmMetadataProxySettings settings) method SearchNewAlbum (line 38) | public List SearchNewAlbum(LastfmMetadataProxySettings settings... method SearchNewArtist (line 76) | public List SearchNewArtist(LastfmMetadataProxySettings settin... method SearchNewEntity (line 104) | public List SearchNewEntity(LastfmMetadataProxySettings settin... method EnhanceArtistImagesAsync (line 197) | private async Task EnhanceArtistImagesAsync(LastfmMetadataProxySetting... method GetAlbumInfoAsync (line 228) | public async Task>> GetAlbum... method GetArtistInfoAsync (line 299) | public async Task GetArtistInfoAsync(LastfmMetadataProxySettin... method FetchAlbumsForArtistAsync (line 360) | private async Task FetchAlbumsForArtistAsync(LastfmMetadataProxySettin... method GetApiService (line 407) | private LastfmApiService GetApiService(LastfmMetadataProxySettings set... method IsLastfmIdQuery (line 414) | public bool IsLastfmIdQuery(string? query) => query?.StartsWith("lastf... method SanitizeToUnicode (line 417) | private static string SanitizeToUnicode(string input) => string.IsNull... method RemoveIdentifier (line 419) | private static string RemoveIdentifier(string input) => input.EndsWith... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/LastfmRecordConverter.cs class LastfmTagsConverter (line 6) | public class LastfmTagsConverter : JsonConverter method Read (line 8) | public override LastfmTags? Read(ref Utf8JsonReader reader, Type typeT... method Write (line 18) | public override void Write(Utf8JsonWriter writer, LastfmTags? value, J... class LastfmNumberConverter (line 27) | public class LastfmNumberConverter : JsonConverter method Read (line 29) | public override int Read(ref Utf8JsonReader reader, Type typeToConvert... method Write (line 48) | public override void Write(Utf8JsonWriter writer, int value, JsonSeria... class LastfmArtistConverter (line 51) | public class LastfmArtistConverter : JsonConverter method Read (line 53) | public override string Read(ref Utf8JsonReader reader, Type typeToConv... method Write (line 69) | public override void Write(Utf8JsonWriter writer, string value, JsonSe... class LastfmTracksConverter (line 73) | public class LastfmTracksConverter : JsonConverter method Read (line 75) | public override LastfmTracks Read(ref Utf8JsonReader reader, Type type... method Write (line 124) | public override void Write(Utf8JsonWriter writer, LastfmTracks value, ... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Lastfm/LastfmRecords.cs type LastfmErrorResponse (line 6) | public record LastfmErrorResponse( type LastfmImage (line 11) | public record LastfmImage( type LastfmStats (line 16) | public record LastfmStats( type LastfmTag (line 21) | public record LastfmTag( type LastfmTags (line 26) | public record LastfmTags( type LastfmBio (line 30) | public record LastfmBio( type LastfmWiki (line 36) | public record LastfmWiki( type LastfmStreamable (line 42) | public record LastfmStreamable( type LastfmArtist (line 47) | public record LastfmArtist( type LastfmSimilar (line 60) | public record LastfmSimilar( type LastfmArtistInfoResponse (line 64) | public record LastfmArtistInfoResponse( type LastfmTrackArtist (line 68) | public record LastfmTrackArtist( type LastfmTrackAlbum (line 74) | public record LastfmTrackAlbum( type LastfmTrack (line 82) | public record LastfmTrack( type LastfmTracks (line 96) | public record LastfmTracks( type LastfmTrackMatches (line 100) | public record LastfmTrackMatches( type LastfmTrackInfoResponse (line 104) | public record LastfmTrackInfoResponse( type LastfmAlbum (line 108) | public record LastfmAlbum( type LastfmAlbumInfoResponse (line 121) | public record LastfmAlbumInfoResponse( type LastfmSearchAttr (line 125) | public record LastfmSearchAttr( type LastfmTopAlbum (line 132) | public record LastfmTopAlbum( type LastfmSearchParameter (line 140) | public record LastfmSearchParameter( FILE: Tubifarry/Metadata/Proxy/MetadataProvider/MetadataProviderWrapper.cs class MetadataProviderWrapper (line 7) | public class MetadataProviderWrapper(Lazy proxyService) :... method GetArtistInfo (line 10) | public Artist GetArtistInfo(string lidarrId, int metadataProfileId) => method GetChangedArtists (line 16) | public HashSet GetChangedArtists(DateTime startTime) => method GetAlbumInfo (line 23) | public Tuple> GetAlbumInfo(string ... method GetChangedAlbums (line 29) | public HashSet GetChangedAlbums(DateTime startTime) => method SearchForNewArtist (line 36) | public List SearchForNewArtist(string title) => method SearchForNewAlbum (line 43) | public List SearchForNewAlbum(string title, string artist) => method SearchForNewAlbumByRecordingIds (line 49) | public List SearchForNewAlbumByRecordingIds(List record... method SearchForNewEntity (line 56) | public List SearchForNewEntity(string title) => class MetadataRequestBuilderWrapper (line 63) | public class MetadataRequestBuilderWrapper(Lazy proxyServ... method GetRequestBuilder (line 65) | public IHttpRequestBuilderFactory GetRequestBuilder() => FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Mixed/AdaptiveThresholdConfig.cs class AdaptiveThresholdConfig (line 3) | public class AdaptiveThresholdConfig FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Mixed/AdaptiveThresholdManager.cs type IProvideAdaptiveThreshold (line 5) | public interface IProvideAdaptiveThreshold method LoadConfig (line 7) | public void LoadConfig(string? configPath); method GetDynamicThreshold (line 9) | public int GetDynamicThreshold(string proxyName, int aggregatedCount); method UpdateMetrics (line 11) | public void UpdateMetrics(string proxyName, double responseTimeMs, int... class AdaptiveThresholdManager (line 14) | public class AdaptiveThresholdManager : IProvideAdaptiveThreshold, IDisp... method LoadConfig (line 26) | public void LoadConfig(string? configPath) method SaveConfig (line 44) | private void SaveConfig() method DecayMetrics (line 59) | private void DecayMetrics(ProxyMetrics metrics) method GetDynamicThreshold (line 79) | public int GetDynamicThreshold(string proxyName, int aggregatedCount) method UpdateMetrics (line 106) | public void UpdateMetrics(string proxyName, double responseTimeMs, int... method Dispose (line 142) | public void Dispose() method Dispose (line 148) | protected virtual void Dispose(bool disposing) FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Mixed/ISupportMetadataMixing.cs type MetadataSupportLevel (line 5) | public enum MetadataSupportLevel type ISupportMetadataMixing (line 8) | public interface ISupportMetadataMixing : IProxy method CanHandleSearch (line 10) | MetadataSupportLevel CanHandleSearch(string? albumTitle = null, string... method CanHandleIRecordingIds (line 12) | MetadataSupportLevel CanHandleIRecordingIds(params string[] recordingI... method CanHandleChanged (line 14) | MetadataSupportLevel CanHandleChanged(); method CanHandleId (line 16) | MetadataSupportLevel CanHandleId(string albumId); method SupportsLink (line 18) | string? SupportsLink(List links); FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Mixed/MixedMetadataProxy.cs class MixedMetadataProxy (line 11) | [Proxy(ProxyMode.Public)] method MixedMetadataProxy (line 30) | public MixedMetadataProxy(Lazy proxyService, IProvideAd... method GetAlbumInfo (line 40) | public Tuple> GetAlbumInfo(string id) method GetChangedAlbums (line 53) | public HashSet GetChangedAlbums(DateTime startTime) => method GetArtistInfo (line 56) | public Artist GetArtistInfo(string lidarrId, int metadataProfileId) method GetChangedArtists (line 69) | public HashSet GetChangedArtists(DateTime startTime) => method SearchForNewArtist (line 72) | public List SearchForNewArtist(string artistName) => method SearchForNewAlbum (line 82) | public List SearchForNewAlbum(string albumTitle, string artistN... method SearchForNewAlbumByRecordingIds (line 92) | public List SearchForNewAlbumByRecordingIds(List record... method SearchForNewEntity (line 102) | public List SearchForNewEntity(string albumTitle) => method ExecuteArtistSearch (line 112) | private List ExecuteArtistSearch(string lidarrId, int metadata... method GetRequestBuilder (line 122) | public IHttpRequestBuilderFactory GetRequestBuilder() method InitializeAdaptiveThreshold (line 134) | private void InitializeAdaptiveThreshold() method ExecuteSingleProxyArtistSearch (line 140) | private List ExecuteSingleProxyArtistSearch(IProxy proxy, stri... method TryGetArtistFromProxy (line 156) | private Artist? TryGetArtistFromProxy(IProxy proxy, ISupportMetadataMi... method DetermineSupportLevel (line 185) | private MetadataSupportLevel DetermineSupportLevel(ISupportMetadataMix... method BuildProxyAlbumMap (line 200) | private Dictionary> BuildProxyAlbumMap(Artist? bas... method FindProxyForAlbum (line 223) | private IProxy? FindProxyForAlbum(string foreignAlbumId) => method MergeAllArtistData (line 229) | private Artist MergeAllArtistData(List newArtists, Artist? bas... method AddAlbumsFromUnusedProxies (line 246) | private void AddAlbumsFromUnusedProxies(Artist mergedArtist, Dictionar... method MergeAdditionalArtists (line 255) | private static void MergeAdditionalArtists(Artist mergedArtist, List GetCandidateProxies(Func ... method GetChanged (line 288) | private HashSet GetChanged(Func> func) method CalculateThreshold (line 310) | internal int CalculateThreshold(string proxyName, int aggregatedCount) => method GetPriority (line 317) | private static int GetPriority(string proxyName) method GetThreshold (line 330) | private static int GetThreshold(int aggregatedCount) => aggregatedCoun... method SupportsInterface (line 337) | private static bool SupportsInterface(IProxy proxy, Type interfaceType... method HasValidAlbumData (line 341) | private static bool HasValidAlbumData(Artist? artist) => method IsValidQuery (line 344) | private static bool IsValidQuery(params string[] queries) => method ContainsAlbum (line 349) | private static bool ContainsAlbum(List albums, Album newAlbum) => method ContainsArtist (line 352) | private static bool ContainsArtist(List artists, Artist newArt... method ContainsArtistInfo (line 355) | private static bool ContainsArtistInfo(List artists, Artist ne... method ContainsEntity (line 365) | private static bool ContainsEntity(List entities, object newEn... method MergeArtists (line 372) | private static Artist MergeArtists(Artist baseArtist, Artist newArtist) method EnsureAlbumsCollection (line 384) | private static void EnsureAlbumsCollection(Artist artist) => method MergeLinks (line 387) | private static void MergeLinks(Artist baseArtist, Artist newArtist) method MergeAlbums (line 399) | private static void MergeAlbums(Artist baseArtist, Artist newArtist) method AddOldAlbums (line 407) | private static Artist AddOldAlbums(Artist artist, List oldAlbums) FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Mixed/MixedMetadataProxySettings.cs class MixedMetadataProxySettingsValidator (line 10) | public class MixedMetadataProxySettingsValidator : AbstractValidator new(Validator.Validate(t... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Mixed/ProxyDecisionHandler.cs class ProxyDecisionHandler (line 7) | public class ProxyDecisionHandler method ProxyDecisionHandler (line 17) | public ProxyDecisionHandler(MixedMetadataProxy mixedProxy, Func ExecuteSearch() type ProxyCandidate (line 73) | internal record ProxyCandidate FILE: Tubifarry/Metadata/Proxy/MetadataProvider/Mixed/ProxyMetrics.cs class ProxyMetrics (line 3) | public class ProxyMetrics FILE: Tubifarry/Metadata/Proxy/MetadataProvider/SkyHook/SkyHookMetdadataProxy.cs class SkyHookMetadataProxy (line 16) | [Proxy(ProxyMode.Public)] method SkyHookMetadataProxy (line 31) | public SkyHookMetadataProxy( method GetArtistInfo (line 47) | public Artist GetArtistInfo(string lidarrId, int metadataProfileId) => method GetChangedArtists (line 50) | public HashSet GetChangedArtists(DateTime startTime) => method GetAlbumInfo (line 53) | public Tuple> GetAlbumInfo(string ... method GetChangedAlbums (line 56) | public HashSet GetChangedAlbums(DateTime startTime) => method SearchForNewArtist (line 59) | public List SearchForNewArtist(string title) => method SearchForNewAlbum (line 62) | public List SearchForNewAlbum(string title, string artist) => method SearchForNewAlbumByRecordingIds (line 65) | public List SearchForNewAlbumByRecordingIds(List record... method SearchForNewEntity (line 68) | public List SearchForNewEntity(string title) => method ExtractLidarrId (line 71) | private static string ExtractLidarrId(string title) method GetRequestBuilder (line 78) | public IHttpRequestBuilderFactory GetRequestBuilder() method CanHandleSearch (line 91) | public MetadataSupportLevel CanHandleSearch(string? albumTitle = null,... method CanHandleIRecordingIds (line 102) | public MetadataSupportLevel CanHandleIRecordingIds(params string[] rec... method CanHandleChanged (line 105) | public MetadataSupportLevel CanHandleChanged() => method CanHandleId (line 108) | public MetadataSupportLevel CanHandleId(string id) method SupportsLink (line 126) | public string? SupportsLink(List links) method MusicBrainzRegex (line 145) | [GeneratedRegex(@"\b(?:lidarr:|lidarrid:|mbid:|musicbrainz\.org/(?:art... FILE: Tubifarry/Metadata/Proxy/MetadataProvider/SkyHook/SykHookMetadataProxySettings.cs class SykHookMetadataProxySettingsValidator (line 9) | public class SykHookMetadataProxySettingsValidator : AbstractValidator new(Validator.Validate(t... FILE: Tubifarry/Metadata/Proxy/MixedProxyBase.cs class MixedProxyBase (line 8) | public abstract class MixedProxyBase : ProxyBase, ... method MixedProxyBase (line 15) | protected MixedProxyBase(Lazy proxyService, Logger logger) method InvokeProxyMethod (line 22) | protected T InvokeProxyMethod(IProxy proxy, string methodName, para... method InvokeProxyMethodVoid (line 25) | protected void InvokeProxyMethodVoid(IProxy proxy, string methodName, ... method InvokeProxyMethod (line 28) | protected T InvokeProxyMethod(Type interfaceType, string methodName... method InvokeProxyMethodVoid (line 31) | protected void InvokeProxyMethodVoid(Type interfaceType, string method... class InternalProxyWrapper (line 34) | private class InternalProxyWrapper(Lazy proxyService) :... method InvokeProxyMethodDirect (line 38) | public T InvokeProxyMethodDirect(IProxy proxy, string methodName,... method InvokeProxyMethodVoidDirect (line 44) | public void InvokeProxyMethodVoidDirect(IProxy proxy, string methodN... method InvokeProxyMethod (line 50) | public new T InvokeProxyMethod(Type interfaceType, string methodN... method InvokeProxyMethodVoid (line 53) | public new void InvokeProxyMethodVoid(Type interfaceType, string met... FILE: Tubifarry/Metadata/Proxy/ProxyAttribute.cs class ProxyAttribute (line 5) | [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] class ProxyForAttribute (line 11) | [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] class ProxyAttributeExtensions (line 18) | public static class ProxyAttributeExtensions method ValidateProxyImplementation (line 20) | public static void ValidateProxyImplementation(this Type proxyType) method GetDeclaredInterfaces (line 34) | public static IEnumerable<(Type OriginalInterface, int Priority)> GetD... method GetProxyMode (line 38) | public static ProxyMode GetProxyMode(this IProxy proxy) => method IsProxyForInterface (line 41) | public static bool IsProxyForInterface(this Type proxyType, Type origi... method GetPriorityForInterface (line 44) | public static int GetPriorityForInterface(this Type proxyType, Type or... method HasMatchingMethod (line 49) | public static bool HasMatchingMethod(this Type proxyType, MethodInfo i... method GetMissingMethodsForInterface (line 55) | private static IEnumerable GetMissingMethodsForInterface(Type ... method IsMethodMatch (line 60) | private static bool IsMethodMatch(MethodInfo proxyMethod, MethodInfo i... method IsGenericMethodMatch (line 66) | private static bool IsGenericMethodMatch(MethodInfo proxyMethod, Metho... method AreGenericParametersMatching (line 85) | private static bool AreGenericParametersMatching(MethodInfo proxyMetho... method AreGenericTypesCompatible (line 95) | private static bool AreGenericTypesCompatible(Type proxyType, Type int... method AreParametersMatching (line 126) | private static bool AreParametersMatching(MethodInfo proxyMethod, Meth... method GetMethodSignature (line 136) | private static string GetMethodSignature(MethodInfo method) FILE: Tubifarry/Metadata/Proxy/ProxyBase.cs class ProxyBase (line 10) | public abstract class ProxyBase : IProxy, IMetadata where TSe... method RequestAction (line 20) | public virtual object RequestAction(string action, IDictionary GetType().Name; method GetFilenameAfterMove (line 25) | public virtual string GetFilenameAfterMove(Artist artist, TrackFile tr... method GetFilenameAfterMove (line 28) | public virtual string GetFilenameAfterMove(Artist artist, string album... method FindMetadataFile (line 31) | public virtual MetadataFile FindMetadataFile(Artist artist, string pat... method ArtistMetadata (line 33) | public virtual MetadataFileResult ArtistMetadata(Artist artist) => def... method AlbumMetadata (line 35) | public virtual MetadataFileResult AlbumMetadata(Artist artist, Album a... method TrackMetadata (line 37) | public virtual MetadataFileResult TrackMetadata(Artist artist, TrackFi... method ArtistImages (line 39) | public virtual List ArtistImages(Artist artist) => []; method AlbumImages (line 41) | public virtual List AlbumImages(Artist artist, Album ... method TrackImages (line 43) | public virtual List TrackImages(Artist artist, TrackF... method Test (line 45) | public virtual ValidationResult Test() => new(); FILE: Tubifarry/Metadata/Proxy/ProxyService.cs type IProxyService (line 10) | public interface IProxyService method RegisterProxy (line 15) | void RegisterProxy(IProxy proxy); method UnregisterProxy (line 17) | void UnregisterProxy(IProxy proxy); method InitializeProxies (line 19) | void InitializeProxies(); method GetActiveProxyForInterface (line 21) | IProxy? GetActiveProxyForInterface(Type originalInterfaceType); method SetActiveProxy (line 23) | void SetActiveProxy(Type originalInterfaceType, IProxy proxy); class ProxyService (line 26) | public class ProxyService : IProxyService, IHandle method SetActiveProxy (line 67) | public void SetActiveProxy(Type originalInterfaceType, IProxy proxy) method Handle (line 76) | public void Handle(ProviderUpdatedEvent message) method InitializeProxies (line 88) | public void InitializeProxies() method AddProxyToInterfaceMapping (line 100) | private void AddProxyToInterfaceMapping(IProxy proxy, Type originalInt... method RemoveProxyFromInterfaceMapping (line 111) | private void RemoveProxyFromInterfaceMapping(IProxy proxy, Type interf... method RemoveInterfaceMapping (line 124) | private void RemoveInterfaceMapping(Type interfaceType) method SetNewActiveProxyForInterface (line 131) | private void SetNewActiveProxyForInterface(Type interfaceType, List GetActiveProxiesForInterface(Type interfaceType) => method SelectOptimalProxy (line 154) | private IProxy? SelectOptimalProxy(Type interfaceType, List av... method SelectDefaultProxy (line 167) | private IProxy? SelectDefaultProxy(Type interfaceType) method SelectSingletonProxy (line 179) | private IProxy SelectSingletonProxy(Type interfaceType, IProxy proxy) method SelectOrchestratorProxy (line 185) | private IProxy? SelectOrchestratorProxy(Type interfaceType, List GetAllNonMixedProxiesForInterface(Type int... method GetHighestPriorityProxy (line 211) | private static IProxy? GetHighestPriorityProxy(IEnumerable pro... method TrySetDefaultProxy (line 214) | private IProxy? TrySetDefaultProxy(Type originalInterfaceType) method IsProxyRegisteredForInterface (line 231) | private bool IsProxyRegisteredForInterface(IProxy proxy, Type original... method EnableProxy (line 235) | private void EnableProxy(IProxy proxy) method RemoveSupersededDefaultProxies (line 246) | private void RemoveSupersededDefaultProxies(IProxy newProxy) method DisableProxy (line 260) | private void DisableProxy(IProxy proxy) method ValidateProxy (line 274) | private bool ValidateProxy(IProxy proxy) method ActivateEnabledProxies (line 289) | private void ActivateEnabledProxies() method EnsureDefaultProxies (line 302) | private void EnsureDefaultProxies() method GetAllDeclaredInterfaces (line 308) | private IEnumerable GetAllDeclaredInterfaces() => method SetDefaultProxyForInterface (line 313) | private void SetDefaultProxyForInterface(Type originalInterface) method EnsureProxyIsActive (line 333) | private void EnsureProxyIsActive(IProxy proxy) method FindHighestPriorityProxyForInterface (line 339) | private IProxy? FindHighestPriorityProxyForInterface(Type originalInte... FILE: Tubifarry/Metadata/Proxy/ProxyServiceStarter.cs type ProxyMode (line 7) | public enum ProxyMode type IProxy (line 13) | public interface IProxy type IMixedProxy (line 18) | public interface IMixedProxy : IProxy; type ProxyStatusAction (line 20) | public enum ProxyStatusAction class ProxyStatusChangedEvent (line 26) | public class ProxyStatusChangedEvent(IProxy proxy, ProxyStatusAction act... class ProxyServiceStarter (line 32) | public class ProxyServiceStarter : IHandle method ProxyServiceStarter (line 36) | public ProxyServiceStarter(IProxyService proxyService) => ProxyService... method Handle (line 38) | public void Handle(ApplicationStartedEvent message) => ProxyService?.I... FILE: Tubifarry/Metadata/Proxy/ProxyWrapperBase.cs class ProxyWrapperBase (line 7) | public abstract class ProxyWrapperBase(Lazy proxyService) method InvokeProxyMethod (line 12) | protected T InvokeProxyMethod(Type interfaceType, string methodName... method InvokeProxyMethodVoid (line 19) | protected void InvokeProxyMethodVoid(Type interfaceType, string method... method InvokeWithUnwrapping (line 26) | protected static T InvokeWithUnwrapping(MethodInfo method, object t... method InvokeWithUnwrapping (line 39) | protected static void InvokeWithUnwrapping(MethodInfo method, object t... method GetActiveProxyOrThrow (line 42) | private IProxy GetActiveProxyOrThrow(Type interfaceType) => method GetOrCreateCachedMethod (line 46) | protected static MethodInfo GetOrCreateCachedMethod(ConcurrentDictiona... method FindAndPrepareMethod (line 52) | private static MethodInfo FindAndPrepareMethod(Type proxyType, string ... method FindMatchingMethod (line 65) | private static MethodInfo FindMatchingMethod(Type proxyType, string me... method IsParameterCompatible (line 83) | private static bool IsParameterCompatible(ParameterInfo[] parameters, ... method IsGenericTypeCompatible (line 103) | private static bool IsGenericTypeCompatible(Type paramType, Type argType) method HasGenericBase (line 117) | private static bool HasGenericBase(Type type, Type genericDefinition) method InferGenericArguments (line 130) | private static Type[] InferGenericArguments(MethodInfo genericMethod, ... method InferFromParameter (line 150) | private static void InferFromParameter(Type paramType, Type argType, T... method FindMatchingGenericType (line 178) | private static Type? FindMatchingGenericType(Type argType, Type generi... method GetDefaultTypeForGeneric (line 196) | private static Type GetDefaultTypeForGeneric(Type genericParameter) method IsNullable (line 202) | private static bool IsNullable(Type type) => method GenerateCacheKey (line 205) | private static string GenerateCacheKey(Type proxyType, string methodNa... FILE: Tubifarry/Metadata/Proxy/RecommendArtists/LastFmSimilarArtistsService.cs type ILastFmSimilarArtistsService (line 15) | public interface ILastFmSimilarArtistsService method GetSimilarArtistsWithMetadata (line 17) | public List GetSimilarArtistsWithMetadata(string artistIdentif... class LastFmSimilarArtistsService (line 23) | public class LastFmSimilarArtistsService : ILastFmSimilarArtistsService method LastFmSimilarArtistsService (line 33) | public LastFmSimilarArtistsService(IHttpClient httpClient, Logger logger) method GetSimilarArtistsWithMetadata (line 39) | public List GetSimilarArtistsWithMetadata(string artistIdentif... method InitServices (line 95) | private void InitServices(SimilarArtistsProxySettings settings) method FetchSimilarArtistsFromApi (line 114) | private List FetchSimilarArtistsFromApi(string artistIde... method MapArtistFromLastfmArtist (line 167) | private Artist MapArtistFromLastfmArtist(LastfmArtist lastfmArtist, st... method FetchArtistImages (line 233) | private List FetchArtistImages(string artistName, LastfmIm... method MapLastfmImages (line 274) | private static List MapLastfmImages(List? ima... method MapImageSize (line 285) | private static MediaCoverTypes MapImageSize(string size) => size?.ToLo... FILE: Tubifarry/Metadata/Proxy/RecommendArtists/SimilarArtistsProxy.cs class SimilarArtistsProxy (line 11) | [Proxy(ProxyMode.Internal)] method SearchForNewEntity (line 24) | public List SearchForNewEntity(string title) method CanHandleSearch (line 56) | public MetadataSupportLevel CanHandleSearch(string? albumTitle = null,... method CanHandleId (line 63) | public MetadataSupportLevel CanHandleId(string id) => MetadataSupportL... method CanHandleIRecordingIds (line 65) | public MetadataSupportLevel CanHandleIRecordingIds(params string[] rec... method CanHandleChanged (line 67) | public MetadataSupportLevel CanHandleChanged() => MetadataSupportLevel... method SupportsLink (line 69) | public string? SupportsLink(List links) => null; FILE: Tubifarry/Metadata/Proxy/RecommendArtists/SimilarArtistsProxySettings.cs class SimilarArtistsProxySettingsValidator (line 11) | public class SimilarArtistsProxySettingsValidator : AbstractValidator new(Validator.Validate(t... FILE: Tubifarry/Metadata/ScheduledTasks/IProvideScheduledTask.cs type IProvideScheduledTask (line 10) | public interface IProvideScheduledTask FILE: Tubifarry/Metadata/ScheduledTasks/ScheduledTaskBase.cs class ScheduledTaskBase (line 16) | public abstract class ScheduledTaskBase : IProvideScheduledTa... method RequestAction (line 37) | public virtual object RequestAction(string action, IDictionary new(); method GetFilenameAfterMove (line 41) | public virtual string GetFilenameAfterMove(Artist artist, TrackFile tr... method GetFilenameAfterMove (line 44) | public virtual string GetFilenameAfterMove(Artist artist, string album... method FindMetadataFile (line 47) | public virtual MetadataFile FindMetadataFile(Artist artist, string pat... method ArtistMetadata (line 49) | public virtual MetadataFileResult ArtistMetadata(Artist artist) => def... method AlbumMetadata (line 51) | public virtual MetadataFileResult AlbumMetadata(Artist artist, Album a... method TrackMetadata (line 53) | public virtual MetadataFileResult TrackMetadata(Artist artist, TrackFi... method ArtistImages (line 55) | public virtual List ArtistImages(Artist artist) => []; method AlbumImages (line 57) | public virtual List AlbumImages(Artist artist, Album ... method TrackImages (line 59) | public virtual List TrackImages(Artist artist, TrackF... method ToString (line 61) | public override string ToString() => Name; FILE: Tubifarry/Metadata/ScheduledTasks/ScheduledTaskService.cs type IScheduledTaskService (line 11) | public interface IScheduledTaskService method InitializeTasks (line 16) | void InitializeTasks(); method UpdateTask (line 18) | void UpdateTask() where T : IProvideScheduledTask; method EnableTask (line 20) | void EnableTask(IProvideScheduledTask provider); method DisableTask (line 22) | void DisableTask(IProvideScheduledTask provider); type TaskStatusAction (line 25) | public enum TaskStatusAction class ScheduledTaskService (line 32) | public class ScheduledTaskService( method InitializeTasks (line 44) | public void InitializeTasks() method Handle (line 61) | public void Handle(ProviderUpdatedEvent message) method Handle (line 78) | public void Handle(ProviderAddedEvent message) method Handle (line 90) | public void Handle(ProviderDeletedEvent message) method EnableTask (line 99) | public void EnableTask(IProvideScheduledTask provider) method DisableTask (line 120) | public void DisableTask(IProvideScheduledTask provider) method RegisterTask (line 151) | private void RegisterTask(IProvideScheduledTask provider) method UpdateTask (line 189) | public void UpdateTask() where T : IProvideScheduledTask method UpdateTaskInterval (line 208) | private void UpdateTaskInterval(IProvideScheduledTask provider) method UpdateCache (line 229) | private void UpdateCache(ScheduledTask task) method RemoveFromCache (line 235) | private void RemoveFromCache(string typeName) method ValidateTaskProvider (line 241) | private bool ValidateTaskProvider(IProvideScheduledTask provider) FILE: Tubifarry/Metadata/ScheduledTasks/ScheduledTaskServiceStarter.cs class ScheduledTaskServiceStarter (line 6) | public class ScheduledTaskServiceStarter : IHandle method ScheduledTaskServiceStarter (line 10) | public ScheduledTaskServiceStarter(IScheduledTaskService scheduledTask... method Handle (line 12) | public void Handle(ApplicationStartedEvent message) => TaskService?.In... FILE: Tubifarry/Metadata/ScheduledTasks/SearchSniper/SearchSniperRepositoryHelper.cs class SearchSniperRepositoryHelper (line 9) | public sealed class SearchSniperRepositoryHelper( method GetCutoffUnmetAlbumsBatch (line 16) | public List GetCutoffUnmetAlbumsBatch(Dictionary... method GetPartialAlbumsBatch (line 35) | public List GetPartialAlbumsBatch(int lastId, int limit) method GetPartialAlbumsIdRange (line 51) | public (int minId, int maxId) GetPartialAlbumsIdRange() method GetCutoffUnmetAlbumsIdRange (line 74) | public (int minId, int maxId) GetCutoffUnmetAlbumsIdRange(Dictionary> pr... method BuildMissingTracksQuery (line 119) | private SqlBuilder BuildMissingTracksQuery() method BuildProfileCutoffs (line 136) | public static Dictionary> BuildProfileCutoffs(IEnumerab... method PopulateArtists (line 176) | private List PopulateArtists(List albums) method Builder (line 209) | public new SqlBuilder Builder() => base.Builder(); method Query (line 211) | public new List Query(SqlBuilder builder) => base.Query(builder); FILE: Tubifarry/Metadata/ScheduledTasks/SearchSniper/SearchSniperTask.cs class SearchSniperTask (line 15) | public class SearchSniperTask : ScheduledTaskBase CollectEligibleAlbums(HashSet queuedAlbumIds,... method GetRandomStartId (line 207) | private static int GetRandomStartId(int minId, int maxId) method CollectFromSource (line 214) | private void CollectFromSource( method GetQueuedAlbumIds (line 272) | private HashSet GetQueuedAlbumIds() => method IsAlbumCached (line 278) | private static bool IsAlbumCached(Album album) method AssignArtistsToAlbums (line 284) | private void AssignArtistsToAlbums(IEnumerable albums) method GetMissingAlbumsBatch (line 316) | private List GetMissingAlbumsBatch(int lastId) method GetMissingAlbumsIdRange (line 332) | private (int minId, int maxId) GetMissingAlbumsIdRange() method GetQueueCountByWaitOnType (line 368) | private int GetQueueCountByWaitOnType(WaitOnType waitOnType) method CacheSelectedAlbumsAsync (line 383) | private static async Task CacheSelectedAlbumsAsync(List albums) method SelectRandomAlbums (line 392) | private static List SelectRandomAlbums(List albums, int ... method GenerateCacheKey (line 398) | private static string GenerateCacheKey(Album album) => FILE: Tubifarry/Metadata/ScheduledTasks/SearchSniper/SearchSniperTaskSettings.cs class SearchSniperSettingsValidator (line 10) | public class SearchSniperSettingsValidator : AbstractValidator Instance = this; method Validate (line 86) | public NzbDroneValidationResult Validate() => new(Validator.Validate(t... type WaitOnType (line 89) | public enum WaitOnType class SearchSniperCommand (line 107) | public class SearchSniperCommand : Command method SetCompletionMessage (line 116) | public void SetCompletionMessage(string message) => _completionMessage... FILE: Tubifarry/Notifications/FlareSolverr/FlareDetector.cs class FlareDetector (line 10) | public static class FlareDetector method IsChallengePresent (line 47) | public static bool IsChallengePresent(HttpResponseMessage response) method IsProtectionCookie (line 126) | public static bool IsProtectionCookie(string cookieName) => FILE: Tubifarry/Notifications/FlareSolverr/FlareRecords.cs type FlareCookie (line 9) | public record FlareCookie( type FlareRequest (line 37) | public record FlareRequest( type FlareSolution (line 45) | public record FlareSolution( type FlareResponse (line 61) | public record FlareResponse( type FlareIndexResponse (line 83) | public record FlareIndexResponse( FILE: Tubifarry/Notifications/FlareSolverr/FlareSolverrHttpInterceptor.cs class FlareSolverrHttpInterceptor (line 6) | public class FlareSolverrHttpInterceptor( method PreRequest (line 30) | public HttpRequest PreRequest(HttpRequest request) method PostResponse (line 49) | public HttpResponse PostResponse(HttpResponse response) method ApplySolution (line 90) | private void ApplySolution(HttpRequest request, ProtectionSolution sol... method CloneRequest (line 106) | private static HttpRequest CloneRequest(HttpRequest original) method IsProtectionChallengeDetected (line 133) | private static bool IsProtectionChallengeDetected(HttpResponse response) method GetRetryCount (line 169) | private static int GetRetryCount(HttpRequest request) => method SetRetryCount (line 174) | private static void SetRetryCount(HttpRequest request, int count) => FILE: Tubifarry/Notifications/FlareSolverr/FlareSolverrNotification.cs class FlareSolverrNotification (line 7) | public class FlareSolverrNotification : NotificationBase new(); method OnGrab (line 21) | public override void OnGrab(GrabMessage message) FILE: Tubifarry/Notifications/FlareSolverr/FlareSolverrService.cs class FlareSolverrService (line 13) | public class FlareSolverrService : IFlareSolverrService, IHandle SolveAsync(string url) method ConfigureFlareSolverr (line 209) | private void ConfigureFlareSolverr() method TestConnection (line 243) | private void TestConnection() class FlareException (line 271) | public class FlareException : Exception method FlareException (line 273) | public FlareException(string message) : base(message) method FlareException (line 276) | public FlareException(string message, Exception innerException) : base... method FlareException (line 279) | public FlareException() FILE: Tubifarry/Notifications/FlareSolverr/FlareSolverrSettings.cs class FlareSolverrSettingsValidator (line 8) | public class FlareSolverrSettingsValidator : AbstractValidator new(Validator.Validate(t... FILE: Tubifarry/Notifications/FlareSolverr/IFlareSolverrService.cs type IFlareSolverrService (line 3) | public interface IFlareSolverrService method GetOrSolveChallenge (line 8) | ProtectionSolution? GetOrSolveChallenge(string host, string url, bool ... method InvalidateSolution (line 10) | void InvalidateSolution(string host); method HasValidSolution (line 12) | bool HasValidSolution(string host); type ProtectionSolution (line 15) | public record ProtectionSolution( FILE: Tubifarry/Notifications/PlaylistExport/PlaylistExportNotification.cs class PlaylistExportNotification (line 7) | public sealed class PlaylistExportNotification : NotificationBase _... method OnReleaseImport (line 20) | public override void OnReleaseImport(AlbumDownloadMessage message) => method Test (line 23) | public override ValidationResult Test() => new(); FILE: Tubifarry/Notifications/PlaylistExport/PlaylistExportService.cs type IPlaylistExportService (line 18) | public interface IPlaylistExportService method RefreshSchema (line 20) | void RefreshSchema(); method FetchAndStore (line 21) | void FetchAndStore(int listId); method GeneratePlaylists (line 22) | void GeneratePlaylists(PlaylistExportSettings settings); method DetectCommonMusicPath (line 23) | string? DetectCommonMusicPath(); class PlaylistExportService (line 26) | public sealed partial class PlaylistExportService : IPlaylistExportService, method PlaylistExportService (line 44) | public PlaylistExportService( method Handle (line 66) | public void Handle(ApplicationStartedEvent message) => RefreshSchema(); method Handle (line 67) | public void Handle(ProviderAddedEvent message) => Refresh... method Handle (line 68) | public void Handle(ProviderUpdatedEvent message) => Refre... method Handle (line 70) | public void Handle(ProviderDeletedEvent message) method RefreshSchema (line 97) | public void RefreshSchema() method DetectCommonMusicPath (line 128) | public string? DetectCommonMusicPath() method FetchAndStore (line 141) | public void FetchAndStore(int listId) method GeneratePlaylists (line 165) | public void GeneratePlaylists(PlaylistExportSettings settings) method FetchAlbumLevelItems (line 256) | private List FetchAlbumLevelItems(IImportList list) method GetAlbumOrArtistFiles (line 271) | private IEnumerable GetAlbumOrArtistFiles( method ResolveArtist (line 290) | private static Artist? ResolveArtist( method Normalize (line 303) | private static string Normalize(string? s) => method WriteM3u8 (line 306) | private void WriteM3u8(string outputPath, string listName, List paths) method GetSnapshots (line 352) | private Dictionary GetSnapshots() => method SaveSnapshots (line 355) | private void SaveSnapshots(Dictionary snapshots... method SanitizeFilename (line 358) | private static string SanitizeFilename(string name) => method NormalizeRegex (line 361) | [GeneratedRegex(@"[^\w]")] FILE: Tubifarry/Notifications/PlaylistExport/PlaylistExportSettings.cs class PlaylistExportSettingsValidator (line 9) | public class PlaylistExportSettingsValidator : AbstractValidator class PlaylistExportSettings (line 18) | public class PlaylistExportSettings : DynamicStateSettings method GetTrackMode (line 37) | public PlaylistTrackMode GetTrackMode() => (PlaylistTrackMode)TrackMode; method GetSelectedListIds (line 39) | public IEnumerable GetSelectedListIds() method Validate (line 51) | public override NzbDroneValidationResult Validate() => new(Validator.V... type PlaylistTrackMode (line 54) | public enum PlaylistTrackMode FILE: Tubifarry/Notifications/QueueCleaner/ImportFailureNotificationService.cs class ImportFailureNotificationService (line 11) | public class ImportFailureNotificationService : IHandle method QueueCleaner (line 38) | public QueueCleaner(IDiskProvider diskProvider, IHistoryService histor... method GetAudioFiles (line 49) | public IFileInfo[] GetAudioFiles(string path, bool allDirectories = true) method CleanImport (line 61) | internal void CleanImport(AlbumImportIncompleteEvent message) method HandleFailure (line 118) | private void HandleFailure(TrackedDownload trackedDownload, int import... method Remove (line 136) | private void Remove(TrackedDownload item) method Rename (line 154) | private bool Rename(TrackedDownload item) method TryRenameFile (line 176) | private bool TryRenameFile(IFileInfo file, HashSet audioExtens... method MoveFile (line 219) | private bool MoveFile(string sourcePath, string destinationPath) method Blocklist (line 234) | private void Blocklist(TrackedDownload item) method Retry (line 260) | private void Retry(TrackedDownload item) method CheckImport (line 266) | private static ImportFailureReason CheckImport(TrackedDownload tracked... method OnImportFailure (line 286) | public override void OnImportFailure(AlbumDownloadMessage message) => ... method Test (line 288) | public override ValidationResult Test() type ImportFailureReason (line 309) | public enum ImportFailureReason FILE: Tubifarry/Notifications/QueueCleaner/QueueCleanerSettings.cs class QueueCleanerSettingsValidator (line 8) | public class QueueCleanerSettingsValidator : AbstractValidator new(Validator.Validate(t... type BlocklistOptions (line 35) | public enum BlocklistOptions type RenameOptions (line 47) | public enum RenameOptions type ImportCleaningOptions (line 56) | public enum ImportCleaningOptions type SkipReleaseSourceOptions (line 71) | public enum SkipReleaseSourceOptions FILE: Tubifarry/Notifications/YouTubeProxy/YouTubeProxyNotification.cs class YouTubeProxyNotification (line 7) | public class YouTubeProxyNotification : NotificationBase new(); method OnGrab (line 17) | public override void OnGrab(GrabMessage message) FILE: Tubifarry/Notifications/YouTubeProxy/YouTubeProxyService.cs class YouTubeProxyService (line 12) | public class YouTubeProxyService : IHandle method YouTubeProxyService (line 18) | public YouTubeProxyService(INotificationFactory notificationFactory, I... method Handle (line 25) | public void Handle(ApplicationStartedEvent message) method ConfigureProxySettings (line 37) | private void ConfigureProxySettings() method ConfigureHttpClientWithProxy (line 66) | private void ConfigureHttpClientWithProxy(YouTubeProxySettings settings) FILE: Tubifarry/Notifications/YouTubeProxy/YouTubeProxySettings.cs class YouTubeProxySettingsValidator (line 8) | public class YouTubeProxySettingsValidator : AbstractValidator new(Validator.Validate(t... FILE: Tubifarry/Plugin.cs class Tubifarry (line 22) | public class Tubifarry : Plugin method Tubifarry (line 50) | public Tubifarry(IDelayProfileRepository repo, IPluginSettings pluginS... method CheckDelayProfiles (line 59) | private void CheckDelayProfiles(IDelayProfileRepository repo, IEnumera... method GetProtocolItem (line 77) | private static DelayProfileProtocolItem GetProtocolItem(IDownloadProto... method Handle (line 84) | public void Handle(ApplicationStartingEvent message) method Handle (line 138) | public void Handle(ApplicationShutdownRequested message)