Ejemplo n.º 1
0
        public ManagePackageViewModel(Package package, User currentUser, IReadOnlyList <ReportPackageReason> reasons, UrlHelper url, string readMe, bool isManageDeprecationEnabled)
            : base(package, currentUser)
        {
            IsCurrentUserAnAdmin = currentUser != null && currentUser.IsAdministrator;

            DeletePackagesRequest = new DeletePackagesRequest
            {
                Packages = new List <string>
                {
                    string.Format(
                        CultureInfo.InvariantCulture,
                        "{0}|{1}",
                        package.PackageRegistration.Id,
                        package.Version)
                },
                ReasonChoices = reasons
            };

            IsLocked = package.PackageRegistration.IsLocked;

            IsManageDeprecationEnabled = isManageDeprecationEnabled;

            var versionSelectPackages = package.PackageRegistration.Packages
                                        .Where(p => p.PackageStatusKey == PackageStatus.Available || p.PackageStatusKey == PackageStatus.Validating)
                                        .OrderByDescending(p => new NuGetVersion(p.Version))
                                        .ToList();

            VersionSelectList                 = new List <SelectListItem>();
            VersionListedStateDictionary      = new Dictionary <string, VersionListedState>();
            VersionReadMeStateDictionary      = new Dictionary <string, VersionReadMeState>();
            VersionDeprecationStateDictionary = new Dictionary <string, VersionDeprecationState>();

            var submitUrlTemplate    = url.PackageVersionActionTemplate("Edit");
            var getReadMeUrlTemplate = url.PackageVersionActionTemplate("GetReadMeMd");

            foreach (var versionSelectPackage in versionSelectPackages)
            {
                var text  = PackageHelper.GetSelectListText(versionSelectPackage);
                var value = NuGetVersionFormatter.Normalize(versionSelectPackage.Version);
                VersionSelectList.Add(new SelectListItem
                {
                    Text     = text,
                    Value    = value,
                    Selected = package == versionSelectPackage
                });

                VersionListedStateDictionary.Add(
                    value,
                    new VersionListedState(versionSelectPackage));

                var model = new TrivialPackageVersionModel(versionSelectPackage);
                VersionReadMeStateDictionary.Add(
                    value,
                    new VersionReadMeState(
                        submitUrlTemplate.Resolve(model),
                        getReadMeUrlTemplate.Resolve(model),
                        null));

                VersionDeprecationStateDictionary.Add(
                    value,
                    new VersionDeprecationState(versionSelectPackage, text));
            }

            // Update edit model with the readme.md data.
            ReadMe = new EditPackageVersionReadMeRequest();
            if (package.HasReadMe)
            {
                ReadMe.ReadMe.SourceType = ReadMeService.TypeWritten;
                ReadMe.ReadMe.SourceText = readMe;
            }
        }
        private ManagePackageViewModel SetupInternal(
            ManagePackageViewModel viewModel,
            Package package,
            User currentUser,
            IReadOnlyList <ReportPackageReason> reasons,
            UrlHelper url,
            string readMe,
            bool isManageDeprecationEnabled)
        {
            viewModel.IsCurrentUserAnAdmin = currentUser != null && currentUser.IsAdministrator;

            viewModel.DeletePackagesRequest = new DeletePackagesRequest
            {
                Packages = new List <string>
                {
                    string.Format(
                        CultureInfo.InvariantCulture,
                        "{0}|{1}",
                        package.PackageRegistration.Id,
                        package.Version)
                },
                ReasonChoices = reasons
            };

            viewModel.IsLocked = package.PackageRegistration.IsLocked;

            viewModel.IsManageDeprecationEnabled = isManageDeprecationEnabled;

            var versionSelectPackages = package.PackageRegistration.Packages
                                        .Where(p => p.PackageStatusKey == PackageStatus.Available || p.PackageStatusKey == PackageStatus.Validating)
                                        .OrderByDescending(p => new NuGetVersion(p.Version))
                                        .ToList();

            var versionSelectList = new List <SelectListItem>();

            viewModel.VersionSelectList = versionSelectList;
            var versionListedStateDictionary = new Dictionary <string, ManagePackageViewModel.VersionListedState>();

            viewModel.VersionListedStateDictionary = versionListedStateDictionary;
            var versionReadMeStateDictionary = new Dictionary <string, ManagePackageViewModel.VersionReadMeState>();

            viewModel.VersionReadMeStateDictionary = versionReadMeStateDictionary;
            var versionDeprecationStateDictionary = new Dictionary <string, ManagePackageViewModel.VersionDeprecationState>();

            viewModel.VersionDeprecationStateDictionary = versionDeprecationStateDictionary;

            foreach (var versionSelectPackage in versionSelectPackages)
            {
                var text  = PackageHelper.GetSelectListText(versionSelectPackage);
                var value = NuGetVersionFormatter.Normalize(versionSelectPackage.Version);
                versionSelectList.Add(new SelectListItem
                {
                    Text     = text,
                    Value    = value,
                    Selected = package == versionSelectPackage
                });

                versionListedStateDictionary.Add(
                    value,
                    new ManagePackageViewModel.VersionListedState(versionSelectPackage.Listed, versionSelectPackage.DownloadCount));

                var model = new TrivialPackageVersionModel(versionSelectPackage);
                versionReadMeStateDictionary.Add(
                    value,
                    GetVersionReadMeState(model, url));

                versionDeprecationStateDictionary.Add(
                    value,
                    GetVersionDeprecationState(versionSelectPackage.Deprecations.SingleOrDefault(), text));
            }

            // Update edit model with the readme.md data.
            viewModel.ReadMe = new EditPackageVersionReadMeRequest();
            if (package.HasReadMe && package.EmbeddedReadmeType == EmbeddedReadmeFileType.Absent)
            {
                viewModel.ReadMe.ReadMe.SourceType = ReadMeService.TypeWritten;
                viewModel.ReadMe.ReadMe.SourceText = readMe;
            }

            return(viewModel);
        }