From dc921b99e0ad7c7dd33dd04fa75807f3c8f24336 Mon Sep 17 00:00:00 2001 From: ilho159kim Date: Thu, 5 Sep 2019 08:55:27 +0900 Subject: [PATCH] [Tizen.Applications.PackageManager][TCSACR-272][Add] Add Dependency Info APIs (#996) * [Tizen.Applications.PackageManager][TCSACR-272][Add] Add Dependency Info APIs * Fix APIs description * Fix APIs description, coding style * Fix coding style * Delete PackageDependencyInformation's constructor --- .../Interop/Interop.Package.cs | 9 +++ .../Interop/Interop.PackageArchive.cs | 4 ++ .../Tizen.Applications/Package.cs | 50 +++++++++++++++++ .../Tizen.Applications/PackageArchive.cs | 26 +++++++++ .../PackageDependencyInformation.cs | 65 ++++++++++++++++++++++ 5 files changed, 154 insertions(+) create mode 100644 src/Tizen.Applications.PackageManager/Tizen.Applications/PackageDependencyInformation.cs diff --git a/src/Tizen.Applications.PackageManager/Interop/Interop.Package.cs b/src/Tizen.Applications.PackageManager/Interop/Interop.Package.cs index adf0479..05be277 100644 --- a/src/Tizen.Applications.PackageManager/Interop/Interop.Package.cs +++ b/src/Tizen.Applications.PackageManager/Interop/Interop.Package.cs @@ -34,6 +34,9 @@ internal static partial class Interop [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] internal delegate bool PackageInfoPrivilegeInfoCallback(string privilege, IntPtr userData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + internal delegate bool PackageInfoDependencyInfoCallback(string from, string to, string type, string requiredVersion, IntPtr userData); + // Any change here might require changes in Tizen.Applications.AppType enum internal enum AppType { @@ -114,5 +117,11 @@ internal static partial class Interop [DllImport(Libraries.PackageManager, EntryPoint = "package_manager_compare_package_cert_info")] internal static extern ErrorCode PackageCompareCertInfo(string lhsPackageId, string rhsPackageId, out CertCompareResultType result); + + [DllImport(Libraries.PackageManager, EntryPoint = "package_info_foreach_dependency_info")] + internal static extern ErrorCode PackageInfoForeachDependencyInfo(IntPtr handle, PackageInfoDependencyInfoCallback callback, IntPtr userData); + + [DllImport(Libraries.PackageManager, EntryPoint = "package_info_foreach_dependency_info_depends_on")] + internal static extern ErrorCode PackageInfoForeachDependencyInfoDependsOn(IntPtr handle, PackageInfoDependencyInfoCallback callback, IntPtr userData); } } diff --git a/src/Tizen.Applications.PackageManager/Interop/Interop.PackageArchive.cs b/src/Tizen.Applications.PackageManager/Interop/Interop.PackageArchive.cs index e2af2fa..e4137ba 100644 --- a/src/Tizen.Applications.PackageManager/Interop/Interop.PackageArchive.cs +++ b/src/Tizen.Applications.PackageManager/Interop/Interop.PackageArchive.cs @@ -23,6 +23,7 @@ internal static partial class Interop { internal static partial class PackageArchive { + [DllImport(Libraries.PackageManager, EntryPoint = "package_archive_info_create")] internal static extern ErrorCode PackageArchiveInfoCreate(string path, out IntPtr handle); @@ -52,5 +53,8 @@ internal static partial class Interop [DllImport(Libraries.PackageManager, EntryPoint = "package_archive_info_get_icon")] internal static extern ErrorCode PackageArchiveInfoGetIcon(IntPtr handle, out IntPtr icon, out int iconSize); + + [DllImport(Libraries.PackageManager, EntryPoint = "package_archive_info_foreach_direct_dependency")] + internal static extern ErrorCode PackageArchiveInfoForeachDirectDependency(IntPtr handle, Package.PackageInfoDependencyInfoCallback callback, IntPtr userData); } } diff --git a/src/Tizen.Applications.PackageManager/Tizen.Applications/Package.cs b/src/Tizen.Applications.PackageManager/Tizen.Applications/Package.cs index 8cf14cc..7478643 100644 --- a/src/Tizen.Applications.PackageManager/Tizen.Applications/Package.cs +++ b/src/Tizen.Applications.PackageManager/Tizen.Applications/Package.cs @@ -48,6 +48,8 @@ namespace Tizen.Applications private Dictionary _packageManagerSizeInfoCallbackDict = new Dictionary(); private int _callbackId = 0; + private List _dependencyTo; + private List _dependencyFrom; private Package(string pkgId) { @@ -217,6 +219,18 @@ namespace Tizen.Applications } /// + /// Packages that this package is required. + /// + /// 6 + public IEnumerable DependencyTo { get { return _dependencyTo; } } + + /// + /// Packages that is requiring this package + /// + /// 6 + public IEnumerable DependencyFrom { get { return _dependencyFrom; } } + + /// /// Gets the package size information. /// /// Package size information. @@ -360,6 +374,8 @@ namespace Tizen.Applications package._certificates = PackageCertificate.GetPackageCertificates(handle); package._privileges = GetPackagePrivilegeInformation(handle); + package._dependencyTo = GetPackageDependency(handle); + package._dependencyFrom = GetPackageDependencyDependsOn(handle); return package; } @@ -424,5 +440,39 @@ namespace Tizen.Applications return applicationType; } + + private static List GetPackageDependency(IntPtr packageInfoHandle) + { + List dependencies = new List(); + Interop.Package.PackageInfoDependencyInfoCallback dependencyInfoCb = (from, to, type, requiredVersion, userData) => + { + dependencies.Add(PackageDependencyInformation.GetPackageDependencyInformation(from, to, type, requiredVersion)); + return true; + }; + + Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoForeachDependencyInfo(packageInfoHandle, dependencyInfoCb, IntPtr.Zero); + if (err != Interop.PackageManager.ErrorCode.None) + { + Log.Warn(LogTag, string.Format("Failed to get dependency info. err = {0}", err)); + } + return dependencies; + } + + private static List GetPackageDependencyDependsOn(IntPtr packageInfoHandle) + { + List dependencies = new List(); + Interop.Package.PackageInfoDependencyInfoCallback dependencyInfoCb = (from, to, type, requiredVersion, userData) => + { + dependencies.Add(PackageDependencyInformation.GetPackageDependencyInformation(from, to, type, requiredVersion)); + return true; + }; + + Interop.PackageManager.ErrorCode err = Interop.Package.PackageInfoForeachDependencyInfoDependsOn(packageInfoHandle, dependencyInfoCb, IntPtr.Zero); + if (err != Interop.PackageManager.ErrorCode.None) + { + Log.Warn(LogTag, string.Format("Failed to get dependency info. err = {0}", err)); + } + return dependencies; + } } } diff --git a/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageArchive.cs b/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageArchive.cs index b7c45b9..451382b 100644 --- a/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageArchive.cs +++ b/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageArchive.cs @@ -15,6 +15,7 @@ */ using System; +using System.Collections.Generic; using System.Runtime.InteropServices; namespace Tizen.Applications @@ -37,6 +38,7 @@ namespace Tizen.Applications private string _author = string.Empty; private IntPtr _icon = IntPtr.Zero; private int _iconSize = 0; + private List _dependency_to; private PackageArchive(string archivePath) { @@ -99,6 +101,12 @@ namespace Tizen.Applications } } + /// + /// Packages that this package is required. + /// + /// 6 + public List DependencyTo { get { return _dependency_to; } } + // This method assumes that given arguments are already validated and have valid values. internal static PackageArchive CreatePackageArchive(IntPtr handle, string archivePath) { @@ -145,6 +153,7 @@ namespace Tizen.Applications { Log.Warn(LogTag, "Failed to get package author from " + archivePath); } + packageArchive._dependency_to = GetPackageArchiveDependencyInformation(handle); return packageArchive; } @@ -167,5 +176,22 @@ namespace Tizen.Applications } return packageArchive; } + + private static List GetPackageArchiveDependencyInformation(IntPtr handle) + { + List dependencies = new List(); + Interop.Package.PackageInfoDependencyInfoCallback dependencyInfoCb = (from, to, type, requiredVersion, userData) => + { + dependencies.Add(PackageDependencyInformation.GetPackageDependencyInformation(from, to, type, requiredVersion)); + return true; + }; + + Interop.PackageManager.ErrorCode err = Interop.PackageArchive.PackageArchiveInfoForeachDirectDependency(handle, dependencyInfoCb, IntPtr.Zero); + if (err != Interop.PackageManager.ErrorCode.None) + { + Log.Warn(LogTag, string.Format("Failed to get dependency info. err = {0}", err)); + } + return dependencies; + } } } diff --git a/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageDependencyInformation.cs b/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageDependencyInformation.cs new file mode 100644 index 0000000..74c8124 --- /dev/null +++ b/src/Tizen.Applications.PackageManager/Tizen.Applications/PackageDependencyInformation.cs @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; + +namespace Tizen.Applications +{ + /// + /// This class has read-only properties to get the package dependency information. + /// + /// 6 + public class PackageDependencyInformation + { + private string _from; + private string _to; + private string _type; + private string _requiredVersion; + + /// + /// The ID of package that depends on another. + /// + /// 6 + public string From { get { return _from; } } + + /// + /// The ID of package that is required by another. + /// + /// + public string To { get { return _to; } } + + /// + /// The Type of dependency. + /// + /// 6 + public string Type { get { return _type; } } + + /// + /// The required version. + /// + /// 6 + public string RequiredVersion { get { return _requiredVersion; } } + internal static PackageDependencyInformation GetPackageDependencyInformation(string from, string to, string type, string requiredVersion) + { + var pkgDependencyInfo = new PackageDependencyInformation(); + pkgDependencyInfo._from = from; + pkgDependencyInfo._to = to; + pkgDependencyInfo._type = type; + pkgDependencyInfo._requiredVersion = requiredVersion; + return pkgDependencyInfo; + } + } +} \ No newline at end of file -- 2.7.4