コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }