Created SugarBrowserChandler, for signaling when the browser has downloaded a file that cannot handle himself.

This commit is contained in:
Tomeu Vizoso 2006-10-26 15:47:57 +02:00
parent 60fd7fb810
commit dade0fbabc
8 changed files with 205 additions and 17 deletions

View File

@ -102,6 +102,13 @@ def start():
raise "Error when initializising the web activity." raise "Error when initializising the web activity."
style.load_stylesheet(web.stylesheet) style.load_stylesheet(web.stylesheet)
chandler = _sugar.get_browser_chandler()
chandler.connect('handle-content', handle_content_cb)
logging.debug('handle-content connected.')
def stop(): def stop():
gtkmozembed.pop_startup() gtkmozembed.pop_startup()
def handle_content_cb(chandler, url, suggestedFileName, mimeType, tmpFileName):
logging.debug('File ' + tmpFileName + ' with MIMEType ' + mimeType + ' downloaded from ' + url)

View File

@ -35,6 +35,13 @@
(gtype-id "SUGAR_TYPE_PUSH_SCROLLER") (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 ... ;; Enumerations and flags ...
@ -173,3 +180,15 @@
'("guint32" "timestamp") '("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*")
)

View File

@ -9,6 +9,7 @@ headers
#include "sugar-address-entry.h" #include "sugar-address-entry.h"
#include "sugar-tray-manager.h" #include "sugar-tray-manager.h"
#include "sugar-push-scroller.h" #include "sugar-push-scroller.h"
#include "sugar-browser-chandler.h"
%% %%
modulename gecko modulename gecko

View File

@ -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 noinst_LTLIBRARIES = libsugarprivate.la
libsugarprivate_la_LIBADD = $(GECKO_LIBS) libsugarprivate_la_LIBADD = $(GECKO_LIBS)
libsugarprivate_la_SOURCES = \ libsugarprivate_la_SOURCES = \
$(BUILT_SOURCES) \ $(BUILT_SOURCES) \
eggaccelerators.h \ eggaccelerators.h \
eggaccelerators.c \ eggaccelerators.c \
sugar-browser.h \
sugar-browser.cpp \
sugar-content-handler.h \
sugar-content-handler.cpp \
sugar-address-entry.h \ sugar-address-entry.h \
sugar-address-entry.c \ sugar-address-entry.c \
sugar-key-grabber.h \ sugar-browser.h \
sugar-key-grabber.c \ 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.c \
sugar-push-scroller.h \ sugar-push-scroller.h \
sugar-tray-manager.c \ sugar-tray-manager.c \
sugar-tray-manager.h sugar-tray-manager.h
libsugarprivate_la_CPPFLAGS = \
$(WARN_CFLAGS) \
$(LIB_CFLAGS) \
-I$(MOZILLA_INCLUDE_DIR)/exthandler \
-DSHARE_DIR=\"$(pkgdatadir)\"
BUILT_SOURCES = \ BUILT_SOURCES = \
sugar-marshal.c \ sugar-marshal.c \
sugar-marshal.h sugar-marshal.h

View File

@ -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);
}

View File

@ -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

View File

@ -1,5 +1,13 @@
#include <stdio.h> #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" #include "sugar-content-handler.h"
GSugarContentHandler::GSugarContentHandler() GSugarContentHandler::GSugarContentHandler()
@ -18,7 +26,43 @@ NS_IMETHODIMP
GSugarContentHandler::Show (nsIHelperAppLauncher *aLauncher, GSugarContentHandler::Show (nsIHelperAppLauncher *aLauncher,
nsISupports *aContext, nsISupports *aContext,
PRUint32 aReason) 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; return NS_OK;
} }

View File

@ -1,2 +1,3 @@
VOID:OBJECT,STRING,LONG,LONG VOID:OBJECT,STRING,LONG,LONG
VOID:OBJECT,LONG VOID:OBJECT,LONG
VOID:STRING,STRING,STRING,STRING