From 1f4613383f3360de6f00ed711332927ade5ecd80 Mon Sep 17 00:00:00 2001
From: Oliver Schmidt
Date: Fri, 24 Jan 2014 16:09:30 +0100
Subject: [PATCH] Added more flexibility to webbrowser -> wget forwarding.
- Up to now the CTK program handler was necessary to start wget and forward the URL. Now alternatively the webbrowser uses the underlying OS to exec wget.
- Up to now windowed CTK was necessary to display the acknowledge dialog. Now alternatively the webbrowser displays the acknowledge text and buttons right in the webpage area.
- For now the targets 'win32' and 'c64' make use of the new capabilities.
---
apps/webbrowser/www.c | 57 +++++++++++++++++++++++++++++------
platform/c64/contiki-conf.h | 1 +
platform/win32/contiki-conf.h | 2 ++
3 files changed, 51 insertions(+), 9 deletions(-)
diff --git a/apps/webbrowser/www.c b/apps/webbrowser/www.c
index 49fff1bc8..995038bd8 100644
--- a/apps/webbrowser/www.c
+++ b/apps/webbrowser/www.c
@@ -101,7 +101,8 @@ static struct ctk_separator sep2 =
{CTK_SEPARATOR(0, WWW_CONF_WEBPAGE_HEIGHT + 3,
WWW_CONF_WEBPAGE_WIDTH)};
-#if WWW_CONF_WITH_WGET
+#if WWW_CONF_WITH_WGET || defined(WWW_CONF_WGET_EXEC)
+#if CTK_CONF_WINDOWS
static struct ctk_window wgetdialog;
static struct ctk_label wgetlabel1 =
{CTK_LABEL(1, 1, 34, 1, "This web page cannot be displayed.")};
@@ -111,7 +112,15 @@ static struct ctk_button wgetnobutton =
{CTK_BUTTON(1, 5, 6, "Cancel")};
static struct ctk_button wgetyesbutton =
{CTK_BUTTON(11, 5, 24, "Close browser & download")};
-#endif /* WWW_CONF_WITH_WGET */
+#else /* CTK_CONF_WINDOWS */
+static struct ctk_button wgetnobutton =
+ {CTK_BUTTON((WWW_CONF_WEBPAGE_WIDTH - 38) / 2 + 1,
+ 11, 6, "Cancel")};
+static struct ctk_button wgetyesbutton =
+ {CTK_BUTTON((WWW_CONF_WEBPAGE_WIDTH - 38) / 2 + 11,
+ 11, 24, "Close browser & download")};
+#endif /* CTK_CONF_WINDOWS */
+#endif /* WWW_CONF_WITH_WGET || WWW_CONF_WGET_EXEC */
#if WWW_CONF_HISTORY_SIZE > 0
/* The char arrays that hold the history of visited URLs. */
@@ -249,8 +258,8 @@ clear_page(void)
{
ctk_window_clear(&mainwindow);
make_window();
- redraw_window();
memset(webpage, 0, WWW_CONF_WEBPAGE_WIDTH * WWW_CONF_WEBPAGE_HEIGHT);
+ redraw_window();
}
/*-----------------------------------------------------------------------------------*/
static void
@@ -466,14 +475,16 @@ PROCESS_THREAD(www_process, ev, data)
#endif /* WWW_CONF_HOMEPAGE */
CTK_WIDGET_FOCUS(&mainwindow, &urlentry);
-#if WWW_CONF_WITH_WGET
+#if WWW_CONF_WITH_WGET || defined(WWW_CONF_WGET_EXEC)
+#if CTK_CONF_WINDOWS
/* Create download dialog.*/
ctk_dialog_new(&wgetdialog, 38, 7);
CTK_WIDGET_ADD(&wgetdialog, &wgetlabel1);
CTK_WIDGET_ADD(&wgetdialog, &wgetlabel2);
CTK_WIDGET_ADD(&wgetdialog, &wgetnobutton);
CTK_WIDGET_ADD(&wgetdialog, &wgetyesbutton);
-#endif /* WWW_CONF_WITH_WGET */
+#endif /* CTK_CONF_WINDOWS */
+#endif /* WWW_CONF_WITH_WGET || WWW_CONF_WGET_EXEC */
ctk_window_open(&mainwindow);
@@ -515,18 +526,35 @@ PROCESS_THREAD(www_process, ev, data)
} else if(w == (struct ctk_widget *)&stopbutton) {
loading = 0;
webclient_close();
-#if WWW_CONF_WITH_WGET
+#if WWW_CONF_WITH_WGET || defined(WWW_CONF_WGET_EXEC)
} else if(w == (struct ctk_widget *)&wgetnobutton) {
+#if CTK_CONF_WINDOWS
ctk_dialog_close();
+#else /* CTK_CONF_WINDOWS */
+ clear_page();
+#endif /* CTK_CONF_WINDOWS */
} else if(w == (struct ctk_widget *)&wgetyesbutton) {
+#if CTK_CONF_WINDOWS
ctk_dialog_close();
+#else /* CTK_CONF_WINDOWS */
+ clear_page();
+#endif /* CTK_CONF_WINDOWS */
+#if WWW_CONF_WITH_WGET
quit();
argptr = arg_alloc((char)WWW_CONF_MAX_URLLEN);
if(argptr != NULL) {
strncpy(argptr, url, WWW_CONF_MAX_URLLEN);
}
program_handler_load("wget.prg", argptr);
+#else /* WWW_CONF_WITH_WGET */
+ petsciiconv_topetscii(url, sizeof(url));
+ /* Clear screen */
+ ctk_restore();
+ WWW_CONF_WGET_EXEC(url);
+ redraw_window();
+ show_statustext("Cannot exec wget");
#endif /* WWW_CONF_WITH_WGET */
+#endif /* WWW_CONF_WITH_WGET || WWW_CONF_WGET_EXEC */
#if WWW_CONF_FORMS
} else {
/* Assume form widget. */
@@ -666,11 +694,22 @@ webclient_datahandler(char *data, uint16_t len)
htmlparser_parse(data, len);
redraw_window();
} else {
- show_statustext("Cannot display web page");
uip_abort();
-#if WWW_CONF_WITH_WGET
+#if WWW_CONF_WITH_WGET || defined(WWW_CONF_WGET_EXEC)
+#if CTK_CONF_WINDOWS
ctk_dialog_open(&wgetdialog);
-#endif /* WWW_CONF_WITH_WGET */
+#else /* CTK_CONF_WINDOWS */
+ strcpy(webpage + WWW_CONF_WEBPAGE_WIDTH * 5,
+ (80 - WWW_CONF_WEBPAGE_WIDTH) / 2 +
+ " This web page cannot be displayed.");
+ strcpy(webpage + WWW_CONF_WEBPAGE_WIDTH * 6,
+ (80 - WWW_CONF_WEBPAGE_WIDTH) / 2 +
+ " Would you like to download instead?");
+ CTK_WIDGET_ADD(&mainwindow, &wgetnobutton);
+ CTK_WIDGET_ADD(&mainwindow, &wgetyesbutton);
+ redraw_window();
+#endif /* CTK_CONF_WINDOWS */
+#endif /* WWW_CONF_WITH_WGET || WWW_CONF_WGET_EXEC */
}
} else {
/* Clear remaining parts of page. */
diff --git a/platform/c64/contiki-conf.h b/platform/c64/contiki-conf.h
index 2fddafdc1..0e5581aae 100644
--- a/platform/c64/contiki-conf.h
+++ b/platform/c64/contiki-conf.h
@@ -74,5 +74,6 @@
#define WWW_CONF_MAX_FORMACTIONLEN 20
#define WWW_CONF_MAX_INPUTNAMELEN 20
#define WWW_CONF_MAX_INPUTVALUELEN 20
+#define WWW_CONF_WGET_EXEC(url) exec("wget", url)
#endif /* CONTIKI_CONF_H_ */
diff --git a/platform/win32/contiki-conf.h b/platform/win32/contiki-conf.h
index 3a545f81e..1cc8b5a43 100644
--- a/platform/win32/contiki-conf.h
+++ b/platform/win32/contiki-conf.h
@@ -183,5 +183,7 @@ typedef unsigned short uip_stats_t;
#define WWW_CONF_WEBPAGE_WIDTH 76
#define WWW_CONF_WEBPAGE_HEIGHT 30
#endif /* PLATFORM_BUILD */
+#define WWW_CONF_WGET_EXEC(url) execlp("wget.win32", "wget.win32", \
+ "192.168.0.2", url, (char *)NULL)
#endif /* CONTIKI_CONF_H_ */