[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
{
[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);
}
}
{
internal static partial class PackageArchive
{
+
[DllImport(Libraries.PackageManager, EntryPoint = "package_archive_info_create")]
internal static extern ErrorCode PackageArchiveInfoCreate(string path, out IntPtr handle);
[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);
}
}
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)
{
}
/// <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>
package._certificates = PackageCertificate.GetPackageCertificates(handle);
package._privileges = GetPackagePrivilegeInformation(handle);
+ package._dependencyTo = GetPackageDependency(handle);
+ package._dependencyFrom = GetPackageDependencyDependsOn(handle);
return package;
}
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;
+ }
}
}
*/
using System;
+using System.Collections.Generic;
using System.Runtime.InteropServices;
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)
{
}
}
+ /// <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)
{
{
Log.Warn(LogTag, "Failed to get package author from " + archivePath);
}
+ packageArchive._dependency_to = GetPackageArchiveDependencyInformation(handle);
return packageArchive;
}
}
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;
+ }
}
}
--- /dev/null
+/*
+ * 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