winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit d06ce24bc91d8f2226ed3e998db2affce12a3ea8
parent d82f5876a81abf979e9328f0a1823b7952d12466
Author: sreadingMSFT <74242768+sreadingMSFT@users.noreply.github.com>
Date:   Tue, 31 Aug 2021 11:05:08 -0700

Expose pass through header through com interface. (#1420)

* Add custom header.

* Update behavior for composites.

* Revert line ending changes.

* Add comment.

* Update composite behavior.

* Fix error code
Diffstat:
Msrc/Microsoft.Management.Deployment/PackageCatalogInfo.cpp | 2+-
Msrc/Microsoft.Management.Deployment/PackageCatalogInfo.h | 2+-
Msrc/Microsoft.Management.Deployment/PackageCatalogReference.cpp | 39+++++++++++++++++++++++++++++++++------
Msrc/Microsoft.Management.Deployment/PackageCatalogReference.h | 3++-
Msrc/Microsoft.Management.Deployment/PackageManager.cpp | 6++++++
Msrc/Microsoft.Management.Deployment/PackageManager.idl | 6++++++
6 files changed, 49 insertions(+), 9 deletions(-)

diff --git a/src/Microsoft.Management.Deployment/PackageCatalogInfo.cpp b/src/Microsoft.Management.Deployment/PackageCatalogInfo.cpp @@ -12,7 +12,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation { m_sourceDetails = sourceDetails; } - ::AppInstaller::Repository::SourceDetails PackageCatalogInfo::GetSourceDetails() + ::AppInstaller::Repository::SourceDetails& PackageCatalogInfo::GetSourceDetails() { return m_sourceDetails; } diff --git a/src/Microsoft.Management.Deployment/PackageCatalogInfo.h b/src/Microsoft.Management.Deployment/PackageCatalogInfo.h @@ -9,7 +9,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation { PackageCatalogInfo() = default; void Initialize(const ::AppInstaller::Repository::SourceDetails& sourceDetails); - ::AppInstaller::Repository::SourceDetails GetSourceDetails(); + ::AppInstaller::Repository::SourceDetails& GetSourceDetails(); hstring Id(); hstring Name(); diff --git a/src/Microsoft.Management.Deployment/PackageCatalogReference.cpp b/src/Microsoft.Management.Deployment/PackageCatalogReference.cpp @@ -24,11 +24,10 @@ namespace winrt::Microsoft::Management::Deployment::implementation void PackageCatalogReference::Initialize(winrt::Microsoft::Management::Deployment::CreateCompositePackageCatalogOptions options) { m_compositePackageCatalogOptions = options; - m_isComposite = true; } bool PackageCatalogReference::IsComposite() { - return m_isComposite; + return (m_compositePackageCatalogOptions != nullptr); } winrt::Microsoft::Management::Deployment::PackageCatalogInfo PackageCatalogReference::Info() { @@ -64,8 +63,8 @@ namespace winrt::Microsoft::Management::Deployment::implementation { auto catalog = m_compositePackageCatalogOptions.Catalogs().GetAt(i); winrt::Microsoft::Management::Deployment::implementation::PackageCatalogInfo* catalogInfoImpl = get_self<winrt::Microsoft::Management::Deployment::implementation::PackageCatalogInfo>(catalog.Info()); - ::AppInstaller::Repository::SourceDetails sourceDetails = catalogInfoImpl->GetSourceDetails(); - std::shared_ptr<::AppInstaller::Repository::ISource> remoteSource = ::AppInstaller::Repository::OpenSourceFromDetails(sourceDetails, progress).Source; + + std::shared_ptr<::AppInstaller::Repository::ISource> remoteSource = ::AppInstaller::Repository::OpenSourceFromDetails(catalogInfoImpl->GetSourceDetails(), progress).Source; if (!remoteSource) { // If source is null, return the error. There's no way to get the hresult that caused the error right now. @@ -88,8 +87,7 @@ namespace winrt::Microsoft::Management::Deployment::implementation else { winrt::Microsoft::Management::Deployment::implementation::PackageCatalogInfo* catalogInfoImpl = get_self<winrt::Microsoft::Management::Deployment::implementation::PackageCatalogInfo>(m_info); - ::AppInstaller::Repository::SourceDetails sourceDetails = catalogInfoImpl->GetSourceDetails(); - source = ::AppInstaller::Repository::OpenSourceFromDetails(sourceDetails, progress).Source; + source = ::AppInstaller::Repository::OpenSourceFromDetails(catalogInfoImpl->GetSourceDetails(), progress).Source; } if (!source) @@ -115,4 +113,33 @@ namespace winrt::Microsoft::Management::Deployment::implementation connectResult->Initialize(winrt::Microsoft::Management::Deployment::ConnectResultStatus::CatalogError, nullptr); return *connectResult; } + + hstring PackageCatalogReference::AdditionalPackageCatalogArguments() + { + if (!IsComposite()) + { + winrt::Microsoft::Management::Deployment::implementation::PackageCatalogInfo* catalogInfoImpl = get_self<winrt::Microsoft::Management::Deployment::implementation::PackageCatalogInfo>(m_info); + ::AppInstaller::Repository::SourceDetails sourceDetails = catalogInfoImpl->GetSourceDetails(); + auto customHeader = catalogInfoImpl->GetSourceDetails().CustomHeader; + if (customHeader.has_value()) + { + return winrt::to_hstring(customHeader.value()); + } + } + + return {}; + } + void PackageCatalogReference::AdditionalPackageCatalogArguments(hstring const& value) + { + if (IsComposite()) + { + // Can't set AdditionalPackageCatalogArguments on a composite. Callers should set it on each non-composite PackageCatalogReference in the composite. + throw winrt::hresult_illegal_state_change(); + } + else + { + winrt::Microsoft::Management::Deployment::implementation::PackageCatalogInfo* catalogInfoImpl = get_self<winrt::Microsoft::Management::Deployment::implementation::PackageCatalogInfo>(m_info); + catalogInfoImpl->GetSourceDetails().CustomHeader = ::AppInstaller::Utility::ConvertToUTF8(value); + } + } } diff --git a/src/Microsoft.Management.Deployment/PackageCatalogReference.h b/src/Microsoft.Management.Deployment/PackageCatalogReference.h @@ -15,9 +15,10 @@ namespace winrt::Microsoft::Management::Deployment::implementation winrt::Microsoft::Management::Deployment::PackageCatalogInfo Info(); winrt::Windows::Foundation::IAsyncOperation<winrt::Microsoft::Management::Deployment::ConnectResult> ConnectAsync(); winrt::Microsoft::Management::Deployment::ConnectResult Connect(); + hstring AdditionalPackageCatalogArguments(); + void AdditionalPackageCatalogArguments(hstring const& value); private: winrt::Microsoft::Management::Deployment::CreateCompositePackageCatalogOptions m_compositePackageCatalogOptions{ nullptr }; winrt::Microsoft::Management::Deployment::PackageCatalogInfo m_info{ nullptr }; - bool m_isComposite = false; }; } diff --git a/src/Microsoft.Management.Deployment/PackageManager.cpp b/src/Microsoft.Management.Deployment/PackageManager.cpp @@ -130,6 +130,12 @@ namespace winrt::Microsoft::Management::Deployment::implementation } winrt::Microsoft::Management::Deployment::PackageCatalogReference PackageManager::CreateCompositePackageCatalog(winrt::Microsoft::Management::Deployment::CreateCompositePackageCatalogOptions const& options) { + if (!options) + { + // Can't make a composite source if the options aren't specified. + throw hresult_invalid_argument(); + } + for (uint32_t i = 0; i < options.Catalogs().Size(); ++i) { auto catalog = options.Catalogs().GetAt(i); diff --git a/src/Microsoft.Management.Deployment/PackageManager.idl b/src/Microsoft.Management.Deployment/PackageManager.idl @@ -419,6 +419,12 @@ namespace Microsoft.Management.Deployment /// may require downloading information from a server. Windows.Foundation.IAsyncOperation<ConnectResult> ConnectAsync(); ConnectResult Connect(); + + [contract(Microsoft.Management.Deployment.WindowsPackageManagerContract, 2)] + { + /// A string that will be passed to the source server if using a REST source + String AdditionalPackageCatalogArguments; + } } /// Catalogs with PackageCatalogOrigin Predefined