Пример #1
0
 private static void AddDirectory(string directoryPath, ZipArchive archive, ZipContext context)
 {
     foreach (string filePath in TexoDirectory.GetFiles(directoryPath))
     {
         AddFile(filePath, archive, context);
     }
 }
Пример #2
0
        private static ModeledItem BuildOutput(ZipContext context)
        {
            Document document = new Document(
                new Header(context.DestinationZipFile.GetFileNameOrDirectoryName()),
                new Paragraph(new Core.Model.Text.Link(
                                  context.DestinationZipFile.GetFullPath(),
                                  ActionBuilder.PathOpenUri(context.DestinationZipFile.GetFullPath()))),
                new Section(
                    new Header(2, "Content"),
                    context.FileOutputList));

            return(new ModeledItem(document));
        }
Пример #3
0
        private ICommandResult Zip(ZipContext context)
        {
            context.ZipAlreadyExists = File.Exists(context.DestinationZipFile);

            if (context.ZipAlreadyExists &&
                !context.Add &&
                !context.Override)
            {
                return(new ItemsResult(
                           Item.AsMarkdown("The zip file already exists, use options `--override` or `--add`.")));
            }

            context.FileOutputList = new List();

            try
            {
                using (FileStream zipStream = new FileStream(context.DestinationZipFile, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                    using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Update))
                    {
                        foreach (string path in context.Items)
                        {
                            switch (path.GetPathType())
                            {
                            case PathTypeEnum.File:
                                AddFile(path, archive, context);
                                break;

                            case PathTypeEnum.Directory:
                                AddDirectory(path, archive, context);
                                break;
                            }
                        }
                    }

                if (context.FileOutputList.Items.Count < 1)
                {
                    context.FileOutputList = context.FileOutputList.AddItem(
                        new ListItem(new Italic("no new content added")));
                }
            }
            catch (Exception exception)
            {
                const string message = "Zip archive error.";
                logger.Error(message, exception);
                return(new ErrorTextResult(message));
            }

            return(new ItemsResult <ModeledItem>(BuildOutput(context)));
        }
Пример #4
0
        private static void AddFile(string filePath, ZipArchive archive, ZipContext context)
        {
            if (!File.Exists(filePath))
            {
                return;
            }

            bool   flatten         = context.Flat || !filePath.IsSubPathOf(context.SourceLobby);
            string destinationPath = flatten
                ? filePath.GetFileNameOrDirectoryName()
                : filePath.GetFriendlyPath(context.SourceLobby);

            ZipArchiveEntry fileEntry = archive.GetEntry(destinationPath);

            if (fileEntry != null &&
                !context.Override)
            {
                return;
            }

            if (fileEntry == null)
            {
                if (context.ZipAlreadyExists && !context.Add)
                {
                    return;
                }

                fileEntry = archive.CreateEntry(destinationPath);
            }

            context.FileOutputList = context.FileOutputList.AddItem(
                new ListItem(new Core.Model.Text.Link(
                                 destinationPath,
                                 ActionBuilder.PathOpenUri(filePath.GetFullPath()))));

            using (FileStream originalStream = new FileStream(filePath, FileMode.Open))
                using (Stream targetStream = fileEntry.Open())
                {
                    originalStream.CopyTo(targetStream);
                }
        }
Пример #5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="context"></param>
 public ZipService(ZipContext context)
 {
     _context = context;
 }
 public ZipFileContentRepository(ZipContext context)
 {
     _context = context;
 }