public async Task Execute(IJobExecutionContext context) { var settings = await _settings.GetSettingsAsync(); if (!settings.Enable || !settings.EnableWatchlistImport) { _logger.LogDebug($"Not enabled. Plex Enabled: {settings.Enable}, Watchlist Enabled: {settings.EnableWatchlistImport}"); return; } var plexUsersWithTokens = _ombiUserManager.Users.Where(x => x.UserType == UserType.PlexUser && x.MediaServerToken != null).ToList(); _logger.LogInformation($"Found {plexUsersWithTokens.Count} users with tokens"); await NotifyClient("Starting Watchlist Import"); foreach (var user in plexUsersWithTokens) { try { _logger.LogDebug($"Starting Watchlist Import for {user.UserName} with token {user.MediaServerToken}"); var watchlist = await _plexApi.GetWatchlist(user.MediaServerToken, context?.CancellationToken ?? CancellationToken.None); if (watchlist == null || !(watchlist.MediaContainer?.Metadata?.Any() ?? false)) { _logger.LogDebug($"No watchlist found for {user.UserName}"); continue; } var items = watchlist.MediaContainer.Metadata; _logger.LogDebug($"Items found in watchlist: {watchlist.MediaContainer.totalSize}"); foreach (var item in items) { _logger.LogDebug($"Processing {item.title} {item.type}"); var providerIds = await GetProviderIds(user.MediaServerToken, item, context?.CancellationToken ?? CancellationToken.None); if (!providerIds.TheMovieDb.HasValue()) { _logger.LogWarning($"No TheMovieDb Id found for {item.title}, could not import via Plex WatchList"); // We need a MovieDbId to support this; continue; } // Check to see if we have already imported this item var alreadyImported = _watchlistRepo.GetAll().Any(x => x.TmdbId == providerIds.TheMovieDb); if (alreadyImported) { _logger.LogDebug($"{item.title} already imported via Plex WatchList, skipping"); continue; } switch (item.type) { case "show": await ProcessShow(int.Parse(providerIds.TheMovieDb), user); break; case "movie": await ProcessMovie(int.Parse(providerIds.TheMovieDb), user); break; } } } catch (Exception ex) { _logger.LogError(ex, $"Exception thrown when importing watchlist for user {user.UserName}"); continue; } } await NotifyClient("Finished Watchlist Import"); }