diff options
author | Ole Loots <ole@monochrom.net> | 2012-03-21 21:12:06 +0000 |
---|---|---|
committer | Ole Loots <ole@monochrom.net> | 2012-03-21 21:12:06 +0000 |
commit | 38dd9128a1f8e320ffeb1930bf1f7df619547da7 (patch) | |
tree | 038f65911a049ef81f522980e9645070a42b8cf3 | |
parent | 705d136963564f281c1260ec6c7e7742541e2fe4 (diff) | |
download | netsurf-38dd9128a1f8e320ffeb1930bf1f7df619547da7.tar.gz netsurf-38dd9128a1f8e320ffeb1930bf1f7df619547da7.tar.bz2 |
Let user select download path and filename, removed unused struct members.
svn path=/trunk/netsurf/; revision=13544
-rwxr-xr-x | atari/download.c | 107 | ||||
-rwxr-xr-x | atari/download.h | 2 |
2 files changed, 56 insertions, 53 deletions
diff --git a/atari/download.c b/atari/download.c index b290774f9..2af2d707e 100755 --- a/atari/download.c +++ b/atari/download.c @@ -112,12 +112,6 @@ static void gui_download_window_destroy( struct gui_download_window * gdw ) if( gdw->destination ) {
free( gdw->destination );
}
- if( gdw->domain ) {
- free( gdw->domain );
- }
- if( gdw->url ) {
- free( gdw->url );
- }
if( gdw->fd != NULL ){
fclose(gdw->fd);
gdw->fd = NULL;
@@ -127,6 +121,28 @@ static void gui_download_window_destroy( struct gui_download_window * gdw ) }
free( gdw );
+} + +static char * select_filepath( const char * path, const char * filename ) +{ + char tmp[PATH_MAX]; + char res_path[PATH_MAX]; + char res_file[PATH_MAX]; + char * ret = NULL; + + + strncpy( res_path, path, PATH_MAX ); + strncpy( res_file, filename, PATH_MAX ); + res_file[PATH_MAX-1] = 0; + res_path[PATH_MAX-1] = 0; + if( mt_FselInput( &app, res_path, res_file, (char*)"*", + (char*)messages_get("SaveAsNS"), res_path, NULL ) ) { + assert( (strlen( res_path ) + strlen( res_file ) + 2) < PATH_MAX ); + sprintf(tmp, "%s%s", res_path, res_file ); + ret = malloc( strlen(tmp)+1 ); + strcpy( ret, tmp ); + } + return( ret ); }
struct gui_download_window *gui_download_window_create(download_context *ctx,
@@ -134,22 +150,42 @@ struct gui_download_window *gui_download_window_create(download_context *ctx, {
char *filename;
- char *destination;
- const char * path = option_downloads_path;
+ char *destination; + char gdos_path[PATH_MAX];
const char * url;
- struct gui_download_window * gdw;
-
+ struct gui_download_window * gdw; + int dlgres = 0; + OBJECT * tree = get_tree(DOWNLOAD); + /* TODO: Implement real form and use messages file strings! */
- if( form_alert(2, "[2][Accept Download?][Yes|No]") == 2){
- return( NULL );
- }
- OBJECT * tree = get_tree(DOWNLOAD);
if( tree == NULL )
return( NULL );
- gdw = calloc( 1, sizeof(struct gui_download_window) );
- if( gdw == NULL )
+ + filename = download_context_get_filename( ctx ); + dlgres = form_alert(2, "[2][Accept download?][Yes|Save as...|No]");
+ if( dlgres == 3){
return( NULL );
+ } + else if( dlgres == 2 ){ + gemdos_realpath(option_downloads_path, gdos_path); + char * tmp = select_filepath( gdos_path, filename ); + if( tmp == NULL ) + return( NULL ); + destination = tmp; + } else { + gemdos_realpath(option_downloads_path, gdos_path); + destination = malloc( strlen(gdos_path)+1 + + strlen(filename)+1 ); + sprintf( destination, "%s/%s", gdos_path, filename ); + } +
+ gdw = calloc( 1, sizeof(struct gui_download_window) );
+ if( gdw == NULL ){ + free( destination );
+ return( NULL ); + } +
gdw->ctx = ctx;
gdw->abort = false;
gdw->start = clock() / CLOCKS_PER_SEC;
@@ -158,48 +194,17 @@ struct gui_download_window *gui_download_window_create(download_context *ctx, gdw->parent = parent;
gdw->fbufsize = MAX(BUFSIZ, 48000);
gdw->size_downloaded = 0;
- gdw->size_total = download_context_get_total_length(ctx);
+ gdw->size_total = download_context_get_total_length(ctx); + gdw->destination = destination;
url = download_context_get_url(ctx);
- gdw->url = calloc(1, strlen(url) + 1 );
- if( gdw->url == NULL ){
- gui_download_window_destroy(gdw);
- return( NULL );
- }
-
- if (url_nice(url, &filename, false) != URL_FUNC_OK) {
- filename = strdup("unknown");
- if (filename == NULL) {
- gui_download_window_destroy(gdw);
- return NULL;
- }
- }
-
- if (url_host(url, &gdw->domain) != URL_FUNC_OK) {
- gdw->domain = strdup("unknown");
- if (gdw->domain == NULL) {
- free(filename);
- gui_download_window_destroy(gdw);
- return NULL;
- }
- }
-
- char * tpath = alloca(strlen(filename) + strlen(path) + 2 );
- char * tpath2 = alloca(PATH_MAX);
- strcpy( tpath, path );
- if( path[strlen(path)-1] != '/' && path[strlen(path)-1] != '\\' ) {
- strcat( tpath, "/");
- }
- strcat( tpath, filename );
- gemdos_realpath(tpath, tpath2);
- gdw->destination = malloc(strlen(tpath2) + 2);
- strcpy(gdw->destination, tpath2);
gdw->fd = fopen(gdw->destination, "wb" );
if( gdw->fd == NULL ){
free( filename );
gui_download_window_destroy(gdw);
return( NULL );
- }
+ } +
gdw->fbuf = malloc( gdw->fbufsize+1 );
if( gdw->fbuf != NULL ){
setvbuf( gdw->fd, gdw->fbuf, _IOFBF, gdw->fbufsize );
diff --git a/atari/download.h b/atari/download.h index c3fa34af3..ee5783e71 100755 --- a/atari/download.h +++ b/atari/download.h @@ -41,8 +41,6 @@ struct gui_download_window { WINDOW * form;
nsatari_download_status status;
char *destination;
- char *domain;
- char * url;
FILE * fd;
char lbl_done[MAX_SLEN_LBL_DONE];
char lbl_percent[MAX_SLEN_LBL_PERCENT];
|