public static byte[] ReadIcon(ApkFile apkFile) { if (string.IsNullOrWhiteSpace(apkFile.IconPath)) { return(null); } byte[] iconBytes = null; var alreadyCached = false; using (var dbConnection = new SQLiteConnection(DataSource)) { dbConnection.Open(); using (var transaction = dbConnection.BeginTransaction()) { using (var command = new SQLiteCommand(dbConnection)) { command.CommandText = "SELECT icon FROM apk WHERE hash = ?"; command.Parameters.Add(new SQLiteParameter(DbType.String, "hash") { Value = apkFile.Md5Hash }); using (var reader = command.ExecuteReader()) { while (reader.Read()) { if (reader["icon"] != null && !Convert.IsDBNull(reader["icon"])) { alreadyCached = true; iconBytes = (byte[])reader["icon"]; } } } } transaction.Commit(); } } if (!alreadyCached) { iconBytes = clsUtils.ResizeIcon(ApkParser.ExtractIconAsByteArray(apkFile)); Task.Factory.StartNew(() => UpdateIcon(apkFile, iconBytes)); } return(iconBytes); }
public static ApkFile ReadApkFile(ApkFile apkFile) { var md5Hash = HashHelper.GetMd5HashForFile(apkFile.LongFileName); apkFile.Md5Hash = md5Hash; bool alreadyCached; using (var dbConnection = new SQLiteConnection(DataSource)) { dbConnection.Open(); using (var transaction = dbConnection.BeginTransaction()) { using (var command = new SQLiteCommand(dbConnection)) { command.CommandText = "SELECT * FROM apk WHERE hash = ?"; command.Parameters.Add(new SQLiteParameter(DbType.String, "hash") { Value = md5Hash }); using (var reader = command.ExecuteReader()) { alreadyCached = reader.HasRows; if (alreadyCached) { //Read from apk table while (reader.Read()) { //Static information apkFile.IdApkFile = Convert.ToInt32(reader["id_apk"]); if (reader["package_name"] != null && !Convert.IsDBNull(reader["package_name"])) { apkFile.PackageName = Convert.ToString(reader["package_name"]); } if (reader["internal_name"] != null && !Convert.IsDBNull(reader["internal_name"])) { apkFile.InternalName = Convert.ToString(reader["internal_name"]); } if (reader["local_version"] != null && !Convert.IsDBNull(reader["local_version"])) { apkFile.LocalVersion = Convert.ToString(reader["local_version"]); } if (reader["version_code"] != null && !Convert.IsDBNull(reader["version_code"])) { apkFile.VersionCode = Convert.ToString(reader["version_code"]); } if (reader["minimum_sdk_version"] != null && !Convert.IsDBNull(reader["minimum_sdk_version"])) { apkFile.MinimumSdkVersion = Convert.ToString(reader["minimum_sdk_version"]); } if (reader["target_sdk_version"] != null && !Convert.IsDBNull(reader["target_sdk_version"])) { apkFile.TargetSdkVersion = Convert.ToString(reader["target_sdk_version"]); } if (reader["icon_path"] != null && !Convert.IsDBNull(reader["icon_path"])) { apkFile.IconPath = Convert.ToString(reader["icon_path"]); } //Dynamic information if (reader["google_play_name"] != null && !Convert.IsDBNull(reader["google_play_name"])) { apkFile.GooglePlayName = Convert.ToString(reader["google_play_name"]); } if (reader["category"] != null && !Convert.IsDBNull(reader["category"])) { apkFile.Category = Convert.ToString(reader["category"]); } if (reader["latest_version"] != null && !Convert.IsDBNull(reader["latest_version"])) { apkFile.LatestVersion = Convert.ToString(reader["latest_version"]); } if (reader["price"] != null && !Convert.IsDBNull(reader["price"])) { apkFile.Price = Convert.ToString(reader["price"]); } if (reader["last_google_play_fetch"] != null && !Convert.IsDBNull(reader["last_google_play_fetch"])) { apkFile.LastGooglePlayFetch = Convert.ToDateTime(reader["last_google_play_fetch"]); } } } } } if (alreadyCached) { using (var command = new SQLiteCommand(dbConnection)) { //Read from extra table command.CommandText = "SELECT id_extra, id_apk, id_extra_type, extra FROM extra WHERE id_apk = ?"; command.Parameters.Clear(); command.Parameters.Add(new SQLiteParameter(DbType.Int64, apkFile.IdApkFile)); using (var reader = command.ExecuteReader()) { if (reader.HasRows) { while (reader.Read()) { var idExtraType = Convert.ToInt32(reader["id_extra_type"]); switch (idExtraType) { case 1: //Screen size apkFile.ScreenSizes.Add(Convert.ToString(reader["extra"])); break; case 2: //Screen density apkFile.ScreenDensities.Add(Convert.ToString(reader["extra"])); break; case 3: //Permission apkFile.Permissions.Add(Convert.ToString(reader["extra"])); break; case 4: //Feature apkFile.Features.Add(Convert.ToString(reader["extra"])); break; } } } } } } transaction.Commit(); } } if (!alreadyCached) { apkFile = ApkParser.ParseApk(apkFile); apkFile = InsertApkFile(apkFile); } return(apkFile); }