Save URLs to disk on-the-fly and provide an option for toggling it

This commit is contained in:
Berke Viktor 2012-10-13 10:03:39 +02:00
parent d4f3738ca8
commit ca3fa043f0
7 changed files with 43 additions and 18 deletions

View File

@ -393,8 +393,6 @@ default_file (void)
/* Keep these sorted!! */
const struct prefs vars[] = {
{"auto_save_url", P_OFFINT (autosave_url), TYPE_BOOL},
{"away_auto_unmark", P_OFFINT (auto_unmark_away), TYPE_BOOL},
{"away_reason", P_OFFSET (awayreason), TYPE_STR},
{"away_show_message", P_OFFINT (show_away_message), TYPE_BOOL},
@ -616,6 +614,7 @@ const struct prefs vars[] = {
{"url_grabber", P_OFFINT (url_grabber), TYPE_BOOL},
{"url_grabber_limit", P_OFFINT (url_grabber_limit), TYPE_INT},
{"url_logging", P_OFFINT (url_logging), TYPE_BOOL},
{0, 0, 0},
};

View File

@ -59,7 +59,7 @@ url_save_cb (char *url, FILE *fd)
}
void
url_save (const char *fname, const char *mode, gboolean fullpath)
url_save_tree (const char *fname, const char *mode, gboolean fullpath)
{
FILE *fd;
@ -74,10 +74,20 @@ url_save (const char *fname, const char *mode, gboolean fullpath)
fclose (fd);
}
void
url_autosave (void)
static void
url_save_node (char* url)
{
url_save ("url.save", "a", FALSE);
FILE *fd;
/* open <config>/url.log in append mode */
fd = xchat_fopen_file ("url.log", "a", 0);
if (fd == NULL)
{
return;
}
fprintf (fd, "%s\n", url);
fclose (fd);
}
static int
@ -92,12 +102,17 @@ url_add (char *urltext, int len)
char *data;
int size;
if (!prefs.url_grabber)
/* we don't need any URLs if we have neither URL grabbing nor URL logging enabled */
if (!prefs.url_grabber && !prefs.url_logging)
{
return;
}
data = malloc (len + 1);
if (!data)
{
return;
}
memcpy (data, urltext, len);
data[len] = 0;
@ -108,7 +123,21 @@ url_add (char *urltext, int len)
}
/* chop trailing ) but only if there's no counterpart */
if (data[len - 1] == ')' && strchr (data, '(') == NULL)
{
data[len - 1] = 0;
}
if (prefs.url_logging)
{
url_save_node (data);
}
/* the URL is saved already, only continue if we need the URL grabber too */
if (!prefs.url_grabber)
{
free (data);
return;
}
if (!url_tree)
{

View File

@ -13,8 +13,7 @@ extern void *url_tree;
#define WORD_PATH -2
void url_clear (void);
void url_save (const char *fname, const char *mode, gboolean fullpath);
void url_autosave (void);
void url_save_tree (const char *fname, const char *mode, gboolean fullpath);
int url_check_word (char *word, int len);
void url_check_line (char *buf, int len);

View File

@ -854,11 +854,6 @@ xchat_exit (void)
pevent_save (NULL);
}
if (prefs.autosave_url)
{
url_autosave ();
}
sound_save ();
notify_save ();
ignore_save ();

View File

@ -209,7 +209,6 @@ struct xchatprefs
unsigned int perc_color;
unsigned int perc_ascii;
unsigned int autodialog;
unsigned int autosave_url;
unsigned int autoreconnect;
unsigned int autoreconnectonfail;
unsigned int invisible;
@ -323,6 +322,7 @@ struct xchatprefs
unsigned int url_grabber;
unsigned int url_grabber_limit;
unsigned int url_logging;
/* Tells us if we need to save, only when they've been edited.
This is so that we continue using internal defaults (which can
change in the next release) until the user edits them. */

View File

@ -489,9 +489,10 @@ static const setting logging_settings[] =
{ST_LABEL, N_("See the strftime manpage for details.")},
#endif
{ST_HEADER, N_("URL Grabber"),0,0,0},
{ST_HEADER, N_("URLs"),0,0,0},
{ST_TOGGLE, N_("Enable logging of URLs to disk"), P_OFFINTNL(url_logging), 0, 0, 0},
{ST_TOGGLE, N_("Enable URL grabber"), P_OFFINTNL(url_grabber), 0, 0, 2},
{ST_NUMBER, N_("Maximum number of URLs:"), P_OFFINTNL(url_grabber_limit), 0, 0, 9999},
{ST_NUMBER, N_("Maximum number of URLs to grab:"), P_OFFINTNL(url_grabber_limit), 0, 0, 9999},
{ST_END, 0, 0, 0, 0, 0}
};

View File

@ -138,7 +138,9 @@ static void
url_save_callback (void *arg1, char *file)
{
if (file)
url_save (file, "w", TRUE);
{
url_save_tree (file, "w", TRUE);
}
}
static void