1,4 → 1,4 |
#define MEMSIZE 1024*460 |
#define MEMSIZE 1024*50 |
|
#include "../lib/io.h" |
#include "../lib/gui.h" |
17,147 → 17,183 |
#include "lang.h--" |
#endif |
|
bool install_complete = false; |
_http http; |
proc_info Form; |
bool install_complete = false; |
sensor progress; |
|
#define WINW 460 |
#define WINH 380 |
|
//#define LANG_RUS 1 |
|
#ifdef LANG_RUS |
#define WINH 345 |
#define T_WINDOW_TITLE "« © ®¡®¢«¥¨¥ KolibriOS" |
#define T_TITLE_H1 "
" |
#define T_INTRO " ®¥ ¯à¨«®¦¥¨¥ áª ç ¥â ¯®á«¥¤îî ¢¥àá¨î KolibriOS ¨ à ᯠªã¥â ¥¥ RAM-¤¨áª. ਠí⮬ ï¤à® ¥ ¡ã¤¥â ¯¥à¥§ ¯ã饮, ¤«ï í⮣® ¥®¡å®¤¨¬® á®åà ¨âì ®¡à § ¨ ¯¥à¥§ £à㧨âáï. ®¦ «ã©áâ , § ªà®©â¥ ¢á¥ ®âªàëâë¥ ¯à¨«®¦¥¨ï ¯¥à¥¤ ç «®¬ ®¡®¢«¥¨ï. |
|
: ᥠ¨§¬¥ë¥ ä ©«ë RAM-¤¨áª¥ ¡ã¤ãâ ¯¥à¥§ ¯¨á ë!"; |
#define T_INSTALL "¡®¢¨âì" |
#define T_COMPLETE "¡®¢«¥¨¥ § ¢¥à襮" |
#define T_EXIT "ë室" |
#define IMG_URL "http://builds.kolibrios.org/rus/data/data/kolibri.img" |
#define KS "®åà ¨âì áâனª¨" |
#define RA "¥à¥§ ¯ãáâ¨âì ¢á¥ ¯à®£à ¬¬ë" |
#else |
#define WINH 305 |
#define T_WINDOW_TITLE "KolibriOS Online Updater" |
#define T_TITLE_H1 "ONLINE UPDATE" |
#define T_INTRO "This app will download the latest KolibriOS dirsto and update your RAM-disk with it. Kernel won't be restarted. |
Please close all opened apps before start. |
|
ALERT: All chages on RAM-disk will be lost!"; |
Note that all changes on RAM-disk will be lost."; |
#define T_INSTALL "Update" |
#define T_COMPLETE "Update complete" |
#define T_EXIT "Exit" |
#define IMG_URL "http://builds.kolibrios.org/eng/data/data/kolibri.img" |
#define KS "Keep settings folder" |
#define RA "Restart all apps" |
#endif |
char accept_language[]="en"; //not used, necessary for http.get() |
void Operation_Draw_Progress(dword f) {} //not used, necessary for copyf() |
|
checkbox keep_settings = { KS, true }; |
checkbox restart_apps = { RA, true }; |
|
void main() |
{ |
//load_dll(libini, #lib_init,1); |
int btn; |
sensor progress; |
load_dll(libio, #libio_init,1); |
load_dll(libimg, #libimg_init,1); |
load_dll(libHTTP, #http_lib_init,1); |
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_STACK); |
loop() switch(WaitEventTimeout(300) & 0xFF) |
@SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_STACK); |
loop() switch(@WaitEventTimeout(300)) |
{ |
case evButton: |
if (GetButtonID() == 1) ExitProcess(); else EventInstall(); |
btn = @GetButtonID(); |
if (btn<=2) ExitProcess(); |
if (btn==9) goto _INSTALL; |
keep_settings.click(btn); |
restart_apps.click(btn); |
break; |
|
case evKey: |
GetKeys(); |
if (key_scancode == SCAN_CODE_ESC) ExitProcess(); |
if (key_scancode == SCAN_CODE_ENTER) { |
switch (@GetKeyScancode()) { |
case SCAN_CODE_ESC: ExitProcess(); |
case SCAN_CODE_ENTER: |
if (install_complete) ExitProcess(); |
else EventInstall(); |
else { |
_INSTALL: |
http.get(IMG_URL); |
goto _DRAW_WINDOW; |
} |
} |
break; |
|
case evReDraw: |
draw_window(); |
break; |
_DRAW_WINDOW: |
sc.get(); |
DefineAndDrawWindow(screen.width-WINW/2,screen.height-WINH/2, |
WINW+9,WINH+skin_height,0x34,sc.work,T_WINDOW_TITLE,0); |
WriteText(30, 20, 0x81, 0xEC008C, T_TITLE_H1); |
if (!install_complete) { |
DrawTextViewArea(30, 50, WINW-60, WINH-80, T_INTRO, -1, sc.work_text); |
progress.set_size(30, WINH-130, WINW-60, 20); |
if (http.transfer<=0) { |
DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 9, 0x0092D8, 0xFFFfff, T_INSTALL); |
keep_settings.draw(30, WINH - 210); |
restart_apps.draw(30, WINH - 185); |
} |
} else { |
DrawIcon32(WINW-32/2, 140, sc.work, 49); |
WriteTextCenter(0,185, WINW, sc.work_text, T_COMPLETE); |
DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 2, |
0x0092D8, 0xFFFfff, T_EXIT); |
} |
|
case evNetwork: |
if (http.transfer <= 0) break; |
http.receive(); |
if (http.content_length) { |
progress.draw_progress(http.content_length - http.content_received * progress.w / http.content_length); |
progress.draw_progress(http.content_length - http.content_received |
* progress.w / http.content_length); |
} |
if (http.receive_result == 0) EventDownloadComplete(); |
if (!http.receive_result) { |
CreateFile(http.content_received, |
http.content_pointer, "/tmp0/1/latest.img"); |
http.free(); |
EventDownloadComplete(); |
} |
} |
|
void draw_window() |
{ |
sc.get(); |
DefineAndDrawWindow(screen.width-WINW/2,screen.height-WINH/2, |
WINW+9,WINH+skin_height,0x34,sc.work,T_WINDOW_TITLE,0); |
GetProcessInfo(#Form, -1); |
WriteText(30, 20, 0x81, 0xEC008C, T_TITLE_H1); |
if (install_complete) { |
DrawInstallComplete(); |
} else { |
DrawIntro(); |
progress.set_size(30, WINH-130, WINW-60, 20); |
} |
} |
|
void DrawIntro() |
dword GetFreeSpaceOfRamdisk() |
{ |
DrawTextViewArea(30, 50, WINW-60, WINH-80, |
T_INTRO, -1, sc.work_text); |
DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 9999, |
0x0092D8, 0xFFFfff, T_INSTALL); |
dword rdempty = malloc(1440*1024); |
CreateFile(0, 1440*1024, rdempty, "/rd/1/rdempty"); |
free(rdempty); |
file_size stdcall ("/rd/1/rdempty"); |
rdempty = EBX; |
DeleteFile("/rd/1/rdempty"); |
return rdempty; |
} |
|
void DrawInstallComplete() |
signed CheckFreeSpace(dword _latest, _combined) |
{ |
DrawIcon32(WINW-32/2, 140, sc.work, 49); |
WriteTextCenter(0,185, WINW, sc.work_text, T_COMPLETE); |
DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 1, |
0x0092D8, 0xFFFfff, T_EXIT); |
} |
dword cur_size, new_size, empty; |
DIR_SIZE dir_size; |
|
void EventInstall() |
{ |
http.get(IMG_URL); |
dir_size.get("/sys"); |
cur_size = dir_size.bytes; |
|
copyf("/sys", _combined); |
copyf(_latest, _combined); |
dir_size.get(_combined); |
new_size = dir_size.bytes; |
|
empty = GetFreeSpaceOfRamdisk(); |
|
return cur_size + empty - new_size / 1024; |
} |
|
void EventDownloadComplete() |
{ |
dword unimg_id, slot_n; |
signed space_delta; |
int i=0; |
|
CreateFile(http.content_received, http.content_pointer, "/tmp0/1/latest.img"); |
http.free(); |
char osupdate[32]; |
char latest[40]; |
char backup[40]; |
char combined[40]; |
char exract_param[64]; |
char backup_settings[64]; |
|
unimg_id = RunProgram("/sys/unimg", "/tmp0/1/latest.img /tmp0/1/latest_img -e"); |
do { sprintf(#osupdate, "/tmp0/1/osupdate%d", i); i++; |
} while (dir_exists(#osupdate)); |
CreateDir(#osupdate); |
|
sprintf(#latest, "%s/latest", #osupdate); |
sprintf(#backup, "%s/rdbackup", #osupdate); |
sprintf(#combined, "%s/combined", #osupdate); |
sprintf(#backup_settings, "%s/settings", #backup); |
sprintf(#exract_param, "/tmp0/1/latest.img %s -e", #latest); |
|
|
unimg_id = RunProgram("/sys/unimg", #exract_param); |
do { |
slot_n = GetProcessSlot(unimg_id); |
pause(10); |
} while (slot_n!=0); |
|
copyf("/rd/1/settings", "/tmp0/1/settings_backup"); |
copyf("/tmp0/1/latest_img", "/rd/1"); |
copyf("/tmp0/1/settings_backup", "/rd/1/settings"); |
|
RestartAllProcess(); |
space_delta = CheckFreeSpace(#latest, #combined); |
if (space_delta<0) { |
sprintf(#param, "'Not enought free space! You need %d Kb more.'E", -space_delta); |
notify(#param); |
} else { |
copyf("/sys", #backup); |
copyf(#latest, "/sys"); |
if (keep_settings.checked) copyf(#backup_settings, "/rd/1/settings"); |
if (restart_apps.checked) RestartAllProcess(); |
install_complete = true; |
draw_window(); |
} |
|
void RestartAllProcess() { |
int i; |
proc_info Process; |
for (i=0; i<MAX_PROCESS_COUNT; i++;) |
{ |
GetProcessInfo(#Process, i); |
if (Process.name) |
&& (!streq(#Process.name, "OS")) |
&& (Process.ID != Form.ID) |
KillProcess(Process.ID); |
} |
RunProgram("/sys/launcher", NULL); |
} |
|
void Operation_Draw_Progress(dword filename) { debug("copying: "); debugln(filename); } |
|
|