gpe-contacts svn: Implement proper handling of VCARD categories.
authorPaul Sokolovsky <pmiscml@gmail.com>
Mon, 21 Jan 2008 02:00:12 +0000 (02:00 +0000)
committerPaul Sokolovsky <pmiscml@gmail.com>
Mon, 21 Jan 2008 02:00:12 +0000 (02:00 +0000)
* VCARD's CATEGORIES field used to be stuffed into contact's CATEGORY
field as is, which is not what gpe-contacts expect.
* So now, try to look up each of VCARD's categories (adding new accessor
to libgpepimc was required), if it doesn't exist, create it, and finally
put category ID into contact's CATEGORY field.

packages/gpe-contacts/files/.mtn2git_empty [new file with mode: 0644]
packages/gpe-contacts/files/handle-import-categories.patch [new file with mode: 0644]
packages/gpe-contacts/gpe-contacts_svn.bb
packages/libgpepimc/files/.mtn2git_empty [new file with mode: 0644]
packages/libgpepimc/files/get-category-by-name.patch [new file with mode: 0644]
packages/libgpepimc/libgpepimc_0.9.bb

diff --git a/packages/gpe-contacts/files/.mtn2git_empty b/packages/gpe-contacts/files/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/gpe-contacts/files/handle-import-categories.patch b/packages/gpe-contacts/files/handle-import-categories.patch
new file mode 100644 (file)
index 0000000..f64b1f6
--- /dev/null
@@ -0,0 +1,39 @@
+diff -r abc014466432 import-vcard.c
+--- a/import-vcard.c   Mon Jan 21 01:55:53 2008 +0200
++++ b/import-vcard.c   Mon Jan 21 02:31:28 2008 +0200
+@@ -77,6 +77,35 @@ do_import_vcard (MIMEDirVCard *card)
+     {
+       gpe_tag_pair *t = i->data;
++      if (!strcasecmp(t->tag, "CATEGORY"))
++        {
++        char *p, *e;
++        int cat_id;
++        
++          for (p = t->value; p; p = e)
++          {
++              while (*p == ' ')
++              p++;
++            e = strchr(p, ',');
++            if (e)
++              *e++ = 0;
++            cat_id = gpe_pim_category_id(p);
++            if (!cat_id)
++              {
++                if (!gpe_pim_category_new (p, &cat_id))
++                  {
++                      gpe_error_box ("Unable to create category for imported item");
++                      sqlite_close (db);
++                      return -2;
++                  }
++              }
++              sqlite_exec_printf (db, "insert into contacts values ('%d', 'CATEGORY', '%d')", NULL, NULL, NULL,
++                          id, cat_id);
++          }
++          
++      }
++      
++
+       sqlite_exec_printf (db, "insert into contacts values ('%d', '%q', '%q')", NULL, NULL, NULL,
+                           id, t->tag, t->value);
+     
index c3ef1eb..9a62657 100644 (file)
@@ -4,11 +4,12 @@ LICENSE = "GPL"
 DEPENDS = "libcontactsdb libgpewidget libgpepimc libdisplaymigration libgpevtype dbus"
 RDEPENDS = "gpe-icons"
 PV = "0.47+svnr${SRCREV}"
-PR = "r1"
+PR = "r2"
 
 inherit autotools gpe
 
 SRC_URI = "${GPE_SVN}"
+SRC_URI += "file://handle-import-categories.patch;patch=1"
 
 S = "${WORKDIR}/${PN}"
 
diff --git a/packages/libgpepimc/files/.mtn2git_empty b/packages/libgpepimc/files/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/libgpepimc/files/get-category-by-name.patch b/packages/libgpepimc/files/get-category-by-name.patch
new file mode 100644 (file)
index 0000000..a733f40
--- /dev/null
@@ -0,0 +1,45 @@
+diff -r 90e7a26811fe db.c
+--- a/db.c     Mon Jan 21 02:03:38 2008 +0200
++++ b/db.c     Mon Jan 21 02:08:31 2008 +0200
+@@ -182,6 +182,30 @@ gpe_pim_category_name (gint id)
+ }
+ /**
++ * gpe_pim_category_id:
++ * @name: Category name
++ *
++ * Get the category ID by name.
++ *
++ * Returns: Category ID or 0 if doesn't exist.
++ */
++gint 
++gpe_pim_category_id (const gchar *name)
++{
++  GSList *iter;
++
++  for (iter = categories; iter; iter = iter->next)
++    {
++      struct gpe_pim_category *c = iter->data;
++
++      if (!strcasecmp(c->name, name))
++        return c->id;
++    }
++
++  return 0;
++}
++
++/**
+  * gpe_pim_category_colour:
+  * @id: Category id
+  *
+diff -r 90e7a26811fe gpe/pim-categories.h
+--- a/gpe/pim-categories.h     Mon Jan 21 02:03:38 2008 +0200
++++ b/gpe/pim-categories.h     Mon Jan 21 02:08:31 2008 +0200
+@@ -36,6 +36,7 @@ extern GSList *gpe_pim_categories_list (
+ extern gboolean gpe_pim_category_new (const gchar *title, gint *id);
+ extern const gchar *gpe_pim_category_name (gint id);
++extern gint gpe_pim_category_id (const gchar *name);
+ extern gboolean gpe_pim_category_rename (gint id, gchar *new_name);
+ /* colour functions */
index 57b7b22..e8c4664 100644 (file)
@@ -1 +1,4 @@
 require libgpepimc.inc
+PR = "r1"
+
+SRC_URI += " file://get-category-by-name.patch;patch=1"