Exemple #1
0
        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();
 }
Exemple #3
0
        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);
        }
Exemple #4
0
        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;
                }
            }
        }