예제 #1
0
        private void OnTaskApplied(MetaFileEntry x)
        {
            TotalDownloadedBytes += x.FileSize;
            DownloadProgress      = ((double)TotalDownloadedBytes / TotalBytesToDownload) * 100;

            ProcessTask();
        }
예제 #2
0
        static void Main(string[] args)
        {
            string patchDir;

            if (args.Length == 0)
            {
                Console.WriteLine("Give the patch directory in argument");
                patchDir = Console.ReadLine();
            }
            else
            {
                patchDir = args[0];
            }

            if (File.Exists(Path.Combine(patchDir, "patch.xml")))
            {
                File.Delete(Path.Combine(patchDir, "patch.xml"));
            }

            var files = Directory.EnumerateFiles(patchDir, "*", SearchOption.AllDirectories).OrderBy(p => p).ToList();

            foreach (var file in files.Where(file => file.StartsWith("patch\\Resources")).ToArray())
            {
                files.Remove(file);
                files.Add(file);
            }

            var tasks = new List <MetaFileEntry>();

            using (var md5Hasher = MD5.Create())
            {
                for (int i = 0; i < files.Count; i++)
                {
                    var file = files[i];

                    if ((File.GetAttributes(file) & FileAttributes.Hidden) != 0)
                    {
                        continue;
                    }

                    var content    = File.ReadAllBytes(file);
                    var md5Hasher2 = MD5.Create();

                    var task =
                        new MetaFileEntry
                    {
                        LocalURL    = GetRelativePath(file, patchDir + "\\"),
                        RelativeURL = GetRelativePath(file, patchDir + "\\"),
                        FileMD5     = Convert.ToBase64String(md5Hasher2.ComputeHash(content)),
                        FileSize    = content.Length,
                    };

                    md5Hasher2.Dispose();

                    var pathBytes = Encoding.UTF8.GetBytes(task.LocalURL.ToLower());
                    md5Hasher.TransformBlock(pathBytes, 0, pathBytes.Length, pathBytes, 0);
                    if (i == files.Count - 1)
                    {
                        md5Hasher.TransformFinalBlock(content, 0, content.Length);
                    }
                    else
                    {
                        md5Hasher.TransformBlock(content, 0, content.Length, content, 0);
                    }

                    tasks.Add(task);
                    Console.WriteLine(@"Add " + task.RelativeURL);
                }

                var patch = new MetaFile
                {
                    Tasks          = tasks.ToArray(),
                    FolderChecksum = BitConverter.ToString(md5Hasher.Hash).Replace("-", "").ToLower(),
                };


                XmlUtils.Serialize(Path.Combine(patchDir, "patch.xml"), patch);
                Console.WriteLine(@"Created Patch in {0} !", Path.Combine(patchDir, "patch.xml"));
            }

            Console.Read();
        }