You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Radarr/src/NzbDrone.Core/Download/Clients/uTorrent/UTorrentTorrent.cs

118 lines
4.3 KiB

using System;
using Newtonsoft.Json;
namespace NzbDrone.Core.Download.Clients.UTorrent
{
[JsonConverter(typeof(UTorrentTorrentJsonConverter))]
public class UTorrentTorrent
{
public string Hash { get; set; }
public UTorrentTorrentStatus Status { get; set; }
public string Name { get; set; }
public long Size { get; set; }
public double Progress { get; set; }
public long Downloaded { get; set; }
public long Uploaded { get; set; }
public double Ratio { get; set; }
public int UploadSpeed { get; set; }
public int DownloadSpeed { get; set; }
public int Eta { get; set; }
public string Label { get; set; }
public int PeersConnected { get; set; }
public int PeersInSwarm { get; set; }
public int SeedsConnected { get; set; }
public int SeedsInSwarm { get; set; }
public double Availablity { get; set; }
public int TorrentQueueOrder { get; set; }
public long Remaining { get; set; }
public string DownloadUrl { get; set; }
public object RssFeedUrl { get; set; }
public object StatusMessage { get; set; }
public object StreamId { get; set; }
public object DateAdded { get; set; }
public object DateCompleted { get; set; }
public object AppUpdateUrl { get; set; }
public string RootDownloadPath { get; set; }
public object Unknown27 { get; set; }
public object Unknown28 { get; set; }
}
internal class UTorrentTorrentJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(UTorrentTorrent);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var result = new UTorrentTorrent();
result.Hash = reader.ReadAsString();
result.Status = (UTorrentTorrentStatus)reader.ReadAsInt32();
result.Name = reader.ReadAsString();
reader.Read();
result.Size = (long)reader.Value;
result.Progress = (int)reader.ReadAsInt32() / 1000.0;
reader.Read();
result.Downloaded = (long)reader.Value;
reader.Read();
result.Uploaded = (long)reader.Value;
result.Ratio = (int)reader.ReadAsInt32() / 1000.0;
result.UploadSpeed = (int)reader.ReadAsInt32();
result.DownloadSpeed = (int)reader.ReadAsInt32();
result.Eta = (int)reader.ReadAsInt32();
result.Label = reader.ReadAsString();
result.PeersConnected = (int)reader.ReadAsInt32();
result.PeersInSwarm = (int)reader.ReadAsInt32();
result.SeedsConnected = (int)reader.ReadAsInt32();
result.SeedsInSwarm = (int)reader.ReadAsInt32();
result.Availablity = (int)reader.ReadAsInt32() / 65536.0;
result.TorrentQueueOrder = (int)reader.ReadAsInt32();
reader.Read();
result.Remaining = (long)reader.Value;
reader.Read();
// Builds before 25406 don't return the remaining items.
if (reader.TokenType != JsonToken.EndArray)
{
result.DownloadUrl = (string)reader.Value;
reader.Read();
result.RssFeedUrl = reader.Value;
reader.Read();
result.StatusMessage = reader.Value;
reader.Read();
result.StreamId = reader.Value;
reader.Read();
result.DateAdded = reader.Value;
reader.Read();
result.DateCompleted = reader.Value;
reader.Read();
result.AppUpdateUrl = reader.Value;
result.RootDownloadPath = reader.ReadAsString();
reader.Read();
result.Unknown27 = reader.Value;
reader.Read();
result.Unknown28 = reader.Value;
while (reader.TokenType != JsonToken.EndArray)
{
reader.Read();
}
}
return result;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotSupportedException();
}
}
}