Support for major_mime_type/*
- From: ERDI Gergo <cactus cactus rulez org>
- To: gnome-components-list gnome org
- Subject: Support for major_mime_type/*
- Date: Sat, 21 Apr 2001 15:04:25 +0200 (CEST)
Hi,
Before beginning to investigate what it would take to move the monikers to
gnome-vfs, I decided to make this very small hack to Bonobo Classic (:))
to enable components to support every mime type that has a given major
mime type (i.e. a component that supports text/*). Is it OK to check in?
My comments:
* Yes, get_major_mime_type () is ugly, it shouldn't be c&p'd over the two
extenders, in fact, it shouldn't be in there at all. I know all of that
and I will of course use gnome_vfs_get_supertype_from_mime_type in the
gnomevfs version.
* Maybe I should run a major/minor query first, and run major/* only if
the first one fails? (because a component explicitly supporting foo/xyzzy
might be more suitable than a component that supports every foo/* type and
has no means of utilizing the exciting features only xyzzy supports from
the foo family) Of course this might become superfluous once we have the
priority list thing.
* Don't ever create an .oaf file that lists application/* in its supported
mime types! :)
Bye,
Cactus
--
.--= ULLA! =----------------------. `We are not here to give users what
\ http://cactus.rulez.org \ they want' -- RMS, at GUADEC 2001
`-----= cactus cactus rulez org =--'
You are in a twisty little maze of Debian packages, all different.
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/bonobo/ChangeLog,v
retrieving revision 1.1041
diff -u -u -r1.1041 ChangeLog
--- ChangeLog 2001/04/20 00:42:34 1.1041
+++ ChangeLog 2001/04/21 13:03:50
@@ -1,3 +1,11 @@
+2001-04-21 ERDI Gergo <cactus cactus rulez org>
+
+ * monikers/bonobo-moniker-extender-file.c:
+ * monikers/bonobo-moniker-extender-stream.c: Query for components
+ that support every mime type that has the major mime type of the
+ current stream (e.g. query for text/* if the stream is of type
+ text/frobozz)
+
Thu Apr 19 17:34:02 2001 George Lebl <jirka 5z com>
* bonobo/bonobo-control-frame.c
Index: monikers/bonobo-moniker-extender-file.c
===================================================================
RCS file: /cvs/gnome/bonobo/monikers/bonobo-moniker-extender-file.c,v
retrieving revision 1.9
diff -u -u -r1.9 bonobo-moniker-extender-file.c
--- monikers/bonobo-moniker-extender-file.c 2001/03/16 12:26:31 1.9
+++ monikers/bonobo-moniker-extender-file.c 2001/04/21 13:03:52
@@ -17,6 +17,23 @@
#include "bonobo-moniker-std.h"
+/* The result needs to be g_free'd */
+static gchar* get_major_mime_type (const char* mime_type)
+{
+ char *major_end;
+ char *major;
+ int major_length;
+
+ major_end = strchr (mime_type, '/');
+ major_length = major_end - mime_type;
+
+ major = g_new (gchar, major_length + 1); /* +1 for trailing \0 */
+ strncpy (major, mime_type, major_length);
+ major[major_length] = '\0'; /* Uglee */
+
+ return major;
+}
+
Bonobo_Unknown
bonobo_file_extender_resolve (BonoboMonikerExtender *extender,
const Bonobo_Moniker m,
@@ -26,6 +43,7 @@
CORBA_Environment *ev)
{
const char *mime_type;
+ char *mime_type_major;
char *oaf_requirements;
Bonobo_Unknown object;
Bonobo_Persist persist;
@@ -42,19 +60,23 @@
g_warning ("Filename : '%s'", fname);
mime_type = gnome_mime_type (fname);
-
+ mime_type_major = get_major_mime_type (mime_type);
+
oaf_requirements = g_strdup_printf (
- "bonobo:supported_mime_types.has ('%s') AND repo_ids.has ('%s') AND "
+ "bonobo:supported_mime_types.has_one (['%s', '%s/*']) AND "
+ "repo_ids.has ('%s') AND "
"repo_ids.has ('IDL:Bonobo/PersistFile:1.0')",
- mime_type, requested_interface);
-
+ mime_type, mime_type_major,
+ requested_interface);
+
result = oaf_query (oaf_requirements, NULL, ev);
if (BONOBO_EX (ev) || result == NULL || result->_buffer == NULL ||
!result->_buffer[0].iid)
return CORBA_OBJECT_NIL;
g_free (oaf_requirements);
-
+ g_free (mime_type_major);
+
oafiid = g_strdup (result->_buffer[0].iid);
CORBA_free (result);
Index: monikers/bonobo-moniker-extender-stream.c
===================================================================
RCS file: /cvs/gnome/bonobo/monikers/bonobo-moniker-extender-stream.c,v
retrieving revision 1.4
diff -u -u -r1.4 bonobo-moniker-extender-stream.c
--- monikers/bonobo-moniker-extender-stream.c 2001/02/05 20:53:52 1.4
+++ monikers/bonobo-moniker-extender-stream.c 2001/04/21 13:03:52
@@ -17,6 +17,23 @@
#include "bonobo-moniker-std.h"
+/* The result needs to be g_free'd */
+static gchar* get_major_mime_type (const char* mime_type)
+{
+ char *major_end;
+ char *major;
+ int major_length;
+
+ major_end = strchr (mime_type, '/');
+ major_length = major_end - mime_type;
+
+ major = g_new (gchar, major_length + 1); /* +1 for trailing \0 */
+ strncpy (major, mime_type, major_length);
+ major[major_length] = '\0'; /* Uglee */
+
+ return major;
+}
+
static gchar *
get_stream_type (Bonobo_Stream stream, CORBA_Environment *ev)
{
@@ -46,6 +63,7 @@
CORBA_Environment *ev)
{
const char *mime_type;
+ char *mime_type_major;
char *oaf_requirements;
Bonobo_Unknown object;
Bonobo_Unknown stream;
@@ -66,15 +84,20 @@
if (!mime_type)
goto unref_stream_exception;
+ mime_type_major = get_major_mime_type (mime_type);
+
oaf_requirements = g_strdup_printf (
- "bonobo:supported_mime_types.has ('%s') AND repo_ids.has ('%s') AND "
+ "bonobo:supported_mime_types.has_one (['%s', '%s/*']) AND "
+ "repo_ids.has ('%s') AND "
"repo_ids.has ('IDL:Bonobo/PersistStream:1.0')",
- mime_type, requested_interface);
+ mime_type, mime_type_major, requested_interface);
object = oaf_activate (oaf_requirements, NULL, 0, &ret_id, ev);
g_warning ("Attempt activate object satisfying '%s': %p",
oaf_requirements, object);
+
g_free (oaf_requirements);
+ g_free (mime_type_major);
if (ev->_major != CORBA_NO_EXCEPTION)
goto unref_stream_exception;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]