Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
		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);
        }