]> Pileus Git - grits/blobdiff - src/data.c
Splitting GIS into a shared library, and a lot more
[grits] / src / data.c
diff --git a/src/data.c b/src/data.c
deleted file mode 100644 (file)
index 6186883..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2009 Andy Spencer <spenceal@rose-hulman.edu>
- * 
- * 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include <config.h>
-#include <stdio.h>
-#include <glib.h>
-#include <libsoup/soup.h>
-
-#include "data.h"
-
-typedef struct {
-       gchar *uri;
-       gchar *local;
-       FILE  *fp;
-       AWeatherCacheDoneCallback  user_done_cb;
-       AWeatherCacheChunkCallback user_chunk_cb;
-       gpointer user_data;
-} cache_file_end_t;
-
-/*
- * Open a file, creating parent directories if needed
- */
-static FILE *fopen_p(const gchar *path, const gchar *mode)
-{
-       gchar *parent = g_path_get_dirname(path);
-       if (!g_file_test(parent, G_FILE_TEST_EXISTS))
-               g_mkdir_with_parents(parent, 0755);
-       g_free(parent);
-       return fopen(path, mode);
-}
-
-static void done_cb(SoupSession *session, SoupMessage *message, gpointer _info)
-{
-       cache_file_end_t *info = _info;
-       g_debug("data: done_cb");
-
-       if (message->status_code == 416)
-               /* Range unsatisfiable, file already complete */
-               info->user_done_cb(info->local, FALSE, info->user_data);
-       else if (SOUP_STATUS_IS_SUCCESSFUL(message->status_code))
-               info->user_done_cb(info->local, TRUE, info->user_data);
-       else
-               g_warning("data: done_cb - error copying file, status=%d\n"
-                               "\tsrc=%s\n"
-                               "\tdst=%s",
-                               message->status_code, info->uri, info->local);
-       g_free(info->uri);
-       g_free(info->local);
-       fclose(info->fp);
-       g_free(info);
-       //g_object_unref(session); This is probably leaking
-}
-
-void chunk_cb(SoupMessage *message, SoupBuffer *chunk, gpointer _info)
-{
-       cache_file_end_t *info = _info;
-       if (!SOUP_STATUS_IS_SUCCESSFUL(message->status_code))
-               return;
-
-       if (!fwrite(chunk->data, chunk->length, 1, info->fp))
-               g_error("data: chunk_cb - Unable to write data");
-       goffset cur   = ftell(info->fp);
-       //goffset total = soup_message_headers_get_range(message->response_headers);
-       goffset start=0, end=0, total=0;
-       soup_message_headers_get_content_range(message->response_headers,
-                       &start, &end, &total);
-
-       if (info->user_chunk_cb)
-               info->user_chunk_cb(info->local, cur, total, info->user_data);
-}
-
-static SoupSession *do_cache(cache_file_end_t *info, gboolean truncate, gchar *reason)
-{
-       char *name = g_path_get_basename(info->uri);
-       g_debug("data: do_cache - Caching file %s: %s", name, reason);
-       g_free(name);
-
-       /* TODO: move this to callback so we don't end up with 0 byte files
-        * Then change back to check for valid file after download */
-       if (truncate) info->fp = fopen_p(info->local, "w");
-       else          info->fp = fopen_p(info->local, "a");
-       long bytes = ftell(info->fp);
-
-       SoupSession *session = soup_session_async_new();
-       g_object_set(session, "user-agent", PACKAGE_STRING, NULL);
-       SoupMessage *message = soup_message_new("GET", info->uri);
-       if (message == NULL)
-               g_error("message is null, cannot parse uri");
-       g_signal_connect(message, "got-chunk", G_CALLBACK(chunk_cb), info);
-       soup_message_headers_set_range(message->request_headers, bytes, -1);
-       soup_session_queue_message(session, message, done_cb, info);
-       return session;
-}
-
-/*
- * Cache a image from Ridge to the local disk
- * \param  path  Path to the Ridge file, starting after /ridge/
- * \return The local path to the cached image
- */
-SoupSession *cache_file(char *base, char *path, AWeatherCacheType update,
-               AWeatherCacheChunkCallback user_chunk_cb,
-               AWeatherCacheDoneCallback user_done_cb,
-               gpointer user_data)
-{
-
-       cache_file_end_t *info = g_malloc0(sizeof(cache_file_end_t));
-       info->uri           = g_strconcat(base, path, NULL);
-       info->local         = g_build_filename(g_get_user_cache_dir(), PACKAGE, path, NULL);
-       info->fp            = NULL;
-       info->user_chunk_cb = user_chunk_cb;
-       info->user_done_cb  = user_done_cb;
-       info->user_data     = user_data;
-
-       if (update == AWEATHER_REFRESH)
-               return do_cache(info, TRUE, "cache forced");
-
-       if (update == AWEATHER_UPDATE)
-               return do_cache(info, FALSE, "attempting updating");
-
-       if (update == AWEATHER_ONCE && !g_file_test(info->local, G_FILE_TEST_EXISTS))
-               return do_cache(info, TRUE, "local does not exist");
-
-       /* No nead to cache, run the callback now and clean up */
-       user_done_cb(info->local, FALSE, user_data);
-       g_free(info->uri);
-       g_free(info->local);
-       g_free(info);
-       return NULL;
-}