Rebel.Cms.Web.Packaging.PackageInstallation.CopyPackageFiles C# (CSharp) Method

CopyPackageFiles() public method

Verifies that all files from Package source can be copied to destination, and then goes on to copy the files that can be copied.
public CopyPackageFiles ( ) : List
return List
        public List<CustomFileSystemInfo> CopyPackageFiles()
        {
            //Get folders in Content directory
            var absoluteContentFolderPath = Path.Combine(_absolutePackagePath, "Content");
            if(!Directory.Exists(absoluteContentFolderPath))
                return new List<CustomFileSystemInfo>();

            var directories = new DirectoryInfo(absoluteContentFolderPath).GetDirectories("*", SearchOption.TopDirectoryOnly);
            var files = new List<CustomFileSystemInfo>();

            //Loop through files in Content directory and compare to destination
            foreach (var directory in directories)
            {
                var fileInfos = directory.GetFiles("*", SearchOption.AllDirectories);
                files.AddRange(from fileInfo in fileInfos
                               let destinationFilePath =
                                   fileInfo.FullName.Replace(absoluteContentFolderPath.TrimEnd('\\'), _absoluteRootedPath.TrimEnd('\\'))
                               select
                                   new CustomFileSystemInfo(fileInfo.FullName, destinationFilePath, fileInfo.Name, false)
                                       {IsCopiable = !File.Exists(destinationFilePath)});

                var directoryInfos = directory.GetDirectories("*", SearchOption.AllDirectories);
                files.AddRange(from directoryInfo in directoryInfos
                               let destinationFilePath =
                                   directoryInfo.FullName.Replace(absoluteContentFolderPath.TrimEnd('\\'), _absoluteRootedPath.TrimEnd('\\'))
                               select
                                   new CustomFileSystemInfo(directoryInfo.FullName, destinationFilePath, directoryInfo.Name, true)
                                       {IsCopiable = !Directory.Exists(destinationFilePath)});
            }

            //Copy all files to destination except those that already exist or are read only
            //TODO change to use hive provider for copying files to the right location.
            foreach (var file in files.Where(file => file.IsCopiable && file.IsDirectory))
            {
                Directory.CreateDirectory(file.DestinationPath);
            }

            foreach (var file in files.Where(file => file.IsCopiable && !file.IsDirectory))
            {
                File.Copy(file.SourcePath, file.DestinationPath);
            }

            return files;
        }

Usage Example

        public ActionResult AddLocalPackage(HttpPostedFileBase file)
        {
            if(file == null)
            {
                ModelState.AddModelError("PackageFileValidation", "No file selected. Please select a package file to upload.");
                return LocalRepository();
            }

            if (!Path.GetExtension(file.FileName).EndsWith("nupkg"))
            {
                ModelState.AddModelError("PackageFileValidation", "The file uploaded is not a valid package file, only Nuget packages are supported");
                return LocalRepository();
            }

            IPackage package;
            try
            {
                package = new ZipPackage(file.InputStream);
            }
            catch (Exception ex)
            {
                LogHelper.Error<PackagingEditorController>("Package could not be unziped.", ex);

                ModelState.AddModelError("PackageFileValidation", "The Nuget package file uploaded could not be read");
                return LocalRepository();
            }

            try
            {
                var fileName = Path.Combine(BackOfficeRequestContext.PackageContext.LocalPackageManager.SourceRepository.Source, file.FileName);
                file.SaveAs(fileName);
            }
            catch (Exception ex)
            {
                ModelState.AddModelError("PackageFileValidation", "The package file could not be saved. " + ex.Message);
                return LocalRepository();
            }

            if(!string.IsNullOrWhiteSpace(Request.Form["autoinstall"]))
            {
                BackOfficeRequestContext.PackageContext.LocalPackageManager.InstallPackage(package, false);

                var logger = new PackageLogger(BackOfficeRequestContext, HttpContext, package);
                var installation = new PackageInstallation(BackOfficeRequestContext, HttpContext, package);

                //Copy files from package folder to destination and log results
                var fileResults = installation.CopyPackageFiles();
                foreach (var info in fileResults)
                {
                    logger.Log(info.IsCopiable, info.Message());
                }
                //Import data and log results
                var dataResults = installation.ImportData();
                foreach (var attributeType in dataResults.AttributeTypes)
                {
                    logger.Log(attributeType.IsImportable, string.Format("AttributeType {0}", attributeType.ObjectId.Value.ToString()));
                }
                foreach (var schema in dataResults.Schemas)
                {
                    logger.Log(schema.IsImportable, string.Format("Schema {0}", schema.ObjectId.Value.ToString()));
                }
                foreach (var schemaRelation in dataResults.SchemaRelations)
                {
                    logger.Log(schemaRelation.IsImportable, string.Format("Schema Relation {0}", schemaRelation.ObjectId.Value.ToString()));
                }
                foreach (var entity in dataResults.Entities)
                {
                    logger.Log(entity.IsImportable, string.Format("Entity {0}", entity.ObjectId.Value.ToString()));
                }
                foreach (var entityRelation in dataResults.EntityRelations)
                {
                    logger.Log(entityRelation.IsImportable, string.Format("Entity Relation {0}", entityRelation.ObjectId.Value.ToString()));
                }
                foreach (var language in dataResults.Languages)
                {
                    logger.Log(language.IsImportable, string.Format("Language {0}", language.ObjectId.Value.ToString()));
                }

                //Notifications.Add(new NotificationMessage(package.Title + " has been installed", "Package installed", NotificationType.Success));
                //SuccessfulOnRedirectAttribute.EnsureRouteData(this, "id", package.Id);

                return RedirectToAction("RecycleApplication", new { id = package.Id, state = PackageInstallationState.Installing });
            }

            Notifications.Add(new NotificationMessage(package.Title + " added to local repository", "Package added", NotificationType.Success));
            SuccessfulOnRedirectAttribute.EnsureRouteData(this, "id", package.Id);

            return RedirectToAction("LocalRepository");
        }
All Usage Examples Of Rebel.Cms.Web.Packaging.PackageInstallation::CopyPackageFiles