Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2006-10-26 13:47:57 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2006-10-26 13:47:57 (GMT)
commitdade0fbabccb206591d776274d0925974ddaf1cf (patch)
tree2ae4a03bf874707656dc8a1872f08535cc62619f /lib
parent60fd7fb810a716bd9cedcdefe9b840fae60dc288 (diff)
Created SugarBrowserChandler, for signaling when the browser has downloaded a file that cannot handle himself.
Diffstat (limited to 'lib')
-rw-r--r--lib/python/_sugar.defs19
-rw-r--r--lib/python/_sugar.override1
-rw-r--r--lib/src/Makefile.am35
-rw-r--r--lib/src/sugar-browser-chandler.c57
-rw-r--r--lib/src/sugar-browser-chandler.h56
-rw-r--r--lib/src/sugar-content-handler.cpp46
-rw-r--r--lib/src/sugar-marshal.list1
7 files changed, 198 insertions, 17 deletions
diff --git a/lib/python/_sugar.defs b/lib/python/_sugar.defs
index a720fee..5a31c91 100644
--- a/lib/python/_sugar.defs
+++ b/lib/python/_sugar.defs
@@ -35,6 +35,13 @@
(gtype-id "SUGAR_TYPE_PUSH_SCROLLER")
)
+(define-object BrowserChandler
+ (in-module "Sugar")
+ (parent "GObject")
+ (c-name "SugarBrowserChandler")
+ (gtype-id "SUGAR_TYPE_BROWSER_CHANDLER")
+)
+
;; Enumerations and flags ...
@@ -173,3 +180,15 @@
'("guint32" "timestamp")
)
)
+
+;; From sugar-browser-chandler.h
+
+(define-function sugar_browser_chandler_get_type
+ (c-name "sugar_browser_chandler_get_type")
+ (return-type "GType")
+)
+
+(define-function get_browser_chandler
+ (c-name "sugar_get_browser_chandler")
+ (return-type "SugarBrowserChandler*")
+)
diff --git a/lib/python/_sugar.override b/lib/python/_sugar.override
index 57e7c28..9d27bbe 100644
--- a/lib/python/_sugar.override
+++ b/lib/python/_sugar.override
@@ -9,6 +9,7 @@ headers
#include "sugar-address-entry.h"
#include "sugar-tray-manager.h"
#include "sugar-push-scroller.h"
+#include "sugar-browser-chandler.h"
%%
modulename gecko
diff --git a/lib/src/Makefile.am b/lib/src/Makefile.am
index 1d5cd3b..7bc79aa 100644
--- a/lib/src/Makefile.am
+++ b/lib/src/Makefile.am
@@ -1,30 +1,33 @@
+INCLUDES = \
+ $(WARN_CFLAGS) \
+ $(LIB_CFLAGS) \
+ -I$(MOZILLA_INCLUDE_DIR)/exthandler \
+ -I$(MOZILLA_INCLUDE_DIR)/mimetype \
+ -I$(MOZILLA_INCLUDE_DIR)/necko
+
noinst_LTLIBRARIES = libsugarprivate.la
libsugarprivate_la_LIBADD = $(GECKO_LIBS)
-libsugarprivate_la_SOURCES = \
- $(BUILT_SOURCES) \
- eggaccelerators.h \
- eggaccelerators.c \
- sugar-browser.h \
- sugar-browser.cpp \
- sugar-content-handler.h \
- sugar-content-handler.cpp \
+libsugarprivate_la_SOURCES = \
+ $(BUILT_SOURCES) \
+ eggaccelerators.h \
+ eggaccelerators.c \
sugar-address-entry.h \
sugar-address-entry.c \
- sugar-key-grabber.h \
- sugar-key-grabber.c \
+ sugar-browser.h \
+ sugar-browser.cpp \
+ sugar-browser-chandler.h \
+ sugar-browser-chandler.c \
+ sugar-content-handler.h \
+ sugar-content-handler.cpp \
+ sugar-key-grabber.h \
+ sugar-key-grabber.c \
sugar-push-scroller.c \
sugar-push-scroller.h \
sugar-tray-manager.c \
sugar-tray-manager.h
-libsugarprivate_la_CPPFLAGS = \
- $(WARN_CFLAGS) \
- $(LIB_CFLAGS) \
- -I$(MOZILLA_INCLUDE_DIR)/exthandler \
- -DSHARE_DIR=\"$(pkgdatadir)\"
-
BUILT_SOURCES = \
sugar-marshal.c \
sugar-marshal.h
diff --git a/lib/src/sugar-browser-chandler.c b/lib/src/sugar-browser-chandler.c
new file mode 100644
index 0000000..8a5af52
--- /dev/null
+++ b/lib/src/sugar-browser-chandler.c
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include <string.h>
+
+#include "sugar-marshal.h"
+#include "sugar-browser-chandler.h"
+
+G_DEFINE_TYPE(SugarBrowserChandler, sugar_browser_chandler, G_TYPE_OBJECT)
+
+SugarBrowserChandler *browserChandler = NULL;
+
+static void
+sugar_browser_chandler_init(SugarBrowserChandler *browserChandler)
+{
+}
+
+static void
+sugar_browser_chandler_class_init(SugarBrowserChandlerClass *browser_chandler_class)
+{
+ browser_chandler_class->handle_content_signal_id =
+ g_signal_new ("handle-content",
+ G_OBJECT_CLASS_TYPE (browser_chandler_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (SugarBrowserChandlerClass, handle_content),
+ NULL, NULL,
+ sugar_marshal_VOID__STRING_STRING_STRING_STRING,
+ G_TYPE_NONE, 4,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+}
+
+SugarBrowserChandler *
+sugar_get_browser_chandler()
+{
+ if(browserChandler == NULL)
+ browserChandler = g_object_new(SUGAR_TYPE_BROWSER_CHANDLER, NULL);
+
+ return browserChandler;
+}
+
+void
+sugar_browser_chandler_handle_content (SugarBrowserChandler *browser_chandler,
+ const char *url,
+ const char *suggested_file_name,
+ const char *mime_type,
+ const char *tmp_file_name)
+{
+ g_signal_emit(browser_chandler,
+ SUGAR_BROWSER_CHANDLER_GET_CLASS(
+ browser_chandler)->handle_content_signal_id,
+ 0 /* details */,
+ url,
+ suggested_file_name,
+ mime_type,
+ tmp_file_name);
+}
diff --git a/lib/src/sugar-browser-chandler.h b/lib/src/sugar-browser-chandler.h
new file mode 100644
index 0000000..d586a41
--- /dev/null
+++ b/lib/src/sugar-browser-chandler.h
@@ -0,0 +1,56 @@
+#ifndef __SUGAR_BROWSER_CHANDLER_H__
+#define __SUGAR_BROWSER_CHANDLER_H__
+
+#include <glib-object.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _SugarBrowserChandler SugarBrowserChandler;
+typedef struct _SugarBrowserChandlerClass SugarBrowserChandlerClass;
+
+#define SUGAR_TYPE_BROWSER_CHANDLER ( \
+ sugar_browser_chandler_get_type())
+#define SUGAR_BROWSER_CHANDLER(object) ( \
+ G_TYPE_CHECK_INSTANCE_CAST((object), \
+ SUGAR_TYPE_BROWSER_CHANDLER, SugarBrowserChandler))
+#define SUGAR_BROWSER_CHANDLER_CLASS(klass) ( \
+ G_TYPE_CHECK_CLASS_CAST((klass), \
+ SUGAR_TYPE_BROWSER_CHANDLER, \
+ SugarBrowserChandlerClass))
+#define SUGAR_IS_BROWSER_CHANDLER(object) ( \
+ G_TYPE_CHECK_INSTANCE_TYPE((object), \
+ SUGAR_TYPE_BROWSER_CHANDLER))
+#define SUGAR_IS_BROWSER_CHANDLER_CLASS(klass) ( \
+ G_TYPE_CHECK_CLASS_TYPE((klass), \
+ SUGAR_TYPE_BROWSER_CHANDLER))
+#define SUGAR_BROWSER_CHANDLER_GET_CLASS(object) ( \
+ G_TYPE_INSTANCE_GET_CLASS((object), \
+ SUGAR_TYPE_BROWSER_CHANDLER, \
+ SugarBrowserChandlerClass))
+
+struct _SugarBrowserChandler {
+ GObject base_instance;
+};
+
+struct _SugarBrowserChandlerClass {
+ GObjectClass base_class;
+
+ guint handle_content_signal_id;
+
+ void (* handle_content) (char *url, char *tmp_file_name);
+
+};
+
+GType sugar_browser_chandler_get_type (void);
+SugarBrowserChandler *sugar_get_browser_chandler ();
+void sugar_browser_chandler_handle_content (
+ SugarBrowserChandler *browser_chandler,
+ const char *url,
+ const char *suggested_file_name,
+ const char *mime_type,
+ const char *tmp_file_name);
+
+G_END_DECLS
+
+#endif
diff --git a/lib/src/sugar-content-handler.cpp b/lib/src/sugar-content-handler.cpp
index 56fe587..0597c48 100644
--- a/lib/src/sugar-content-handler.cpp
+++ b/lib/src/sugar-content-handler.cpp
@@ -1,5 +1,13 @@
#include <stdio.h>
+#include <nsStringAPI.h>
+#include <nsCExternalHandlerService.h>
+#include <nsIMIMEInfo.h>
+#include <nsIURL.h>
+#include <nsIFile.h>
+
+#include "sugar-browser-chandler.h"
+
#include "sugar-content-handler.h"
GSugarContentHandler::GSugarContentHandler()
@@ -18,7 +26,43 @@ NS_IMETHODIMP
GSugarContentHandler::Show (nsIHelperAppLauncher *aLauncher,
nsISupports *aContext,
PRUint32 aReason)
-{
+{
+ SugarBrowserChandler *browser_chandler;
+ nsresult rv;
+ nsCString url;
+ nsCString mimeType;
+ nsString suggested_file_name_utf16;
+ nsCString suggested_file_name;
+ nsCString tmp_file_name;
+
+ NS_ENSURE_TRUE (aLauncher, NS_ERROR_FAILURE);
+
+ nsCOMPtr<nsIMIMEInfo> MIMEInfo;
+ aLauncher->GetMIMEInfo (getter_AddRefs(MIMEInfo));
+ NS_ENSURE_TRUE (MIMEInfo, NS_ERROR_FAILURE);
+
+ rv = MIMEInfo->GetMIMEType (mimeType);
+
+ nsCOMPtr<nsIURI> uri;
+ aLauncher->GetSource (getter_AddRefs(uri));
+ NS_ENSURE_TRUE (uri, NS_ERROR_FAILURE);
+
+ uri->GetSpec (url);
+
+ aLauncher->GetSuggestedFileName (suggested_file_name_utf16);
+ NS_UTF16ToCString (suggested_file_name_utf16,
+ NS_CSTRING_ENCODING_UTF8, suggested_file_name);
+
+ nsCOMPtr<nsIFile> tmp_file;
+ aLauncher->GetTargetFile(getter_AddRefs(tmp_file));
+ tmp_file->GetNativeLeafName (tmp_file_name);
+
+ browser_chandler = sugar_get_browser_chandler();
+ sugar_browser_chandler_handle_content(browser_chandler,
+ url.get(),
+ suggested_file_name.get(),
+ mimeType.get(),
+ tmp_file_name.get());
return NS_OK;
}
diff --git a/lib/src/sugar-marshal.list b/lib/src/sugar-marshal.list
index 4ea485a..ba41075 100644
--- a/lib/src/sugar-marshal.list
+++ b/lib/src/sugar-marshal.list
@@ -1,2 +1,3 @@
VOID:OBJECT,STRING,LONG,LONG
VOID:OBJECT,LONG
+VOID:STRING,STRING,STRING,STRING