public void Handle(EpisodeImportedEvent message)
 {
     foreach (var episode in message.EpisodeInfo.Episodes)
     {
         BroadcastResourceChange(ModelAction.Updated, episode.Id);
     }
 }
예제 #2
0
        public void Handle(EpisodeImportedEvent message)
        {
            if (!message.NewDownload)
            {
                return;
            }

            foreach (var episode in message.EpisodeInfo.Episodes)
            {
                var history = new History
                {
                    EventType   = HistoryEventType.DownloadFolderImported,
                    Date        = DateTime.UtcNow,
                    Quality     = message.EpisodeInfo.Quality,
                    SourceTitle = message.ImportedEpisode.SceneName ?? Path.GetFileNameWithoutExtension(message.EpisodeInfo.Path),
                    SeriesId    = message.ImportedEpisode.SeriesId,
                    EpisodeId   = episode.Id
                };

                //Won't have a value since we publish this event before saving to DB.
                //history.Data.Add("FileId", message.ImportedEpisode.Id.ToString());
                history.Data.Add("DroppedPath", message.EpisodeInfo.Path);
                history.Data.Add("ImportedPath", Path.Combine(message.EpisodeInfo.Series.Path, message.ImportedEpisode.RelativePath));
                history.Data.Add("DownloadClient", message.DownloadClient);
                history.Data.Add("DownloadClientId", message.DownloadClientId);

                _historyRepository.Insert(history);
            }
        }
예제 #3
0
 public void Handle(EpisodeImportedEvent message)
 {
     foreach (var consumer in _metadataFactory.Enabled())
     {
         consumer.OnEpisodeImport(message.EpisodeInfo.Series, message.ImportedEpisode, message.NewDownload);
     }
 }
예제 #4
0
        public void Handle(EpisodeImportedEvent message)
        {
            foreach (var consumer in _metadataFactory.Enabled())
            {
                var files = new List <MetadataFile>();

                files.AddIfNotNull(ProcessEpisodeMetadata(consumer, message.EpisodeInfo.Series, message.ImportedEpisode, new List <MetadataFile>()));
                files.AddRange(ProcessEpisodeImages(consumer, message.EpisodeInfo.Series, message.ImportedEpisode, new List <MetadataFile>()));

                _eventAggregator.PublishEvent(new MetadataFilesUpdated(files));
            }
        }
예제 #5
0
        private string FindDownloadId(EpisodeImportedEvent trackedDownload)
        {
            _logger.Debug("Trying to find downloadId for {0} from history", trackedDownload.ImportedEpisode.Path);

            var episodeIds = trackedDownload.EpisodeInfo.Episodes.Select(c => c.Id).ToList();

            var allHistory = _historyRepository.FindDownloadHistory(trackedDownload.EpisodeInfo.Series.Id, trackedDownload.ImportedEpisode.Quality);


            //Find download related items for these episdoes
            var episodesHistory = allHistory.Where(h => episodeIds.Contains(h.EpisodeId)).ToList();

            var processedDownloadId = episodesHistory
                                      .Where(c => c.EventType != HistoryEventType.Grabbed && c.DownloadId != null)
                                      .Select(c => c.DownloadId);

            var stillDownloading = episodesHistory.Where(c => c.EventType == HistoryEventType.Grabbed && !processedDownloadId.Contains(c.DownloadId)).ToList();

            string downloadId = null;

            if (stillDownloading.Any())
            {
                foreach (var matchingHistory in trackedDownload.EpisodeInfo.Episodes.Select(e => stillDownloading.Where(c => c.EpisodeId == e.Id).ToList()))
                {
                    if (matchingHistory.Count != 1)
                    {
                        return(null);
                    }

                    var newDownloadId = matchingHistory.Single().DownloadId;

                    if (downloadId == null || downloadId == newDownloadId)
                    {
                        downloadId = newDownloadId;
                    }
                    else
                    {
                        return(null);
                    }
                }
            }

            return(downloadId);
        }
예제 #6
0
        public void Handle(EpisodeImportedEvent message)
        {
            if (!message.NewDownload)
            {
                return;
            }

            var downloadId = message.DownloadId;

            // Try to find the downloadId if the user used manual import (from wanted: missing) or the
            // API to import and downloadId wasn't provided.

            if (downloadId.IsNullOrWhiteSpace())
            {
                downloadId = _historyService.FindDownloadId(message);
            }

            if (downloadId.IsNullOrWhiteSpace())
            {
                return;
            }

            var history = new DownloadHistory
            {
                EventType        = DownloadHistoryEventType.FileImported,
                SeriesId         = message.ImportedEpisode.SeriesId,
                DownloadId       = downloadId,
                SourceTitle      = message.EpisodeInfo.Path,
                Date             = DateTime.UtcNow,
                Protocol         = message.DownloadClientInfo.Protocol,
                DownloadClientId = message.DownloadClientInfo.Id
            };

            history.Data.Add("DownloadClient", message.DownloadClientInfo.Type);
            history.Data.Add("DownloadClientName", message.DownloadClientInfo.Name);
            history.Data.Add("SourcePath", message.EpisodeInfo.Path);
            history.Data.Add("DestinationPath", Path.Combine(message.EpisodeInfo.Series.Path, message.ImportedEpisode.RelativePath));

            _repository.Insert(history);
        }
