[file-roller] allow to specify different package names using a configuration file



commit 5e15ec065a0d79efe8cc1038c2d970b5a2b5b32b
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon Dec 21 22:40:36 2009 +0100

    allow to specify different package names using a configuration file
    
    [bug #603757]

 data/Makefile.am            |    5 +++++
 data/packages.match         |   28 ++++++++++++++++++++++++++++
 data/packages.match.in      |    2 ++
 data/update-packages-match  |    2 ++
 src/Makefile.am             |    3 +++
 src/dlg-package-installer.c |   35 +++++++++++++++++++++++++++++++++++
 src/fr-command-7z.c         |    6 +++---
 src/fr-command-ace.c        |    2 +-
 src/fr-command-alz.c        |    2 +-
 src/fr-command-ar.c         |    2 +-
 src/fr-command-arj.c        |    2 +-
 src/fr-command-cfile.c      |   16 ++++++++--------
 src/fr-command-cpio.c       |    2 +-
 src/fr-command-iso.c        |    2 +-
 src/fr-command-jar.c        |    2 +-
 src/fr-command-lha.c        |    2 +-
 src/fr-command-rar.c        |    2 +-
 src/fr-command-rpm.c        |    2 +-
 src/fr-command-tar.c        |   18 +++++++++---------
 src/fr-command-unstuff.c    |    2 +-
 src/fr-command-zip.c        |    2 +-
 src/fr-command-zoo.c        |    2 +-
 src/fr-command.h            |    2 ++
 23 files changed, 110 insertions(+), 33 deletions(-)
---
diff --git a/data/Makefile.am b/data/Makefile.am
index 7ac1e69..289c22f 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -8,6 +8,9 @@ desktop_in_files = $(desktop_in_in_files:.desktop.in.in=.desktop.in)
 desktopdir = $(datadir)/applications
 desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) 
 
+matchdir = $(datadir)/file-roller
+match_DATA = packages.match
+
 schemadir = @GCONF_SCHEMA_FILE_DIR@
 schema_DATA = file-roller.schemas
 
@@ -34,6 +37,8 @@ EXTRA_DIST = 			\
 	$(desktop_in_in_files)	\
 	$(desktop_in_files)	\
 	$(desktop_DATA)		\
+	packages.match.in	\
+	packages.match		\
 	$(schema_DATA)
 
 
diff --git a/data/packages.match b/data/packages.match
new file mode 100644
index 0000000..d5aac1c
--- /dev/null
+++ b/data/packages.match
@@ -0,0 +1,28 @@
+[Package Matches]
+arj=
+binutils=
+bzip2=
+cpio=
+genisoimage=
+gzip=
+lha=
+lzip=
+lzma=
+lzop=
+ncompress=
+p7zip=
+p7zip-full=
+p7zip-rar=
+rar=
+rpm=
+rzip=
+tar=
+unace=
+unalz=
+unrar=
+unstaff=
+unzip=
+xz=
+zip=
+zoo=
+
diff --git a/data/packages.match.in b/data/packages.match.in
new file mode 100644
index 0000000..2769432
--- /dev/null
+++ b/data/packages.match.in
@@ -0,0 +1,2 @@
+[Package Matches]
+ NAMES@
diff --git a/data/update-packages-match b/data/update-packages-match
new file mode 100644
index 0000000..4a1a8e3
--- /dev/null
+++ b/data/update-packages-match
@@ -0,0 +1,2 @@
+list=`find .. -iname "*.c" | xargs grep PACKAGES | sed -e 's/.*PACKAGES[ ]*[(]"\([^"]*\)"[)];/\1/g' -e 's/,/\n/g' | sort -u | sed -e 's/\(.*\)/\1=/g' | tr '\n' '|'` 
+sed -e 's/@NAMES@/'"$list"'/g' < packages.match.in | tr '|' '\n' > packages.match
diff --git a/src/Makefile.am b/src/Makefile.am
index 6c8e767..402104f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -15,10 +15,12 @@ DISABLE_DEPRECATED =
 endif
 
 if RUN_IN_PLACE
+privdatadir = $(top_srcdir)/data/
 uidir = $(top_srcdir)/data/ui
 privexecdir = $(abs_top_builddir)/src/commands/
 shdir = $(top_srcdir)/src/sh/
 else
