Author: akv
Date: 2010-12-30 03:16:01 +0100 (Thu, 30 Dec 2010)
New Revision: 3739

Modified:
   trunk/librawstudio/rs-lens-db-editor.c
Log:
Removed dependency on SVN command to fetch latest lensfun database.

Modified: trunk/librawstudio/rs-lens-db-editor.c
===================================================================
--- trunk/librawstudio/rs-lens-db-editor.c      2010-12-30 01:55:05 UTC (rev 
3738)
+++ trunk/librawstudio/rs-lens-db-editor.c      2010-12-30 02:16:01 UTC (rev 
3739)
@@ -33,6 +33,8 @@
 #include <rs-lens-db.h>
 #include <rs-lens.h>
 #include <gettext.h>
+#include <curl/curl.h>
+#include <libxml/HTMLparser.h>
 #include "rs-lens-db-editor.h"
 
 static void fill_model(RSLensDb *lens_db, GtkTreeModel *tree_model);
@@ -626,41 +628,78 @@
        }
 }
 
+static size_t
+write_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+       GString *string = (GString *) userp;
+       g_string_append_len(string, (char *) ptr, size * nmemb);
+       return (size * nmemb);
+}
+
 static gboolean
 rs_lens_db_editor_update_lensfun()
 {
-       gchar *svn_stdout = NULL;
-       gchar *svn_stderr = NULL;
-       gint exit_status;
+       const gchar *baseurl = 
"http://svn.berlios.de/svnroot/repos/lensfun/trunk/data/db/";;
+       const gchar *target = g_strdup_printf("%s/.%u-rawstudio_lensfun/", 
g_get_tmp_dir(), g_random_int());
 
-       if (!g_spawn_command_line_sync("svn --version", &svn_stdout, 
&svn_stderr, &exit_status, NULL))
+       g_mkdir(target, 0700);
+       if (!g_file_test(target, G_FILE_TEST_IS_DIR))
        {
-               g_debug("Missing subversion");
-               g_free(svn_stdout);
-               g_free(svn_stderr);
+               g_debug("Could not create temporary directory.");
                return FALSE;
        }
 
-       const gchar *url = 
"http://svn.berlios.de/svnroot/repos/lensfun/trunk/data/db";;
-       const gchar *target = g_strdup_printf("%s/.%u-rawstudio_lensfun/", 
g_get_tmp_dir(), g_random_int());
-       const gchar *cmd = g_strdup_printf("svn checkout %s %s\n", url, target);
-       const gchar *datadir = g_build_filename(g_get_user_data_dir(), 
"lensfun", NULL);
+       CURL *curl = curl_easy_init();
+       GString *xml = g_string_new(NULL);
+       gchar *filename = NULL, *url = NULL, *file = NULL;
+       FILE *fp = NULL;
+       CURLcode result;
 
-       
-       if (!g_spawn_command_line_sync(cmd, &svn_stdout, &svn_stderr, 
&exit_status, NULL))
+       curl_easy_setopt(curl, CURLOPT_URL, baseurl);
+       curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
+       curl_easy_setopt(curl, CURLOPT_WRITEDATA, xml);
+       result = curl_easy_perform(curl);
+
+       htmlDocPtr doc = htmlReadMemory(xml->str, xml->len, NULL, NULL, 0);
+        htmlNodePtr cur, child;
+
+       cur = xmlDocGetRootElement(doc);
+       cur = cur->xmlChildrenNode;
+       cur = cur->next;
+       cur = cur->xmlChildrenNode;
+       cur = cur->next;
+       cur = cur->next;
+       cur = cur->next;
+       cur = cur->xmlChildrenNode;
+       cur = cur->next;
+       cur = cur->next;
+       while (cur)
        {
-               g_debug("Error running subversion checkout");
-               g_free(svn_stdout);
-               g_free(svn_stderr);
-               return FALSE;
-       }
+               child = cur->xmlChildrenNode;
+               filename =  (gchar *) xmlNodeListGetString(doc, 
child->xmlChildrenNode, 1);
 
-       if (!g_file_test(target, G_FILE_TEST_IS_DIR))
-       {
-               g_debug("Missing lensfun database directory after svn 
checkout");
-               return FALSE;
+               url = g_strdup_printf("%s%s", baseurl, filename);
+               file = g_build_filename(target, filename, NULL);
+
+               fp = fopen(file, "w");
+
+               curl_easy_reset(curl);
+               curl_easy_setopt(curl, CURLOPT_URL, url);
+               curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
+               result = curl_easy_perform(curl);
+
+               fclose(fp);
+
+               g_free(filename);
+               g_free(url);
+               g_free(file);
+
+               cur = cur->next;
+               cur = cur->next;
        }
 
+       const gchar *datadir = g_build_filename(g_get_user_data_dir(), 
"lensfun", NULL);
+
        if (!g_file_test(datadir, G_FILE_TEST_IS_DIR))
        {
                g_debug("Missing datadir for lensfun - trying to make it.");


_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit

Reply via email to