1 ////////////////////////////////////////////////////////
5 // Stuff related to downloading
8 // Maarten Bosma, 09.01.2004
9 // maarten.paul@bosma.de
11 ////////////////////////////////////////////////////////
13 #include "package.hpp"
16 #include <wine/urlmon.h>
18 HRESULT WINAPI
URLDownloadToFileA(
23 LPBINDSTATUSCALLBACK lpfnCB
26 int FindCount (string What
, string Where
, int start
= 0, int end
= -1);
30 char* PML_Download (pTree tree
, const char* url
, const char* server
= "tree", const char* filename
= NULL
)
33 static char downl
[MAX_PATH
]; // the full url
34 static char path
[MAX_PATH
]; // the full resulting Path
36 // It goes to the temp folder when no other path is entered (or even compleatly no filename)
37 // If server == "tree" it will be downloaded from the server speficied in option.xml
38 // File:// links are possible too
42 GetTempPathA (200, path
);
44 else if(!strstr(filename
, "\\"))
45 GetTempPathA (200, path
);
47 // create the local file name
50 strcat(path
, filename
);
54 GetTempFileNameA (path
, "pml", 0, path
);
60 else if(!strcmp(server
, "tree"))
63 for (i
=0; i
<tree
->sources
.size(); i
++)
65 ret
= PML_Download(tree
, url
, tree
->sources
[i
], filename
);
73 strcpy(downl
, server
);
77 // is this a file link ?
78 if (strstr(downl
, "file://") || strstr(downl
, "File://"))
80 if(downl[strlen(downl)] == '\')
81 downl[strlen(downl)] = '\0';
88 CopyFileA(filename
, &downl
[7], FALSE
);
89 return (char*)filename
;
94 if(URLDownloadToFileA (NULL
, downl
, path
, 0, NULL
) != S_OK
)
96 Log("! ERROR: Unable to download ");
105 // Download and prozess a xml file
106 int PML_XmlDownload (pTree tree
, const char* url
, void* usrdata
,
107 XML_StartElementHandler start
, XML_EndElementHandler end
, XML_CharacterDataHandler text
)
114 Log("* prozess the xml file: ");
118 if(strstr(url
, "file://"))
119 filename
= PML_Download(tree
, url
, NULL
);
122 filename
= PML_Download(tree
, url
);
127 Log("! ERROR: Could not download the xml file");
132 FILE* file
= fopen(filename
, "r");
135 MessageBoxA(0,filename
,0,0);
136 Log("! ERROR: Could not open the xml file \"");
141 // parse the xml file
142 XML_Parser parser
= XML_ParserCreate(NULL
);
143 XML_SetUserData (parser
, usrdata
);
144 XML_SetElementHandler(parser
, start
, end
);
145 XML_SetCharacterDataHandler(parser
, text
);
149 size_t len
= fread (buffer
, 1, sizeof(buffer
), file
);
150 done
= len
< sizeof(buffer
);
153 if(!XML_Parse(parser
, buffer
, len
, done
))
155 Log("! ERROR: Could not parse the xml file");
160 XML_ParserFree(parser
);