internal static List <TorrentEntry> GetTorrentDownloads() { List <TorrentEntry> ret = new List <TorrentEntry>(); // get list of files being downloaded by qBitTorrentFinder if (string.IsNullOrEmpty(TVSettings.Instance.qBitTorrentHost) || string.IsNullOrEmpty(TVSettings.Instance.qBitTorrentPort)) { return(ret); } string settingsString = null; string downloadsString = null; try { settingsString = JsonHelper.Obtain(GetApiUrl(qBitTorrentAPIPath.settings)); downloadsString = JsonHelper.Obtain(GetApiUrl(qBitTorrentAPIPath.torrents)); JToken settings = JToken.Parse(settingsString); JArray currentDownloads = JArray.Parse(downloadsString); if (currentDownloads is null || settings is null) { LOGGER.Warn($"Could not get currentDownloads or settings from qBitTorrent: {settingsString} {currentDownloads}"); return(ret); } string savePath = (string)settings["save_path"] ?? string.Empty; foreach (JToken torrent in currentDownloads.Children()) { AddFilesFromTorrent(ret, torrent, savePath); } } 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(ret); }
private static void AddFilesFromTorrent(ICollection <TorrentEntry> ret, [NotNull] JToken torrent, string savePath) { string torrentDetailsString = string.Empty; try { (string hashCode, string torrentName) = ExtractTorrentDetails(torrent); string url = GetApiUrl(qBitTorrentAPIPath.torrentDetails) + hashCode; torrentDetailsString = JsonHelper.Obtain(url); JArray torrentDetails = JArray.Parse(torrentDetailsString); if (torrentDetails is null) { LOGGER.Warn( $"Could not get details of downloads from {url} from qBitTorrent: {torrentDetailsString}"); return; } if (!torrentDetails.Children().Any()) { string proposedFilename = TVSettings.Instance.FilenameFriendly(savePath + torrentName) + TVSettings.Instance.VideoExtensionsArray[0]; ret.Add(new TorrentEntry(torrentName, proposedFilename, 0)); 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)); } } } catch (JsonReaderException ex) { LOGGER.Warn(ex, $"Could not parse data recieved from {torrentDetailsString}"); } }
private static List <TorrentEntry> GetqBitTorrentDownloads() { List <TorrentEntry> ret = new List <TorrentEntry>(); // get list of files being downloaded by qBitTorrentFinder string host = TVSettings.Instance.qBitTorrentHost; string port = TVSettings.Instance.qBitTorrentPort; if (string.IsNullOrEmpty(host) || string.IsNullOrEmpty(port)) { return(ret); } string url = $"http://{host}:{port}/query/"; string settingsString = null; string downloadsString = null; string torrentDetailsString = null; try { settingsString = JsonHelper.Obtain(url + "preferences"); downloadsString = JsonHelper.Obtain(url + "torrents?filter=all"); JToken settings = JToken.Parse(settingsString); JArray currentDownloads = JArray.Parse(downloadsString); foreach (JToken torrent in currentDownloads.Children()) { torrentDetailsString = JsonHelper.Obtain(url + "propertiesFiles/" + torrent["hash"]); JArray stuff2 = JArray.Parse(torrentDetailsString); foreach (JToken file in stuff2.Children()) { string downloadedFilename = file["name"].ToString(); bool isOnHold = (file["priority"].Value <int>() == 0); if (!downloadedFilename.Contains(".!qB\\.unwanted\\") && !isOnHold) { ret.Add(new TorrentEntry(torrent["name"].ToString(), settings["save_path"] + downloadedFilename, (int)(100 * file["progress"].ToObject <float>()))); } } if (!stuff2.Children().Any()) { ret.Add( new TorrentEntry( torrent["name"].ToString() , TVSettings.Instance.FilenameFriendly( settings["save_path"] + torrent["name"].ToString()) + TVSettings.Instance.VideoExtensionsArray[0] , 0 ) ); } } } catch (WebException) { LOGGER.Warn( $"Could not connect to {url}, Please check qBitTorrent Settings and ensure qBitTorrent is running with no password required for local connections"); } catch (JsonReaderException ex) { LOGGER.Warn(ex, $"Could not parse data recieved from {url}, {settingsString} {downloadsString} {torrentDetailsString}"); } return(ret); }
private static List <TorrentEntry> GetqBitTorrentDownloads() { List <TorrentEntry> ret = new List <TorrentEntry>(); // get list of files being downloaded by qBitTorrentFinder if (string.IsNullOrEmpty(TVSettings.Instance.qBitTorrentHost) || string.IsNullOrEmpty(TVSettings.Instance.qBitTorrentPort)) { return(ret); } string settingsString = null; string downloadsString = null; string torrentDetailsString = null; try { settingsString = JsonHelper.Obtain(GetApiUrl(qBitTorrentAPIPath.settings)); downloadsString = JsonHelper.Obtain(GetApiUrl(qBitTorrentAPIPath.torrents)); JToken settings = JToken.Parse(settingsString); JArray currentDownloads = JArray.Parse(downloadsString); foreach (JToken torrent in currentDownloads.Children()) { torrentDetailsString = JsonHelper.Obtain(GetApiUrl(qBitTorrentAPIPath.torrentDetails) + torrent["hash"]); JArray stuff2 = JArray.Parse(torrentDetailsString); foreach (JToken file in stuff2.Children()) { string downloadedFilename = file["name"].ToString(); bool isOnHold = file["priority"].Value <int>() == 0; if (!downloadedFilename.Contains(".!qB\\.unwanted\\") && !isOnHold) { ret.Add(new TorrentEntry(torrent["name"].ToString(), settings["save_path"] + downloadedFilename, (int)(100 * file["progress"].ToObject <float>()))); } } if (!stuff2.Children().Any()) { ret.Add( new TorrentEntry( torrent["name"].ToString() , TVSettings.Instance.FilenameFriendly( settings["save_path"] + torrent["name"].ToString()) + TVSettings.Instance.VideoExtensionsArray[0] , 0 ) ); } } } catch (WebException wex) { LOGGER.Warn( $"Could not connect to {wex.Response.ResponseUri}, Please check qBitTorrent Settings and ensure qBitTorrent is running with no password required for local connections: {wex.Message}"); } catch (JsonReaderException ex) { LOGGER.Warn(ex, $"Could not parse data recieved from {settingsString} {downloadsString} {torrentDetailsString}"); } return(ret); }