-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WinGet Source COM Api #4813
Merged
Madhusudhan-MSFT
merged 43 commits into
microsoft:master
from
Madhusudhan-MSFT:user/masudars/WinGet_Source_COM_API
Oct 28, 2024
Merged
WinGet Source COM Api #4813
Madhusudhan-MSFT
merged 43 commits into
microsoft:master
from
Madhusudhan-MSFT:user/masudars/WinGet_Source_COM_API
Oct 28, 2024
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Update IDL for new runtime classes and methods. - Add files and classes for package catalog operations (add, remove, reset, update). - Update `PackageManager` with async methods for catalog operations. [Compiles successfully]
Introduced new interfaces in the `Microsoft.Management.Deployment` namespace within the `PackageManager.idl` file. Added interfaces for handling collections of `AddPackageCatalogOptions`, `AddPackageCatalogResult`, `RemovePackageCatalogResult`, `ResetPackageCatalogResult`, and `UpdatePackageCatalogResult`.
- Update `Package.appxmanifest` with a new entry. - Add a new entry in `Microsoft.Management.Deployment.InProc.dll.manifest`. - Define new `constexpr CLSID` values for `AddPackageCatalogOptions` in `Factory.cpp`. - Update `s_nameCLSIDPairs` array to include `AddPackageCatalogOptions`.
- Add entry to type dictionary in ClassesDefinition.cs. - Introduce CreateAddPackageCatalogOptions method in WinGetProjectionFactory.cs.
JohnMcPMS
reviewed
Sep 16, 2024
…nager.idl - Renamed `CatalogName` to `Name` and `m_catalogName` to `m_name` in `AddPackageCatalogOptions`. - Removed `Arguments` property and its methods. - Added new boolean property `Explicit` with getter and setter. Updated `PackageManager.idl` to reflect these changes: - Renamed `CatalogName` to `Name` with updated comments. - Removed `Arguments` property. - Added `Explicit` property with explanatory comments. - Updated `RemovePackageCatalogAsync` description to use "catalog". - Removed several `IVector` and `IVectorView` interfaces related to package catalog options and results.
…thods - Simplified progress reporting for *CatalogPackageAsync operations in PackageManager by using a double type. - Updated method signatures and removed related enums and structures in PackageManager.cpp, PackageManager.h, and PackageManager.idl.
- Introduce new async methods in `PackageCatalogReference` for removing, resetting, and updating package catalogs. - These methods are defined in `PackageCatalogReference.h` and implemented as placeholders in `PackageCatalogReference.cpp`. - Remove corresponding methods from `PackageManager`, shifting responsibility to `PackageCatalogReference`. Update `PackageManager.idl` to reflect these changes: - Add enums and result classes for new operations. - Include new async methods in `PackageCatalogReference`. - Remove outdated methods from `PackageManager`.
- Refactored RemovePackageCatalogAsync and UpdatePackageCatalogAsync to exclude the catalogName parameter in PackageCatalogReference.cpp, PackageCatalogReference.h, and PackageManager.idl. - This modification eliminates the necessity of passing a catalog name, as the required context is now inherently loaded from PackageCatalogInfor within PackageCatalogReference. Note: These operations are not designed to support actions on multiple PackageCatalog/Source, such as ResetAll, UpdateAll, or RemoveAll. These mass operations are intended only for human interactions. For such operations, consumers are expected to recreate 'all' with a simple set of calls.
- Remove progress reporting from ResetPackageCatalogAsync. The underlying implementation for ResetPackageCatalog does not support progress in Repository::DropSource(..). Therefore, the reset API is now an async operation without progress. - The return type of the `ResetPackageCatalogAsync` method in the `PackageCatalogReference` class has been changed from `winrt::Windows::Foundation::IAsyncOperationWithProgress<winrt::Microsoft::Management::Deployment::ResetPackageCatalogResult, double>` to `winrt::Windows::Foundation::IAsyncOperation<winrt::Microsoft::Management::Deployment::ResetPackageCatalogResult>`. This change removes the progress reporting capability from the asynchronous operation. - Corresponding changes have been made in `PackageCatalogReference.h` and `PackageManager.idl` to reflect the new return type. - This simplifies the method's signature and potentially its implementation.
…ageCatalogAsync. - The reset operation is a subset of the remove operation but does not include cleanup. - The remove operation ensures that everything the PackageCatalog writes to the system is cleaned up, in addition to removing the package catalog entry from the winget package catalog list. Conversely, the reset operation only removes the entry without performing any cleanup.
… into user/masudars/WinGet_Source_COM_API
- Increased the size of the s_nameCLSIDPairs array from 9 to 10 elements in Factory.cpp within the Microsoft::Management::Deployment::OutOfProc namespace. - Added a new NameCLSIDPair entry for Microsoft.Management.Deployment.AddPackageCatalogOptions. Updated the last entry for Microsoft.Management.Deployment.RepairOptions to include a trailing comma.
… upcoming commit - Removed the implementation details for handling the removal and update of package catalogs in the `PackageCatalogReference` class. - Added TODO comments indicating future implementation plans.
- Introduced a new COM class `RemovePackageCatalogOptions` with corresponding CLSIDs and properties. - Updated project files and headers to include the new class. - Added RemovePackageCatalogAsync method to handle the new functionality in `PackageManager`. - Renamed `UpdatePackageCatalog` to `RefreshPackageCatalog` and - Removed the old `UpdatePackageCatalogResult` class and introduced `RefreshPackageCatalogResult`. - Added new properties to `AddPackageCatalogOptions`.
This comment has been minimized.
This comment has been minimized.
Corrected a typo in the comment for `AcceptSourceAgreements` from "PacakageCatalog" to "PackageCatalog". This change improves the readability and accuracy of the code documentation.
Reformatted the RemovePackageCatalogAsync method declaration in PackageManager.h for improved readability.
- Two new error codes, `SourceAgreementsNotAccepted` and `AuthenticationError`, were added to the `AddPackageCatalogResult` - enumeration in the `Microsoft.Management.Deployment` namespace. - The `InvalidOptions` error code was added to the `RemovePackageCatalogResult` enumeration in the same namespace. - The comment for the `RemovePackageCatalogAsync` method was updated to clarify that it unregisters a package catalog and eliminates system artifacts based on the provided options.
- Introduce CallbackDispatcherSink in AppInstaller namespace to manage and dispatch progress updates to registered callbacks. - Implement methods for initializing, updating, and ending progress, as well as adding and firing callbacks. - Ensure thread-safe access with a mutex. - Minor formatting changes included.
Introduced new functionalities for handling package catalog operations, including adding, refreshing, and removing package catalogs. These operations now feature detailed exception handling, progress reporting, and validation checks. Key changes include: - Added `WINGET_CATALOG_CATCH_STORE` macro in ExecutionContext.h. - Implemented `RefreshPackageCatalogAsync` in PackageCatalogReference.cpp. - Implemented `AddPackageCatalogAsync` and `RemovePackageCatalogAsync` in PackageManager.cpp. - Added various helper functions for status mapping and result creation. - Adjusted includes and formatting for consistency in RemovePackageCatalogOptions.h.
- The PackageCatalogInterop class handles package catalog operations for end-to-end tests, including adding, removing, and validating package catalogs. - It addresses edge cases like invalid options, duplicate names, and unaccepted source agreements.
…com/Madhusudhan-MSFT/winget-cli into user/masudars/WinGet_Source_COM_API
…method - Refactored status handling by introducing a template function `GetPackageCatalogOperationStatus` in `Converters.h`, replacing individual status conversion functions in `PackageCatalogReference.cpp` and `PackageManager.cpp`. - Simplified progress reporting by modifying callbacks to report only the current progress value. - Moved new functions `CheckForDuplicateSource`, `CreateSourceFromOptions`, and `GetMatchingSource` in `PackageManager.cpp` close all the private methods. - Included `<optional>` header to support `std::optional`. - Cleaned up redundant code and improved comments for better clarity.
The indentation of the `struct RepairOptions` declaration has been adjusted. Specifically, the indentation level has been decreased by one level, aligning it with the `[uuid(WINGET_OUTOFPROC_COM_CLSID_RepairOptions)]` attribute. This change improves code readability and consistency.
…kageCatalog COM APIs (as it is targetted for 1.10 release) Updated contract version from 11 to 12 in `winrt::Microsoft::Management::Deployment::implementation` and `Microsoft.Management.Deployment` namespaces. Changes include: - Updated comments and attributes in `PackageCatalogReference.h`, `PackageManager.h`, and `PackageManager.idl`. - Modified `contractversion` attribute in `PackageManager.idl` to 12. - Adjusted contract attributes for enums, runtime classes, and methods to version 12. These updates ensure the codebase aligns with the new contract version, incorporating any new features, improvements, or fixes.
- Removed WINGET_CATALOG_CATCH_STORE macro from ExecutionContext.h. - Refactored GetPackageCatalogOperationStatus in Converters.h. - Updated PackageCatalogReference.cpp to use HandleException. - Refactored PackageManager.cpp for detailed exception handling. - Added new test cases for insecure URI and invalid type scenarios. - Updated PackageCatalogInterop.cs tests to use InvalidOptions status. - Added comments for admin validation checks in InProc/OutOfProc calls.
…tion - Introduced `TestClassTearDown` method with `[OneTimeTearDown]` attribute. - Added `AddUpdateRemovePackageCatalog` method for catalog management. - Added `RemovePackageCatalog` method for catalog removal. - Integrated `AddUpdateRemovePackageCatalog` into existing tests.
- Integrate the fix from "Fix for Source Argument Validation in SourceWorkflow for Default Source Type" (microsoft#4891). This commit incorporates part of the included fix for consistency. - Updated the method of obtaining the default source type in the winrt::Microsoft::Management::Deployment::implementation namespace within PackageManager.cpp. Replaced the use of ::AppInstaller::Repository::ISourceFactory::GetForType("")->TypeName() with ::AppInstaller::Repository::Source::GetDefaultSourceType(). This change simplifies the process and ensures future-proofing against any changes in the SourceFactory's default type.
JohnMcPMS
added
the
Requires-AppxManifest-Update
Indicates a Pull Request that will require an update to the internal AppxManifest file when pulled.
label
Oct 22, 2024
JohnMcPMS
reviewed
Oct 22, 2024
src/Microsoft.Management.Deployment.InProc/Microsoft.Management.Deployment.InProc.dll.manifest
Show resolved
Hide resolved
src/Microsoft.Management.Deployment/PackageCatalogReference.cpp
Outdated
Show resolved
Hide resolved
src/Microsoft.Management.Deployment/ResetPackageCatalogResult.cpp
Outdated
Show resolved
Hide resolved
The implementation of PackageCatalogReference already includes the necessary logic to handle AcceptSourceAgreements. The `AcceptSourceAgreements` property has been removed from the `AddPackageCatalogOptions` class and its related files. This includes: - Removal of the property from `AddPackageCatalogOptions.h` and `AddPackageCatalogOptions.cpp`. - Removal of source agreement handling logic in `PackageManager.cpp`. - Removal of `SourceAgreementsNotAccepted` status from `AddPackageCatalogStatus` enum in `PackageManager.idl`. - Removal of the `AddPackageCatalogWithSourceAgreementNotAccepted` test case from `PackageCatalogInterop.cs`. - Removal of handling for `APPINSTALLER_CLI_ERROR_SOURCE_AGREEMENTS_NOT_ACCEPTED` error in `Converters.h` and `PackageManager.cpp`. - Updates to test cases in `GroupPolicyForInterop.cs` and `PackageCatalogInterop.cs` to remove the setting of `AcceptSourceAgreements` to `true`.
…tions - Added IsRunningAsAdminOrSystem() in Runtime.h and Runtime.cpp. - Added COM class entry for RemovePackageCatalogOptions in Microsoft.Management.Deployment.InProc.dll.manifest. - Corrected NameCLSIDPair syntax in Factory.cpp. - Added and declared new status mapping functions in Converters.cpp and Converters.h. - Encapsulated GetRefreshPackageCatalogResult in PackageCatalogReference.cpp. - Encapsulated package catalog operation functions in PackageManager.cpp. - Removed ResetPackageCatalogResult class and its implementation. - Updated error codes in PackageCatalogInterop.cs.
Corrected the indentation of the `clsid` attribute for the `RemovePackageCatalogOptions` comClass element in the `Microsoft.Management.Deployment.InProc.dll.manifest` file. The `clsid` value itself remains unchanged.
…eCatalogAsync to throw errors on invalid arguments, following API design guidelines. - Updated `AddPackageCatalogAsync` and `RemovePackageCatalogAsync` in `PackageManager.cpp` to perform argument validation at the beginning of the methods, ensuring early error detection and potential performance improvements. At this stage, we avoid constructing a result object for error codes and simply use a THROW statement to generate an exception for the caller. - Refactored `AddPackageCatalogWithInvalidOptions` and `RemovePackageCatalogWithInvalidOptions` in `PackageCatalogInterop.cs` to be synchronous and directly test for exceptions using `Assert.ThrowsAsync<ArgumentException>`.
- Removed `CallbackDispatcherSink` and - introduced new progress sink classes: - `CompletionOnlyProgressSink` and - 'PreIndexedPackageCatalogProgressSink`. - Updated project files and existing code to use the new progress sinks, simplifying and improving progress reporting for package catalog operations.
This comment has been minimized.
This comment has been minimized.
Corrected a typo in the comment for the `maximum` parameter of the `OnProgress` method in `PackageCatalogProgress.h`. The word "progres" was corrected to "progress".
JohnMcPMS
reviewed
Oct 24, 2024
- Added validation to ensure that the `progressReporter` function is not null in the constructors of `CompletionOnlyProgressSink` and `PreIndexedPackageCatalogProgressSink`. - If `progressReporter` is null, an `E_INVALIDARG` exception is thrown. - Modified the insertion of the default weight for `AppInstaller::ProgressType::Percent` in `PreIndexedPackageCatalogProgressSink` to use `insert_or_assign` instead of direct assignment for better robustness.
- Updated data structures for `progressWeights` to account for edge case. - Refined progress reporting logic to handle edge cases and ensure accurate tracking. - Replaced `std::wstring` with `hstring` in Add/Removal headers get a perf. benefits. - Updated exception types in tests to reflect actual exceptions thrown. - Removed unnecessary headers.
JohnMcPMS
reviewed
Oct 25, 2024
- Simplified documentation comments for RefreshPackageCatalogAsync, AddPackageCatalogAsync, and RemovePackageCatalogAsync to specify progress as a percentage (0-100). - Removed detailed explanation about progress reporting for "Microsoft.PreIndexed.Package" Package Catalogs (implementation details).
JohnMcPMS
approved these changes
Oct 28, 2024
microsoft-github-policy-service
bot
added
Issue-Feature
This is a feature request for the Windows Package Manager client.
Area-COM-API
Issue related to COM API
labels
Nov 11, 2024
Related to: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Area-COM-API
Issue related to COM API
Issue-Feature
This is a feature request for the Windows Package Manager client.
Requires-AppxManifest-Update
Indicates a Pull Request that will require an update to the internal AppxManifest file when pulled.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
WinGet Source COM API Support
This update includes the following changes:
How Validated:
Related to : #4170
Microsoft Reviewers: Open in CodeFlow