/*
    Silky - A GTK+ client for SILC.
    Copyright (C) 2003, 2004, 2005 Toni Willberg

    - "Tip of the day"-related functions

    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 of the License, 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

    http://silky.sourceforge.net/

*/
#include <glib.h>
#include <gtk/gtk.h>
#include <glib/gprintf.h>

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include "tips.h"
#include "log.h"
#include "support.h" /* get_random_number() */

#include "common.h"


gchar *silky_get_random_tip() {
  gchar *tips_path = NULL, *tips_str = NULL, **tips = NULL, *tip = NULL;
  gint num, i;
  GError *error = NULL;

  tips_path = g_strdup_printf("%s/%s", GLADEDIR, "tips.txt");

  if( g_file_test(tips_path, G_FILE_TEST_EXISTS) ) {
    if( !g_file_test(tips_path, G_FILE_TEST_IS_REGULAR) ) {
      debug("Can not open config file, it is not a regular file! Using FALLBACK_TIP");
      g_free(tips_path);
      return g_strdup(FALLBACK_TIP);
    }
  } else {
    debug("File %s doesn not exist, using FALLBACK_TIP", tips_path);
    g_free(tips_path);
    return g_strdup(FALLBACK_TIP);
  }

  g_file_get_contents(tips_path, &tips_str, NULL, &error);
  g_free(tips_path);

  if( tips_str ) {
    tips = g_strsplit(tips_str, "\n", MAX_TIPS);
  } else {
    debug("Tips file empty, using FALLBACK_TIP");
    g_free(tips_str);
    g_free(tips);
    return g_strdup(FALLBACK_TIP);
  }

  for( num = 0; tips[num] && g_utf8_strlen(tips[num], -1); num++ ) {}

  i = get_random_number(0, num);

  /* one more sanity check */
  if( tips[i] && g_utf8_strlen(tips[i], -1) ) {
    debug("Returning tip '%s'", tips[i]);
    tip = g_strdup(tips[i]);
    g_free(tips_str);
    g_free(tips);
    return tip;
  }

  g_free(tips_str);
  g_free(tips);
  return g_strdup(FALLBACK_TIP);
}


syntax highlighted by Code2HTML, v. 0.9.1