示例#1
0
        public static void Generate(string[] archiveFileNames, System.IO.Stream outputStream)
        {
            var archiveFiles = new AnnoRDA.FileDB.Writer.ArchiveFileMap();

            AnnoRDA.FileSystem fileSystem;

            if (archiveFileNames.Length == 1 && PathIsDirectory(archiveFileNames[0]))
            {
                var directoryLoader = new AnnoRDA.Loader.ContainerDirectoryLoader();
                var loadResult      = directoryLoader.Load(archiveFileNames[0], System.Threading.CancellationToken.None);

                fileSystem = loadResult.FileSystem;
                foreach (string path in loadResult.ContainerPaths)
                {
                    archiveFiles.Add(path, path);
                }
            }
            else
            {
                fileSystem = new AnnoRDA.FileSystem();
                var fileLoader = new AnnoRDA.Loader.ContainerFileLoader();
                foreach (var rdaFileName in archiveFileNames)
                {
                    var loadedFS = fileLoader.Load(rdaFileName);
                    fileSystem.OverwriteWith(loadedFS, null, System.Threading.CancellationToken.None);

                    archiveFiles.Add(rdaFileName, rdaFileName);
                }
            }

            using (var fileDBWriter = new AnnoRDA.FileDB.Writer.FileSystemWriter(outputStream, true)) {
                fileDBWriter.WriteFileSystem(fileSystem, archiveFiles);
            }
        }
