private void Initialize(S4ZipEntry entry)
 {
     _entry = entry;
     Name   = entry.Name;
     Length = entry.Length;
     if (Name.EndsWith(".lua", StringComparison.OrdinalIgnoreCase) ||
         Name.EndsWith(".x7", StringComparison.OrdinalIgnoreCase))
     {
         Length = entry.GetData().Length;
     }
 }
Esempio n. 2
0
        internal IFile CreateFile(S4ZipEntry entry)
        {
            if (Files.Any(x => x.Name.Equals(entry.Name, StringComparison.OrdinalIgnoreCase)))
            {
                throw new ArgumentException("File already exists", nameof(entry));
            }

            var file = new NetsphereFile(entry, this);

            _files.Add(file);
            return(file);
        }
        private void Add(S4ZipEntry entry)
        {
            NetsphereFolder parent     = null;
            var             startIndex = 0;

            while (true)
            {
                if (startIndex >= entry.FullName.Length)
                {
                    return;
                }

                var index  = entry.FullName.IndexOf("/", startIndex, StringComparison.InvariantCulture);
                var isFile = index == -1;
                if (isFile)
                {
                    index = entry.FullName.Length;
                }

                var name = entry.FullName.Substring(startIndex, index - startIndex);
                if (isFile)
                {
                    var file = new NetsphereFile(entry, parent);
                    if (parent == null)
                    {
                        _files.Add(file);
                    }
                    else
                    {
                        parent.CreateFile(entry);
                    }
                    return;
                }

                IEnumerable <IFolder> folders = parent != null ? parent.Folders : Folders;
                var folder = folders.FirstOrDefault(x => x.Name == name) ??
                             (parent == null ? CreateFolder(name) : parent.CreateFolder(name));
                parent     = (NetsphereFolder)folder;
                startIndex = index + 1;
            }
        }
 public NetsphereFile(S4ZipEntry entry, IFilesystem filesystem)
 {
     Filesystem = filesystem;
     Initialize(entry);
 }
 public NetsphereFile(S4ZipEntry entry, IFolder parent)
 {
     Filesystem = parent.Filesystem;
     Parent     = parent;
     Initialize(entry);
 }