* viking -- GPS Data and Topo Analyzer, Explorer, and Manager
*
* Copyright (C) 2003-2005, Evan Battaglia <gtoevan@gmx.net>
+ * Copyright (C) 2007, Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
*
* 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
/* spin button scales */
VikLayerParamScale params_scales[] = {
- {1, 86400*7, 10, 0}, /* download_tile_age */
+ {1, 86400*7, 60, 0}, /* download_tile_age */
};
static VikLayerParam prefs[] = {
{
gboolean locked = FALSE;
g_mutex_lock(file_list_mutex);
- if (g_list_find(file_list, fn) == NULL)
+ if (g_list_find_custom(file_list, fn, (GCompareFunc)g_strcmp0) == NULL)
{
// The filename is not yet locked
file_list = g_list_append(file_list, (gpointer)fn),
file_options.time_condition = file_time;
}
if (options->use_etag) {
- file_options.etag = g_strdup_printf ("");
+ gchar *etag_filename = g_strdup_printf("%s.etag", fn);
+ gsize etag_length = 0;
+ g_file_get_contents (etag_filename, &(file_options.etag), &etag_length, NULL);
+ g_free (etag_filename);
+ etag_filename = NULL;
+
+ /* check if etag is short enough */
+ if (etag_length > 100) {
+ g_free(file_options.etag);
+ file_options.etag = NULL;
+ }
+
+ /* TODO: should check that etag is a valid string */
}
+
} else {
gchar *dir = g_path_get_dirname ( fn );
g_mkdir_with_parents ( dir , 0777 );
{
g_debug("%s: Couldn't take lock on temporary file \"%s\"\n", __FUNCTION__, tmpfilename);
g_free ( tmpfilename );
+ if (options->use_etag)
+ g_free ( file_options.etag );
return -4;
}
f = g_fopen ( tmpfilename, "w+b" ); /* truncate file and open it */
if ( ! f ) {
g_warning("Couldn't open temporary file \"%s\": %s", tmpfilename, g_strerror(errno));
g_free ( tmpfilename );
+ if (options->use_etag)
+ g_free ( file_options.etag );
return -4;
}
g_free ( file_options.etag );
g_free ( file_options.new_etag );
}
- g_remove ( fn ); /* couldn't create temporary. delete 0-byte file. */
return -1;
}
if (options->use_etag) {
if (file_options.new_etag) {
/* server returned an etag value */
- printf("got etag %s\n", file_options.new_etag);
+ gchar *etag_filename = g_strdup_printf("%s.etag", fn);
+ g_file_set_contents (etag_filename, file_options.new_etag, -1, NULL);
+ g_free (etag_filename);
+ etag_filename = NULL;
}
}
#else
utimes ( fn, NULL ); /* update mtime of local copy */
#endif
- } else
+ } else {
g_rename ( tmpfilename, fn ); /* move completely-downloaded file to permanent location */
+ }
unlock_file ( tmpfilename );
g_free ( tmpfilename );