예제 #1
0
        internal static string GenerateUniquePackageDisplayName(string displayName)
        {
            displayName = Regex.Replace(displayName, $@"[{Regex.Escape(EditorUtility.GetInvalidFilenameChars())}]", "_");
            var allPackagesDisplayNames = PackageInfo.GetAll().Where(info => info.type != "module").Select(info => info.displayName);

            return(FindUnique(displayName, allPackagesDisplayNames, " "));
        }
예제 #2
0
        private static void ValidateOptions(PackageTemplateOptions options)
        {
            var errors = new List <string>();
            var requiredErrorMessage = L10n.Tr("{0} is required");

            options.name = options.name?.Trim();
            if (string.IsNullOrEmpty(options.name))
            {
                errors.Add(string.Format(requiredErrorMessage, nameof(options.name)));
            }
            else if (!PackageValidation.ValidateName(options.name))
            {
                errors.Add(string.Format(L10n.Tr("Package name [{0}] is invalid"), options.name));
            }
            else if (PackageInfo.GetAll().Any(p => p.name == options.name))
            {
                errors.Add(string.Format(L10n.Tr("The project already contains a package with the name [{0}]."), options.name));
            }

            options.displayName = options.displayName?.Trim();
            if (string.IsNullOrEmpty(options.displayName))
            {
                errors.Add(string.Format(requiredErrorMessage, nameof(options.displayName)));
            }

            options.rootNamespace = options.rootNamespace?.Trim();
            if (!string.IsNullOrEmpty(options.rootNamespace) && !ValidateRootNamespace(options.rootNamespace))
            {
                errors.Add(string.Format(L10n.Tr("[{0}] is not a valid namespace"), options.rootNamespace));
            }

            options.templateFolder = options.templateFolder?.Trim();
            if (string.IsNullOrEmpty(options.templateFolder))
            {
                errors.Add(string.Format(requiredErrorMessage, nameof(options.templateFolder)));
            }
            else if (!Directory.Exists(options.templateFolder))
            {
                errors.Add(string.Format(L10n.Tr("The directory [{0}] does not exist"), options.templateFolder));
            }

            if (errors.Count > 0)
            {
                var invalidParamMsg = string.Format(L10n.Tr("{0} parameter is invalid"), nameof(options));
                var errorMsg        = string.Join(Environment.NewLine, errors.ToArray());
                throw new ArgumentException($"{invalidParamMsg}:{Environment.NewLine}{errorMsg}");
            }
        }
예제 #3
0
        public static EmbedRequest Embed(string packageName)
        {
            var packageInfo = PackageInfo.GetAll().FirstOrDefault(p => p.name == packageName);

            if (packageInfo == null)
            {
                throw new InvalidOperationException($"Cannot embed package [{packageName}] because it is not registered in the Asset Database.");
            }

            Debug.Assert(packageInfo.entitlements.isAllowed, "Expected [entitlements.isAllowed] flag to be true.");

            long operationId;
            var  status = NativeClient.Embed(out operationId, packageName);

            return(new EmbedRequest(operationId, status));
        }
예제 #4
0
        private static string GenerateUniqueSanitizedPackageName(string organization, string name, string defaultName)
        {
            var sanitizedOrganization = SanitizeName(organization, k_DefaultOrganizationName, @"[^a-zA-Z\-_\d]", "").ToLower(CultureInfo.InvariantCulture);
            var sanitizedName         = SanitizeName(name, defaultName, @"[^a-zA-Z\-_\d]", "").ToLower(CultureInfo.InvariantCulture);

            var packageName = "com." + sanitizedOrganization + "." + sanitizedName;

            if (packageName.Length > k_MaxPackageNameLength)
            {
                packageName = packageName.Substring(0, k_MaxPackageNameLength);
            }

            packageName = packageName.TrimEnd('.');
            var allPackagesNames = PackageInfo.GetAll().Select(info => info.name);

            return(FindUnique(packageName, allPackagesNames));
        }
예제 #5
0
        public static string CreatePackage(PackageTemplateOptions options)
        {
            ValidateOptions(options);

            var existingPackage = PackageInfo.GetAll().FirstOrDefault(p => p.name == options.name);

            if (existingPackage != null)
            {
                throw new InvalidOperationException(string.Format(L10n.Tr("The project already contains a package with the name [{0}]."), options.name));
            }

            var targetFolder = $"{Folders.GetPackagesPath()}/{options.name}";

            if (Directory.Exists(targetFolder))
            {
                throw new InvalidOperationException(string.Format(L10n.Tr("The target folder [{0}] for this new package already exists."), targetFolder));
            }

            var sourceFolder = Path.Combine(PackageTemplatesRootFolder, k_DefaultTemplateName);

            CreatePackageFromTemplateFolder(CreateTemplateVariables(options), sourceFolder, targetFolder);
            return(targetFolder);
        }
예제 #6
0
 public static PackageInfo[] GetAll()
 {
     return(PackageInfo.GetAll());
 }