forked from KolibriOS/kolibrios
Aelia 0.36: port Download manager from WebView, fix two issues in it
git-svn-id: svn://kolibrios.org@6366 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
287dc2ef20
commit
e33b239aec
@ -15,6 +15,7 @@
|
|||||||
#include "../lib/patterns/simple_open_dialog.h"
|
#include "../lib/patterns/simple_open_dialog.h"
|
||||||
#include "../lib/patterns/history.h"
|
#include "../lib/patterns/history.h"
|
||||||
#include "../lib/patterns/http_downloader.h"
|
#include "../lib/patterns/http_downloader.h"
|
||||||
|
#include "../browser/download_manager.h"
|
||||||
|
|
||||||
char default_dir[] = "/rd/1";
|
char default_dir[] = "/rd/1";
|
||||||
od_filter filter2 = {0,0};
|
od_filter filter2 = {0,0};
|
||||||
@ -68,7 +69,7 @@ dword CursorFile = FROM "pointer.cur";
|
|||||||
#include "prepare_page.h"
|
#include "prepare_page.h"
|
||||||
//#include "special_symbols.h"
|
//#include "special_symbols.h"
|
||||||
|
|
||||||
#define SANDWICH_MENU "Refresh page\nEdit page\nHistory\nAbout"
|
#define SANDWICH_MENU "Refresh page\nEdit page\nHistory\nDownloader\nAbout"
|
||||||
|
|
||||||
void InitDlls()
|
void InitDlls()
|
||||||
{
|
{
|
||||||
@ -117,7 +118,8 @@ void main()
|
|||||||
if (menu.list.cur_y==0) EventPageRefresh();
|
if (menu.list.cur_y==0) EventPageRefresh();
|
||||||
if (menu.list.cur_y==1) EventRunEdit();
|
if (menu.list.cur_y==1) EventRunEdit();
|
||||||
if (menu.list.cur_y==2) EventShowHistory();
|
if (menu.list.cur_y==2) EventShowHistory();
|
||||||
if (menu.list.cur_y==3) EventShowInfo();
|
if (menu.list.cur_y==3) EventShowDownloader();
|
||||||
|
if (menu.list.cur_y==4) EventShowInfo();
|
||||||
menu.list.cur_y = 0;
|
menu.list.cur_y = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -391,6 +393,14 @@ void EventPageRefresh()
|
|||||||
EventOpenAddress(history.current());
|
EventOpenAddress(history.current());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EventShowDownloader()
|
||||||
|
{
|
||||||
|
if (!downloader_opened) {
|
||||||
|
downloader_edit = NULL;
|
||||||
|
CreateThread(#Downloader,#downloader_stak+4092);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------- */
|
/* ------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
@ -565,6 +565,4 @@ void ClickLink()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char downloader_stak[4096];
|
|
||||||
stop:
|
stop:
|
@ -3,7 +3,7 @@
|
|||||||
#define START_DOWNLOADING "<22> ç âì § ª çªã"
|
#define START_DOWNLOADING "<22> ç âì § ª çªã"
|
||||||
#define STOP_DOWNLOADING "Žáâ ®¢¨âì"
|
#define STOP_DOWNLOADING "Žáâ ®¢¨âì"
|
||||||
#define SHOW_IN_FOLDER "<22>®ª § âì ¢ ¯ ¯ª¥"
|
#define SHOW_IN_FOLDER "<22>®ª § âì ¢ ¯ ¯ª¥"
|
||||||
#define OPEN_FILE "<22>âªàëâì ä ©«"
|
#define OPEN_FILE_TEXT "<22>âªàëâì ä ©«"
|
||||||
#define FILE_SAVED_AS "'Œ¥¥¤¦¥à § £à㧮ª\n” ©« á®åà ¥ ª ª "
|
#define FILE_SAVED_AS "'Œ¥¥¤¦¥à § £à㧮ª\n” ©« á®åà ¥ ª ª "
|
||||||
#define KB_RECEIVED " ¯®«ã祮"
|
#define KB_RECEIVED " ¯®«ã祮"
|
||||||
#else
|
#else
|
||||||
@ -11,11 +11,11 @@
|
|||||||
#define START_DOWNLOADING "Start downloading"
|
#define START_DOWNLOADING "Start downloading"
|
||||||
#define STOP_DOWNLOADING "Stop downloading"
|
#define STOP_DOWNLOADING "Stop downloading"
|
||||||
#define SHOW_IN_FOLDER "Show in folder"
|
#define SHOW_IN_FOLDER "Show in folder"
|
||||||
#define OPEN_FILE "Open file"
|
#define OPEN_FILE_TEXT "Open file"
|
||||||
#define FILE_SAVED_AS "'Download manager\nFile saved as "
|
#define FILE_SAVED_AS "'Download manager\nFile saved as "
|
||||||
#define KB_RECEIVED " received"
|
#define KB_RECEIVED " received"
|
||||||
#endif
|
#endif
|
||||||
char save_to[4096] = "/tmp0/1/Downloads/";
|
char save_to[4096] = "/tmp0/1/Downloads";
|
||||||
|
|
||||||
proc_info DL_Form;
|
proc_info DL_Form;
|
||||||
char downloader_edit[10000];
|
char downloader_edit[10000];
|
||||||
@ -25,6 +25,7 @@ edit_box ed = {250,20,20,0xffffff,0x94AECE,0xffffff,0xffffff,0,sizeof(downloader
|
|||||||
progress_bar pb = {0, 170, 51, 225, 12, 0, 0, 100, 0xFFFfff, 0x74DA00, 0x9F9F9F};
|
progress_bar pb = {0, 170, 51, 225, 12, 0, 0, 100, 0xFFFfff, 0x74DA00, 0x9F9F9F};
|
||||||
|
|
||||||
byte downloader_opened;
|
byte downloader_opened;
|
||||||
|
char downloader_stak[4096];
|
||||||
|
|
||||||
|
|
||||||
void Downloader()
|
void Downloader()
|
||||||
@ -80,9 +81,11 @@ void Downloader()
|
|||||||
}
|
}
|
||||||
if (downloader.state == STATE_COMPLETED)
|
if (downloader.state == STATE_COMPLETED)
|
||||||
{
|
{
|
||||||
|
if (!dir_exists(#save_to)) CreateDir(#save_to);
|
||||||
strcpy(#filepath, #save_to);
|
strcpy(#filepath, #save_to);
|
||||||
strcat(#filepath, #save_to+strrchr(#save_to, '/'));
|
chrcat(#filepath, '/');
|
||||||
if (WriteFile(downloader.bufsize, downloader.bufpointer, #filepath)==0)
|
strcat(#filepath, #downloader_edit+strrchr(#downloader_edit, '/'));
|
||||||
|
if (WriteFile(downloader.data_downloaded_size, downloader.bufpointer, #filepath)==0)
|
||||||
sprintf(#notify_message, "%s%s%s",FILE_SAVED_AS,#filepath,"' -Dt");
|
sprintf(#notify_message, "%s%s%s",FILE_SAVED_AS,#filepath,"' -Dt");
|
||||||
else
|
else
|
||||||
sprintf(#notify_message, "%s%s%s","'Download manager\nError! Can\96t save file as ",#filepath,"' -Et");
|
sprintf(#notify_message, "%s%s%s","'Download manager\nError! Can\96t save file as ",#filepath,"' -Et");
|
||||||
@ -122,7 +125,7 @@ void DL_Draw_Window()
|
|||||||
if (downloader.state == STATE_COMPLETED)
|
if (downloader.state == STATE_COMPLETED)
|
||||||
{
|
{
|
||||||
DrawCaptButton(cleft+140, 50, 110, 27, 305, system.color.work_button, system.color.work_button_text, SHOW_IN_FOLDER);
|
DrawCaptButton(cleft+140, 50, 110, 27, 305, system.color.work_button, system.color.work_button_text, SHOW_IN_FOLDER);
|
||||||
DrawCaptButton(cleft+260, 50, 120, 27, 306, system.color.work_button, system.color.work_button_text, OPEN_FILE);
|
DrawCaptButton(cleft+260, 50, 120, 27, 306, system.color.work_button, system.color.work_button_text, OPEN_FILE_TEXT);
|
||||||
}
|
}
|
||||||
WriteText(cleft, ed.top + 4, 0x80, system.color.work_text, "URL:");
|
WriteText(cleft, ed.top + 4, 0x80, system.color.work_text, "URL:");
|
||||||
ed.left = strlen("URL:")*6 + 10 + cleft;
|
ed.left = strlen("URL:")*6 + 10 + cleft;
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
|
|
||||||
enum {
|
|
||||||
STATE_NOT_STARTED,
|
|
||||||
STATE_IN_PROGRESS,
|
|
||||||
STATE_COMPLETED
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DOWNLOADER {
|
|
||||||
int data_downloaded_size, data_full_size;
|
|
||||||
dword bufpointer, bufsize;
|
|
||||||
byte state;
|
|
||||||
dword http_transfer;
|
|
||||||
dword Start();
|
|
||||||
void Stop();
|
|
||||||
void Completed();
|
|
||||||
int MonitorProgress();
|
|
||||||
} downloader;
|
|
||||||
|
|
||||||
dword DOWNLOADER::Start(dword _url)
|
|
||||||
{
|
|
||||||
state = STATE_IN_PROGRESS;
|
|
||||||
http_get stdcall (_url, 0, 0, #accept_language);
|
|
||||||
http_transfer = EAX;
|
|
||||||
return http_transfer;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DOWNLOADER::Stop()
|
|
||||||
{
|
|
||||||
state = STATE_NOT_STARTED;
|
|
||||||
if (http_transfer!=0)
|
|
||||||
{
|
|
||||||
EAX = http_transfer;
|
|
||||||
EAX = EAX.http_msg.content_ptr; // get pointer to data
|
|
||||||
$push EAX // save it on the stack
|
|
||||||
http_free stdcall (http_transfer); // abort connection
|
|
||||||
$pop EAX
|
|
||||||
mem_Free(EAX); // free data
|
|
||||||
http_transfer=0;
|
|
||||||
bufsize = 0;
|
|
||||||
bufpointer = mem_Free(bufpointer);
|
|
||||||
}
|
|
||||||
data_downloaded_size = data_full_size = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DOWNLOADER::Completed()
|
|
||||||
{
|
|
||||||
state = STATE_COMPLETED;
|
|
||||||
ESI = http_transfer;
|
|
||||||
bufpointer = ESI.http_msg.content_ptr;
|
|
||||||
bufsize = ESI.http_msg.content_received;
|
|
||||||
http_free stdcall (http_transfer);
|
|
||||||
http_transfer=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int DOWNLOADER::MonitorProgress()
|
|
||||||
{
|
|
||||||
dword receive_result;
|
|
||||||
if (http_transfer <= 0) return false;
|
|
||||||
http_receive stdcall (http_transfer);
|
|
||||||
receive_result = EAX;
|
|
||||||
EDI = http_transfer;
|
|
||||||
data_full_size = EDI.http_msg.content_length;
|
|
||||||
data_downloaded_size = EDI.http_msg.content_received;
|
|
||||||
if (receive_result == 0) Completed();
|
|
||||||
return true;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user