Author: MarkieB
Date: Mon Aug 31 06:20:58 2009
New Revision: 9520
URL:
http://source.netsurf-browser.org?rev=9520&view=rev
Log:
add time estimate
Modified:
branches/MarkieB/windows/!NetSurf/Resources/de/Messages
branches/MarkieB/windows/!NetSurf/Resources/en/Messages
branches/MarkieB/windows/!NetSurf/Resources/fr/Messages
branches/MarkieB/windows/!NetSurf/Resources/it/Messages
branches/MarkieB/windows/!NetSurf/Resources/nl/Messages
branches/MarkieB/windows/windows/download.c
Modified: branches/MarkieB/windows/!NetSurf/Resources/de/Messages
URL:
http://source.netsurf-browser.org/branches/MarkieB/windows/%21NetSurf/Res...
==============================================================================
--- branches/MarkieB/windows/!NetSurf/Resources/de/Messages (original)
+++ branches/MarkieB/windows/!NetSurf/Resources/de/Messages Mon Aug 31 06:20:58 2009
@@ -384,6 +384,7 @@
UnknownHost:an unknown host
UnknownFile:
UnknownSize:unknown
+FileOpenWriteError:the file %s could not be opened for writing
# Amiga download window tokens
#
Modified: branches/MarkieB/windows/!NetSurf/Resources/en/Messages
URL:
http://source.netsurf-browser.org/branches/MarkieB/windows/%21NetSurf/Res...
==============================================================================
--- branches/MarkieB/windows/!NetSurf/Resources/en/Messages (original)
+++ branches/MarkieB/windows/!NetSurf/Resources/en/Messages Mon Aug 31 06:20:58 2009
@@ -384,6 +384,7 @@
UnknownFile:
UnknownSize:unknown
UnknownHost:an unknown host
+FileOpenWriteError:the file %s could not be opened for writing
# Amiga download window tokens
#
Modified: branches/MarkieB/windows/!NetSurf/Resources/fr/Messages
URL:
http://source.netsurf-browser.org/branches/MarkieB/windows/%21NetSurf/Res...
==============================================================================
--- branches/MarkieB/windows/!NetSurf/Resources/fr/Messages (original)
+++ branches/MarkieB/windows/!NetSurf/Resources/fr/Messages Mon Aug 31 06:20:58 2009
@@ -384,6 +384,7 @@
UnknownHost:an unknown host
UnknownFile:
UnknownSize:inconnu
+FileOpenWriteError:le fichier %s ne pouvait pas être ouvert pour écriture
# Amiga download window tokens
#
Modified: branches/MarkieB/windows/!NetSurf/Resources/it/Messages
URL:
http://source.netsurf-browser.org/branches/MarkieB/windows/%21NetSurf/Res...
==============================================================================
--- branches/MarkieB/windows/!NetSurf/Resources/it/Messages (original)
+++ branches/MarkieB/windows/!NetSurf/Resources/it/Messages Mon Aug 31 06:20:58 2009
@@ -386,6 +386,7 @@
UnknownHost:un Host sconosciuto
UnknownFile:
UnknownSize:sconosciuto
+FileOpenWriteError:the file %s could not be opened for writing
# Amiga download window tokens
#
Modified: branches/MarkieB/windows/!NetSurf/Resources/nl/Messages
URL:
http://source.netsurf-browser.org/branches/MarkieB/windows/%21NetSurf/Res...
==============================================================================
--- branches/MarkieB/windows/!NetSurf/Resources/nl/Messages (original)
+++ branches/MarkieB/windows/!NetSurf/Resources/nl/Messages Mon Aug 31 06:20:58 2009
@@ -384,6 +384,7 @@
UnknownHost:an unknown host
UnknownFile:
UnknownSize:unknown
+FileOpenWriteError:the file %s could not be opened for writing
# Amiga download window tokens
#
Modified: branches/MarkieB/windows/windows/download.c
URL:
http://source.netsurf-browser.org/branches/MarkieB/windows/windows/downlo...
==============================================================================
--- branches/MarkieB/windows/windows/download.c (original)
+++ branches/MarkieB/windows/windows/download.c Mon Aug 31 06:20:58 2009
@@ -54,6 +54,10 @@
downloading = true;
struct gui_download_window *w =
malloc(sizeof(struct gui_download_window));
+ if (w == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ return NULL;
+ }
char *domain, *filename, *destination;
bool unknown_size = (total_size == 0);
const char *size = (unknown_size) ?
@@ -62,10 +66,27 @@
if (url_nice(url, &filename, false) != URL_FUNC_OK)
filename = strdup(messages_get("UnknownFile"));
+ if (filename == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ free(w);
+ return NULL;
+ }
if (url_host(url, &domain) != URL_FUNC_OK)
domain = strdup(messages_get("UnknownHost"));
-
+ if (domain == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ free(filename);
+ free(w);
+ return NULL;
+ }
destination = malloc(PATH_MAX);
+ if (destination == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ free(domain);
+ free(filename);
+ free(w);
+ return NULL;
+ }
SHGetFolderPath(NULL, CSIDL_DESKTOP, NULL, SHGFP_TYPE_CURRENT,
destination);
if (strlen(destination) < PATH_MAX - 2)
@@ -77,22 +98,37 @@
w->fetch = fetch;
w->title = filename;
w->domain = domain;
- w->time_left = strdup("");
w->size = total_size;
w->total_size = strdup(size);
+ if (w->total_size == NULL) {
+ warn_user(messages_get("NoMemory"), 0);
+ free(destination);
+ free(domain);
+ free(filename);
+ free(w);
+ return NULL;
+ }
w->downloaded = 0;
w->speed = 0;
gettimeofday(&(w->start_time), NULL);
w->time_remaining = -1;
+ w->time_left = NULL;
w->status = DOWNLOAD_NONE;
w->filename = destination;
w->progress = 0;
w->error = 0;
w->window = gui;
w->file = fopen(destination, "wb");
- if (w->file == NULL)
- warn_user("couldn't open destination file for writing", 0);
-
+ if (w->file == NULL) {
+ warn_user(messages_get("FileOpenWriteError"), destination);
+ free(destination);
+ free(domain);
+ free(filename);
+ free(w->total_size);
+ free(w->time_left);
+ free(w);
+ return NULL;
+ }
download1 = w;
nsws_download_window_up(w);
@@ -148,11 +184,30 @@
}
HWND sub = GetDlgItem(w->hwnd, NSWS_ID_DOWNLOAD_LABEL);
char *size = human_friendly_bytesize(w->downloaded);
+ int i = 0, temp = w->time_remaining;
+ if (temp == -1) {
+ w->time_left = strdup("unknown");
+ i = SLEN("unknown");
+ } else {
+ do {
+ temp = temp / 10;
+ i++;
+ } while (temp > 2);
+ w->time_left = malloc(i + SLEN(" s") + 1);
+ if (w->time_left != NULL)
+ sprintf(w->time_left, "%d s", w->time_remaining);
+ }
char label[strlen(w->title) + strlen(size) + strlen(w->total_size) +
+ strlen(w->domain) + strlen(w->filename) +
- SLEN("download from to \n[\t/\t]") + 1];
- sprintf(label, "download %s from %s to %s\n[%s\t/\t%s]", w->title,
- w->domain, w->filename, size, w->total_size);
+ SLEN("download from to \n[\t/\t]\n estimate of time"
+ " remaining ") + i + 1];
+ sprintf(label, "download %s from %s to %s\n[%s\t/\t%s]\n estimate of "
+ "time remaining %s", w->title, w->domain, w->filename,
+ size, w->total_size, w->time_left);
+ if (w->time_left != NULL) {
+ free(w->time_left);
+ w->time_left = NULL;
+ }
SendMessage(sub, WM_SETTEXT, (WPARAM)0, (LPARAM)label);
if (w->progress < 100)
schedule(50, nsws_download_update_label, p);
@@ -198,11 +253,16 @@
if ((w == NULL) || (w->file == NULL))
return;
size_t res;
+ struct timeval val;
res = fwrite((void *)data, 1, size, w->file);
if (res != size)
LOG(("file write error %d of %d", size - res, size));
- w->downloaded += size;
+ w->downloaded += res;
w->progress = (w->downloaded * 100) / w->size;
+ gettimeofday(&val, NULL);
+ w->time_remaining = (w->progress == 0) ? -1 :
+ (val.tv_sec - w->start_time.tv_sec) *
+ (100 - w->progress) / w->progress;
}
void gui_download_window_error(struct gui_download_window *w,