示例#1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            try
            {
                await HandleCrashedTranscoding();
            }
            catch (Exception ex)
            {
                var st     = new StackTrace(ex, true);
                var frame0 = st.GetFrame(0);
                var frame1 = st.GetFrame(1);
                var frame2 = st.GetFrame(2);
                var frame3 = st.GetFrame(3);
                _logger.LogError($"Handling crashed transcoding failed {ex.Message}", ex);
                _logger.LogError($"{frame0.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame0.GetFileLineNumber()}");
                _logger.LogError($"{frame1.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame1.GetFileLineNumber()}");
                _logger.LogError($"{frame2.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame2.GetFileLineNumber()}");
                _logger.LogError($"{frame3.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame3.GetFileLineNumber()}");
            }

            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation($"Transcoding: {(_encoderTranscodingInstance?.CurrentFile != null ? $"({_encoderTranscodingInstance.PercentDone:0.00}%) {_encoderTranscodingInstance?.CurrentFile}" : "Nothing")}");
                IReadOnlyList <ITorrentClientTorrent> torrents;

                try
                {
                    torrents = await _torrentClient.GetAllTorrents();

                    if (torrents.Count() == 0)
                    {
                        continue;
                    }

                    _logger.LogInformation($"Found {torrents.Count()} torrents");
                }
                catch (Exception ex)
                {
                    var st     = new StackTrace(ex, true);
                    var frame0 = st.GetFrame(0);
                    var frame1 = st.GetFrame(1);
                    var frame2 = st.GetFrame(2);
                    var frame3 = st.GetFrame(3);
                    _logger.LogError($"Getting all torrents from the Torrent client {_torrentClient.GetType().Name} failed: {ex.Message}", ex);
                    _logger.LogError($"{frame0.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame0.GetFileLineNumber()}");
                    _logger.LogError($"{frame1.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame1.GetFileLineNumber()}");
                    _logger.LogError($"{frame2.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame2.GetFileLineNumber()}");
                    _logger.LogError($"{frame3.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame3.GetFileLineNumber()}");
                    continue;
                }

                try
                {
                    await HandleTorrentStatusUpdates(torrents);
                } catch (Exception ex)
                {
                    var st     = new StackTrace(ex, true);
                    var frame0 = st.GetFrame(0);
                    var frame1 = st.GetFrame(1);
                    var frame2 = st.GetFrame(2);
                    var frame3 = st.GetFrame(3);
                    _logger.LogError($"Handling torrent status updates failed: {ex.Message}", ex);
                    _logger.LogError($"{frame0.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame0.GetFileLineNumber()}");
                    _logger.LogError($"{frame1.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame1.GetFileLineNumber()}");
                    _logger.LogError($"{frame2.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame2.GetFileLineNumber()}");
                    _logger.LogError($"{frame3.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame3.GetFileLineNumber()}");
                }

                try
                {
                    await HandleQueuedTranscoding(torrents, stoppingToken);
                }
                catch (Exception ex)
                {
                    var st     = new StackTrace(ex, true);
                    var frame0 = st.GetFrame(0);
                    var frame1 = st.GetFrame(1);
                    var frame2 = st.GetFrame(2);
                    var frame3 = st.GetFrame(3);
                    _logger.LogError($"Handling of queued transcoding failed: {ex.Message}", ex);
                    _logger.LogError($"{frame0.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame0.GetFileLineNumber()}");
                    _logger.LogError($"{frame1.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame1.GetFileLineNumber()}");
                    _logger.LogError($"{frame2.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame2.GetFileLineNumber()}");
                    _logger.LogError($"{frame3.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame3.GetFileLineNumber()}");
                }

                try
                {
                    await HandleDownloadedMovies(torrents, stoppingToken);
                }
                catch (Exception ex)
                {
                    var st     = new StackTrace(ex, true);
                    var frame0 = st.GetFrame(0);
                    var frame1 = st.GetFrame(1);
                    var frame2 = st.GetFrame(2);
                    var frame3 = st.GetFrame(3);
                    _logger.LogError($"Handling downloaded and transcoded movies failed {ex.Message}", ex);
                    _logger.LogError($"{frame0.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame0.GetFileLineNumber()}");
                    _logger.LogError($"{frame1.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame1.GetFileLineNumber()}");
                    _logger.LogError($"{frame2.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame2.GetFileLineNumber()}");
                    _logger.LogError($"{frame3.GetFileName()?.Split("\\")?.Last() ?? string.Empty} L{frame3.GetFileLineNumber()}");
                }

                await Task.Delay(45 * 1000, stoppingToken);
            }
        }
 public async Task <IEnumerable <ITorrentClientTorrent> > GetAsync()
 {
     return(await _torrentClientService.GetAllTorrents());
 }