Exemplo n.º 1
0
        public void Parse(NewProjectOptions op)
        {
            var outputDir = Path.GetFullPath(op.OutputPath);

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }

            var songMetaPath = Path.Combine(outputDir, "song.json");
            var midPath      = Path.Combine(outputDir, "venue.mid");
            var lipsyncDir   = Path.Combine(outputDir, "lipsync");
            var extraDir     = Path.Combine(outputDir, "extra");

            if (!Directory.Exists(lipsyncDir))
            {
                Directory.CreateDirectory(lipsyncDir);
                File.WriteAllText(Path.Combine(lipsyncDir, "LIPSYNC_HERE"), "");
                Console.WriteLine($"Created lipsync directory");
            }

            if (!Directory.Exists(extraDir))
            {
                Directory.CreateDirectory(extraDir);
                File.WriteAllText(Path.Combine(extraDir, "EXTRA_MILO_RELATED_FILES_HERE"), "");
                Console.WriteLine($"Created extras directory");
            }

            // Write venue mid
            CreateDefaultMid(midPath);

            // Create song preferences file
            var appState = new AppState(outputDir);

            var song         = CreateP9Song(op.ProjectName);
            var songJson     = JsonSerializer.Serialize(song, appState.JsonSerializerOptions);
            var songJsonPath = Path.Combine(outputDir, "song.json");

            File.WriteAllText(songJsonPath, songJson);
            Console.WriteLine($"Wrote \"song.json\"");

            Console.WriteLine($"Successfully created project in \"{outputDir}\"");
        }
        protected virtual bool CreateProject([NotNull] IBuildContext context, [NotNull] string appName, NewProjectOptions options)
        {
            var projectDirectory = context.ProjectDirectory;

            if (!string.IsNullOrEmpty(appName))
            {
                projectDirectory = Path.Combine(projectDirectory, appName);
            }

            /*
             * Console.WriteLine();
             * Console.WriteLine(Texts.Pathfinder_needs_4_pieces_of_information_to_create_a_new_project__a_unique_Id_for_the_project__the_Sitecore_website_and_data_folder_directories_to_deploy_to__and_the_hostname_of_the_website__If_you_have_not_yet_created_a_Sitecore_website__use_a_tool_like_Sitecore_Instance_Manager_to_create_it_for_you_);
             * Console.WriteLine();
             * Console.WriteLine(Texts.UniqueID);
             * Console.WriteLine();
             * Console.WriteLine(Texts.You_should__not__change_the_project_unique_ID_at_a_later_point__since_Sitecore_item_IDs_are_dependent_on_it_);
             * Console.WriteLine();
             */

            var projectName = "Sitecore";

            if ((options & NewProjectOptions.ConfigureProjectUniqueId) == NewProjectOptions.ConfigureProjectUniqueId)
            {
                var rnd = new Random();
                _projectUniqueId = _codeNames[rnd.Next(_codeNames.Length)] + " " + Guid.NewGuid().ToString("P");
                _projectUniqueId = Console.ReadLine("Enter the project unique ID [" + _projectUniqueId + "]: ", _projectUniqueId, "projectid");

                Console.WriteLine();
                Console.WriteLine(Texts.Pathfinder_requires_physical_access_to_both_the_Website_and_DataFolder_directories_to_deploy_packages_);
                Console.WriteLine();

                Guid guid;
                if (!Guid.TryParse(_projectUniqueId, out guid))
                {
                    projectName = _projectUniqueId;
                }
            }

            if ((options & NewProjectOptions.ConfigureWebsite) == NewProjectOptions.ConfigureWebsite)
            {
                var defaultWebsiteDirectory = context.Configuration.GetString(Constants.Configuration.NewProject.DefaultWebsiteDirectory).TrimEnd('\\');
                if (string.IsNullOrEmpty(defaultWebsiteDirectory))
                {
                    var wwwrootDirectory = context.Configuration.GetString(Constants.Configuration.NewProject.WwwrootDirectory, "c:\\inetpub\\wwwroot").TrimEnd('\\');
                    defaultWebsiteDirectory = $"{wwwrootDirectory}\\{projectName}\\Website";
                }

                do
                {
                    var website = Console.ReadLine($"Enter the directory of the Website [{defaultWebsiteDirectory}]: ", defaultWebsiteDirectory, "website");
                    _websiteDirectory = PathHelper.Combine(defaultWebsiteDirectory, website);
                }while (!ValidateWebsiteDirectory(context));

                Console.WriteLine();

                var defaultDataFolderDirectory = context.Configuration.GetString(Constants.Configuration.NewProject.DefaultDataFolderDirectory).TrimEnd('\\');
                if (string.IsNullOrEmpty(defaultDataFolderDirectory))
                {
                    defaultDataFolderDirectory = Path.Combine(Path.GetDirectoryName(_websiteDirectory), "Data");
                }

                do
                {
                    _dataFolderDirectory = Console.ReadLine("Enter the directory of the DataFolder [" + defaultDataFolderDirectory + "]: ", defaultDataFolderDirectory, "datafolder");
                }while (!ValidateDataFolderDirectory(context));

                Console.WriteLine();
                Console.WriteLine(Texts.Finally_Pathfinder_requires_the_hostname_of_the_Sitecore_website_);
                Console.WriteLine();

                var defaultHostName = context.Configuration.GetString(Constants.Configuration.NewProject.DefaultHostName);
                if (string.IsNullOrEmpty(defaultHostName))
                {
                    defaultHostName = $"http://{projectName.ToLowerInvariant()}";
                }

                _hostName = Console.ReadLine($"Enter the hostname of the website [{defaultHostName}]: ", defaultHostName, "host");
                if (!_hostName.Contains("://"))
                {
                    _hostName = "http://" + _hostName.TrimStart('/');
                }
            }

            /*
             * if ((options & NewProjectOptions.CreateEditor) == NewProjectOptions.CreateEditor)
             * {
             *  Console.WriteLine();
             *  if (Console.YesNo(Texts.Do_you_want_to_install_an_editor_configuration__Y___, true) == true)
             *  {
             *      var editorsDirectory = Path.Combine(context.ToolsDirectory, "files\\editors");
             *      var editors = Directory.GetFiles(editorsDirectory, "*.zip", SearchOption.AllDirectories).ToDictionary(Path.GetFileNameWithoutExtension, e => e);
             *
             *      _editorFileName = Console.Pick(Texts.Select_editor__1___, editors, "editor");
             *  }
             * }
             *
             * if ((options & NewProjectOptions.CreateTaskRunner) == NewProjectOptions.CreateTaskRunner)
             * {
             *  Console.WriteLine();
             *  if (Console.YesNo(Texts.Do_you_want_to_install_a_task_runner__N___, false) == true)
             *  {
             *      var taskRunnerDirectory = Path.Combine(context.ToolsDirectory, "files\\taskrunners");
             *      var taskRunners = Directory.GetFiles(taskRunnerDirectory, "*.zip", SearchOption.AllDirectories).ToDictionary(Path.GetFileNameWithoutExtension, e => e);
             *
             *      _taskRunnerFileName = Console.Pick(Texts.Select_task_runner__1___, taskRunners, "taskrunner");
             *  }
             * }
             */

            if ((options & NewProjectOptions.CreateStarterKit) == NewProjectOptions.CreateStarterKit)
            {
                Console.WriteLine();
                if (Console.YesNo(Texts.Do_you_want_to_install_a_starter_kit__Y___, true) == true)
                {
                    var starterKitDirectory = Path.Combine(context.ToolsDirectory, "files\\starterkits");
                    var starterKits         = Directory.GetFiles(starterKitDirectory, "*.zip", SearchOption.AllDirectories).ToDictionary(Path.GetFileNameWithoutExtension, e => e);

                    _starterKitFileName = Console.Pick(Texts.Select_starter_kit__1___, starterKits, "starterkit");
                }
            }

            Console.WriteLine();
            Console.WriteLine(Texts.Creating_project___);

            if ((options & NewProjectOptions.CopyProjectTemplate) == NewProjectOptions.CopyProjectTemplate)
            {
                CopyProjectTemplate(context, projectDirectory);
            }

            if ((options & NewProjectOptions.CopyConfig) == NewProjectOptions.CopyConfig)
            {
                CopyConfig(context, projectDirectory);
            }

            if ((options & NewProjectOptions.CopyCmd) == NewProjectOptions.CopyCmd)
            {
                CopyCmd(context, projectDirectory);
            }

            if ((options & NewProjectOptions.CreateStarterKit) == NewProjectOptions.CreateStarterKit)
            {
                CopyStarterKit(context, projectDirectory);
            }

            /*
             * if ((options & NewProjectOptions.CreateEditor) == NewProjectOptions.CreateEditor)
             * {
             *  CopyEditor(context, projectDirectory);
             * }
             *
             * if ((options & NewProjectOptions.CreateTaskRunner) == NewProjectOptions.CreateTaskRunner)
             * {
             *  CopyTaskRunner(context, projectDirectory);
             * }
             */

            UpdateConfigFile(context, projectDirectory);

            return(true);
        }
        /*
         * protected virtual void CopyTaskRunner([NotNull] IBuildContext context, [NotNull] string projectDirectory)
         * {
         *  if (!string.IsNullOrEmpty(_taskRunnerFileName))
         *  {
         *      FileSystem.Unzip(_taskRunnerFileName, projectDirectory);
         *  }
         * }
         */

        protected virtual bool CreateProject([NotNull] IBuildContext context, NewProjectOptions options)
        {
            return(CreateProject(context, string.Empty, options));
        }