コード例 #1
0
        /// <summary>
        /// Move torrents to bottom in queue  (API: queue-move-bottom)
        /// </summary>
        /// <param name="ids"></param>
        public async void TorrentQueueMoveBottomAsync(int[] ids)
        {
            var arguments = new Dictionary<string, object>();
            arguments.Add("ids", ids);

            var request = new TransmissionRequest("queue-move-bottom", arguments);
            var response = await SendRequestAsync(request);
        }
コード例 #2
0
        /// <summary>
        /// Set new location for torrents files (API: torrent-set-location)
        /// </summary>
        /// <param name="ids">Torrent ids</param>
        /// <param name="location">The new torrent location</param>
        /// <param name="move">Move from previous location</param>
        public async void TorrentSetLocationAsync(int[] ids, string location, bool move)
        {
            var arguments = new Dictionary<string, object>();
            arguments.Add("ids", ids);
            arguments.Add("location", location);
            arguments.Add("move", move);

            var request = new TransmissionRequest("torrent-set-location", arguments);
            var response = await SendRequestAsync(request);
        }
コード例 #3
0
 /// <summary>
 /// Set information to current session (API: session-set)
 /// </summary>
 /// <param name="settings">New session settings</param>
 public void SetSessionSettings(SessionSettings settings)
 {
     var request = new TransmissionRequest("session-set", settings.ToDictionary());
     var response = SendRequest(request);
 }
コード例 #4
0
        /// <summary>
        /// See if your incoming peer port is accessible from the outside world (API: port-test)
        /// </summary>
        /// <returns>Accessible state</returns>
        public bool CheckPort()
        {
            var request = new TransmissionRequest("port-test", null);
            var response = SendRequest(request);

            var data = response.Deserialize<JObject>();
            var result = (bool)data.GetValue("port-is-open");
            return result;
        }
コード例 #5
0
        /// <summary>
        /// Update blocklist (API: blocklist-update)
        /// </summary>
        /// <returns>Blocklist size</returns>
        public async Task<int> BlocklistUpdateAsync()
        {
            var request = new TransmissionRequest("blocklist-update", null);
            var response = await SendRequestAsync(request);

            var data = response.Deserialize<JObject>();
            var result = (int)data.GetValue("blocklist-size");
            return result;
        }
コード例 #6
0
 /// <summary>
 /// Close current session (API: session-close)
 /// </summary>
 public async void CloseSessionAsync()
 {
     var request = new TransmissionRequest("session-close", null);
     var response = await SendRequestAsync(request);
 }
コード例 #7
0
 /// <summary>
 /// Set torrent params (API: torrent-set)
 /// </summary>
 /// <param name="torrentSet">New torrent params</param>
 public async void TorrentSetAsync(TorrentSettings settings)
 {
     var request = new TransmissionRequest("torrent-set", settings.ToDictionary());
     var response = await SendRequestAsync(request);
 }
コード例 #8
0
        /// <summary>
        /// Update blocklist (API: blocklist-update)
        /// </summary>
        /// <returns>Blocklist size</returns>
        public int BlocklistUpdate()
        {
            var request = new TransmissionRequest("blocklist-update", null);
            var response = SendRequest(request);

            var data = response.Deserialize<JObject>();
            var result = (int)data.GetValue("blocklist-size");
            return result;
        }
コード例 #9
0
 /// <summary>
 /// Get information of current session (API: session-get)
 /// </summary>
 /// <returns>Session information</returns>
 public async Task<SessionInfo> GetSessionInformationAsync()
 {
     var request = new TransmissionRequest("session-get", null);
     var response = await SendRequestAsync(request);
     var result = response.Deserialize<SessionInfo>();
     return result;
 }
コード例 #10
0
        /// <summary>
        /// Add torrent (API: torrent-add)
        /// </summary>
        /// <returns>Torrent info (ID, Name and HashString)</returns>
        public async Task<NewTorrentInfo> TorrentAddAsync(NewTorrent torrent)
        {
            if (String.IsNullOrWhiteSpace(torrent.Metainfo) && String.IsNullOrWhiteSpace(torrent.Filename))
                throw new Exception("Either \"filename\" or \"metainfo\" must be included.");

            var request = new TransmissionRequest("torrent-add", torrent.ToDictionary());
            var response = await SendRequestAsync(request);
            var jObject = response.Deserialize<JObject>();

            if (jObject == null || jObject.First == null)
                return null;

            NewTorrentInfo result = null;
            JToken value = null;

            if (jObject.TryGetValue("torrent-duplicate", out value))
                result = JsonConvert.DeserializeObject<NewTorrentInfo>(value.ToString());
            else if (jObject.TryGetValue("torrent-added", out value))
                result = JsonConvert.DeserializeObject<NewTorrentInfo>(value.ToString());

            return result;
        }
