Пример #1
0
 public TempFile(TempFileSystem fileSystem, TempFolder parent, string name, string src, TempFeature feat)
 {
     this.FileSystem = fileSystem;
     Name            = name;
     this.Source     = src;
     this.Path       = parent?.Path + "\\";
     this.Move(parent);
     this.Features.Add(feat.Title, feat);
     feat.RegisterFile(this);
 }
Пример #2
0
        public TempFolder(TempFileSystem fileSystem, TempFolder parent, string name, TempFeature feat) : this(fileSystem, parent, name)
        {
            if (feat != null)
            {
                this.Features.Add(feat.Title, feat);
                feat.RegisterFolder(this);
            }

            if (feat == null && !(name == "root" || VariableConverter.VarToWixId.ContainsKey(name)))
            {
                throw new Exception(name + " must have a feature");
            }
        }
Пример #3
0
        private static void AddDirectoryFromSource(TempFileSystem fs, string src, string dest, TempFeature fsFeat, bool includeSubDirectories)
        {
            var files = Directory.GetFiles(src);

            foreach (var fi in files)
            {
                fs.AddFileOrUpdateFeatures(dest, fi, fsFeat);
            }

            if (includeSubDirectories)
            {
                var folders = Directory.GetDirectories(src);
                foreach (var fd in folders)
                {
                    var destname = dest + "\\" + Path.GetFileName(fd);
                    AddDirectoryFromSource(fs, fd, destname, fsFeat, includeSubDirectories);
                }
            }
        }
Пример #4
0
        public static TempFileSystem ConvertManifestToFileSystem(IEnumerable <Feature> features)
        {
            var fs = new TempFileSystem();

            fs.InitializeShortcutFolders(VariableConverter.VarToWixId.Keys);
            foreach (var feat in features)
            {
                var fsFeat = fs.AddFeature(feat.title, feat.description);

                foreach (var ci in feat.copyinfo)
                {
                    var src = ci.source;
                    src = src.CleanFilePath();
                    var srcParts = src.CleanAndSplitFilePath().ToList();
                    if (srcParts.None())
                    {
                        throw new Exception("No source found! " + src);
                    }

                    //if the first part of the file path isn't a drive letter and isn't in our special folder list, assume they mean relative to the current path.
                    if (!srcParts.First().IsDriveLetter() && !VariableConverter.VarToWixId.ContainsKey(srcParts.First()))
                    {
                        var currFolder = SimpleWix.CurrentFolder;
                        try
                        {
                            if (srcParts.First() == "..")
                            {
                                int startIndex = 0;
                                for (int i = 0; i < srcParts.Count; i++)
                                {
                                    if (srcParts[i] == "..")
                                    {
                                        currFolder = Path.GetDirectoryName(currFolder);
                                    }
                                    else
                                    {
                                        startIndex = i;
                                        break;
                                    }
                                }

                                srcParts.RemoveRange(0, startIndex);
                                src = "";
                                foreach (var part in srcParts)
                                {
                                    src = Path.Combine(src, part);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(new Exception("There was an error navigating up folders!", e));
                        }

                        src = Path.Combine(currFolder, src);
                    }

                    var dest = ci.destination;
                    //expand vars here
                    if (File.Exists(src))
                    {
                        fs.AddFileOrUpdateFeatures(dest, src, fsFeat);
                    }
                    else if (Directory.Exists(src))
                    {
                        AddDirectoryFromSource(fs, src, dest, fsFeat, ci.includesubfolders);
                    }
                    else
                    {
                        throw new Exception("Path does not exist: " + src);
                    }
                }
            }

            return(fs);
        }
Пример #5
0
 private TempFolder(TempFileSystem fileSystem, TempFolder parent, string name)
 {
     this.FileSystem = fileSystem;
     this.Name       = name;
     this.Path       = parent?.Path + "\\";
 }