public void GetFilesDiff(Action <List <FileDiffListItem>, Dictionary <String, String> > callback) { UpdateInfo latestUpdate = LatestVersion; List <FileDiffListItem> diff = new List <FileDiffListItem>(); Dictionary <String, String> items = new Dictionary <String, String>(); foreach (string curFile in Directory.GetFiles(this.ProjectFolder, "*", SearchOption.AllDirectories)) { string curChecksum = FileHasher.GetFileChecksum(curFile); string curRelativePath = AbsoluteToRelativePath(this.ProjectFolder, curFile); items.Add(curRelativePath, curChecksum); if (latestUpdate != null) { string baseCheckSum; if (latestUpdate.fileChecksums.TryGetValue(curRelativePath, out baseCheckSum)) { if (!baseCheckSum.Equals(curChecksum)) { diff.Add(new FileDiffListItem(curRelativePath, FileDiffListItem.FileState.CHANGED)); } } else { diff.Add(new FileDiffListItem(curRelativePath, FileDiffListItem.FileState.ADDED)); } } else { diff.Add(new FileDiffListItem(curRelativePath, FileDiffListItem.FileState.ADDED)); } } if (latestUpdate != null) { foreach (KeyValuePair <string, string> cur in LatestVersion.fileChecksums) { if (!File.Exists(ProjectFolder + "/" + cur.Key)) { diff.Add(new FileDiffListItem(cur.Key, FileDiffListItem.FileState.REMOVED)); } } } callback.Invoke(diff, items); }