コード例 #11
0
 /// <summary>
 /// Get information of current session (API: session-get)
 /// </summary>
 /// <returns>Session information</returns>
 public SessionInfo GetSessionInformation()
 {
     var request = new TransmissionRequest("session-get", null);
     var response = SendRequest(request);
     var result = response.Deserialize<SessionInfo>();
     return result;
 }
コード例 #12
0
 /// <summary>
 /// Get session stat
 /// </summary>
 /// <returns>Session stat</returns>
 public async Task<Statistic> GetSessionStatisticAsync()
 {
     var request = new TransmissionRequest("session-stats", null);
     var response = await SendRequestAsync(request);
     var result = response.Deserialize<Statistic>();
     return result;
 }
コード例 #13
0
 /// <summary>
 /// Get session stat
 /// </summary>
 /// <returns>Session stat</returns>
 public Statistic GetSessionStatistic()
 {
     var request = new TransmissionRequest("session-stats", null);
     var response = SendRequest(request);
     var result = response.Deserialize<Statistic>();
     return result;
 }
コード例 #14
0
        /// <summary>
        /// Rename a file or directory in a torrent (API: torrent-rename-path)
        /// </summary>
        /// <param name="ids">The torrent whose path will be renamed</param>
        /// <param name="path">The path to the file or folder that will be renamed</param>
        /// <param name="name">The file or folder's new name</param>
        public async Task<RenameTorrentInfo> TorrentRenamePathAsync(int id, string path, string name)
        {
            var arguments = new Dictionary<string, object>();
            arguments.Add("ids", new int[] { id });
            arguments.Add("path", path);
            arguments.Add("name", name);

            var request = new TransmissionRequest("torrent-rename-path", arguments);
            var response = await SendRequestAsync(request);

            var result = response.Deserialize<RenameTorrentInfo>();

            return result;
        }
コード例 #15
0
        /// <summary>
        /// Get fields of torrents from ids (API: torrent-get)
        /// </summary>
        /// <param name="fields">Fields of torrents</param>
        /// <param name="ids">IDs of torrents (null or empty for get all torrents)</param>
        /// <returns>Torrents info</returns>
        public async Task<TransmissionTorrents> TorrentGetAsync(string[] fields, params int[] ids)
        {
            var arguments = new Dictionary<string, object>();
            arguments.Add("fields", fields);

            if (ids != null && ids.Length > 0)
                arguments.Add("ids", ids);

            var request = new TransmissionRequest("torrent-get", arguments);

            var response = await SendRequestAsync(request);
            var result = response.Deserialize<TransmissionTorrents>();

            return result;
        }
コード例 #16
0
        /// <summary>
        /// See if your incoming peer port is accessible from the outside world (API: port-test)
        /// </summary>
        /// <returns>Accessible state</returns>
        public async Task<bool> PortTestAsync()
        {
            var request = new TransmissionRequest("port-test", null);
            var response = await SendRequestAsync(request);

            var data = response.Deserialize<JObject>();
            var result = (bool)data.GetValue("port-is-open");
            return result;
        }
コード例 #17
0
        /// <summary>
        /// Remove torrents
        /// </summary>
        /// <param name="ids">Torrents id</param>
        /// <param name="deleteLocalData">Remove local data</param>
        public async void TorrentRemoveAsync(int[] ids, bool deleteData = false)
        {
            var arguments = new Dictionary<string, object>();

            arguments.Add("ids", ids);
            arguments.Add("delete-local-data", deleteData);

            var request = new TransmissionRequest("torrent-remove", arguments);
            var response = await SendRequestAsync(request);
        }
コード例 #18
0
 /// <summary>
 /// Close current session (API: session-close)
 /// </summary>
 public void CloseSession()
 {
     var request = new TransmissionRequest("session-close", null);
     var response = SendRequest(request);
 }
