Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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));
                    }
                }
            });
        }