public CollectionItem(ProjectBase projectInfo, List<ProjectCollectionTag> tagsData) : this()
        {
            _tagsData = tagsData;
            Project = projectInfo;

            _miniZoom = new DispatcherTimer { Interval = new TimeSpan(0, 0, 1) };
            _miniZoom.Tick += MiniZoomTick;

            Redraw();
        }
 public static bool LoadFromFile(string fileName, out ProjectBase obj)
 {
     System.Exception exception = null;
     return LoadFromFile(fileName, out obj, out exception);
 }
 /// <summary>
 /// Deserializes xml markup from file into an ProjectBase object
 /// </summary>
 /// <param name="fileName">string xml file to load and deserialize</param>
 /// <param name="obj">Output ProjectBase object</param>
 /// <param name="exception">output Exception value if deserialize failed</param>
 /// <returns>true if this Serializer can deserialize the object; otherwise, false</returns>
 public static bool LoadFromFile(string fileName, out ProjectBase obj, out System.Exception exception)
 {
     exception = null;
     obj = default(ProjectBase);
     try
     {
         obj = LoadFromFile(fileName);
         return true;
     }
     catch (System.Exception ex)
     {
         exception = ex;
         return false;
     }
 }
 public static bool Deserialize(string input, out ProjectBase obj)
 {
     System.Exception exception = null;
     return Deserialize(input, out obj, out exception);
 }
 /// <summary>
 /// Deserializes workflow markup into an ProjectBase object
 /// </summary>
 /// <param name="input">string workflow markup to deserialize</param>
 /// <param name="obj">Output ProjectBase object</param>
 /// <param name="exception">output Exception value if deserialize failed</param>
 /// <returns>true if this Serializer can deserialize the object; otherwise, false</returns>
 public static bool Deserialize(string input, out ProjectBase obj, out System.Exception exception)
 {
     exception = null;
     obj = default(ProjectBase);
     try
     {
         obj = Deserialize(input);
         return true;
     }
     catch (System.Exception ex)
     {
         exception = ex;
         return false;
     }
 }
        private void CreateDirInTree(List<FolderItem> foldersTree, ProjectBase project)
        {

            var dirName = Path.GetDirectoryName(project.FullPath);
            if (dirName == null)
                return;
            var relativeDir = dirName.Substring(_projectCollection.RootDir.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
            var directories = relativeDir.Split(Path.DirectorySeparatorChar);

            var rootItem = foldersTree[0];

            var dir = GetDir(rootItem, directories, 0);
            project.Folder = dir;
            if (dir.Projects == null)
                dir.Projects = new List<ProjectBase>();
            dir.Projects.Add(project);
        }
        private void TreeScan(DirectoryInfo parentDir, BackgroundWorker curWorker)
        {
            curWorker.ReportProgress(0, parentDir.FullName);


            //            var existDir = _projectCollection.Directory.FirstOrDefault(d => d.Name == dirName);
            foreach (var f in parentDir.GetFiles("*" + SolutionFileExt))
            {
                // Если проект уже найден
                if (_existProjects.Contains(f.FullName.ToLower()))
                    continue;
                /*var dirName = parentDir.FullName;
                dirName = NormalizePath(dirName);


                    if (dirName == _rootDirPath)
                    {

                    }
                    else
                    {
                        var relativeDir = dirName.Substring(_rootDirPath.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
                        // Ищем среди каталогов нужный, если он существует
                        if (existDir != null)
                        {
                        }
                        else // если родительский каталог не найдн, создаём его
                        {
                            var directories = relativeDir.Split(Path.DirectorySeparatorChar);
                            var createdPath = string.Empty;
                            ProjectCollectionDirectory lastDir = null;
                            foreach (var directory in directories)
                            {
                                if (string.IsNullOrEmpty(createdPath))
                                    createdPath = directory;
                                else
                                    createdPath = Path.Combine(createdPath, directory);
                                var existParentDir = _projectCollection.Directory.FirstOrDefault(d => d.Path == createdPath);
                                if (existParentDir == null)
                                {

                                    var newDir = new ProjectCollectionDirectory
                                    {
                                        Id = createdPath.GetHashCode(),//(ulong) ((DateTime.Now.ToBinary() % 1000000000000)),
                                        Name = directory,
                                        Path = createdPath,
                                    };
                                    if (lastDir != null)
                                        newDir.ParentId = lastDir.Id;
                                    else
                                        newDir.ParentId = -1;

                                    _projectCollection.Directory.Add(newDir);
                                    lastDir = newDir;
                                }
                                else
                                    lastDir = existParentDir;
                            }

                            existDir = lastDir;
                        }
                    }*/
                //Debug.Assert(existDir != null);
                var newSolution = new SolutionBase
                {
                    CategoryId = -1,//existDir?.Id ?? 
                    Name = f.Name,
                    FullPath = f.FullName,

                };
                ScanFolder(newSolution, parentDir);

                _projectCollection.Project.Add(newSolution);
                _existProjects.Add(newSolution.FullPath.ToLower());

                //TbTest.Text += f.FullName + Environment.NewLine;
            }
            foreach (var f in parentDir.GetFiles("*" + ProjectFileExt))
            {
                if (_existProjects.Contains(f.FullName.ToLower()))
                    continue;

                //Debug.Assert(existDir != null);
                var newProject = new ProjectBase
                {
                    CategoryId = -1,//existDir?.Id ?? 
                    Name = f.Name,
                    FullPath = f.FullName,

                };
                ScanFolder(newProject, parentDir);

                _projectCollection.Project.Add(newProject);
                _existProjects.Add(newProject.FullPath.ToLower());

            }
            foreach (var d in parentDir.GetDirectories())
            {
                //var relativeDir = d.FullName.Substring(_rootDirPath.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
                TreeScan(d, curWorker);
            }
        }
        private static void ScanFolder(ProjectBase project, DirectoryInfo parentDir)
        {
            var filesInFolder = new FilesInFolder();
            var readmes = parentDir.GetFiles("readme.md");
            if (readmes.Length > 0)
            {
                filesInFolder.Readme = readmes[0];
            }

            var screenshots = parentDir.GetFiles("screenshot.png");
            if (screenshots.Length > 0)
            {
                filesInFolder.Screenshot = screenshots[0];
            }

            if (filesInFolder.Readme != null)
            {
                project.ReadmePath = filesInFolder.Readme.FullName;
                project.Value = File.ReadAllText(filesInFolder.Readme.FullName);
            }
            if (filesInFolder.Screenshot != null)
                project.ImagePath = filesInFolder.Screenshot.FullName;
        }
        private void OnFileDrop(object sender, RoutedEventArgs e)
        {
            var dfc = (DropFileControl) sender;

            var fullProjectPath = dfc.DroppedFile;

            var ext = Path.GetExtension(fullProjectPath);
            var dirName = Path.GetDirectoryName(fullProjectPath);
            var dirInfo = new DirectoryInfo(dirName);
            var name = Path.GetFileNameWithoutExtension(fullProjectPath);


            ProjectBase newProject = null;
            if (ext == SolutionFileExt)
            {
                newProject = new SolutionBase();
                _projectCollection.Solution.Add((SolutionBase)newProject);
            }
            else if (ext == ProjectFileExt)
            {
                newProject = new ProjectBase();
                _projectCollection.Project.Add(newProject);
            }
            if (newProject == null) return;
            newProject.CategoryId = -1;
            newProject.Name = name;
            newProject.FullPath = fullProjectPath;

            ScanFolder(newProject, dirInfo);

            var item = new CollectionItem(newProject, _projectCollection.Tags);
            _collectionItems.Add(item);
            _existProjects.Add(newProject.FullPath.ToLower());

            CreateDirInTree(_folders, newProject);


            RefreshView();
            RefreshFolders();
        }
 public static bool LoadFromFile(string fileName, out ProjectBase obj)
 {
     System.Exception exception = null;
     return(LoadFromFile(fileName, out obj, out exception));
 }
 public static bool Deserialize(string input, out ProjectBase obj)
 {
     System.Exception exception = null;
     return(Deserialize(input, out obj, out exception));
 }