public void ThenTheContentOfTheInMemoryZipIs(string path, string content)
 {
     ZipExtensions.Unzip(_zipped,
                         (p, ba) => {
         Assert.That(p.ToString().Replace('/', '\\'), Is.EqualTo(path));
         Assert.That(Encoding.Default.GetString(ba), Is.EqualTo(content));
     });
 }
Beispiel #2
0
        public byte[] ExtractDefaultTranslation(string sitePath)
        {
            var site       = Path.Get(sitePath);
            var corePoPath = site.Combine(
                "Core", "App_Data",
                "Localization", "en-US",
                "orchard.core.po");
            var rootPoPath = site.Combine(
                "App_Data", "Localization", "en-US",
                "orchard.root.po");
            var zipFiles = new Dictionary <Path, StringBuilder>();

            // Extract resources for module manifests
            site.Files("module.txt", true)
            .Read((content, path) => {
                var moduleName = path.Parent().FileName;
                var poPath     =
                    path.MakeRelativeTo(sitePath).Tokens[0].Equals("core", StringComparison.OrdinalIgnoreCase) ?
                    corePoPath : GetModuleLocalizationPath(site, moduleName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources for theme manifests
            site.Files("theme.txt", true)
            .Read((content, path) => {
                var themeName = path.Parent().FileName;
                var poPath    = GetThemeLocalizationPath(site, themeName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources from views and cs files, for the web site
            // as well as for the framework and Azure projects.
            site.Add(site.Parent().Combine("Orchard"))
            .Add(site.Parent().Combine("Orchard.Azure"))
            .ForEach(p =>
                     p.Files("*", true)
                     .WhereExtensionIs(".cshtml", ".aspx", ".ascx", ".cs")
                     .Grep(
                         ResourceStringExpression,
                         (path, match, contents) => {
                var str = match.Groups[1].ToString();
                DispatchResourceString(zipFiles, corePoPath, rootPoPath, site, path, p, contents, str);
            }
                         )
                     .Grep(
                         PluralStringExpression,
                         (path, match, contents) => {
                var str = match.Groups[1].ToString();
                DispatchResourceString(zipFiles, corePoPath, rootPoPath, site, path, p, contents, str);
                str = match.Groups[6].ToString();
                DispatchResourceString(zipFiles, corePoPath, rootPoPath, site, path, p, contents, str);
            }
                         ));
            return(ZipExtensions.Zip(
                       new Path(zipFiles.Keys.Select(p => p.MakeRelativeTo(site))),
                       p => Encoding.UTF8.GetBytes(zipFiles[site.Combine(p)].ToString())));
        }
        public byte[] PackageTranslations(string cultureCode, string sitePath)
        {
            var site             = Path.Get(sitePath);
            var translationFiles = site
                                   .Files("orchard.*.po", true)
                                   .Where(p => p.Parent().FileName.Equals(cultureCode, StringComparison.OrdinalIgnoreCase))
                                   .MakeRelativeTo(site);

            return(ZipExtensions.Zip(
                       translationFiles,
                       p => site.Combine(p).ReadBytes()));
        }
Beispiel #4
0
        public byte[] ExtractDefaultTranslation(string sitePath, IEnumerable <string> extensionNames)
        {
            if (extensionNames == null || extensionNames.Count() == 0)
            {
                return(ExtractDefaultTranslation(sitePath));
            }
            var site     = Path.Get(sitePath);
            var zipFiles = new Dictionary <Path, StringBuilder>();

            // Extract resources for module manifests
            site.Files("module.txt", true)
            .Where(p => extensionNames.Contains(p.Parent().FileName))
            .Read((content, path) => {
                var moduleName = path.Parent().FileName;
                var poPath     = GetModuleLocalizationPath(site, moduleName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources for theme manifests
            site.Files("theme.txt", true)
            .Where(p => extensionNames.Contains(p.Parent().FileName))
            .Read((content, path) => {
                var themeName = path.Parent().FileName;
                var poPath    = GetThemeLocalizationPath(site, themeName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources from views and cs files
            site.Files("*", true)
            .WhereExtensionIs(".cshtml", ".aspx", ".ascx", ".cs")
            .Where(p => {
                var tokens = p.MakeRelativeTo(site).Tokens;
                return(new[] { "themes", "modules" }.Contains(tokens[0]) &&
                       extensionNames.Contains(tokens[1]));
            })
            .Grep(
                ResourceStringExpression,
                (path, match, contents) => {
                var str = match.Groups[1].ToString();
                DispatchResourceString(zipFiles, null, null, site, path, site, contents, str);
            }
                )
            .Grep(
                PluralStringExpression,
                (path, match, contents) => {
                var str = match.Groups[1].ToString();
                DispatchResourceString(zipFiles, null, null, site, path, site, contents, str);
                str = match.Groups[6].ToString();
                DispatchResourceString(zipFiles, null, null, site, path, site, contents, str);
            }
                );
            return(ZipExtensions.Zip(
                       new Path(zipFiles.Keys.Select(p => p.MakeRelativeTo(site))),
                       p => Encoding.UTF8.GetBytes(zipFiles[site.Combine(p)].ToString())));
        }
Beispiel #5
0
        public byte[] PackageTranslations(string cultureCode, string sitePath, IEnumerable <string> extensionNames)
        {
            var site             = Path.Get(sitePath);
            var translationFiles = site
                                   .Files("orchard.*.po", true)
                                   .Where(p =>
                                          p.Parent().FileName.Equals(cultureCode, StringComparison.OrdinalIgnoreCase) &&
                                          (extensionNames.Contains(p.MakeRelativeTo(site.Combine("Modules")).Tokens[0]) ||
                                           extensionNames.Contains(p.MakeRelativeTo(site.Combine("Themes")).Tokens[0])))
                                   .MakeRelativeTo(site);

            return(ZipExtensions.Zip(
                       translationFiles,
                       p => site.Combine(p).ReadBytes()));
        }
        public void InstallTranslation(byte[] zippedTranslation, string sitePath)
        {
            var siteRoot = Path.Get(sitePath);

            ZipExtensions.Unzip(zippedTranslation,
                                (path, contents) => {
                if (path.Extension == ".po")
                {
                    var tokens   = path.Tokens;
                    var destPath = siteRoot.Combine(tokens);
                    // If a translation file is for a module or a theme, only install it
                    // if said module or theme exists already. Otherwise, skip.
                    if ((!tokens[0].Equals("modules", StringComparison.OrdinalIgnoreCase) &&
                         !tokens[0].Equals("themes", StringComparison.OrdinalIgnoreCase)) ||
                        siteRoot.Combine(tokens[0], tokens[1]).IsDirectory)
                    {
                        destPath.Write(contents);
                    }
                }
            });
        }
        public byte[] ExtractDefaultTranslation(string sitePath, IEnumerable <string> extensionNames)
        {
            if (extensionNames == null || !extensionNames.Any())
            {
                return(ExtractDefaultTranslation(sitePath));
            }
            var site     = Path.Get(sitePath);
            var zipFiles = new Dictionary <Path, StringEntryBuilder>();

            // Extract resources for module manifests
            site.Files("module.txt", true)
            .Where(p => extensionNames.Contains(p.Parent().FileName, StringComparer.OrdinalIgnoreCase))
            .Read((content, path) => {
                var moduleName = path.Parent().FileName;
                var poPath     = GetModuleLocalizationPath(site, moduleName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources for theme manifests
            site.Files("theme.txt", true)
            .Where(p => extensionNames.Contains(p.Parent().FileName, StringComparer.OrdinalIgnoreCase))
            .Read((content, path) => {
                var themeName = path.Parent().FileName;
                var poPath    = GetThemeLocalizationPath(site, themeName);
                ExtractPoFromManifest(zipFiles, poPath, content, path, site);
            });
            // Extract resources from views and cs files
            site.Files("*", true)
            .WhereExtensionIs(".cshtml", ".aspx", ".ascx", ".cs")
            .Where(p => {
                var tokens = p.MakeRelativeTo(site).Tokens;
                return(new[] { "themes", "modules" }.Contains(tokens[0], StringComparer.OrdinalIgnoreCase) &&
                       extensionNames.Contains(tokens[1], StringComparer.OrdinalIgnoreCase));
            })
            .Read((contents, path) => ExtractResourcesFromCode(contents, null, null, site, path, zipFiles));
            return(ZipExtensions.Zip(
                       new Path(zipFiles.Keys.Select(p => p.MakeRelativeTo(site))),
                       p => Encoding.UTF8.GetBytes(zipFiles[site.Combine(p)].ToString())));
        }
Beispiel #8
0
        public void ZipDir_SimpleFilter_2()
        {
            // Arrange
            string testDir = TestUtils.CreateTestDirectory(this.TestContext);

            TestUtils.CreateTextFile("dummy.txt", testDir, "dummy content");
            TestUtils.CreateTextFile("sub1\\foo.txt", testDir, "dummy content");
            TestUtils.CreateTextFile("sub2\\bar.123", testDir, "dummy content");
            TestUtils.CreateTextFile("sub2\\archive1.zip", testDir, "dummy content");
            TestUtils.CreateTextFile("archive2.zip", testDir, "dummy content");

            Func <string, bool> shouldInclude = f => f.Contains("sub");
            string fullzipFileName            = Path.Combine(testDir, "output.zip");

            ZipExtensions.CreateFromDirectory(testDir, fullzipFileName, shouldInclude);

            ZipFileChecker checker = new ZipFileChecker(this.TestContext, fullzipFileName);

            checker.AssertZipContainsOnlyExpectedFiles(
                "sub1\\foo.txt",
                "sub2\\bar.123",
                "sub2\\archive1.zip");
        }
 public void WhenIZipInMemory(string content, string path)
 {
     _zipped = ZipExtensions.Zip(
         new Path(path),
         p => Encoding.Default.GetBytes(content));
 }
Beispiel #10
0
 public void to(string destination)
 {
     _that._zipped = ZipExtensions.Zip(
         _that._path.CombineWithWindowsPath(destination),
         p => Encoding.Default.GetBytes(_content));
 }