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:
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