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()); }