private Dictionary<SyncGroupConfigMember, FooTree> GetTrees(SyncGroupConfig syncGroup) { Dictionary<SyncGroupConfigMember, FooTree> trees = new Dictionary<SyncGroupConfigMember, FooTree>(); ICollection<string> exceptions = FooSyncEngine.PrepareExceptions(syncGroup.IgnorePatterns); Progress enumCallback = new Progress((current, total, name) => { Console.Write("\r{0} items...", current); }); foreach (SyncGroupConfigMember member in syncGroup.Members) { Console.Write("Enumerating files in "); FooTree tree = null; if (member.Url.IsLocal) { Console.WriteLine(member.Url.LocalPath); try { tree = new FooTree(Foo, member.Url.LocalPath, exceptions, enumCallback); Console.WriteLine("\r{0} items. ", tree.Files.Count); } catch (DirectoryNotFoundException) { Console.WriteLine("Directory {1} not found.", member.Url.LocalPath); continue; } catch (Exception ex) { Console.WriteLine("{0} reading directory {1}: {2}", ex.GetType().Name, member.Url.LocalPath, ex.Message); continue; } } else { Console.WriteLine(member.UrlString); NetClient nc = new NetClient( Foo, member.Url.Host, member.Url.Port, member.Auth == null ? string.Empty : member.Auth.User, member.Auth == null ? string.Empty : member.Auth.Password, member.Url.AbsolutePath.Substring(1) ); tree = nc.GetTree(enumCallback); Console.WriteLine("\r{0} items. ", tree.Files.Count); } trees.Add(member, tree); } return trees; }
private Dictionary<SyncGroupConfigMember, RepositoryStateCollection> GetStates(SyncGroupConfig syncGroup, Dictionary<SyncGroupConfigMember, FooTree> trees) { Dictionary<SyncGroupConfigMember, RepositoryStateCollection> states = new Dictionary<SyncGroupConfigMember, RepositoryStateCollection>(); foreach (SyncGroupConfigMember member in syncGroup.Members) { RepositoryStateCollection state = null; if (member.Url.IsLocal) { try { state = new RepositoryStateCollection(Path.Combine(member.Url.LocalPath, FooSyncEngine.RepoStateFileName)); } catch (FileNotFoundException) { state = new RepositoryStateCollection(); } catch (Exception ex) { Console.WriteLine("Unexpected {0} trying to read repository state: {1}", ex.GetType().Name, ex.Message); continue; } } else { NetClient nc = new NetClient( Foo, member.Url.Host, member.Url.Port, member.Auth == null ? string.Empty : member.Auth.User, member.Auth == null ? string.Empty : member.Auth.Password, member.Url.AbsolutePath.Substring(1) ); state = nc.GetState(); } if (state.Repository == null) { state.AddRepository(trees[member], state.RepositoryID); } foreach (var otherPair in states) { SyncGroupConfigMember otherMember = otherPair.Key; RepositoryStateCollection otherState = otherPair.Value; if (!state.Repositories.ContainsKey(otherState.RepositoryID)) { state.AddRepository(trees[otherMember], otherState.RepositoryID); } if (!otherState.Repositories.ContainsKey(state.RepositoryID)) { otherState.AddRepository(trees[member], state.RepositoryID); } } states.Add(member, state); } foreach (var pair in states) { SyncGroupConfigMember member = pair.Key; RepositoryStateCollection state = pair.Value; if (member.Url.IsLocal) { state.Write(Path.Combine(member.Url.LocalPath, FooSyncEngine.RepoStateFileName)); } else { //TODO } } return states; }