示例#2
0
        public override int Run(string[] remainingArguments)
        {
            var archiveFiles = new AnnoRDA.FileDB.Writer.ArchiveFileMap();
            AnnoRDA.FileSystem fileSystem;

            if (remainingArguments.Length == 1 && this.PathIsDirectory(remainingArguments[0])) {
                var directoryLoader = new AnnoRDA.Loader.ContainerDirectoryLoader();
                var loadResult = directoryLoader.Load(remainingArguments[0], System.Threading.CancellationToken.None);

                fileSystem = loadResult.FileSystem;
                foreach (string path in loadResult.ContainerPaths) {
                    archiveFiles.Add(path, path);
                }
            } else {
                fileSystem = new AnnoRDA.FileSystem();
                var fileLoader = new AnnoRDA.Loader.ContainerFileLoader();
                foreach (var rdaFileName in remainingArguments) {
                    var loadedFS = fileLoader.Load(rdaFileName);
                    fileSystem.OverwriteWith(loadedFS, null, System.Threading.CancellationToken.None);

                    archiveFiles.Add(rdaFileName, rdaFileName);
                }
            }

            using (var outputStream = new System.IO.FileStream(this.outputFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) {
                using (var writer = new AnnoRDA.FileDB.Writer.FileDBWriter(outputStream, false)) {
                    writer.WriteFileDB(fileSystem, archiveFiles);
                }
            }

            return 0;
        }
示例#3
0
 private void WriteFileTree(AnnoRDA.FileSystem fileSystem, ArchiveFileMap archiveFiles, IList <AnnoRDA.BlockContentsSource> residentBuffers)
 {
     this.WriteStructureStart(FileSystemTags.Structures.Names.FileTree);
     this.WritePathMap(fileSystem.Root.Folders, "", archiveFiles, residentBuffers);
     this.WriteFileMap(fileSystem.Root.Files, "", archiveFiles, residentBuffers);
     this.WriteStructureEnd();
 }
示例#4
0
 internal static void ContainsFolder(AnnoRDA.FileSystem fileSystem, IEnumerable <string> path)
 {
     if (fileSystem == null)
     {
         throw new ArgumentNullException("fileSystem");
     }
     ContainsFolder(fileSystem.Root, path);
 }
示例#5
0
 internal static void ContainsFolder(AnnoRDA.FileSystem fileSystem, string path)
 {
     if (path == null)
     {
         throw new ArgumentNullException("path");
     }
     ContainsFolder(fileSystem, Enumerable.Repeat(path, 1));
 }
示例#6
0
 internal static void ContainsFile(AnnoRDA.FileSystem fileSystem, FileSpec fileSpec)
 {
     if (fileSystem == null)
     {
         throw new ArgumentNullException("fileSystem");
     }
     ContainsFile(fileSystem.Root, fileSpec);
 }
        private async void button_Generate_Click(object sender, RoutedEventArgs e)
        {
            this.cancellationTokenSource = new System.Threading.CancellationTokenSource();
            this.viewModel.IsGenerating  = true;

            ICollection <RDAFileListItem> enabledItems = viewModel.RDAFileList.Items.Where((item) => item.IsEnabled).ToList();

            int numSteps = enabledItems.Count * 2; // reading

            numSteps += 1;                         // writing

            this.statusBar_progressBar_Progress.Minimum = 0;
            this.statusBar_progressBar_Progress.Maximum = numSteps;
            this.statusBar_progressBar_Progress.Value   = 0;

            var archiveFiles = new AnnoRDA.FileDB.Writer.ArchiveFileMap();
            var fileSystem   = new AnnoRDA.FileSystem();
            var fileLoader   = new AnnoRDA.Loader.ContainerFileLoader();

            try {
                foreach (var rdaFile in enabledItems)
                {
                    this.statusBar_textBlock_Message.Text = System.String.Format("Loading {0}", rdaFile.Name);
                    archiveFiles.Add(rdaFile.LoadPath, rdaFile.Name);

                    var progress = new System.Progress <string>((string fileName) => {
                        this.statusBar_textBlock_Message.Text = System.String.Format("Loading {0}: {1}", rdaFile.Name, fileName);
                    });
                    var containerFileSystem = await Task.Run(() => fileLoader.Load(rdaFile.LoadPath, progress, this.cancellationTokenSource.Token));

                    this.statusBar_progressBar_Progress.Value += 1;

                    this.statusBar_textBlock_Message.Text = System.String.Format("Loading {0}", rdaFile.Name);
                    await Task.Run(() => fileSystem.OverwriteWith(containerFileSystem, null, this.cancellationTokenSource.Token));

                    this.statusBar_progressBar_Progress.Value += 1;
                }

                this.statusBar_textBlock_Message.Text = "Writing...";

                using (var outputStream = new System.IO.FileStream(this.viewModel.OutputFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) {
                    using (var writer = new AnnoRDA.FileDB.Writer.FileDBWriter(outputStream, false)) {
                        await Task.Run(() => writer.WriteFileDB(fileSystem, archiveFiles));
                    }
                }
                this.statusBar_progressBar_Progress.Value += 1;

                this.statusBar_textBlock_Message.Text = "Done";
            } catch (System.OperationCanceledException) {
                this.statusBar_textBlock_Message.Text = "Canceled";
            } finally {
                this.viewModel.IsGenerating = false;
                this.cancellationTokenSource.Dispose();
                this.cancellationTokenSource = null;
            }
        }
示例#8
0
        private void WriteArchiveMap(AnnoRDA.FileSystem fileSystem, ArchiveFileMap archiveFiles)
        {
            this.WriteStructureStart(FileSystemTags.Structures.Names.ArchiveMap);

            IList <AnnoRDA.BlockContentsSource> residentBuffers = new List <AnnoRDA.BlockContentsSource>();

            this.WriteFileTree(fileSystem, archiveFiles, residentBuffers);
            this.WriteArchiveFiles(archiveFiles);
            this.WriteResidentBuffers(residentBuffers);

            this.WriteStructureEnd();
        }
        public Result ReadFileSystem()
        {
            this.fileSystem   = new FileSystem();
            this.archiveFiles = new Writer.ArchiveFileMap();

            this.stateStack = new Stack <IState>();
            this.stateStack.Push(new RootState(this.fileSystem, this.archiveFiles));

            this.reader.ReadFile(this);

            return(new Result {
                FileSystem = this.fileSystem, ArchiveFiles = this.archiveFiles
            });
        }
示例#10
0
        public override int Run(string[] remainingArguments)
        {
            var archiveFiles = new AnnoRDA.FileDB.Writer.ArchiveFileMap();

            AnnoRDA.FileSystem fileSystem;

            if (remainingArguments.Length == 1 && this.PathIsDirectory(remainingArguments[0]))
            {
                var directoryLoader = new AnnoRDA.Loader.ContainerDirectoryLoader();
                var loadResult      = directoryLoader.Load(remainingArguments[0], System.Threading.CancellationToken.None);

                fileSystem = loadResult.FileSystem;
                foreach (string path in loadResult.ContainerPaths)
                {
                    archiveFiles.Add(path, path);
                }
            }
            else
            {
                fileSystem = new AnnoRDA.FileSystem();
                var fileLoader = new AnnoRDA.Loader.ContainerFileLoader();
                foreach (var rdaFileName in remainingArguments)
                {
                    var loadedFS = fileLoader.Load(rdaFileName);
                    fileSystem.OverwriteWith(loadedFS, null, System.Threading.CancellationToken.None);

                    archiveFiles.Add(rdaFileName, rdaFileName);
                }
            }

            using (var outputStream = new System.IO.FileStream(this.outputFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) {
                using (var writer = new AnnoRDA.FileDB.Writer.FileSystemWriter(outputStream, false)) {
                    writer.WriteFileSystem(fileSystem, archiveFiles);
                }
            }

            return(0);
        }
        private async void button_Generate_Click(object sender, RoutedEventArgs e)
        {
            this.cancellationTokenSource = new System.Threading.CancellationTokenSource();
            this.viewModel.IsGenerating = true;

            ICollection<RDAFileListItem> enabledItems = viewModel.RDAFileList.Items.Where((item) => item.IsEnabled).ToList();

            int numSteps = enabledItems.Count * 2; // reading
            numSteps += 1; // writing

            this.statusBar_progressBar_Progress.Minimum = 0;
            this.statusBar_progressBar_Progress.Maximum = numSteps;
            this.statusBar_progressBar_Progress.Value = 0;

            var archiveFiles = new AnnoRDA.FileDB.Writer.ArchiveFileMap();
            var fileSystem = new AnnoRDA.FileSystem();
            var fileLoader = new AnnoRDA.Loader.ContainerFileLoader();

            try {
                foreach (var rdaFile in enabledItems) {
                    this.statusBar_textBlock_Message.Text = System.String.Format("Loading {0}", rdaFile.Name);
                    archiveFiles.Add(rdaFile.LoadPath, rdaFile.Name);

                    var progress = new System.Progress<string>((string fileName) => {
                        this.statusBar_textBlock_Message.Text = System.String.Format("Loading {0}: {1}", rdaFile.Name, fileName);
                    });
                    var containerFileSystem = await Task.Run(() => fileLoader.Load(rdaFile.LoadPath, progress, this.cancellationTokenSource.Token));
                    this.statusBar_progressBar_Progress.Value += 1;

                    this.statusBar_textBlock_Message.Text = System.String.Format("Loading {0}", rdaFile.Name);
                    await Task.Run(() => fileSystem.OverwriteWith(containerFileSystem, null, this.cancellationTokenSource.Token));
                    this.statusBar_progressBar_Progress.Value += 1;
                }

                this.statusBar_textBlock_Message.Text = "Writing...";

                using (var outputStream = new System.IO.FileStream(this.viewModel.OutputFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write)) {
                    using (var writer = new AnnoRDA.FileDB.Writer.FileDBWriter(outputStream, false)) {
                        await Task.Run(() => writer.WriteFileDB(fileSystem, archiveFiles));
                    }
                }
                this.statusBar_progressBar_Progress.Value += 1;

                this.statusBar_textBlock_Message.Text = "Done";

            } catch(System.OperationCanceledException) {
                this.statusBar_textBlock_Message.Text = "Canceled";

            } finally {
                this.viewModel.IsGenerating = false;
                this.cancellationTokenSource.Dispose();
                this.cancellationTokenSource = null;
            }
        }
示例#12
0
 public FileTreeState(AnnoRDA.FileSystem fileSystem, Writer.ArchiveFileMap archiveFiles)
 {
     this.fileSystem   = fileSystem;
     this.archiveFiles = archiveFiles;
 }
示例#13
0
 public void WriteFileSystem(AnnoRDA.FileSystem fileSystem, ArchiveFileMap archiveFiles)
 {
     this.WriteArchiveMap(fileSystem, archiveFiles);
     this.writer.FinalizeFile(this.tags);
 }
示例#14
0
 internal static void FolderAndFileCountAreEqual(int expectedFolders, int expectedFiles, AnnoRDA.FileSystem actual)
 {
     NotNull(actual);
     FolderAndFileCountAreEqual(expectedFolders, expectedFiles, actual.Root);
 }
示例#15
0
 public static void Empty(AnnoRDA.FileSystem actual)
 {
     NotNull(actual);
     Empty(actual.Root);
 }