private static void StateToBytes(SingleSourceHTTPDownloaderState state, BinaryWriter w) { w.Write(state !.Id !); w.Write(state.TempDir ?? string.Empty); w.Write(state.FileSize); w.Write(state.LastModified.ToBinary()); w.Write(state.SpeedLimit); w.Write(state.Url.ToString()); var hasHeaders = state.Headers != null; w.Write(hasHeaders); if (hasHeaders) { XDM.Messaging.StreamHelper.WriteStateHeaders(state.Headers, w); } var hasCookies = state.Cookies != null; w.Write(hasCookies); if (hasCookies) { XDM.Messaging.StreamHelper.WriteStateCookies(state.Cookies, w); } var hasProxy = state.Proxy.HasValue; w.Write(hasProxy); if (hasProxy) { w.Write(state.Proxy !.Value.Host ?? string.Empty); w.Write(state.Proxy !.Value.Port); w.Write((int)state.Proxy !.Value.ProxyType); w.Write(state.Proxy !.Value.UserName ?? string.Empty); w.Write(state.Proxy !.Value.Password ?? string.Empty); } w.Write(state.ConvertToMp3); }
private static SingleSourceHTTPDownloaderState SingleSourceHTTPDownloaderStateFromBytes(BinaryReader r) { var state = new SingleSourceHTTPDownloaderState { Id = r.ReadString(), TempDir = XDM.Messaging.StreamHelper.ReadString(r), FileSize = r.ReadInt64(), LastModified = DateTime.FromBinary(r.ReadInt64()), SpeedLimit = r.ReadInt32(), Url = new Uri(r.ReadString()) }; if (r.ReadBoolean()) { XDM.Messaging.StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > headers); state.Headers = headers; } if (r.ReadBoolean()) { XDM.Messaging.StreamHelper.ReadStateCookies(r, out Dictionary <string, string> cookies); state.Cookies = cookies; } if (r.ReadBoolean()) { state.Proxy = new ProxyInfo { Host = XDM.Messaging.StreamHelper.ReadString(r), Port = r.ReadInt32(), ProxyType = (ProxyType)r.ReadInt32(), UserName = XDM.Messaging.StreamHelper.ReadString(r), Password = XDM.Messaging.StreamHelper.ReadString(r), }; } state.ConvertToMp3 = r.ReadBoolean(); return(state); }
public static void Save(SingleSourceHTTPDownloaderState state) { TransactedBinaryDataReader.Write($"{state.Id}.state", Config.DataDir, w => StateToBytes(state, w)); }