+privdatadir = $(datadir)/file-roller/
 uidir = $(datadir)/file-roller/ui
 privexecdir = $(libexecdir)/file-roller/
 shdir = $(libexecdir)/file-roller/
@@ -31,6 +33,7 @@ INCLUDES =						\
 	-DFR_PREFIX=\"$(prefix)\"           		\
         -DFR_SYSCONFDIR=\"$(sysconfdir)\"   		\
         -DFR_DATADIR=\"$(datadir)\"     	    	\
+        -DPRIVDATADIR=\"$(privdatadir)\"		\
         -DUI_DIR=\"$(uidir)\"				\
         -DFR_LIBDIR=\"$(libdir)\"  	         	\
         -DPKG_DATA_DIR=\"$(pkgdatadir)\"                \
diff --git a/src/dlg-package-installer.c b/src/dlg-package-installer.c
index d7b2587..e9a7471 100644
--- a/src/dlg-package-installer.c
+++ b/src/dlg-package-installer.c
@@ -100,6 +100,38 @@ packagekit_install_package_call_notify_cb (DBusGProxy     *proxy,
 }
 
 
+static char **
+get_packages_real_names (char **names)
+{
+	char     **real_names;
+	GKeyFile  *key_file;
+	char      *filename;
+	int        i;
+
+	real_names = g_new0 (char *, g_strv_length (names));
+	key_file = g_key_file_new ();
+	filename = g_build_filename (PRIVDATADIR, "packages.match", NULL);
+	g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL);
+
+	for (i = 0; names[i] != NULL; i++) {
+		char *real_name;
+
+		real_name = g_key_file_get_string (key_file, "Package Matches", names[i], NULL);
+		if (real_name != NULL)
+			real_name = g_strstrip (real_name);
+		if ((real_name == NULL) || (strncmp (real_name, "", 1) == 0))
+			real_names[i] = g_strdup (real_name);
+
+		g_free (real_name);
+	}
+
+	g_free (filename);
+	g_key_file_free (key_file);
+
+	return real_names;
+}
+
+
 static void
 install_packages (InstallerData *idata)
 {
@@ -119,6 +151,7 @@ install_packages (InstallerData *idata)
 			GdkWindow       *window;
 			guint            xid;
 			char           **names;
+			char           **real_names;
 			DBusGProxyCall  *call;
 
 			window = gtk_widget_get_window (GTK_WIDGET (idata->window));
@@ -130,6 +163,7 @@ install_packages (InstallerData *idata)
 		        dbus_g_proxy_set_default_timeout (proxy, INT_MAX);
 
 		        names = g_strsplit (idata->packages, ",", -1);
+		        real_names = get_packages_real_names (names);
 			call = dbus_g_proxy_begin_call (proxy,
 							"InstallPackageNames",
 							(DBusGProxyCallNotify) packagekit_install_package_call_notify_cb,
@@ -141,6 +175,7 @@ install_packages (InstallerData *idata)
 							G_TYPE_INVALID);
 			success = (call != NULL);
 
+			g_strfreev (real_names);
 			g_strfreev (names);
 		}
 	}
diff --git a/src/fr-command-7z.c b/src/fr-command-7z.c
index 1990cd7..a5460d7 100644
--- a/src/fr-command-7z.c
+++ b/src/fr-command-7z.c
@@ -596,11 +596,11 @@ fr_command_7z_get_packages (FrCommand  *comm,
 			    const char *mime_type)
 {
 	if (is_mime_type (mime_type, "application/x-rar"))
-		return "p7zip,p7zip-rar";
+		return PACKAGES ("p7zip,p7zip-rar");
 	else if (is_mime_type (mime_type, "application/zip") || is_mime_type (mime_type, "application/vnd.ms-cab-compressed"))
-		return "p7zip,p7zip-full";
+		return PACKAGES ("p7zip,p7zip-full");
 	else
-		return "p7zip";
+		return PACKAGES ("p7zip");
 }
 
 
diff --git a/src/fr-command-ace.c b/src/fr-command-ace.c
index dfdd7cc..c6e889e 100644
--- a/src/fr-command-ace.c
+++ b/src/fr-command-ace.c
@@ -264,7 +264,7 @@ static const char *
 fr_command_ace_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "unace";
