2 * Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Runtime.InteropServices;
20 namespace Tizen.Applications
23 /// This class provides the methods and properties to get information about the package archive.
25 /// <since_tizen> 6 </since_tizen>
26 public class PackageArchive
28 private const string LogTag = "Tizen.Applications";
30 private string _path = string.Empty;
31 private string _id = string.Empty;
32 private string _type = string.Empty;
33 private string _version = string.Empty;
34 private string _apiVersion = string.Empty;
35 private string _description = string.Empty;
36 private string _label = string.Empty;
37 private string _author = string.Empty;
38 private IntPtr _icon = IntPtr.Zero;
39 private int _iconSize = 0;
41 private PackageArchive(string archivePath)
49 /// <since_tizen> 6 </since_tizen>
50 public string Id { get { return _id; } }
53 /// Type of the package.
55 /// <since_tizen> 6 </since_tizen>
56 public string Type { get { return _type; } }
59 /// Version of the package.
61 /// <since_tizen> 6 </since_tizen>
62 public string Version { get { return _version; } }
65 /// Api version of the package.
67 /// <since_tizen> 6 </since_tizen>
68 public string ApiVersion { get { return _apiVersion; } }
71 /// Description of the package.
73 /// <since_tizen> 6 </since_tizen>
74 public string Description { get { return _description; } }
77 /// Label of the package.
79 /// <since_tizen> 6 </since_tizen>
80 public string Label { get { return _label; } }
83 /// Author of the package.
85 /// <since_tizen> 6 </since_tizen>
86 public string Author { get { return _author; } }
89 /// Icon of the package.
91 /// <since_tizen> 6 </since_tizen>
96 byte[] byteArray = new byte[_iconSize];
97 Marshal.Copy(_icon, byteArray, 0, _iconSize);
102 // This method assumes that given arguments are already validated and have valid values.
103 internal static PackageArchive CreatePackageArchive(IntPtr handle, string archivePath)
105 PackageArchive packageArchive = new PackageArchive(archivePath);
107 var err = Interop.PackageManager.ErrorCode.None;
108 err = Interop.PackageArchive.PackageArchiveInfoGetPackage(handle, out packageArchive._id);
109 if (err != Interop.PackageManager.ErrorCode.None)
111 Log.Warn(LogTag, "Failed to get package id from " + archivePath);
113 err = Interop.PackageArchive.PackageArchiveInfoGetType(handle, out packageArchive._type);
114 if (err != Interop.PackageManager.ErrorCode.None)
116 Log.Warn(LogTag, "Failed to get package type from " + archivePath);
118 err = Interop.PackageArchive.PackageArchiveInfoGetVersion(handle, out packageArchive._version);
119 if (err != Interop.PackageManager.ErrorCode.None)
121 Log.Warn(LogTag, "Failed to get package version from " + archivePath);
123 err = Interop.PackageArchive.PackageArchiveInfoGetApiVersion(handle, out packageArchive._apiVersion);
124 if (err != Interop.PackageManager.ErrorCode.None)
126 Log.Warn(LogTag, "Failed to get package api version from " + archivePath);
128 err = Interop.PackageArchive.PackageArchiveInfoGetDescription(handle, out packageArchive._description);
129 if (err != Interop.PackageManager.ErrorCode.None)
131 Log.Warn(LogTag, "Failed to get package description from " + archivePath);
133 err = Interop.PackageArchive.PackageArchiveInfoGetLabel(handle, out packageArchive._label);
134 if (err != Interop.PackageManager.ErrorCode.None)
136 Log.Warn(LogTag, "Failed to get package label from " + archivePath);
138 err = Interop.PackageArchive.PackageArchiveInfoGetAuthor(handle, out packageArchive._author);
139 if (err != Interop.PackageManager.ErrorCode.None)
141 Log.Warn(LogTag, "Failed to get package author from " + archivePath);
143 err = Interop.PackageArchive.PackageArchiveInfoGetIcon(handle, out packageArchive._icon, out packageArchive._iconSize);
144 if (err != Interop.PackageManager.ErrorCode.None)
146 Log.Warn(LogTag, "Failed to get package author from " + archivePath);
149 return packageArchive;
152 internal static PackageArchive GetPackageArchive(string archivePath)
154 IntPtr packageArchiveInfoHandle;
155 Interop.PackageManager.ErrorCode err = Interop.PackageArchive.PackageArchiveInfoCreate(archivePath, out packageArchiveInfoHandle);
156 if (err != Interop.PackageManager.ErrorCode.None)
158 throw PackageManagerErrorFactory.GetException(err, string.Format("Failed to create native handle for package archive info of {0}", archivePath));
161 PackageArchive packageArchive = CreatePackageArchive(packageArchiveInfoHandle, archivePath);
163 err = Interop.PackageArchive.PackageArchiveInfoDestroy(packageArchiveInfoHandle);
164 if (err != Interop.PackageManager.ErrorCode.None)
166 Log.Warn(LogTag, string.Format("Failed to destroy native handle for package archive info of {0}. err = {1}", archivePath, err));
168 return packageArchive;