diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/python/_sugar.defs | 18 | ||||
-rw-r--r-- | lib/python/_sugar.override | 2 | ||||
-rw-r--r-- | lib/src/Makefile.am | 4 | ||||
-rw-r--r-- | lib/src/SugarContentHandler.cpp | 3 | ||||
-rw-r--r-- | lib/src/SugarDownload.cpp | 54 | ||||
-rw-r--r-- | lib/src/sugar-browser-chandler.c | 56 | ||||
-rw-r--r-- | lib/src/sugar-browser-chandler.h | 39 | ||||
-rw-r--r-- | lib/src/sugar-browser.cpp | 2 | ||||
-rw-r--r-- | lib/src/sugar-download-manager.c | 121 | ||||
-rw-r--r-- | lib/src/sugar-download-manager.h | 55 | ||||
-rw-r--r-- | lib/src/sugar-marshal.list | 2 |
11 files changed, 228 insertions, 128 deletions
diff --git a/lib/python/_sugar.defs b/lib/python/_sugar.defs index 5a31c91..6a42d96 100644 --- a/lib/python/_sugar.defs +++ b/lib/python/_sugar.defs @@ -35,11 +35,11 @@ (gtype-id "SUGAR_TYPE_PUSH_SCROLLER") ) -(define-object BrowserChandler +(define-object DownloadManager (in-module "Sugar") (parent "GObject") - (c-name "SugarBrowserChandler") - (gtype-id "SUGAR_TYPE_BROWSER_CHANDLER") + (c-name "SugarDownloadManager") + (gtype-id "SUGAR_TYPE_DOWNLOAD_MANAGER") ) ;; Enumerations and flags ... @@ -181,14 +181,14 @@ ) ) -;; From sugar-browser-chandler.h +;; From sugar-download-manager.h -(define-function sugar_browser_chandler_get_type - (c-name "sugar_browser_chandler_get_type") +(define-function sugar_download_manager_get_type + (c-name "sugar_download_manager_get_type") (return-type "GType") ) -(define-function get_browser_chandler - (c-name "sugar_get_browser_chandler") - (return-type "SugarBrowserChandler*") +(define-function get_download_manager + (c-name "sugar_get_download_manager") + (return-type "SugarDownloadManager*") ) diff --git a/lib/python/_sugar.override b/lib/python/_sugar.override index 9d27bbe..f1f5cd7 100644 --- a/lib/python/_sugar.override +++ b/lib/python/_sugar.override @@ -9,7 +9,7 @@ headers #include "sugar-address-entry.h" #include "sugar-tray-manager.h" #include "sugar-push-scroller.h" -#include "sugar-browser-chandler.h" +#include "sugar-download-manager.h" %% modulename gecko diff --git a/lib/src/Makefile.am b/lib/src/Makefile.am index 0224885..7416f83 100644 --- a/lib/src/Makefile.am +++ b/lib/src/Makefile.am @@ -19,8 +19,8 @@ libsugarprivate_la_SOURCES = \ sugar-address-entry.c \ sugar-browser.h \ sugar-browser.cpp \ - sugar-browser-chandler.h \ - sugar-browser-chandler.c \ + sugar-download-manager.h \ + sugar-download-manager.c \ SugarContentHandler.h \ SugarContentHandler.cpp \ SugarDownload.h \ diff --git a/lib/src/SugarContentHandler.cpp b/lib/src/SugarContentHandler.cpp index b39b20b..de30aec 100644 --- a/lib/src/SugarContentHandler.cpp +++ b/lib/src/SugarContentHandler.cpp @@ -1,9 +1,6 @@ #include <nsCExternalHandlerService.h> #include <nsIFile.h> -#include "sugar-browser-chandler.h" -#include "SugarDownload.h" - #include "SugarContentHandler.h" GSugarContentHandler::GSugarContentHandler() diff --git a/lib/src/SugarDownload.cpp b/lib/src/SugarDownload.cpp index 9c68b8f..b087670 100644 --- a/lib/src/SugarDownload.cpp +++ b/lib/src/SugarDownload.cpp @@ -1,4 +1,4 @@ -#include "sugar-browser-chandler.h" +#include "sugar-download-manager.h" #include "SugarDownload.h" @@ -35,27 +35,39 @@ GSugarDownload::Init (nsIURI *aSource, NS_IMETHODIMP GSugarDownload::OnStateChange (nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) -{ - nsCString url; - nsCString mimeType; - nsCString targetURI; - - if ((((aStateFlags & STATE_IS_REQUEST) && +{ + SugarDownloadManager *download_manager = sugar_get_download_manager(); + + if (((aStateFlags & STATE_IS_REQUEST) && (aStateFlags & STATE_IS_NETWORK) && - (aStateFlags & STATE_STOP)) || - aStateFlags == STATE_STOP) && - NS_SUCCEEDED (aStatus)) { + (aStateFlags & STATE_START)) || + aStateFlags == STATE_START) { + + nsCString url; + nsCString mimeType; mMIMEInfo->GetMIMEType(mimeType); mSource->GetSpec(url); - SugarBrowserChandler *browser_chandler = sugar_get_browser_chandler(); - sugar_browser_chandler_handle_content(browser_chandler, - url.get(), - mimeType.get(), - mTargetFileName.get()); + sugar_download_manager_download_started(download_manager, + url.get(), + mimeType.get(), + mTargetFileName.get()); + + } else if (((aStateFlags & STATE_IS_REQUEST) && + (aStateFlags & STATE_IS_NETWORK) && + (aStateFlags & STATE_STOP)) || + aStateFlags == STATE_STOP) { + + if (NS_SUCCEEDED (aStatus)) { + sugar_download_manager_download_completed(download_manager, + mTargetFileName.get()); + } else { + sugar_download_manager_download_cancelled(download_manager, + mTargetFileName.get()); + } } - + return NS_OK; } @@ -79,7 +91,15 @@ GSugarDownload::OnProgressChange64 (nsIWebProgress *aWebProgress, PRInt64 aMaxSelfProgress, PRInt64 aCurTotalProgress, PRInt64 aMaxTotalProgress) -{ +{ + SugarDownloadManager *download_manager = sugar_get_download_manager(); + PRInt32 percentComplete = + (PRInt32)(((float)aCurSelfProgress / (float)aMaxSelfProgress) * 100.0); + + sugar_download_manager_update_progress(download_manager, + mTargetFileName.get(), + percentComplete); + return NS_OK; } diff --git a/lib/src/sugar-browser-chandler.c b/lib/src/sugar-browser-chandler.c deleted file mode 100644 index a65519a..0000000 --- a/lib/src/sugar-browser-chandler.c +++ /dev/null @@ -1,56 +0,0 @@ -#include "sugar-marshal.h" -#include "sugar-browser-chandler.h" - -enum { - HANDLE_CONTENT, - LAST_SIGNAL -}; -static guint signals[LAST_SIGNAL] = { 0 }; - -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) -{ - signals[HANDLE_CONTENT] = - 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, - G_TYPE_NONE, 3, - 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 *mime_type, - const char *tmp_file_name) -{ - g_signal_emit(browser_chandler, - signals[HANDLE_CONTENT], - 0 /* details */, - url, - mime_type, - tmp_file_name); -} diff --git a/lib/src/sugar-browser-chandler.h b/lib/src/sugar-browser-chandler.h deleted file mode 100644 index cccd983..0000000 --- a/lib/src/sugar-browser-chandler.h +++ /dev/null @@ -1,39 +0,0 @@ -#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; - - void (* handle_content) (char *url, char *tmp_file_name); - -}; - -GType sugar_browser_chandler_get_type (void); -SugarBrowserChandler *sugar_get_browser_chandler (void); -void sugar_browser_chandler_handle_content (SugarBrowserChandler *chandler, - const char *url, - const char *mime_type, - const char *tmp_file_name); - -G_END_DECLS - -#endif diff --git a/lib/src/sugar-browser.cpp b/lib/src/sugar-browser.cpp index d2ffb8a..f787f19 100644 --- a/lib/src/sugar-browser.cpp +++ b/lib/src/sugar-browser.cpp @@ -78,7 +78,7 @@ sugar_browser_startup(void) PR_TRUE, getter_AddRefs(file)); NS_ENSURE_TRUE(file, FALSE); - rv = prefService->ReadUserPrefs (file); + rv = prefService->ReadUserPrefs (file); if (NS_FAILED(rv)) { g_warning ("failed to read default preferences, error: %x", rv); return FALSE; diff --git a/lib/src/sugar-download-manager.c b/lib/src/sugar-download-manager.c new file mode 100644 index 0000000..c3ffcf2 --- /dev/null +++ b/lib/src/sugar-download-manager.c @@ -0,0 +1,121 @@ +#include "sugar-marshal.h" +#include "sugar-download-manager.h" + +enum { + DOWNLOAD_STARTED, + DOWNLOAD_COMPLETED, + DOWNLOAD_CANCELLED, + DOWNLOAD_PROGRESS, + LAST_SIGNAL +}; +static guint signals[LAST_SIGNAL] = { 0 }; + +G_DEFINE_TYPE(SugarDownloadManager, sugar_download_manager, G_TYPE_OBJECT) + +SugarDownloadManager *DownloadManager = NULL; + +static void +sugar_download_manager_init(SugarDownloadManager *DownloadManager) +{ +} + +static void +sugar_download_manager_class_init(SugarDownloadManagerClass *download_manager_class) +{ + signals[DOWNLOAD_STARTED] = + g_signal_new ("download-started", + G_OBJECT_CLASS_TYPE (download_manager_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (SugarDownloadManagerClass, handle_content), + NULL, NULL, + sugar_marshal_VOID__STRING_STRING_STRING, + G_TYPE_NONE, 3, + G_TYPE_STRING, + G_TYPE_STRING, + G_TYPE_STRING); + + signals[DOWNLOAD_COMPLETED] = + g_signal_new ("download-completed", + G_OBJECT_CLASS_TYPE (download_manager_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (SugarDownloadManagerClass, handle_content), + NULL, NULL, + sugar_marshal_VOID__STRING, + G_TYPE_NONE, 1, + G_TYPE_STRING); + + signals[DOWNLOAD_CANCELLED] = + g_signal_new ("download-cancelled", + G_OBJECT_CLASS_TYPE (download_manager_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (SugarDownloadManagerClass, handle_content), + NULL, NULL, + sugar_marshal_VOID__STRING, + G_TYPE_NONE, 1, + G_TYPE_STRING); + + signals[DOWNLOAD_PROGRESS] = + g_signal_new ("download-progress", + G_OBJECT_CLASS_TYPE (download_manager_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (SugarDownloadManagerClass, handle_content), + NULL, NULL, + sugar_marshal_VOID__STRING_INT, + G_TYPE_NONE, 2, + G_TYPE_STRING, + G_TYPE_INT); +} + +SugarDownloadManager * +sugar_get_download_manager() +{ + if(DownloadManager == NULL) + DownloadManager = g_object_new(SUGAR_TYPE_DOWNLOAD_MANAGER, NULL); + + return DownloadManager; +} + +void +sugar_download_manager_download_started (SugarDownloadManager *download_manager, + const char *url, + const char *mime_type, + const char *tmp_file_name) +{ + g_signal_emit(download_manager, + signals[DOWNLOAD_STARTED], + 0 /* details */, + url, + mime_type, + tmp_file_name); +} + +void +sugar_download_manager_download_completed (SugarDownloadManager *download_manager, + const char *tmp_file_name) +{ + g_signal_emit(download_manager, + signals[DOWNLOAD_COMPLETED], + 0 /* details */, + tmp_file_name); +} + +void sugar_download_manager_download_cancelled (SugarDownloadManager *download_manager, + const char *tmp_file_name) +{ + g_signal_emit(download_manager, + signals[DOWNLOAD_CANCELLED], + 0 /* details */, + tmp_file_name); +} + +void +sugar_download_manager_update_progress (SugarDownloadManager *download_manager, + const char *tmp_file_name, + const int percent) +{ + g_signal_emit(download_manager, + signals[DOWNLOAD_PROGRESS], + 0 /* details */, + tmp_file_name, + percent); +} diff --git a/lib/src/sugar-download-manager.h b/lib/src/sugar-download-manager.h new file mode 100644 index 0000000..2d112d8 --- /dev/null +++ b/lib/src/sugar-download-manager.h @@ -0,0 +1,55 @@ +#ifndef __SUGAR_DOWNLOAD_MANAGER_H__ +#define __SUGAR_DOWNLOAD_MANAGER_H__ + +#include <glib-object.h> +#include <glib.h> + +G_BEGIN_DECLS + +typedef struct _SugarDownloadManager SugarDownloadManager; +typedef struct _SugarDownloadManagerClass SugarDownloadManagerClass; + +#define SUGAR_TYPE_DOWNLOAD_MANAGER (sugar_download_manager_get_type()) +#define SUGAR_DOWNLOAD_MANAGER(object) (G_TYPE_CHECK_INSTANCE_CAST((object), SUGAR_TYPE_DOWNLOAD_MANAGER, SugarDownloadManager)) +#define SUGAR_DOWNLOAD_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SUGAR_TYPE_DOWNLOAD_MANAGER, SugarDownloadManagerClass)) +#define SUGAR_IS_DOWNLOAD_MANAGER(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), SUGAR_TYPE_DOWNLOAD_MANAGER)) +#define SUGAR_IS_DOWNLOAD_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SUGAR_TYPE_DOWNLOAD_MANAGER)) +#define SUGAR_DOWNLOAD_MANAGER_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), SUGAR_TYPE_DOWNLOAD_MANAGER, SugarDownloadManagerClass)) + +struct _SugarDownloadManager { + GObject base_instance; +}; + +struct _SugarDownloadManagerClass { + GObjectClass base_class; + + void (* handle_content) (char *url, char *tmp_file_name); + +}; + +GType sugar_download_manager_get_type(void); + +SugarDownloadManager *sugar_get_download_manager(void); + +void sugar_download_manager_download_started( + SugarDownloadManager *download_manager, + const char *url, + const char *mime_type, + const char *tmp_file_name); + +void sugar_download_manager_download_completed( + SugarDownloadManager *download_manager, + const char *tmp_file_name); + +void sugar_download_manager_download_cancelled( + SugarDownloadManager *download_manager, + const char *tmp_file_name); + +void sugar_download_manager_update_progress( + SugarDownloadManager *download_manager, + const char *tmp_file_name, + const int percent); + +G_END_DECLS + +#endif diff --git a/lib/src/sugar-marshal.list b/lib/src/sugar-marshal.list index 5a0120f..4d987f8 100644 --- a/lib/src/sugar-marshal.list +++ b/lib/src/sugar-marshal.list @@ -1,3 +1,5 @@ VOID:OBJECT,STRING,LONG,LONG VOID:OBJECT,LONG VOID:STRING,STRING,STRING +VOID:STRING,INT +VOID:STRING |