+	return PACKAGES ("unace");
 }
 
 
diff --git a/src/fr-command-alz.c b/src/fr-command-alz.c
index d46d141..d800e6c 100644
--- a/src/fr-command-alz.c
+++ b/src/fr-command-alz.c
@@ -327,7 +327,7 @@ static const char *
 fr_command_alz_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "unalz";
+	return PACKAGES ("unalz");
 }
 
 
diff --git a/src/fr-command-ar.c b/src/fr-command-ar.c
index d4658a7..143687e 100644
--- a/src/fr-command-ar.c
+++ b/src/fr-command-ar.c
@@ -312,7 +312,7 @@ static const char *
 fr_command_ar_get_packages (FrCommand  *comm,
 			    const char *mime_type)
 {
-	return "binutils";
+	return PACKAGES ("binutils");
 }
 
 
diff --git a/src/fr-command-arj.c b/src/fr-command-arj.c
index 6c9b700..0a8840c 100644
--- a/src/fr-command-arj.c
+++ b/src/fr-command-arj.c
@@ -345,7 +345,7 @@ static const char *
 fr_command_arj_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "arj";
+	return PACKAGES ("arj");
 }
 
 
diff --git a/src/fr-command-cfile.c b/src/fr-command-cfile.c
index 9685e39..d986575 100644
--- a/src/fr-command-cfile.c
+++ b/src/fr-command-cfile.c
@@ -537,21 +537,21 @@ fr_command_cfile_get_packages (FrCommand  *comm,
 			       const char *mime_type)
 {
 	if (is_mime_type (mime_type, "application/x-gzip"))
-		return "gzip";
+		return PACKAGES ("gzip");
 	else if (is_mime_type (mime_type, "application/x-bzip"))
-		return "bzip2";
+		return PACKAGES ("bzip2");
 	else if (is_mime_type (mime_type, "application/x-compress"))
-		return "ncompress";
+		return PACKAGES ("ncompress");
 	else if (is_mime_type (mime_type, "application/x-lzip"))
-		return "lzip";
+		return PACKAGES ("lzip");
 	else if (is_mime_type (mime_type, "application/x-lzma"))
-		return "lzma";
+		return PACKAGES ("lzma");
 	else if (is_mime_type (mime_type, "application/x-xz"))
-		return "xz";
+		return PACKAGES ("xz");
 	else if (is_mime_type (mime_type, "application/x-lzop"))
-		return "lzop";
+		return PACKAGES ("lzop");
 	else if (is_mime_type (mime_type, "application/x-rzip"))
-		return "rzip";
+		return PACKAGES ("rzip");
 
 	return NULL;
 }
diff --git a/src/fr-command-cpio.c b/src/fr-command-cpio.c
index 095b33d..0f5219b 100644
--- a/src/fr-command-cpio.c
+++ b/src/fr-command-cpio.c
@@ -245,7 +245,7 @@ static const char *
 fr_command_cpio_get_packages (FrCommand  *comm,
 			      const char *mime_type)
 {
-	return "cpio";
+	return PACKAGES ("cpio");
 }
 
 
diff --git a/src/fr-command-iso.c b/src/fr-command-iso.c
index b275e53..011c734 100644
--- a/src/fr-command-iso.c
+++ b/src/fr-command-iso.c
@@ -230,7 +230,7 @@ static const char *
 fr_command_iso_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "genisoimage";
+	return PACKAGES ("genisoimage");
 }
 
 
diff --git a/src/fr-command-jar.c b/src/fr-command-jar.c
index e25c8c7..3edb2e9 100644
--- a/src/fr-command-jar.c
+++ b/src/fr-command-jar.c
@@ -176,7 +176,7 @@ static const char *
 fr_command_jar_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "zip,unzip";
+	return PACKAGES ("zip,unzip");
 }
 
 
diff --git a/src/fr-command-lha.c b/src/fr-command-lha.c
index a87c208..8fce58c 100644
--- a/src/fr-command-lha.c
+++ b/src/fr-command-lha.c
@@ -330,7 +330,7 @@ static const char *
 fr_command_lha_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "lha";
+	return PACKAGES ("lha");
 }
 
 
