From 23565cfd483e38d3a64cd5980deea47cccb28581 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Wed, 01 Nov 2006 18:43:59 +0000 Subject: First version of the ClipboardService. Added support for showing the progress of a pdf download in the clipboard. --- (limited to 'lib') diff --git a/lib/src/SugarDownload.cpp b/lib/src/SugarDownload.cpp index 9c68b8f..62ca5ac 100644 --- a/lib/src/SugarDownload.cpp +++ b/lib/src/SugarDownload.cpp @@ -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) && +{ + SugarBrowserChandler *browser_chandler = sugar_get_browser_chandler(); + + 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_browser_chandler_download_started(browser_chandler, + 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_browser_chandler_download_completed(browser_chandler, + mTargetFileName.get()); + } else { + sugar_browser_chandler_download_cancelled(browser_chandler, + mTargetFileName.get()); + } } - + return NS_OK; } @@ -79,7 +91,15 @@ GSugarDownload::OnProgressChange64 (nsIWebProgress *aWebProgress, PRInt64 aMaxSelfProgress, PRInt64 aCurTotalProgress, PRInt64 aMaxTotalProgress) -{ +{ + SugarBrowserChandler *browser_chandler = sugar_get_browser_chandler(); + PRInt32 percentComplete = + (PRInt32)(((float)aCurSelfProgress / (float)aMaxSelfProgress) * 100.0); + + sugar_browser_chandler_update_progress(browser_chandler, + mTargetFileName.get(), + percentComplete); + return NS_OK; } diff --git a/lib/src/sugar-browser-chandler.c b/lib/src/sugar-browser-chandler.c index a65519a..da6e9d0 100644 --- a/lib/src/sugar-browser-chandler.c +++ b/lib/src/sugar-browser-chandler.c @@ -2,7 +2,10 @@ #include "sugar-browser-chandler.h" enum { - HANDLE_CONTENT, + DOWNLOAD_STARTED, + DOWNLOAD_COMPLETED, + DOWNLOAD_CANCELLED, + DOWNLOAD_PROGRESS, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = { 0 }; @@ -19,8 +22,8 @@ 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", + signals[DOWNLOAD_STARTED] = + g_signal_new ("download-started", G_OBJECT_CLASS_TYPE (browser_chandler_class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (SugarBrowserChandlerClass, handle_content), @@ -30,6 +33,37 @@ sugar_browser_chandler_class_init(SugarBrowserChandlerClass *browser_chandler_cl G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); + + signals[DOWNLOAD_COMPLETED] = + g_signal_new ("download-completed", + G_OBJECT_CLASS_TYPE (browser_chandler_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (SugarBrowserChandlerClass, 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 (browser_chandler_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (SugarBrowserChandlerClass, 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 (browser_chandler_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (SugarBrowserChandlerClass, handle_content), + NULL, NULL, + sugar_marshal_VOID__STRING_INT, + G_TYPE_NONE, 2, + G_TYPE_STRING, + G_TYPE_INT); } SugarBrowserChandler * @@ -42,15 +76,46 @@ sugar_get_browser_chandler() } void -sugar_browser_chandler_handle_content (SugarBrowserChandler *browser_chandler, - const char *url, - const char *mime_type, - const char *tmp_file_name) -{ +sugar_browser_chandler_download_started (SugarBrowserChandler *browser_chandler, + const char *url, + const char *mime_type, + const char *tmp_file_name) +{ g_signal_emit(browser_chandler, - signals[HANDLE_CONTENT], + signals[DOWNLOAD_STARTED], 0 /* details */, url, mime_type, - tmp_file_name); + tmp_file_name); +} + +void +sugar_browser_chandler_download_completed (SugarBrowserChandler *browser_chandler, + const char *tmp_file_name) +{ + g_signal_emit(browser_chandler, + signals[DOWNLOAD_COMPLETED], + 0 /* details */, + tmp_file_name); +} + +void sugar_browser_chandler_download_cancelled (SugarBrowserChandler *browser_chandler, + const char *tmp_file_name) +{ + g_signal_emit(browser_chandler, + signals[DOWNLOAD_CANCELLED], + 0 /* details */, + tmp_file_name); +} + +void +sugar_browser_chandler_update_progress (SugarBrowserChandler *browser_chandler, + const char *tmp_file_name, + const int percent) +{ + g_signal_emit(browser_chandler, + signals[DOWNLOAD_PROGRESS], + 0 /* details */, + tmp_file_name, + percent); } diff --git a/lib/src/sugar-browser-chandler.h b/lib/src/sugar-browser-chandler.h index cccd983..f851b70 100644 --- a/lib/src/sugar-browser-chandler.h +++ b/lib/src/sugar-browser-chandler.h @@ -29,10 +29,17 @@ struct _SugarBrowserChandlerClass { 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); +void sugar_browser_chandler_download_started (SugarBrowserChandler *chandler, + const char *url, + const char *mime_type, + const char *tmp_file_name); +void sugar_browser_chandler_download_completed (SugarBrowserChandler *chandler, + const char *tmp_file_name); +void sugar_browser_chandler_download_cancelled (SugarBrowserChandler *chandler, + const char *tmp_file_name); +void sugar_browser_chandler_update_progress (SugarBrowserChandler *chandler, + const char *tmp_file_name, + const int percent); G_END_DECLS 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-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 -- cgit v0.9.1