private void SettingFileInfo(FileType type, FileOperateType operateType) { this.Type = type; this.FileOperate = operateType; }
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); }