示例#1
0
        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);
        }
示例#2
0
        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}");
            }
        }