/** * pk_plugin_sqlite_cache_rescan_cb: **/ static gint pk_plugin_sqlite_cache_rescan_cb (void *data, gint argc, gchar **argv, gchar **col_name) { PkPlugin *plugin = (PkPlugin*) data; const gchar *filename = NULL; const gchar *md5 = NULL; gchar *md5_calc = NULL; gint i; /* add the filename data to the array */ for (i=0; i<argc; i++) { if (g_strcmp0 (col_name[i], "filename") == 0 && argv[i] != NULL) filename = argv[i]; else if (g_strcmp0 (col_name[i], "md5") == 0 && argv[i] != NULL) md5 = argv[i]; } /* sanity check */ if (filename == NULL || md5 == NULL) { g_warning ("filename %s and md5 %s)", filename, md5); goto out; } /* get md5 */ md5_calc = pk_plugin_get_filename_md5 (filename); if (md5_calc == NULL) { g_debug ("remove of %s as no longer found", filename); pk_plugin_sqlite_remove_filename (plugin, filename); goto out; } /* we've checked the file */ g_hash_table_insert (plugin->priv->hash, g_strdup (filename), GUINT_TO_POINTER (1)); /* check md5 is same */ if (g_strcmp0 (md5, md5_calc) != 0) { g_debug ("add of %s as md5 invalid (%s vs %s)", filename, md5, md5_calc); pk_plugin_sqlite_add_filename (plugin, filename, md5_calc); } g_debug ("existing filename %s valid, md5=%s", filename, md5); out: g_free (md5_calc); return 0; }
/** * pk_plugin_files_cb: **/ static void pk_plugin_files_cb (PkBackendJob *job, PkFiles *files, PkPlugin *plugin) { guint i; guint len; gboolean ret; gchar **package; gchar *md5; gchar **filenames = NULL; gchar *package_id = NULL; /* get data */ g_object_get (files, "package-id", &package_id, "files", &filenames, NULL); package = pk_package_id_split (package_id); /* check each file */ len = g_strv_length (filenames); for (i=0; i<len; i++) { /* exists? */ ret = g_file_test (filenames[i], G_FILE_TEST_EXISTS); if (!ret) continue; /* .desktop file? */ ret = g_str_has_suffix (filenames[i], ".desktop"); if (!ret) continue; /* in the datadir */ ret = g_str_has_prefix (filenames[i], "/usr/share/applications"); if (!ret) continue; g_debug ("adding filename %s", filenames[i]); md5 = pk_plugin_get_filename_md5 (filenames[i]); pk_plugin_sqlite_add_filename_details (plugin, filenames[i], package[PK_PACKAGE_ID_NAME], md5); g_free (md5); } g_strfreev (filenames); g_strfreev (package); g_free (package_id); }
/** * pk_plugin_sqlite_add_filename: **/ static gint pk_plugin_sqlite_add_filename (PkPlugin *plugin, const gchar *filename, const gchar *md5_opt) { gchar *md5 = NULL; gint rc = -1; PkPackage *package; GError *error = NULL; /* if we've got it, use old data */ if (md5_opt != NULL) md5 = g_strdup (md5_opt); else md5 = pk_plugin_get_filename_md5 (filename); // Sailfish OS: Avoid scanning of manually installed .desktop files if (strstr(filename, PK_DESKTOP_DEFAULT_APPLICATION_DIR "/apkd_launcher_") == filename) { g_warning ("Skipping custom .desktop file: %s", filename); goto out; } /* resolve */ package = pk_plugin_get_installed_package_for_file (plugin, filename, &error); if (package == NULL) { g_warning ("Failed to add database cache entry %s: %s", filename, error->message); g_error_free (error); goto out; } /* add */ rc = pk_plugin_sqlite_add_filename_details (plugin, filename, pk_package_get_name (package), md5); out: g_free (md5); return rc; }
/** * pk_plugin_sqlite_add_filename: **/ static gint pk_plugin_sqlite_add_filename (PkPlugin *plugin, const gchar *filename, const gchar *md5_opt) { gchar *md5 = NULL; gint rc = -1; PkPackage *package; GError *error = NULL; /* if we've got it, use old data */ if (md5_opt != NULL) md5 = g_strdup (md5_opt); else md5 = pk_plugin_get_filename_md5 (filename); /* resolve */ package = pk_plugin_get_installed_package_for_file (plugin, filename, &error); if (package == NULL) { g_warning ("Failed to add database cache entry %s: %s", filename, error->message); g_error_free (error); goto out; } /* add */ rc = pk_plugin_sqlite_add_filename_details (plugin, filename, pk_package_get_name (package), md5); out: g_free (md5); return rc; }