/** * pk_plugin_transaction_finished_end: */ void pk_plugin_transaction_finished_end (PkPlugin *plugin, PkTransaction *transaction) { gboolean ret; gchar *filename = NULL; PkRoleEnum role; role = pk_transaction_get_role (transaction); if (role != PK_ROLE_ENUM_REFRESH_CACHE) goto out; /* clear the firmware requests directory */ filename = g_build_filename (LOCALSTATEDIR, "run", "PackageKit", "udev", NULL); g_debug ("clearing udev firmware requests at %s", filename); ret = pk_directory_remove_contents (filename); if (!ret) g_warning ("failed to clear %s", filename); out: g_free (filename); }
/** * pk_plugin_transaction_finished_end: */ void pk_plugin_transaction_finished_end (PkPlugin *plugin, PkTransaction *transaction) { gboolean ret; gchar *filename = NULL; PkRoleEnum role; /* only do this for RefreshCache, usually once a week */ role = pk_transaction_get_role (transaction); if (role != PK_ROLE_ENUM_REFRESH_CACHE) goto out; /* skip simulate actions */ if (pk_bitfield_contain (pk_transaction_get_transaction_flags (transaction), PK_TRANSACTION_FLAG_ENUM_SIMULATE)) { goto out; } /* skip only-download */ if (pk_bitfield_contain (pk_transaction_get_transaction_flags (transaction), PK_TRANSACTION_FLAG_ENUM_ONLY_DOWNLOAD)) { goto out; } /* clear the firmware requests directory */ filename = g_build_filename (LOCALSTATEDIR, "run", "PackageKit", "udev", NULL); if (!g_file_test (filename, G_FILE_TEST_EXISTS)) goto out; g_debug ("clearing udev firmware requests at %s", filename); ret = pk_directory_remove_contents (filename); if (!ret) g_warning ("failed to clear %s", filename); out: g_free (filename); }
static void pk_backend_refresh_cache_thread(PkBackendJob *job, GVariant *params, gpointer user_data) { gchar *tmp_dir_name, *db_err, *path = NULL; gint ret; gboolean force; GSList *file_list = NULL, *l; GFile *db_file = NULL; GFileInfo *file_info = NULL; GError *err = NULL; sqlite3_stmt *stmt = NULL; PkBackendKatjaJobData *job_data = pk_backend_job_get_user_data(job); pk_backend_job_set_status(job, PK_STATUS_ENUM_DOWNLOAD_CHANGELOG); /* Create temporary directory */ tmp_dir_name = g_dir_make_tmp("PackageKit.XXXXXX", &err); if (!tmp_dir_name) { pk_backend_job_error_code(job, PK_ERROR_ENUM_INTERNAL_ERROR, "%s", err->message); g_error_free(err); pk_backend_job_finished(job); return; } g_variant_get(params, "(b)", &force); /* Force the complete cache refresh if the read configuration file is newer than the metadata cache */ if (!force) { path = g_build_filename(LOCALSTATEDIR, "cache", "PackageKit", "metadata", "metadata.db", NULL); db_file = g_file_new_for_path(path); file_info = g_file_query_info(db_file, "time::modified-usec", G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &err); if (err) { pk_backend_job_error_code(job, PK_ERROR_ENUM_NO_CACHE, "%s: %s", path, err->message); g_error_free(err); goto out; } ret = sqlite3_prepare_v2(job_data->db, "SELECT value FROM cache_info WHERE key LIKE 'last_modification'", -1, &stmt, NULL); if ((ret != SQLITE_OK) || ((ret = sqlite3_step(stmt)) != SQLITE_ROW)) { pk_backend_job_error_code(job, PK_ERROR_ENUM_NO_CACHE, "%s: %s", path, sqlite3_errstr(ret)); goto out; } if ((guint32) sqlite3_column_int(stmt, 0) > g_file_info_get_attribute_uint32(file_info, "time::modified-usec")) force = TRUE; } if (force) { /* It should empty all tables */ if (sqlite3_exec(job_data->db, "DELETE FROM repos", NULL, 0, &db_err) != SQLITE_OK) { pk_backend_job_error_code(job, PK_ERROR_ENUM_INTERNAL_ERROR, "%s", db_err); sqlite3_free(db_err); goto out; } } for (l = repos; l; l = g_slist_next(l)) /* Get list of files that should be downloaded */ file_list = g_slist_concat(file_list, katja_pkgtools_collect_cache_info(l->data, tmp_dir_name)); /* Download repository */ pk_backend_job_set_status(job, PK_STATUS_ENUM_DOWNLOAD_REPOSITORY); for (l = file_list; l; l = g_slist_next(l)) katja_get_file(&job_data->curl, ((gchar **)l->data)[0], ((gchar **)l->data)[1]); g_slist_free_full(file_list, (GDestroyNotify)g_strfreev); /* Refresh cache */ pk_backend_job_set_status(job, PK_STATUS_ENUM_REFRESH_CACHE); for (l = repos; l; l = g_slist_next(l)) katja_pkgtools_generate_cache(l->data, job, tmp_dir_name); out: sqlite3_finalize(stmt); if (file_info) g_object_unref(file_info); if (db_file) g_object_unref(db_file); g_free(path); pk_directory_remove_contents(tmp_dir_name); g_rmdir(tmp_dir_name); g_free(tmp_dir_name); pk_backend_job_finished(job); }