Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/python/_sugar.defs18
-rw-r--r--lib/python/_sugar.override2
-rw-r--r--lib/src/Makefile.am4
-rw-r--r--lib/src/SugarContentHandler.cpp3
-rw-r--r--lib/src/SugarDownload.cpp54
-rw-r--r--lib/src/sugar-browser-chandler.c56
-rw-r--r--lib/src/sugar-browser-chandler.h39
-rw-r--r--lib/src/sugar-browser.cpp2
-rw-r--r--lib/src/sugar-download-manager.c121
-rw-r--r--lib/src/sugar-download-manager.h55
-rw-r--r--lib/src/sugar-marshal.list2
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