/** * ephy_embed_shell_get_global_history_service: * @shell: the #EphyEmbedShell * * Return value: (transfer none): the global #EphyHistoryService **/ GObject * ephy_embed_shell_get_global_history_service (EphyEmbedShell *shell) { EphyEmbedShellPrivate *priv = ephy_embed_shell_get_instance_private (shell); g_return_val_if_fail (EPHY_IS_EMBED_SHELL (shell), NULL); if (priv->global_history_service == NULL) { char *filename; filename = g_build_filename (ephy_dot_dir (), EPHY_HISTORY_FILE, NULL); priv->global_history_service = ephy_history_service_new (filename, priv->mode == EPHY_EMBED_SHELL_MODE_INCOGNITO); g_free (filename); g_return_val_if_fail (priv->global_history_service, NULL); g_signal_connect (priv->global_history_service, "urls-visited", G_CALLBACK (history_service_urls_visited_cb), shell); g_signal_connect (priv->global_history_service, "url-title-changed", G_CALLBACK (history_service_url_title_changed_cb), shell); g_signal_connect (priv->global_history_service, "url-deleted", G_CALLBACK (history_service_url_deleted_cb), shell); g_signal_connect (priv->global_history_service, "host-deleted", G_CALLBACK (history_service_host_deleted_cb), shell); g_signal_connect (priv->global_history_service, "cleared", G_CALLBACK (history_service_cleared_cb), shell); } return G_OBJECT (priv->global_history_service); }
static EphyHistoryService * ensure_empty_history (const char* filename) { if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) { g_unlink (filename); } return ephy_history_service_new (filename); }
static void migrate_history () { GFileInputStream *input; GMarkupParseContext *context; GError *error = NULL; GFile *file; char *filename; char buffer[1024]; HistoryParseData parse_data; gchar *temporary_file = g_build_filename (ephy_dot_dir (), "ephy-history.db", NULL); /* Do nothing if the history file already exists. Safer than wiping * it out. */ if (g_file_test (temporary_file, G_FILE_TEST_EXISTS)) { g_warning ("Did not migrate Epiphany's history, the ephy-history.db file already exists"); g_free (temporary_file); return; } history_service = ephy_history_service_new (temporary_file); g_free (temporary_file); memset (&parse_data, 0, sizeof (HistoryParseData)); parse_data.location = NULL; parse_data.title = NULL; parse_data.visits = NULL; filename = g_build_filename (ephy_dot_dir (), "ephy-history.xml", NULL); file = g_file_new_for_path (filename); g_free (filename); input = g_file_read (file, NULL, &error); g_object_unref (file); if (error) { if (error->code != G_IO_ERROR_NOT_FOUND) g_warning ("Could not load Epiphany history data, migration aborted: %s", error->message); g_error_free (error); return; } context = g_markup_parse_context_new (&history_parse_funcs, 0, &parse_data, NULL); while (TRUE) { gssize count = g_input_stream_read (G_INPUT_STREAM (input), buffer, sizeof (buffer), NULL, &error); if (count <= 0) break; if (!g_markup_parse_context_parse (context, buffer, count, &error)) break; } g_markup_parse_context_free (context); g_input_stream_close (G_INPUT_STREAM (input), NULL, NULL); g_object_unref (input); if (parse_data.visits) { ephy_history_service_add_visits (history_service, parse_data.visits, NULL, (EphyHistoryJobCallback)visit_cb, NULL); ephy_history_page_visit_list_free (parse_data.visits); while (!all_done) g_main_context_iteration (NULL, FALSE); } g_object_unref (history_service); }