summaryrefslogtreecommitdiff
path: root/amiga/history.c
diff options
context:
space:
mode:
Diffstat (limited to 'amiga/history.c')
-rwxr-xr-xamiga/history.c357
1 files changed, 9 insertions, 348 deletions
diff --git a/amiga/history.c b/amiga/history.c
index 5e685b76a..19ba9aff9 100755
--- a/amiga/history.c
+++ b/amiga/history.c
@@ -1,6 +1,5 @@
/*
- * Copyright 2005 Richard Wilson <info@tinct.net>
- * Copyright 2008 Chris Young <chris@unsatisfactorysoftware.co.uk>
+ * Copyright 2008, 2009 Chris Young <chris@unsatisfactorysoftware.co.uk>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
@@ -17,362 +16,24 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "desktop/browser.h"
#include "amiga/history.h"
#include "amiga/tree.h"
-#include "content/urldb.h"
-#include <proto/dos.h>
-#include "amiga/options.h"
+#include "desktop/history_global_core.h"
#include <proto/exec.h>
-#include <assert.h>
-#include <utils/log.h>
-
-#define MAXIMUM_URL_LENGTH 1024
-#define MAXIMUM_BASE_NODES 16
-
-static struct node *global_history_base_node[MAXIMUM_BASE_NODES];
-static int global_history_base_node_time[MAXIMUM_BASE_NODES];
-static int global_history_base_node_count = 0;
-
-static char *global_history_recent_url[GLOBAL_HISTORY_RECENT_URLS];
-static int global_history_recent_count = 0;
-
-static bool global_history_init;
-
-static struct node *ami_global_history_find(const char *url);
-static bool global_history_add_internal(const char *url,
- const struct url_data *data);
-void ami_global_history_initialise_node(const char *title,
- time_t base, int days_back);
-void ami_global_history_initialise_nodes(void);
+#include "amiga/tree.h"
void ami_global_history_initialise(void)
{
- char s[MAXIMUM_URL_LENGTH];
- BPTR *fp;
-
-// if(global_history_tree) return;
-
- /* Create an empty tree */
- global_history_tree = AllocVec(sizeof(struct tree), MEMF_CLEAR | MEMF_PRIVATE);
- if (!global_history_tree) {
- warn_user("NoMemory", 0);
- return;
- }
- global_history_tree->root = tree_create_folder_node(NULL, "Root");
- if (!global_history_tree->root) {
- warn_user("NoMemory", 0);
- FreeVec(global_history_tree);
- global_history_tree = NULL;
- }
- global_history_tree->root->expanded = true;
- ami_global_history_initialise_nodes();
- global_history_tree->movable = false;
-
- /* load recent URLs */
- fp = FOpen(option_recent_file, MODE_OLDFILE,0);
- if (!fp)
- LOG(("Failed to open file '%s' for reading",
- option_recent_file));
- else {
- while (FGets(fp,s, MAXIMUM_URL_LENGTH)) {
- if (s[strlen(s) - 1] == '\n')
- s[strlen(s) - 1] = '\0';
- global_history_add_recent(s);
- }
- FClose(fp);
- }
-
- global_history_init = true;
- urldb_iterate_entries(global_history_add_internal);
- global_history_init = false;
- tree_initialise(global_history_tree);
-
-}
-
-void global_history_add(const char *url)
-{
- const struct url_data *data;
-
- data = urldb_get_url_data(url);
- if (!data)
- return;
-
- global_history_add_internal(url, data);
-}
-
-/**
- * Internal routine to actually perform global history addition
- *
- * \param url The URL to add
- * \param data URL data associated with URL
- * \return true (for urldb_iterate_entries)
- */
-bool global_history_add_internal(const char *url,
- const struct url_data *data)
-{
- int i, j;
- struct node *parent = NULL;
- struct node *link;
- struct node *node;
- bool before = false;
- int visit_date;
-
- assert(url && data);
-
- visit_date = data->last_visit;
-
- /* find parent node */
- for (i = 0; i < global_history_base_node_count; i++) {
- if (global_history_base_node_time[i] <= visit_date) {
- parent = global_history_base_node[i];
- break;
- }
- }
-
- /* the entry is too old to care about */
- if (!parent)
- return true;
-
- if (parent->deleted) {
- /* parent was deleted, so find place to insert it */
- link = global_history_tree->root;
-
- for (j = global_history_base_node_count - 1; j >= 0; j--) {
- if (!global_history_base_node[j]->deleted &&
- global_history_base_node_time[j] >
- global_history_base_node_time[i]) {
- link = global_history_base_node[j];
- before = true;
- break;
- }
- }
+ global_history_window = ami_tree_create(history_global_get_tree_flags(), NULL);
- tree_set_node_selected(global_history_tree,
- parent, false);
- tree_set_node_expanded(global_history_tree,
- parent, false);
- tree_link_node(link, parent, before);
-/*
- if (!global_history_init) {
- tree_recalculate_node(global_history_tree, parent, true);
- tree_recalculate_node_positions(global_history_tree,
- global_history_tree->root);
- tree_redraw_area(global_history_tree,
- 0, 0, 16384, 16384);
- }
-*/
- }
-
- /* find any previous occurance */
+ if(!global_history_window) return;
- if (!global_history_init) {
- node = ami_global_history_find(url);
- if (node) {
- /* \todo: calculate old/new positions and redraw
- * only the relevant portion */
-/*
- tree_redraw_area(global_history_tree,
- 0, 0, 16384, 16384);
-*/
- tree_update_URL_node(node, url, data);
- tree_delink_node(node);
- tree_link_node(parent, node, false);
- tree_handle_node_changed(global_history_tree,
- node, false, true);
- return true;
- }
- }
-
- /* Add the node at the bottom */
- node = tree_create_URL_node_shared(parent, url, data);
- if ((!global_history_init) && (node)) {
-/*
- tree_redraw_area(global_history_tree,
- node->box.x - NODE_INSTEP,
- 0, NODE_INSTEP, 16384);
-*/
- tree_handle_node_changed(global_history_tree, node,
- true, false);
- }
-
- return true;
-}
-
-/**
- * Find an entry in the global history
- *
- * \param url The URL to find
- * \return Pointer to node, or NULL if not found
- */
-struct node *ami_global_history_find(const char *url)
-{
- int i;
- struct node *node;
- struct node_element *element;
-
- for (i = 0; i < global_history_base_node_count; i++) {
- if (!global_history_base_node[i]->deleted) {
- for (node = global_history_base_node[i]->child;
- node; node = node->next) {
- element = tree_find_element(node,
- TREE_ELEMENT_URL);
- if ((element) && !strcmp(url, element->text))
- return node;
- }
- }
- }
- return NULL;
-}
-
-/**
- * Saves the global history's recent URL data.
- */
-void ami_global_history_save(void)
-{
- BPTR *fp;
- int i;
-
- /* save recent URLs */
- fp = fopen(option_recent_file, "w");
- if (!fp)
- LOG(("Failed to open file '%s' for writing",
- option_recent_file));
- else {
- for (i = global_history_recent_count - 1; i >= 0; i--)
- if (strlen(global_history_recent_url[i]) <
- MAXIMUM_URL_LENGTH)
- fprintf(fp, "%s\n",
- global_history_recent_url[i]);
- fclose(fp);
- }
-}
-
-void global_history_add_recent(const char *url)
-{
- int i;
- int j = -1;
- char *current;
-
- /* try to find a string already there */
- for (i = 0; i < global_history_recent_count; i++)
- if (global_history_recent_url[i] &&
- !strcmp(global_history_recent_url[i], url))
- j = i;
-
- /* already at head of list */
- if (j == 0)
- return;
-
- if (j < 0) {
- /* add to head of list */
- free(global_history_recent_url[
- GLOBAL_HISTORY_RECENT_URLS - 1]);
- memmove(&global_history_recent_url[1],
- &global_history_recent_url[0],
- (GLOBAL_HISTORY_RECENT_URLS - 1) *
- sizeof(char *));
- global_history_recent_url[0] = strdup(url);
- global_history_recent_count++;
- if (global_history_recent_count > GLOBAL_HISTORY_RECENT_URLS)
- global_history_recent_count =
- GLOBAL_HISTORY_RECENT_URLS;
-/*
- if (global_history_recent_count == 1)
- ro_gui_window_prepare_navigate_all();
-*/
- } else {
- /* move to head of list */
- current = global_history_recent_url[j];
- for (i = j; i > 0; i--)
- global_history_recent_url[i] =
- global_history_recent_url[i - 1];
- global_history_recent_url[0] = current;
- }
-}
-
-/**
- * Gets details of the currently used URL list.
- *
- * \param count set to the current number of entries in the URL array on exit
- * \return the current URL array
- */
-char **global_history_get_recent(int *count)
-{
- *count = global_history_recent_count;
- return global_history_recent_url;
+ history_global_initialise(ami_tree_get_tree(global_history_window));
}
void ami_global_history_free()
{
- FreeVec(global_history_tree);
-}
-
-/**
- * Initialises the base nodes
- */
-void ami_global_history_initialise_nodes(void)
-{
- struct tm *full_time;
- time_t t;
- int weekday;
- int i;
-
- /* get the current time */
- t = time(NULL);
- if (t == -1)
- return;
-
- /* get the time at the start of today */
- full_time = localtime(&t);
- weekday = full_time->tm_wday;
- full_time->tm_sec = 0;
- full_time->tm_min = 0;
- full_time->tm_hour = 0;
- t = mktime(full_time);
- if (t == -1)
- return;
-
- ami_global_history_initialise_node((char *)messages_get("DateToday"), t, 0);
- if (weekday > 0)
- ami_global_history_initialise_node(
- (char *)messages_get("DateYesterday"), t, -1);
- for (i = 2; i <= weekday; i++)
- ami_global_history_initialise_node(NULL, t, -i);
- ami_global_history_initialise_node((char *)messages_get("Date1Week"),
- t, -weekday - 7);
- ami_global_history_initialise_node((char *)messages_get("Date2Week"),
- t, -weekday - 14);
- ami_global_history_initialise_node((char *)messages_get("Date3Week"),
- t, -weekday - 21);
+ history_global_cleanup();
+ ami_tree_destroy(global_history_window);
+ global_history_window = NULL;
}
-
-/**
- * Create and initialise a node
- */
-void ami_global_history_initialise_node(const char *title,
- time_t base, int days_back)
-{
- struct tm *full_time;
- char buffer[64];
- struct node *node;
-
- base += days_back * 60 * 60 * 24;
- if (!title) {
- full_time = localtime(&base);
- strftime((char *)&buffer, (size_t)64, "%A", full_time);
- node = tree_create_folder_node(NULL, buffer);
- } else
- node = tree_create_folder_node(NULL, title);
-
- if (!node)
- return;
-
- node->retain_in_memory = true;
- node->deleted = true;
- node->editable = false;
- global_history_base_node[global_history_base_node_count] = node;
- global_history_base_node_time[global_history_base_node_count] = base;
- global_history_base_node_count++;
-}
-