public List <TorrentEntry>?GetTorrentDownloads() { // get list of files being downloaded by qBitTorrentFinder if (string.IsNullOrEmpty(TVSettings.Instance.qBitTorrentHost) || string.IsNullOrEmpty(TVSettings.Instance.qBitTorrentPort)) { return(null); } string settingsString = null; string downloadsString = null; try { settingsString = HttpHelper.Obtain(GetApiUrl(qBitTorrentAPIPath.settings)); downloadsString = HttpHelper.Obtain(GetApiUrl(qBitTorrentAPIPath.torrents)); JToken settings = JToken.Parse(settingsString); JArray currentDownloads = JArray.Parse(downloadsString); if (!currentDownloads.HasValues && settings.HasValues) { Logger.Info($"No Downloads available from qBitTorrent: {currentDownloads}"); return(new List <TorrentEntry>()); } if (!currentDownloads.HasValues || !settings.HasValues) { Logger.Warn($"Could not get currentDownloads or settings from qBitTorrent: {settingsString} {currentDownloads}"); return(null); } string savePath = (string)settings["save_path"] ?? string.Empty; List <TorrentEntry> ret = new List <TorrentEntry>(); foreach (JToken torrent in currentDownloads.Children()) { AddFilesFromTorrent(ret, torrent, savePath); } return(ret); } catch (WebException wex) { Logger.Warn( $"Could not connect to local instance {TVSettings.Instance.qBitTorrentHost}:{TVSettings.Instance.qBitTorrentPort}, Please check qBitTorrent Settings and ensure qBitTorrent is running with no password required for local connections: {wex.LoggableDetails()}"); } catch (JsonReaderException ex) { Logger.Warn(ex, $"Could not parse data recieved from {settingsString} {downloadsString}"); } return(null); }
private static void AddFilesFromTorrent(ICollection <TorrentEntry> ret, [NotNull] JToken torrent, string savePath) { string torrentDetailsString = string.Empty; try { (string hashCode, string torrentName, bool completed) = ExtractTorrentDetails(torrent); string url = GetApiUrl(qBitTorrentAPIPath.torrentDetails) + hashCode; torrentDetailsString = HttpHelper.Obtain(url); JArray torrentDetails = JArray.Parse(torrentDetailsString); if (!torrentDetails.Children().Any()) { string proposedFilename = TVSettings.Instance.FilenameFriendly(savePath + torrentName) + TVSettings.Instance.VideoExtensionsArray[0]; ret.Add(new TorrentEntry(torrentName, proposedFilename, 0, false, hashCode)); return; } foreach (JToken file in torrentDetails.Children()) { (string downloadedFilename, bool isOnHold, int percentComplete) = ExtractTorrentFileDetails(file); if (!downloadedFilename.Contains(".!qB\\.unwanted\\") && !isOnHold) { ret.Add(new TorrentEntry(torrentName, savePath + downloadedFilename, percentComplete, completed, hashCode)); } } } catch (JsonReaderException ex) { Logger.Warn(ex, $"Could not parse data recieved from {torrentDetailsString}"); } }