private void OkDialogButton_Click(object sender, EventArgs e) { JsonObject request = Requests.CreateBasicObject(ProtocolConstants.METHOD_TORRENTSET); JsonObject arguments = Requests.GetArgObject(request); arguments.Put(ProtocolConstants.KEY_IDS, Toolbox.ListViewSelectionToIdArray(selections)); arguments.Put(ProtocolConstants.FIELD_SPEEDLIMITUPENABLED, uploadLimitEnableField.Checked ? 1 : 0); arguments.Put(ProtocolConstants.FIELD_UPLOADLIMITED, uploadLimitEnableField.Checked ? 1 : 0); arguments.Put(ProtocolConstants.FIELD_UPLOADLIMIT, uploadLimitField.Value); arguments.Put(ProtocolConstants.FIELD_SPEEDLIMITUP, uploadLimitField.Value); arguments.Put(ProtocolConstants.FIELD_SPEEDLIMITDOWNENABLED, downloadLimitEnableField.Checked ? 1 : 0); arguments.Put(ProtocolConstants.FIELD_DOWNLOADLIMITED, downloadLimitEnableField.Checked ? 1 : 0); arguments.Put(ProtocolConstants.FIELD_DOWNLOADLIMIT, downloadLimitField.Value); arguments.Put(ProtocolConstants.FIELD_SPEEDLIMITDOWN, downloadLimitField.Value); arguments.Put(ProtocolConstants.FIELD_PEERLIMIT, peerLimitValue.Value); if (seedRatioLimitValue.Enabled) { arguments.Put(ProtocolConstants.FIELD_SEEDRATIOLIMIT, seedRatioLimitValue.Value); } if (seedIdleLimitValue.Enabled) { arguments.Put(ProtocolConstants.FIELD_SEEDIDLELIMIT, seedIdleLimitValue.Value); } if (honorsSessionLimits.Enabled) { arguments.Put(ProtocolConstants.FIELD_HONORSSESSIONLIMITS, honorsSessionLimits.Checked); } if (seedRatioLimitedCheckBox.Enabled) { arguments.Put(ProtocolConstants.FIELD_SEEDRATIOMODE, (int)(2 - seedRatioLimitedCheckBox.CheckState)); } if (seedIdleLimitedCheckBox.Enabled) { arguments.Put(ProtocolConstants.FIELD_SEEDIDLEMODE, (int)(2 - seedIdleLimitedCheckBox.CheckState)); } if (bandwidthComboBox.Enabled) { int bandwidthPriority = 0; if (bandwidthComboBox.SelectedIndex == 0) { bandwidthPriority = -1; } else if (bandwidthComboBox.SelectedIndex == 2) { bandwidthPriority = 1; } arguments.Put(ProtocolConstants.FIELD_BANDWIDTHPRIORITY, bandwidthPriority); } Torrent firstTorrent = (Torrent)selections[0]; JsonArray trackerRemove = new JsonArray(); foreach (JsonObject tracker in firstTorrent.Trackers) { int id = Toolbox.ToInt(tracker[ProtocolConstants.FIELD_ID]); if (!trackersList.Items.Contains(id)) { trackerRemove.Add(id); } } JsonArray trackerReplace = new JsonArray(); foreach (TrackerListItem t in trackersList.Items) { if (!t.Changed) { continue; } trackerReplace.Add(t.Id); trackerReplace.Add(t.Announce); } JsonArray trackerAdd = new JsonArray(); foreach (TrackerListItem t in trackersList.Items) { if (t.Id == -1) { trackerAdd.Add(t.Announce); } } if (trackerRemove.Count > 0) { arguments.Put(ProtocolConstants.FIELD_TRACKER_REMOVE, trackerRemove); } if (trackerReplace.Count > 0) { arguments.Put(ProtocolConstants.FIELD_TRACKER_REPLACE, trackerReplace); } if (trackerAdd.Count > 0) { arguments.Put(ProtocolConstants.FIELD_TRACKER_ADD, trackerAdd); } Program.Form.SetupAction(CommandFactory.RequestAsync(request)); this.Close(); }
static void wc_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e) { if (!e.Cancelled) { ICommand cmd; if (e.Error != null) { var ex = e.Error as WebException; string title = OtherStrings.Error; if (ex?.Response != null) { HttpWebResponse response = (HttpWebResponse)ex.Response; if (response.StatusCode == HttpStatusCode.Conflict && ((TransmissonRequest)e.UserState).allowRecursion) { try { string sessionid = ex.Response.Headers["X-Transmission-Session-Id"]; if (!string.IsNullOrEmpty(sessionid)) { TransmissionWebClient.XTransmissionSessionId = sessionid; ((TransmissionWebClient)sender).UploadDataAsync(new Uri(Program.Settings.Current.RpcUrl), null, ((TransmissonRequest)e.UserState).data, new TransmissonRequest(((TransmissonRequest)e.UserState).requestid, ((TransmissonRequest)e.UserState).data, false)); return; } } catch { } } else if (response.StatusCode == HttpStatusCode.NotFound) { title = OtherStrings.NotFound; ex = new WebException(OtherStrings.NotFoundError); } else if (response.StatusCode == HttpStatusCode.Forbidden || response.StatusCode == HttpStatusCode.Unauthorized) { using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(response.CharacterSet))) { String s = sr.ReadToEnd(); if (s.Contains("Unauthorized IP Address.")) { title = OtherStrings.UnauthorizedIP; ex = new WebException(OtherStrings.UnauthorizedIPError); } else if (s.Contains("Unauthorized User")) { title = OtherStrings.UnauthorizedUser; ex = new WebException(OtherStrings.UnauthorizedUserError); } } } } cmd = new ErrorCommand(title, ex?.Message, false); } else { try { #if LOGRPC Program.LogDebug("RPC response: " + ((TransmissonRequest)e.UserState).requestid, GetString(e.Result)); #endif JsonObject jsonResponse = (JsonObject)JsonConvert.Import(GetString(e.Result)); if ((string)jsonResponse["result"] != "success") { string response = (string)jsonResponse["result"]; if (response.StartsWith("http error")) { int i = response.IndexOf(':'); if (i >= 0) { response = response.Substring(i + 2); } else { response = response.Remove(0, 11); /* strlen("http error") = 11 */ } cmd = new ErrorCommand(OtherStrings.UnsuccessfulRequest, string.Format(OtherStrings.HttpError, Environment.NewLine, response), true); } else { cmd = new ErrorCommand(OtherStrings.UnsuccessfulRequest, response, true); } if (Toolbox.ToShort(jsonResponse[ProtocolConstants.KEY_TAG]).Equals((short)ResponseTag.UpdateBlocklist)) { RemoteSettingsDialog.BlocklistUpdateDone(-1); } } else { switch (Toolbox.ToShort(jsonResponse[ProtocolConstants.KEY_TAG])) { case (short)ResponseTag.TorrentGet: cmd = new TorrentGetCommand(jsonResponse); break; case (short)ResponseTag.SessionGet: cmd = new SessionCommand(jsonResponse, ((WebClient)sender).Headers); break; case (short)ResponseTag.SessionStats: cmd = new SessionStatsCommand(jsonResponse); break; case (short)ResponseTag.UpdateFiles: cmd = new UpdateFilesCommand(jsonResponse); break; case (short)ResponseTag.PortTest: cmd = new PortTestCommand(jsonResponse); break; case (short)ResponseTag.UpdateBlocklist: cmd = new UpdateBlocklistCommand(jsonResponse); break; case (short)ResponseTag.DoNothing: cmd = new NoCommand(); break; default: cmd = new ErrorCommand(OtherStrings.UnknownResponseTag, e.Result != null ? GetString(e.Result) : "null", false); break; } } } catch (InvalidCastException) { cmd = new ErrorCommand(OtherStrings.UnableToParse, e.Result != null ? GetString(e.Result) : "Null", false); } catch (JsonException ex) { cmd = new ErrorCommand($"{OtherStrings.UnableToParse} ({ex.GetType()})", GetString(e.Result), false); } catch (Exception ex) { cmd = new ErrorCommand(ex, false); } } try { cmd.Execute(); } catch (Exception ee) { // just for debugging... Console.WriteLine(ee.Message); Program.LogDebug(ee.Source, ee.Message); } ((TransmissionWebClient)sender).OnCompleted(cmd); } else { if (!Program.Connected) { Program.Connected = false; Program.Form.UpdateStatus("", false); Program.Form.connectButton.Enabled = Program.Form.connectToolStripMenuItem.Enabled = true; } } }
private void TorrentPropertiesDialog_Load(object sender, EventArgs e) { Torrent firstTorrent = (Torrent)selections[0]; this.Text = selections.Count == 1 ? firstTorrent.TorrentName : OtherStrings.MultipleTorrentProperties; uploadLimitField.Value = firstTorrent.SpeedLimitUp >= 0 && firstTorrent.SpeedLimitUp <= uploadLimitField.Maximum ? firstTorrent.SpeedLimitUp : 0; downloadLimitField.Value = firstTorrent.SpeedLimitDown >= 0 && firstTorrent.SpeedLimitDown <= downloadLimitField.Maximum ? firstTorrent.SpeedLimitDown : 0; uploadLimitField.Enabled = uploadLimitEnableField.Checked = firstTorrent.SpeedLimitUpEnabled; downloadLimitField.Enabled = downloadLimitEnableField.Checked = firstTorrent.SpeedLimitDownEnabled; bandwidthComboBox.Items.Add(OtherStrings.Low); bandwidthComboBox.Items.Add(OtherStrings.Normal); bandwidthComboBox.Items.Add(OtherStrings.High); bandwidthComboBox.SelectedIndex = 1; try { honorsSessionLimits.Checked = firstTorrent.HonorsSessionLimits; honorsSessionLimits.Enabled = true; } catch { honorsSessionLimits.Enabled = false; } try { seedRatioLimitValue.Value = firstTorrent.SeedRatioLimit >= 0 && (decimal)firstTorrent.SeedRatioLimit <= seedRatioLimitValue.Maximum ? (decimal)firstTorrent.SeedRatioLimit : 0; seedRatioLimitedCheckBox.CheckState = (CheckState)(2 - firstTorrent.SeedRatioMode); seedRatioLimitValue.Enabled = seedRatioLimitedCheckBox.CheckState == CheckState.Checked; seedRatioLimitedCheckBox.Enabled = true; } catch { seedRatioLimitValue.Enabled = seedRatioLimitedCheckBox.Enabled = false; } try { seedIdleLimitValue.Value = firstTorrent.SeedIdleLimit >= 0 && (decimal)firstTorrent.SeedIdleLimit <= seedIdleLimitValue.Maximum ? (decimal)firstTorrent.SeedIdleLimit : 0; seedIdleLimitedCheckBox.CheckState = (CheckState)(2 - firstTorrent.SeedIdleMode); seedIdleLimitValue.Enabled = seedIdleLimitedCheckBox.CheckState == CheckState.Checked; seedIdleLimitedCheckBox.Enabled = true; } catch { seedIdleLimitValue.Enabled = seedIdleLimitedCheckBox.Enabled = false; } try { if (firstTorrent.BandwidthPriority < 0) { bandwidthComboBox.SelectedIndex = 0; } else if (firstTorrent.BandwidthPriority > 0) { bandwidthComboBox.SelectedIndex = 2; } else { bandwidthComboBox.SelectedIndex = 1; } bandwidthLabel.Enabled = bandwidthComboBox.Enabled = true; } catch { bandwidthLabel.Enabled = bandwidthComboBox.Enabled = false; } peerLimitValue.Value = firstTorrent.MaxConnectedPeers >= 0 && (decimal)firstTorrent.MaxConnectedPeers <= peerLimitValue.Maximum ? (decimal)firstTorrent.MaxConnectedPeers : 0; // TODO: http://www.codeguru.com/cpp/controls/controls/lists,treesandcombos/article.php/c2291 removeTrackerButton.Enabled = false; trackersList.Items.AddRange( Array.ConvertAll <JsonObject, TrackerListItem>((JsonObject[])firstTorrent.Trackers.ToArray(typeof(JsonObject)), delegate(JsonObject jo) { return(new TrackerListItem((string)jo[ProtocolConstants.ANNOUNCE], Toolbox.ToInt(jo[ProtocolConstants.FIELD_ID]))); }) ); }
public void UpdateStats(JsonObject stats) { try { Toolbox.MaxSize ms = (Toolbox.MaxSize)(unitFactorComboBox.SelectedIndex + 1); JsonObject sessionstats = (JsonObject)stats["current-stats"]; JsonObject cumulativestats = (JsonObject)stats["cumulative-stats"]; TimeSpan ts = TimeSpan.FromSeconds(Toolbox.ToLong(sessionstats["secondsActive"])); downloadedBytesValue1.Text = Toolbox.GetFileSize(Toolbox.ToLong(sessionstats["downloadedBytes"]), ms); uploadedBytesValue1.Text = Toolbox.GetFileSize(Toolbox.ToLong(sessionstats["uploadedBytes"]), ms); filesAddedValue1.Text = ((JsonNumber)sessionstats["filesAdded"]).ToString(); sessionCountValue1.Text = ((JsonNumber)sessionstats["sessionCount"]).ToString(); secondsActiveValue1.Text = Toolbox.FormatTimespanLong(ts); ts = TimeSpan.FromSeconds(Toolbox.ToLong(cumulativestats["secondsActive"])); downloadedBytesValue2.Text = Toolbox.GetFileSize(Toolbox.ToLong(cumulativestats["downloadedBytes"]), ms); uploadedBytesValue2.Text = Toolbox.GetFileSize(Toolbox.ToLong(cumulativestats["uploadedBytes"]), ms); filesAddedValue2.Text = ((JsonNumber)cumulativestats["filesAdded"]).ToString(); sessionCountValue2.Text = ((JsonNumber)cumulativestats["sessionCount"]).ToString(); secondsActiveValue2.Text = ts.Ticks < 0 ? OtherStrings.UnknownNegativeResult : Toolbox.FormatTimespanLong(ts); } catch (Exception ex) { MessageBox.Show(ex.Message, "Unable to load stats data", MessageBoxButtons.OK, MessageBoxIcon.Error); CloseAndDispose(); } }