private void LoadFolders(ProjectItem item, ProjectEventHandler callback) { m_storage.GetFolders(item.ToString(), getFoldersCompleted => { string[] names = getFoldersCompleted.Data; if (names != null && names.Length > 0) { Action <ProjectEventHandler>[] loadFoldersActions = new Action <ProjectEventHandler> [names.Length]; if (item.Children == null) { item.Children = new List <ProjectItem>(names.Length); } for (int i = 0; i < names.Length; ++i) { string name = names[i]; ProjectItem childItem = ProjectItem.CreateFolder(name); item.AddChild(childItem); loadFoldersActions[i] = cb => LoadFolders(childItem, cb); } Parallel(loadFoldersActions, parallelCallback => { if (callback != null) { callback(new ProjectPayload()); } }); } else { if (callback != null) { callback(new ProjectPayload()); } } }, false); }
public void LoadProject(string name, ProjectEventHandler <ProjectRoot> callback, bool metaOnly = true, params int[] exceptTypes) { HashSet <int> exceptTypesHs = null; if (exceptTypes != null && exceptTypes.Length > 0) { exceptTypesHs = new HashSet <int>(); for (int i = 0; i < exceptTypes.Length; ++i) { if (!exceptTypesHs.Contains(exceptTypes[i])) { exceptTypesHs.Add(exceptTypes[i]); } } } m_storage.CheckFolderExists(name, checkFolderResult => { bool exists = checkFolderResult.Data; if (exists) { ProjectRoot root = new ProjectRoot(); m_storage.LoadFile(name + "." + ProjectMetaExt, loadMetaCallback => { if (loadMetaCallback.Data != null) { root.Meta = m_serializer.Deserialize <ProjectMeta>(loadMetaCallback.Data); } else { root.Meta = new ProjectMeta(); } m_storage.LoadFile(name + "." + ProjectDataExt, loadDataCallback => { if (loadDataCallback.Data != null) { root.Data = m_serializer.Deserialize <ProjectData>(loadDataCallback.Data); } else { root.Data = new ProjectData(); } root.Item = ProjectItem.CreateFolder(name); LoadFolders(root.Item, loadFoldersCallback => { LoadFiles(root.Item, loadFilesCallback => { if (callback != null) { callback(new ProjectPayload <ProjectRoot>(root)); } }, metaOnly, exceptTypesHs); }); }); }); } else { if (callback != null) { callback(new ProjectPayload <ProjectRoot>(null)); } } }); }