diff --git a/src/fr-command-rar.c b/src/fr-command-rar.c
index d1c27b9..482ab57 100644
--- a/src/fr-command-rar.c
+++ b/src/fr-command-rar.c
@@ -719,7 +719,7 @@ static const char *
 fr_command_rar_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "rar,unrar";
+	return PACKAGES ("rar,unrar");
 }
 
 
diff --git a/src/fr-command-rpm.c b/src/fr-command-rpm.c
index bdbc01a..73f5e39 100644
--- a/src/fr-command-rpm.c
+++ b/src/fr-command-rpm.c
@@ -244,7 +244,7 @@ static const char *
 fr_command_rpm_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "cpio,rpm";
+	return PACKAGES ("cpio,rpm");
 }
 
 
diff --git a/src/fr-command-tar.c b/src/fr-command-tar.c
index 7430c1e..7e364ab 100644
--- a/src/fr-command-tar.c
+++ b/src/fr-command-tar.c
@@ -1050,23 +1050,23 @@ fr_command_tar_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
 	if (is_mime_type (mime_type, "application/x-tar"))
-		return "tar";
+		return PACKAGES ("tar");
 	else if (is_mime_type (mime_type, "application/x-compressed-tar"))
-		return "tar,gzip";
+		return PACKAGES ("tar,gzip");
 	else if (is_mime_type (mime_type, "application/x-bzip-compressed-tar"))
-		return "tar,bzip2";
+		return PACKAGES ("tar,bzip2");
 	else if (is_mime_type (mime_type, "application/x-tarz"))
-		return "tar,gzip,ncompress";
+		return PACKAGES ("tar,gzip,ncompress");
 	else if (is_mime_type (mime_type, "application/x-lzip-compressed-tar"))
-		return "tar,lzip";
+		return PACKAGES ("tar,lzip");
 	else if (is_mime_type (mime_type, "application/x-lzma-compressed-tar"))
-		return "tar,lzma";
+		return PACKAGES ("tar,lzma");
 	else if (is_mime_type (mime_type, "application/x-xz-compressed-tar"))
-		return "tar,xz";
+		return PACKAGES ("tar,xz");
 	else if (is_mime_type (mime_type, "application/x-lzop-compressed-tar"))
-		return "tar,lzop";
+		return PACKAGES ("tar,lzop");
 	else if (is_mime_type (mime_type, "application/x-7z-compressed-tar"))
-		return "tar,p7zip";
+		return PACKAGES ("tar,p7zip");
 
 	return NULL;
 }
diff --git a/src/fr-command-unstuff.c b/src/fr-command-unstuff.c
index c2794ca..5bd5e36 100644
--- a/src/fr-command-unstuff.c
+++ b/src/fr-command-unstuff.c
@@ -305,7 +305,7 @@ static const char *
 fr_command_unstaff_get_packages (FrCommand  *comm,
 			         const char *mime_type)
 {
-	return "unstaff";
+	return PACKAGES ("unstaff");
 }
 
 
diff --git a/src/fr-command-zip.c b/src/fr-command-zip.c
index 63c516a..3e651f7 100644
--- a/src/fr-command-zip.c
+++ b/src/fr-command-zip.c
@@ -411,7 +411,7 @@ static const char *
 fr_command_zip_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "zip,unzip";
+	return PACKAGES ("zip,unzip");
 }
 
 
diff --git a/src/fr-command-zoo.c b/src/fr-command-zoo.c
index 7429302..00b79de 100644
--- a/src/fr-command-zoo.c
+++ b/src/fr-command-zoo.c
@@ -349,7 +349,7 @@ static const char *
 fr_command_zoo_get_packages (FrCommand  *comm,
 			     const char *mime_type)
 {
-	return "zoo";
+	return PACKAGES ("zoo");
 }
 
 
diff --git a/src/fr-command.h b/src/fr-command.h
index dad77fb..39b18de 100644
--- a/src/fr-command.h
+++ b/src/fr-command.h
@@ -27,6 +27,8 @@
 #include "file-data.h"
 #include "fr-process.h"
 
+#define PACKAGES(x) (x)
+
 #define FR_TYPE_COMMAND            (fr_command_get_type ())
 #define FR_COMMAND(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), FR_TYPE_COMMAND, FrCommand))
 #define FR_COMMAND_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), FR_TYPE_COMMAND, FrCommandClass))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]