private async Task ProcessMusicRequests(DateTime date) { var requestsToDelete = await _musicRequestRepository.GetAll().Where(x => x.Available && x.MarkedAsAvailable.HasValue && x.MarkedAsAvailable.Value < date).ToListAsync(); _logger.LogInformation($"Deleting {requestsToDelete.Count} music requests that have now been scheduled for deletion, All available requests before {date::MM/dd/yyyy} will be deleted"); foreach (var r in requestsToDelete) { _logger.LogInformation($"Deleting music title {r.Title} as it was approved on {r.MarkedAsApproved:MM/dd/yyyy hh:mm tt}"); } await _musicRequestRepository.DeleteRange(requestsToDelete); }
public async Task Execute(IJobExecutionContext ctx) { await _notification.Clients.Clients(NotificationHub.AdminConnectionIds) .SendAsync(NotificationHub.NotificationEvent, "Lidarr Availability Check Started"); var allAlbumRequests = _requestRepository.GetAll().Include(x => x.RequestedUser).Where(x => !x.Available); var albumsToUpdate = new List <AlbumRequest>(); foreach (var request in allAlbumRequests) { // Check if we have it cached var cachedAlbum = await _cachedAlbums.FirstOrDefaultAsync(x => x.ForeignAlbumId.Equals(request.ForeignAlbumId)); if (cachedAlbum != null) { if (cachedAlbum.FullyAvailable) // ensure we have all tracks { request.Available = true; request.MarkedAsAvailable = DateTime.Now; albumsToUpdate.Add(request); } } } foreach (var albumRequest in albumsToUpdate) { await _requestRepository.Update(albumRequest); var recipient = albumRequest.RequestedUser.Email.HasValue() ? albumRequest.RequestedUser.Email : string.Empty; _logger.LogDebug("AlbumId: {0}, RequestUser: {1}", albumRequest.Id, recipient); await _notificationService.Notify(new NotificationOptions { DateTime = DateTime.Now, NotificationType = NotificationType.RequestAvailable, RequestId = albumRequest.Id, RequestType = RequestType.Album, Recipient = recipient, }); } await _notification.Clients.Clients(NotificationHub.AdminConnectionIds) .SendAsync(NotificationHub.NotificationEvent, "Lidarr Availability Check Finished"); }
public async Task Start() { // Get all the failed ones! var failedRequests = _requestQueue.GetAll().Where(x => !x.Completed.HasValue); foreach (var request in failedRequests) { if (request.Type == RequestType.Movie) { var movieRequest = await _movieRequestRepository.GetAll().FirstOrDefaultAsync(x => x.Id == request.RequestId); var result = await _movieSender.Send(movieRequest); if (result.Success) { request.Completed = DateTime.UtcNow; await _requestQueue.SaveChangesAsync(); } } if (request.Type == RequestType.TvShow) { var tvRequest = await _tvRequestRepository.GetChild().FirstOrDefaultAsync(x => x.Id == request.RequestId); var result = await _tvSender.Send(tvRequest); if (result.Success) { request.Completed = DateTime.UtcNow; await _requestQueue.SaveChangesAsync(); } } if (request.Type == RequestType.Album) { var musicRequest = await _musicRequestRepository.GetAll().FirstOrDefaultAsync(x => x.Id == request.RequestId); var result = await _musicSender.Send(musicRequest); if (result.Success) { request.Completed = DateTime.UtcNow; await _requestQueue.SaveChangesAsync(); } } } }
public async Task Start() { var allAlbumRequests = _requestRepository.GetAll().Include(x => x.RequestedUser).Where(x => !x.Available); var albumsToUpdate = new List <AlbumRequest>(); foreach (var request in allAlbumRequests) { // Check if we have it cached var cachedAlbum = await _cachedAlbums.FirstOrDefaultAsync(x => x.ForeignAlbumId.Equals(request.ForeignAlbumId)); if (cachedAlbum != null) { if (cachedAlbum.FullyAvailable) { request.Available = true; request.MarkedAsAvailable = DateTime.Now; albumsToUpdate.Add(request); } } } foreach (var albumRequest in albumsToUpdate) { await _requestRepository.Update(albumRequest); var recipient = albumRequest.RequestedUser.Email.HasValue() ? albumRequest.RequestedUser.Email : string.Empty; _logger.LogDebug("AlbumId: {0}, RequestUser: {1}", albumRequest.Id, recipient); _job.Enqueue(() => _notificationService.Publish(new NotificationOptions { DateTime = DateTime.Now, NotificationType = NotificationType.RequestAvailable, RequestId = albumRequest.Id, RequestType = RequestType.Album, Recipient = recipient, })); } }
public async Task Execute(IJobExecutionContext job) { // Get all the failed ones! var failedRequests = _requestQueue.GetAll().Where(x => x.Completed == null); foreach (var request in failedRequests) { if (request.Type == RequestType.Movie) { var movieRequest = await _movieRequestRepository.GetAll().FirstOrDefaultAsync(x => x.Id == request.RequestId); if (movieRequest == null) { await _requestQueue.Delete(request); await _requestQueue.SaveChangesAsync(); continue; } var result = await _movieSender.Send(movieRequest); if (result.Success) { request.Completed = DateTime.UtcNow; await _requestQueue.SaveChangesAsync(); } } if (request.Type == RequestType.TvShow) { var tvRequest = await _tvRequestRepository.GetChild().FirstOrDefaultAsync(x => x.Id == request.RequestId); if (tvRequest == null) { await _requestQueue.Delete(request); await _requestQueue.SaveChangesAsync(); continue; } var result = await _tvSender.Send(tvRequest); if (result.Success) { request.Completed = DateTime.UtcNow; await _requestQueue.SaveChangesAsync(); } } if (request.Type == RequestType.Album) { var musicRequest = await _musicRequestRepository.GetAll().FirstOrDefaultAsync(x => x.Id == request.RequestId); if (musicRequest == null) { await _requestQueue.Delete(request); await _requestQueue.SaveChangesAsync(); continue; } var result = await _musicSender.Send(musicRequest); if (result.Success) { request.Completed = DateTime.UtcNow; await _requestQueue.SaveChangesAsync(); } } } }
public async Task <IdentityResult> DeleteUser(OmbiUser userToDelete) { var userId = userToDelete.Id; // We need to delete all the requests first var moviesUserRequested = _movieRepository.GetAll().Where(x => x.RequestedUserId == userId); var tvUserRequested = _tvRepository.GetChild().Where(x => x.RequestedUserId == userId); var musicRequested = _musicRepository.GetAll().Where(x => x.RequestedUserId == userId); var notificationPreferences = _userNotificationPreferences.GetAll().Where(x => x.UserId == userId); var userQuality = await _userQualityProfiles.GetAll().FirstOrDefaultAsync(x => x.UserId == userId); if (moviesUserRequested.Any()) { await _movieRepository.DeleteRange(moviesUserRequested); } if (tvUserRequested.Any()) { await _tvRepository.DeleteChildRange(tvUserRequested); } if (musicRequested.Any()) { await _musicRepository.DeleteRange(musicRequested); } if (notificationPreferences.Any()) { await _userNotificationPreferences.DeleteRange(notificationPreferences); } if (userQuality != null) { await _userQualityProfiles.Delete(userQuality); } // Delete any issues and request logs var issues = _issuesRepository.GetAll().Where(x => x.UserReportedId == userId); var issueComments = _issueCommentsRepository.GetAll().Where(x => x.UserId == userId); var requestLog = _requestLogRepository.GetAll().Where(x => x.UserId == userId); if (issueComments.Any()) { await _issueCommentsRepository.DeleteRange(issueComments); } if (issues.Any()) { var extraComments = new List <IssueComments>(); var issueIds = issues.Select(x => x.Id).Distinct(); foreach (var issue in issueIds) { // Get all the comments for this issue and delete them, since the issue will be deleted var extra = _issueCommentsRepository.GetAll().Where(x => x.IssuesId == issue); extraComments.AddRange(extra.ToList()); } await _issuesRepository.DeleteRange(issues); } if (requestLog.Any()) { await _requestLogRepository.DeleteRange(requestLog); } // Delete the Subscriptions and mobile notification ids var subs = _requestSubscriptionRepository.GetAll().Where(x => x.UserId == userId); var mobileIds = _notificationRepository.GetAll().Where(x => x.UserId == userId); var votes = _voteRepository.GetAll().Where(x => x.UserId == userId); var newMobiles = _mobileDevicesRepository.GetAll().Where(x => x.UserId == userId); if (subs.Any()) { await _requestSubscriptionRepository.DeleteRange(subs); } if (mobileIds.Any()) { await _notificationRepository.DeleteRange(mobileIds); } if (votes.Any()) { await _voteRepository.DeleteRange(votes); } if (newMobiles.Any()) { await _mobileDevicesRepository.DeleteRange(newMobiles); } var result = await _userManager.DeleteAsync(userToDelete); return(result); }