aboutsummaryrefslogblamecommitdiffstats
path: root/lib/history/ephy-history-types.c
blob: fe3b951aea3b144734bc52ef09015dec01dee23d (plain) (tree)





































                                                                                                                  
                                                                                        








































                                                                                                              
                                                                                              






                                                                    
                                













                                                  

                                                      

















                                                 
                                                                                                                







                                                                         














                                                
                                                     
                     
                             
                                                  

                                             



























































                                                                              
                             
                                     
                                             
                           







                                                                                        
/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
/* vim: set sw=2 ts=2 sts=2 et: */
/*
 *  Copyright © 2011 Igalia S.L.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */

#include <glib.h>

#include "ephy-history-types.h"

EphyHistoryPageVisit *
ephy_history_page_visit_new_with_url (EphyHistoryURL *url, gint64 visit_time, EphyHistoryPageVisitType visit_type)
{
  EphyHistoryPageVisit *visit = g_slice_alloc0 (sizeof (EphyHistoryPageVisit));
  visit->id = -1;
  visit->url = url;
  visit->visit_time = visit_time;
  visit->visit_type = visit_type;
  return visit;
}

EphyHistoryPageVisit *
ephy_history_page_visit_new (const char *url, gint64 visit_time, EphyHistoryPageVisitType visit_type)
{
  return ephy_history_page_visit_new_with_url (ephy_history_url_new (url, url, 0, 0, 0),
                                               visit_time, visit_type);
}

void
ephy_history_page_visit_free (EphyHistoryPageVisit *visit)
{
  if (visit == NULL)
    return;

  ephy_history_url_free (visit->url);
  g_slice_free1 (sizeof (EphyHistoryPageVisit), visit);
}

EphyHistoryPageVisit *
ephy_history_page_visit_copy (EphyHistoryPageVisit *visit)
{
  EphyHistoryPageVisit *copy = ephy_history_page_visit_new_with_url (0, visit->visit_time, visit->visit_type);
  copy->id = visit->id;
  copy->url = ephy_history_url_copy (visit->url);
  return copy;
}

GList *
ephy_history_page_visit_list_copy (GList *original)
{
  GList *new = g_list_copy (original);
  GList *current = new;
  while (current) {
    current->data = ephy_history_page_visit_copy ((EphyHistoryPageVisit *) current->data);
    current = current->next;
  }
  return new;
}

void
ephy_history_page_visit_list_free (GList *list)
{
  g_list_free_full (list, (GDestroyNotify) ephy_history_page_visit_free);
}

EphyHistoryHost *
ephy_history_host_new (const char *url, const char *title, int visit_count, double zoom_level)
{
  EphyHistoryHost *host = g_slice_alloc0 (sizeof (EphyHistoryHost));

  host->id = -1;
  host->url = g_strdup (url);
  host->title = g_strdup (title);
  host->visit_count = visit_count;
  host->zoom_level = zoom_level;

  return host;
}

EphyHistoryHost *
ephy_history_host_copy (EphyHistoryHost *original)
{
  EphyHistoryHost *host;

  if (original == NULL)
    return NULL;

  host = ephy_history_host_new (original->url,
                                original->title,
                                original->visit_count,
                                original->zoom_level);
  host->id = original->id;

  return host;
}

void
ephy_history_host_free (EphyHistoryHost *host)
{
  if (host == NULL)
    return;

  g_free (host->url);
  g_free (host->title);

  g_slice_free1 (sizeof (EphyHistoryHost), host);
}

EphyHistoryURL *
ephy_history_url_new (const char *url, const char *title, int visit_count, int typed_count, int last_visit_time)
{
  EphyHistoryURL *history_url = g_slice_alloc0 (sizeof (EphyHistoryURL));
  history_url->id = -1;
  history_url->url = g_strdup (url);
  history_url->title = g_strdup (title);
  history_url->visit_count = visit_count;
  history_url->typed_count = typed_count;
  history_url->last_visit_time = last_visit_time;
  history_url->host = NULL;
  return history_url;
}

EphyHistoryURL *
ephy_history_url_copy (EphyHistoryURL *url)
{
  EphyHistoryURL *copy;
  if (url == NULL)
    return NULL;

  copy = ephy_history_url_new (url->url,
                               url->title,
                               url->visit_count,
                               url->typed_count,
                               url->last_visit_time);
  copy->id = url->id;
  copy->hidden = url->hidden;
  copy->host = ephy_history_host_copy (url->host);
  copy->thumbnail_time = url->thumbnail_time;

  return copy;
}

void
ephy_history_url_free (EphyHistoryURL *url)
{
  if (url == NULL)
    return;

  g_free (url->url);
  g_free (url->title);
  ephy_history_host_free (url->host);
  g_slice_free1 (sizeof (EphyHistoryURL), url);
}

GList *
ephy_history_url_list_copy (GList *original)
{
  GList *new = NULL, *last;

  if (original) {
    new = last = g_list_append (NULL, ephy_history_url_copy (original->data));
    original = original->next;

    while (original) {
      last = g_list_append (last, ephy_history_url_copy (original->data));
      last = last->next;
      original = original->next;
    }
  }

  return new;
}

void
ephy_history_url_list_free (GList *list)
{
  g_list_free_full (list, (GDestroyNotify) ephy_history_url_free);
}

EphyHistoryQuery *
ephy_history_query_new ()
{
  return (EphyHistoryQuery*) g_slice_alloc0 (sizeof (EphyHistoryQuery));
}

void
ephy_history_query_free (EphyHistoryQuery *query)
{
  g_list_free_full (query->substring_list, g_free);
  g_slice_free1 (sizeof (EphyHistoryQuery), query);
}

EphyHistoryQuery *
ephy_history_query_copy (EphyHistoryQuery *query)
{
  GList *iter;
  EphyHistoryQuery *copy = ephy_history_query_new ();
  copy->from = query->from;
  copy->to = query->to;
  copy->limit = query->limit;
  copy->sort_type = query->sort_type;
  copy->ignore_hidden = query->ignore_hidden;
  copy->host = query->host;

  for (iter = query->substring_list; iter != NULL; iter = iter->next) {
    copy->substring_list = g_list_prepend (copy->substring_list, g_strdup (iter->data));
  }
  copy->substring_list = g_list_reverse (copy->substring_list);

  return copy;
}