[Tizen.Applications.PackageManager][TCSACR-272][Add] Add Dependency Info APIs (#996)
authorilho159kim <dlfgh951@naver.com>
Wed, 4 Sep 2019 23:55:27 +0000 (08:55 +0900)
committerpjh9216 <jh9216.park@samsung.com>
Wed, 4 Sep 2019 23:55:27 +0000 (08:55 +0900)
* [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

src/Tizen.Applications.PackageManager/Interop/Interop.Package.cs
src/Tizen.Applications.PackageManager/Interop/Interop.PackageArchive.cs
src/Tizen.Applications.PackageManager/Tizen.Applications/Package.cs
src/Tizen.Applications.PackageManager/Tizen.Applications/PackageArchive.cs
src/Tizen.Applications.PackageManager/Tizen.Applications/PackageDependencyInformation.cs [new file with mode: 0644]

index adf0479..05be277 100644 (file)
@@ -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);
     }
 }
index e2af2fa..e4137ba 100644 (file)
@@ -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);
     }
 }
index 8cf14cc..7478643 100644 (file)
@@ -48,6 +48,8 @@ namespace Tizen.Applications
 
         private Dictionary<IntPtr, Interop.PackageManager.PackageManagerSizeInfoCallback> _packageManagerSizeInfoCallbackDict = new Dictionary<IntPtr, Interop.PackageManager.PackageManagerSizeInfoCallback>();
         private int _callbackId = 0;
+        private List<PackageDependencyInformation> _dependencyTo;
+        private List<PackageDependencyInformation> _dependencyFrom;
 
         private Package(string pkgId)
         {
@@ -217,6 +219,18 @@ namespace Tizen.Applications
         }
 
         /// <summary>
+        /// Packages that this package is required.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        public IEnumerable<PackageDependencyInformation> DependencyTo { get { return _dependencyTo; } }
+
+        /// <summary>
+        /// Packages that is requiring this package
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        public IEnumerable<PackageDependencyInformation> DependencyFrom { get { return _dependencyFrom; } }
+
+        /// <summary>
         /// Gets the package size information.
         /// </summary>
         /// <returns>Package size information.</returns>
@@ -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<PackageDependencyInformation> GetPackageDependency(IntPtr packageInfoHandle)
+        {
+            List<PackageDependencyInformation> dependencies = new List<PackageDependencyInformation>();
+            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<PackageDependencyInformation> GetPackageDependencyDependsOn(IntPtr packageInfoHandle)
+        {
+            List<PackageDependencyInformation> dependencies = new List<PackageDependencyInformation>();
+            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;
+        }
     }
 }
index b7c45b9..451382b 100644 (file)
@@ -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<PackageDependencyInformation> _dependency_to;
 
         private PackageArchive(string archivePath)
         {
@@ -99,6 +101,12 @@ namespace Tizen.Applications
             }
         }
 
+        /// <summary>
+        /// Packages that this package is required.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        public List<PackageDependencyInformation> 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<PackageDependencyInformation> GetPackageArchiveDependencyInformation(IntPtr handle)
+        {
+            List<PackageDependencyInformation> dependencies = new List<PackageDependencyInformation>();
+            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 (file)
index 0000000..74c8124
--- /dev/null
@@ -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
+{
+    /// <summary>
+    /// This class has read-only properties to get the package dependency information.
+    /// </summary>
+    /// <since_tizen> 6 </since_tizen>
+    public class PackageDependencyInformation
+    {
+        private string _from;
+        private string _to;
+        private string _type;
+        private string _requiredVersion;
+
+        /// <summary>
+        /// The ID of package that depends on another.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        public string From { get { return _from; } }
+
+        /// <summary>
+        /// The ID of package that is required by another.
+        /// </summary>
+        /// <since_tizen>  </since_tizen>
+        public string To { get { return _to; } }
+
+        /// <summary>
+        /// The Type of dependency.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        public string Type { get { return _type; } }
+
+        /// <summary>
+        /// The required version.
+        /// </summary>
+        /// <since_tizen> 6 </since_tizen>
+        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