public override bool Execute() { Log.LogMessage($"Retargeting UWP assets to {TargetPlatform}."); Func <ResourceCandidate, string> resourceToTargetPath; Func <string, string> pathEncoder; switch (TargetPlatform) { case "ios": resourceToTargetPath = resource => iOSResourceConverter.Convert(resource, DefaultLanguage); pathEncoder = p => p; break; case "android": resourceToTargetPath = resource => AndroidResourceConverter.Convert(resource, DefaultLanguage); pathEncoder = AndroidResourceNameEncoder.EncodeFileSystemPath; break; default: Log.LogMessage($"Skipping unknown platform {TargetPlatform}"); return(true); } Assets = ContentItems.ToArray(); RetargetedAssets = Assets .Select((Func <ITaskItem, TaskItem>)(asset => ProcessContentItem(asset, resourceToTargetPath, pathEncoder))) .Where(a => a != null) .ToArray(); return(true); }
public override bool Execute() { LogExtensionPoint.AmbientLoggerFactory.AddProvider(new TaskLoggerProvider(Log)); this.Log().Info($"Retargeting UWP assets to {TargetPlatform}."); Func <ResourceCandidate, string> resourceToTargetPath; Func <string, string> pathEncoder; switch (TargetPlatform) { case "ios": resourceToTargetPath = resource => iOSResourceConverter.Convert(resource, DefaultLanguage); pathEncoder = p => p; break; case "android": resourceToTargetPath = resource => AndroidResourceConverter.Convert(resource, DefaultLanguage); pathEncoder = AndroidResourceNameEncoder.EncodeFileSystemPath; break; default: this.Log().Info($"Skipping unknown platform {TargetPlatform}"); return(true); } Assets = ContentItems.ToArray(); RetargetedAssets = Assets .Select((Func <ITaskItem, TaskItem>)(asset => ProcessContentItem(asset, resourceToTargetPath, pathEncoder))) .Trim() .ToArray(); return(true); }
public override bool Execute() { LogExtensionPoint.AmbientLoggerFactory.AddProvider(new TaskLoggerProvider(Log)); this.Log().Info($"Retargeting UWP assets to {TargetPlatform}."); Func<ResourceCandidate, string> resourceToTargetPath; switch (TargetPlatform) { case "ios": resourceToTargetPath = resource => iOSResourceConverter.Convert(resource, DefaultLanguage); break; case "android": resourceToTargetPath = resource => AndroidResourceConverter.Convert(resource, DefaultLanguage); break; default: this.Log().Info($"Skipping unknown platform {TargetPlatform}"); return true; } Assets = ContentItems.Where(content => IsAsset(content.ItemSpec)).ToArray(); RetargetedAssets = Assets .Select(asset => { if (!asset.MetadataNames.Contains("Link")) { this.Log().Info($"Skipping '{asset.ItemSpec}' because 'Link' metadata is not set."); return null; } var fullPath = asset.GetMetadata("FullPath"); var relativePath = asset.GetMetadata("Link"); var resourceCandidate = ResourceCandidate.Parse(fullPath, relativePath); if (!UseHighDPIResources && int.TryParse(resourceCandidate.GetQualifierValue("scale"), out var scale) && scale > HighDPIThresholdScale) { this.Log().Info($"Skipping '{asset.ItemSpec}' of scale {scale} because {nameof(UseHighDPIResources)} is false."); return null; } var targetPath = resourceToTargetPath(resourceCandidate); if (targetPath == null) { this.Log().Info($"Skipping '{asset.ItemSpec}' as it's not supported on {TargetPlatform}."); return null; } this.Log().Info($"Retargeting '{asset.ItemSpec}' to '{targetPath}'."); return new TaskItem(asset.ItemSpec, new Dictionary<string, string>() { { "LogicalName", targetPath } }); }) .Trim() .ToArray(); return true; }
public void When_Convert(string expectedPath, string logicalPath, int?scale, string language, string custom) { var qualifiers = new List <ResourceQualifier> { new ResourceQualifier("scale", scale?.ToString()), new ResourceQualifier("language", language), new ResourceQualifier("custom", custom) } .AsReadOnly(); var resourceCandidate = new ResourceCandidate(qualifiers, null, logicalPath); var actualPath = AndroidResourceConverter.Convert(resourceCandidate, DefaultLanguage); Assert.AreEqual(expectedPath, actualPath); }