private static bool IsSameFileExists(DownloadTarget target) { if (!File.Exists(target.Path)) { return(false); } var fileInfo = new FileInfo(target.Path); if (fileInfo.Length != target.Size) { return(false); } if (string.IsNullOrEmpty(target.Sha1)) { return(true); } using (var fileStream = File.OpenRead(target.Path)) using (var sha1 = new SHA1CryptoServiceProvider()) { var sb = new StringBuilder(40); foreach (var b in sha1.ComputeHash(fileStream)) { sb.Append(b.ToString("x2")); } return(sb.ToString() == target.Sha1); } }
public void Add(string ip, DownloadTarget target) { var download = new Download(); download.Ip = ip; download.Target = target; this.downloadsRepository.Add(download); this.downloadsRepository.SaveChanges(); }
private static void CheckTarget(DownloadTarget target, List <DownloadTarget> result, Action <string> report) { report?.Invoke(target.Path); if (IsSameFileExists(target)) { return; } lock (result) result.Add(target); }
public override void Execute(string[] args) { if (types.Contains("?")) { HelpTypes(); return; } foreach (var t in types) { try { DownloadTarget downTarg = null; if (typeQueries.ContainsKey(t.ToLower())) { downTarg = typeQueries[t.ToLower()]; } else if (typeQueries.ContainsKey(t.ToLower() + "s")) { downTarg = typeQueries[t.ToLower() + "s"]; } if (downTarg == null) { Console.WriteLine("No ability to download " + t); Console.WriteLine("---------"); continue; } Console.WriteLine("Downloading " + t); downTarg.Query.PageInfo = new PagingInfo() { Count = 50, PageNumber = 1, }; var entList = new List <Entity>(); EntityCollection entRes = null; while (true) { entRes = OrgService.RetrieveMultiple(downTarg.Query); foreach (var res in entRes.Entities) { if (!files.Any() || files.Contains(res.GetAttributeValue <string>(downTarg.Name))) { entList.Add(res); } } Console.WriteLine("Currently " + entList.Count + " records in queue..."); if (entRes.MoreRecords) { downTarg.Query.PageInfo.PageNumber++; downTarg.Query.PageInfo.PagingCookie = entRes.PagingCookie; } else { break; } } var targDir = t; if (custdlConfig != null && custdlConfig.Sections.ContainsSection("map")) { if (custdlConfig["map"].ContainsKey(t)) { targDir = custdlConfig["map"][t]; } } Console.WriteLine("Writing to: " + targDir); System.IO.Directory.CreateDirectory(targDir); foreach (var r in entList) { if (r.Attributes.ContainsKey(downTarg.Filename) && r.Attributes.ContainsKey(downTarg.Data)) { var data = r.GetAttributeValue <string>(downTarg.Data); if (downTarg.Process != null) { data = downTarg.Process(data, r); } if (data == null) { continue; } var fname = r.GetAttributeValue <string>(downTarg.Filename); fname = fname.Replace("/", "_"); fname = fname.Replace("\\", "_"); if (!string.IsNullOrWhiteSpace(downTarg.FileExten) && new FileInfo(fname).Extension != "." + downTarg.FileExten) { fname = Path.ChangeExtension(fname, downTarg.FileExten); } File.WriteAllText(targDir + "/" + fname, data); Console.WriteLine("Downloaded " + r.GetAttributeValue <string>(downTarg.Filename)); } else { Console.WriteLine("Failed " + r.GetAttributeValue <string>(downTarg.Name)); } } } catch { throw; } } }