예제 #7
0
        public void Handle(EpisodeImportedEvent message)
        {
            foreach (var episode in message.DroppedEpisode.Episodes)
            {
                var history = new History
                {
                    EventType   = HistoryEventType.DownloadFolderImported,
                    Date        = DateTime.UtcNow,
                    Quality     = message.DroppedEpisode.Quality,
                    SourceTitle = message.ImportedEpisode.SceneName,
                    SeriesId    = message.ImportedEpisode.SeriesId,
                    EpisodeId   = episode.Id
                };

                //Won't have a value since we publish this event before saving to DB.
                //history.Data.Add("FileId", message.ImportedEpisode.Id.ToString());
                history.Data.Add("DroppedPath", message.DroppedEpisode.Path);
                history.Data.Add("ImportedPath", message.ImportedEpisode.Path);

                _historyRepository.Insert(history);
            }
        }
예제 #8
0
        public void Handle(EpisodeImportedEvent message)
        {
            if (!message.NewDownload)
            {
                return;
            }

            var downloadId = message.DownloadId;

            if (downloadId.IsNullOrWhiteSpace())
            {
                downloadId = FindDownloadId(message);
            }

            foreach (var episode in message.EpisodeInfo.Episodes)
            {
                var history = new EpisodeHistory
                {
                    EventType   = EpisodeHistoryEventType.DownloadFolderImported,
                    Date        = DateTime.UtcNow,
                    Quality     = message.EpisodeInfo.Quality,
                    SourceTitle = message.ImportedEpisode.SceneName ?? Path.GetFileNameWithoutExtension(message.EpisodeInfo.Path),
                    SeriesId    = message.ImportedEpisode.SeriesId,
                    EpisodeId   = episode.Id,
                    DownloadId  = downloadId,
                    Language    = message.EpisodeInfo.Language
                };

                history.Data.Add("FileId", message.ImportedEpisode.Id.ToString());
                history.Data.Add("DroppedPath", message.EpisodeInfo.Path);
                history.Data.Add("ImportedPath", Path.Combine(message.EpisodeInfo.Series.Path, message.ImportedEpisode.RelativePath));
                history.Data.Add("DownloadClient", message.DownloadClientInfo?.Type);
                history.Data.Add("DownloadClientName", message.DownloadClientInfo?.Name);
                history.Data.Add("PreferredWordScore", message.EpisodeInfo.PreferredWordScore.ToString());
                history.Data.Add("ReleaseGroup", message.EpisodeInfo.ReleaseGroup);

                _historyRepository.Insert(history);
            }
        }
예제 #9
0
        public void Handle(EpisodeImportedEvent message)
        {
            if (!message.NewDownload)
            {
                return;
            }

            var downloadMessage = new DownloadMessage
            {
                Message        = GetMessage(message.EpisodeInfo.Series, message.EpisodeInfo.Episodes, message.EpisodeInfo.Quality),
                Series         = message.EpisodeInfo.Series,
                EpisodeFile    = message.ImportedEpisode,
                OldFiles       = message.OldFiles,
                SourcePath     = message.EpisodeInfo.Path,
                DownloadClient = message.DownloadClientInfo?.Name,
                DownloadId     = message.DownloadId
            };

            foreach (var notification in _notificationFactory.OnDownloadEnabled())
            {
                try
                {
                    if (ShouldHandleSeries(notification.Definition, message.EpisodeInfo.Series))
                    {
                        if (downloadMessage.OldFiles.Empty() || ((NotificationDefinition)notification.Definition).OnUpgrade)
                        {
                            notification.OnDownload(downloadMessage);
                        }
                    }
                }

                catch (Exception ex)
                {
                    _logger.Warn(ex, "Unable to send OnDownload notification to: " + notification.Definition.Name);
                }
            }
        }
 public void Handle(EpisodeImportedEvent message)
 {
     _refreshDebounce.Execute();
 }
예제 #11
0
 public void Handle(EpisodeImportedEvent message)
 {
     BroadcastResourceChange(ModelAction.Updated, message.ImportedEpisode.SeriesId);
 }