Example #1
0
 private void SettingFileInfo(FileType type, FileOperateType operateType)
 {
     this.Type        = type;
     this.FileOperate = operateType;
 }
Example #2
0
        public async Task <bool> Update()
        {
            bool hasAnyError = false;

            progress.Reset();
            progress.Total = Files.Count;
            long lastDownloadSize = VersionDistance.DownloadSize;

            foreach (var item in Files)
            {
                FileOperateType operate = (FileOperateType)Enum.Parse(typeof(FileOperateType), item.Operate);
                progress.CurPos++;

                string sizeStr = new FileSize(lastDownloadSize).ToString();
                //progress.Status = item.LocalPath + "\r\n总剩余 " + sizeStr + " " + Util.FileSizeToDownloadTime(lastDownloadSize);
                lastDownloadSize -= item.nsize;
                if (lastDownloadSize < 0)
                {
                    lastDownloadSize = 0;
                }


                //local file existed and not in force update mode. then check whether need skip.
                if (File.Exists(item.LocalPath) && operate != FileOperateType.ForceUpdate)
                {
                    if (operate == FileOperateType.Delete)
                    {
                        File.Delete(item.LocalPath);
                        item.Result = "deleted";
                        continue;
                    }

                    FileInfo fi = new FileInfo(item.LocalPath);
                    if (fi.Length == item.nsize)
                    {
                        string md5 = Util.Md5File(item.LocalPath);
                        if (md5 == item.Md5) // same as server
                        {
                            item.Result = "skiped(same)";
                            continue;
                        }
                    }

                    // changed but shoud skip changed local files.
                    if (operate == FileOperateType.SkipOnChanged)
                    {
                        item.Result = "skiped(skip on changed)";
                        continue;
                    }
                }
                progress.Status = item.LocalPath + "\r\n总剩余 " + sizeStr + " " + Util.FileSizeToDownloadTime(lastDownloadSize);
                //update the file.
                item.Result = await DownloadFile(item.Url, item.LocalPath);

                if (item.Result != "ok")
                {
                    hasAnyError = true;
                }
            }
            //update state
            if (hasAnyError)
            {
                //should treat as update failed?
            }
            LocalVerions = ServerVerions;
            Util.SaveObjToFile(LocalVerions, "vers.dat");
            IsDownloading = false;
            await Task.Delay(100);

            progress.Percent = 100;
            progress.Status  = "ok";
            return(true);
        }