summaryrefslogtreecommitdiff
path: root/amiga/download.c
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2011-03-26 10:33:58 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2011-03-26 10:33:58 +0000
commit14d6826685a69d2983cb8df3faaf14b563a0ec6b (patch)
treeb016aa7aef90693974331509064020787da6bd57 /amiga/download.c
parent2c55af59de7070fa581abba528e23c2668a35c23 (diff)
downloadnetsurf-14d6826685a69d2983cb8df3faaf14b563a0ec6b.tar.gz
netsurf-14d6826685a69d2983cb8df3faaf14b563a0ec6b.tar.bz2
Implement ask overwrite
svn path=/trunk/netsurf/; revision=12135
Diffstat (limited to 'amiga/download.c')
-rw-r--r--amiga/download.c101
1 files changed, 83 insertions, 18 deletions
diff --git a/amiga/download.c b/amiga/download.c
index 469490628..4cf9834f7 100644
--- a/amiga/download.c
+++ b/amiga/download.c
@@ -38,6 +38,7 @@
#include "amiga/bitmap.h"
#include "amiga/iff_dr2d.h"
#include "amiga/theme.h"
+#include "amiga/utf8.h"
#include "desktop/download.h"
#include "desktop/selection.h"
@@ -60,6 +61,20 @@
#include <reaction/reaction_macros.h>
+struct gui_download_window {
+ struct nsObject *node;
+ struct Window *win;
+ Object *objects[GID_LAST];
+ BPTR fh;
+ uint32 size;
+ uint32 downloaded;
+ struct dlnode *dln;
+ struct browser_window *bw;
+ struct download_context *ctx;
+ char *url;
+ char fname[1024];
+};
+
struct gui_download_window *gui_download_window_create(download_context *ctx,
struct gui_window *gui)
{
@@ -87,8 +102,16 @@ struct gui_download_window *gui_download_window_create(download_context *ctx,
{
strlcpy(&dw->fname,savereq->fr_Drawer,1024);
AddPart((STRPTR)&dw->fname,savereq->fr_File,1024);
+ if(!ami_download_check_overwrite(dw->fname, gui->shared->win))
+ {
+ FreeVec(dw);
+ return NULL;
+ }
+ }
+ else
+ {
+
}
- else return NULL;
}
dw->size = total_size;
@@ -302,27 +325,69 @@ gui_window_save_link(struct gui_window *g, const char *url, const char *title)
strlcpy(&fname,savereq->fr_Drawer,1024);
AddPart(fname,savereq->fr_File,1024);
ami_update_pointer(g->shared->win,GUI_POINTER_WAIT);
- if(fh = FOpen(fname,MODE_NEWFILE,0))
+
+ if(ami_download_check_overwrite(fname, g->shared->win))
{
- openurlstring = ASPrintf("openurl \"%s\"\n",url);
- FWrite(fh,openurlstring,1,strlen(openurlstring));
- FClose(fh);
- FreeVec(openurlstring);
- SetComment(fname,url);
+ if(fh = FOpen(fname,MODE_NEWFILE,0))
+ {
+ /* TODO: Should be URLOpen on OS4.1 */
+ openurlstring = ASPrintf("openurl \"%s\"\n",url);
+ FWrite(fh,openurlstring,1,strlen(openurlstring));
+ FClose(fh);
+ FreeVec(openurlstring);
+ SetComment(fname,url);
+
+ dobj = GetIconTags(NULL,ICONGETA_GetDefaultName,"url",
+ ICONGETA_GetDefaultType,WBPROJECT,
+ TAG_DONE);
+
+ dobj->do_DefaultTool = "IconX";
+
+ PutIconTags(fname,dobj,
+ ICONPUTA_NotifyWorkbench,TRUE,
+ TAG_DONE);
+
+ FreeDiskObject(dobj);
+ }
+ FreeVec(linkname);
+ }
+ ami_update_pointer(g->shared->win,GUI_POINTER_DEFAULT);
+ }
+}
- dobj = GetIconTags(NULL,ICONGETA_GetDefaultName,"url",
- ICONGETA_GetDefaultType,WBPROJECT,
- TAG_DONE);
+BOOL ami_download_check_overwrite(const char *file, struct Window *win)
+{
+ /* Return TRUE if file can be (over-)written */
+ int res = 0;
+ BPTR lock = 0;
- dobj->do_DefaultTool = "IconX";
+ if(option_ask_overwrite == false) return TRUE;
- PutIconTags(fname,dobj,
- ICONPUTA_NotifyWorkbench,TRUE,
- TAG_DONE);
+ lock = Lock(file, ACCESS_READ);
- FreeDiskObject(dobj);
- }
- FreeVec(linkname);
- ami_update_pointer(g->shared->win,GUI_POINTER_DEFAULT);
+ if(lock)
+ {
+ UnLock(lock);
+
+ char *utf8text = ami_utf8_easy(messages_get("OverwriteFile"));
+ char *utf8gadget1 = ami_utf8_easy(messages_get("DontReplace"));
+ char *utf8gadget2 = ami_utf8_easy(messages_get("Replace"));
+ char *utf8gadgets = ASPrintf("%s|%s", utf8gadget1, utf8gadget2);
+ free(utf8gadget1);
+ free(utf8gadget2);
+
+ res = TimedDosRequesterTags(TDR_ImageType, TDRIMAGE_WARNING,
+ TDR_TitleString, messages_get("NetSurf"),
+ TDR_FormatString, utf8text,
+ TDR_GadgetString, utf8gadgets,
+ TDR_Window, win,
+ TAG_DONE);
+
+ if(utf8text) free(utf8text);
+ if(utf8gadgets) FreeVec(utf8gadgets);
}
+ else return TRUE;
+
+ if(res == 0) return TRUE;
+ else return FALSE;
}