コード例 #19
0
        /// <summary>
        /// Stop torrents (API: torrent-stop)
        /// </summary>
        /// <param name="ids">Torrents id</param>
        public void TorrentStop(int[] ids)
        {
            var arguments = new Dictionary<string, object>();
            arguments.Add("ids", ids);

            var request = new TransmissionRequest("torrent-stop", arguments);
            var response = SendRequest(request);
        }
コード例 #20
0
        /// <summary>
        /// Get free space is available in a client-specified folder.
        /// </summary>
        /// <param name="path">The directory to query</param>
        public async Task<long> FreeSpaceAsync(string path)
        {
            var arguments = new Dictionary<string, object>();
            arguments.Add("path", path);

            var request = new TransmissionRequest("free-space", arguments);
            var response = await SendRequestAsync(request);

            var data = response.Deserialize<JObject>();
            var result = (long)data.GetValue("size-bytes");
            return result;
        }
コード例 #21
0
        /// <summary>
        /// Verify torrents (API: torrent-verify)
        /// </summary>
        /// <param name="ids">Torrents id</param>
        public async void TorrentVerifyAsync(int[] ids)
        {
            var arguments = new Dictionary<string, object>();
            arguments.Add("ids", ids);

            var request = new TransmissionRequest("torrent-verify", arguments);
            var response = await SendRequestAsync(request);
        }
コード例 #22
0
        private async Task<TransmissionResponse> SendRequestAsync(TransmissionRequest request)
        {
            TransmissionResponse result = new TransmissionResponse();

            request.Tag = ++CurrentTag;

            try
            {

                byte[] byteArray = Encoding.UTF8.GetBytes(request.ToJson());

                //Prepare http web request
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(Host);

                webRequest.ContentType = "application/json-rpc";
                webRequest.Headers.Add("X-Transmission-Session-Id:" + SessionID);
                webRequest.Method = "POST";
                webRequest.ContentLength = byteArray.Length;

                if (_needAuthorization)
                    webRequest.Headers.Add("Authorization", _authorization);

                using (Stream dataStream = await webRequest.GetRequestStreamAsync())
                {
                    dataStream.Write(byteArray, 0, byteArray.Length);
                }

                //Send request and prepare response
                using (var webResponse = webRequest.GetResponse())
                {
                    using (Stream responseStream = webResponse.GetResponseStream())
                    {
                        var reader = new StreamReader(responseStream, Encoding.UTF8);
                        var responseString = reader.ReadToEnd();
                        result = JsonConvert.DeserializeObject<TransmissionResponse>(responseString);

                        if (result.Result != "success")
                            throw new Exception(result.Result);
                    }
                }
            }
            catch (WebException ex)
            {
                if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.Conflict)
                {
                    if (ex.Response.Headers.HasKeys())
                    {
                        //If session id expiried, try get session id and send request
                        SessionID = ex.Response.Headers.GetValues("X-Transmission-Session-Id").FirstOrDefault();

                        if (SessionID == null)
                            throw new Exception("Session ID Error");

                        result = await SendRequestAsync(request);
                    }
                }
                else
                    throw ex;
            }

            return result;
        }
コード例 #23
0
        /// <summary>
        /// Move down torrents in queue (API: queue-move-down)
        /// </summary>
        /// <param name="ids"></param>
        public void TorrentQueueMoveDown(int[] ids)
        {
            var arguments = new Dictionary<string, object>();
            arguments.Add("ids", ids);

            var request = new TransmissionRequest("queue-move-down", arguments);
            var response = SendRequest(request);
        }
コード例 #24
0
 /// <summary>
 /// Set information to current session (API: session-set)
 /// </summary>
 /// <param name="settings">New session settings</param>
 public async void SetSessionSettingsAsync(SessionSettings settings)
 {
     var request = new TransmissionRequest("session-set", settings.ToDictionary());
     var response = await SendRequestAsync(request);
 }
コード例 #25
0
 /// <summary>
 /// Set torrent params (API: torrent-set)
 /// </summary>
 /// <param name="torrentSet">New torrent params</param>
 public void SetTorrents(TorrentSettings settings)
 {
     var request = new TransmissionRequest("torrent-set", settings.ToDictionary());
     var response = SendRequest(request);
 }