Rev 7939 | Rev 8291 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
8013 | leency | 1 | #define MEMSIZE 1024*50 |
7938 | leency | 2 | |
3 | #include "../lib/io.h" |
||
4 | #include "../lib/gui.h" |
||
5 | #include "../lib/copyf.h" |
||
6 | |||
7 | #include "../lib/obj/libini.h" |
||
8 | #include "../lib/obj/libio.h" |
||
9 | #include "../lib/obj/libimg.h" |
||
10 | #include "../lib/obj/http.h" |
||
11 | #include "../lib/obj/network.h" |
||
12 | |||
13 | #include "../lib/patterns/restart_process.h" |
||
14 | #include "../lib/patterns/http_downloader.h" |
||
15 | |||
16 | #ifndef AUTOBUILD |
||
17 | #include "lang.h--" |
||
18 | #endif |
||
19 | |||
8013 | leency | 20 | bool install_complete = false; |
7938 | leency | 21 | _http http; |
22 | |||
7939 | leency | 23 | #define WINW 460 |
8013 | leency | 24 | #define WINH 380 |
7938 | leency | 25 | |
7939 | leency | 26 | //#define LANG_RUS 1 |
7938 | leency | 27 | |
28 | #ifdef LANG_RUS |
||
7939 | leency | 29 | #define T_WINDOW_TITLE "Онлайн обновление KolibriOS" |
30 | #define T_TITLE_H1 "ОНЛАЙН ОБНОВЛЕНИЕ" |
||
31 | #define T_INTRO "Данное приложение скачает последнюю версию KolibriOS и распакует ее на RAM-диск. При этом ядро не будет перезапущено, для этого необходимо сохранить образ и перезагрузится. Пожалуйста, закройте все открытые приложения перед началом обновления. |
||
32 | ВНИМАНИЕ: Все изменные файлы на RAM-диске будут перезаписаны!"; |
||
33 | #define T_INSTALL "Обновить" |
||
34 | #define T_COMPLETE "Обновление завершено" |
||
7938 | leency | 35 | #define T_EXIT "Выход" |
36 | #define IMG_URL "http://builds.kolibrios.org/rus/data/data/kolibri.img" |
||
8013 | leency | 37 | #define KS "Сохранить настройки" |
38 | #define RA "Перезапустить все программы" |
||
7938 | leency | 39 | #else |
7939 | leency | 40 | #define T_WINDOW_TITLE "KolibriOS Online Updater" |
41 | #define T_TITLE_H1 "ONLINE UPDATE" |
||
42 | #define T_INTRO "This app will download the latest KolibriOS dirsto and update your RAM-disk with it. Kernel won't be restarted. |
||
43 | Please close all opened apps before start. |
||
8013 | leency | 44 | Note that all changes on RAM-disk will be lost."; |
7938 | leency | 45 | #define T_INSTALL "Update" |
46 | #define T_COMPLETE "Update complete" |
||
47 | #define T_EXIT "Exit" |
||
48 | #define IMG_URL "http://builds.kolibrios.org/eng/data/data/kolibri.img" |
||
8013 | leency | 49 | #define KS "Keep settings folder" |
50 | #define RA "Restart all apps" |
||
7938 | leency | 51 | #endif |
7939 | leency | 52 | char accept_language[]="en"; //not used, necessary for http.get() |
8013 | leency | 53 | void Operation_Draw_Progress(dword f) {} //not used, necessary for copyf() |
7938 | leency | 54 | |
8013 | leency | 55 | checkbox keep_settings = { KS, true }; |
56 | checkbox restart_apps = { RA, true }; |
||
57 | |||
7938 | leency | 58 | void main() |
59 | { |
||
8013 | leency | 60 | int btn; |
61 | sensor progress; |
||
7938 | leency | 62 | load_dll(libio, #libio_init,1); |
63 | load_dll(libimg, #libimg_init,1); |
||
64 | load_dll(libHTTP, #http_lib_init,1); |
||
8013 | leency | 65 | @SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_STACK); |
66 | loop() switch(@WaitEventTimeout(300)) |
||
7938 | leency | 67 | { |
8013 | leency | 68 | case evButton: |
69 | btn = @GetButtonID(); |
||
70 | if (btn<=2) ExitProcess(); |
||
71 | if (btn==9) goto _INSTALL; |
||
72 | keep_settings.click(btn); |
||
73 | restart_apps.click(btn); |
||
7938 | leency | 74 | break; |
8013 | leency | 75 | |
7938 | leency | 76 | case evKey: |
8013 | leency | 77 | switch (@GetKeyScancode()) { |
78 | case SCAN_CODE_ESC: ExitProcess(); |
||
79 | case SCAN_CODE_ENTER: |
||
80 | if (install_complete) ExitProcess(); |
||
81 | else { |
||
82 | _INSTALL: |
||
83 | http.get(IMG_URL); |
||
84 | goto _DRAW_WINDOW; |
||
85 | } |
||
7938 | leency | 86 | } |
87 | break; |
||
8013 | leency | 88 | |
7938 | leency | 89 | case evReDraw: |
8013 | leency | 90 | _DRAW_WINDOW: |
91 | sc.get(); |
||
92 | DefineAndDrawWindow(screen.width-WINW/2,screen.height-WINH/2, |
||
93 | WINW+9,WINH+skin_height,0x34,sc.work,T_WINDOW_TITLE,0); |
||
94 | WriteText(30, 20, 0x81, 0xEC008C, T_TITLE_H1); |
||
95 | if (!install_complete) { |
||
96 | DrawTextViewArea(30, 50, WINW-60, WINH-80, T_INTRO, -1, sc.work_text); |
||
97 | progress.set_size(30, WINH-130, WINW-60, 20); |
||
98 | if (http.transfer<=0) { |
||
99 | DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 9, 0x0092D8, 0xFFFfff, T_INSTALL); |
||
100 | keep_settings.draw(30, WINH - 210); |
||
101 | restart_apps.draw(30, WINH - 185); |
||
102 | } |
||
103 | } else { |
||
104 | DrawIcon32(WINW-32/2, 140, sc.work, 49); |
||
105 | WriteTextCenter(0,185, WINW, sc.work_text, T_COMPLETE); |
||
106 | DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 2, |
||
107 | 0x0092D8, 0xFFFfff, T_EXIT); |
||
108 | } |
||
7938 | leency | 109 | |
110 | case evNetwork: |
||
111 | if (http.transfer <= 0) break; |
||
112 | http.receive(); |
||
7939 | leency | 113 | if (http.content_length) { |
8013 | leency | 114 | progress.draw_progress(http.content_length - http.content_received |
115 | * progress.w / http.content_length); |
||
7939 | leency | 116 | } |
8013 | leency | 117 | if (!http.receive_result) { |
118 | CreateFile(http.content_received, |
||
119 | http.content_pointer, "/tmp0/1/latest.img"); |
||
120 | http.free(); |
||
121 | EventDownloadComplete(); |
||
122 | } |
||
7938 | leency | 123 | } |
124 | } |
||
125 | |||
8013 | leency | 126 | dword GetFreeSpaceOfRamdisk() |
7938 | leency | 127 | { |
8013 | leency | 128 | dword rdempty = malloc(1440*1024); |
129 | CreateFile(0, 1440*1024, rdempty, "/rd/1/rdempty"); |
||
130 | free(rdempty); |
||
131 | file_size stdcall ("/rd/1/rdempty"); |
||
132 | rdempty = EBX; |
||
133 | DeleteFile("/rd/1/rdempty"); |
||
134 | return rdempty; |
||
7938 | leency | 135 | } |
136 | |||
8013 | leency | 137 | signed CheckFreeSpace(dword _latest, _combined) |
7938 | leency | 138 | { |
8013 | leency | 139 | dword cur_size, new_size, empty; |
140 | DIR_SIZE dir_size; |
||
7938 | leency | 141 | |
8013 | leency | 142 | dir_size.get("/sys"); |
143 | cur_size = dir_size.bytes; |
||
7938 | leency | 144 | |
8013 | leency | 145 | copyf("/sys", _combined); |
146 | copyf(_latest, _combined); |
||
147 | dir_size.get(_combined); |
||
148 | new_size = dir_size.bytes; |
||
149 | |||
150 | empty = GetFreeSpaceOfRamdisk(); |
||
151 | |||
152 | return cur_size + empty - new_size / 1024; |
||
7938 | leency | 153 | } |
154 | |||
155 | void EventDownloadComplete() |
||
156 | { |
||
157 | dword unimg_id, slot_n; |
||
8013 | leency | 158 | signed space_delta; |
159 | int i=0; |
||
7938 | leency | 160 | |
8013 | leency | 161 | char osupdate[32]; |
162 | char latest[40]; |
||
163 | char backup[40]; |
||
164 | char combined[40]; |
||
165 | char exract_param[64]; |
||
166 | char backup_settings[64]; |
||
7938 | leency | 167 | |
8013 | leency | 168 | do { sprintf(#osupdate, "/tmp0/1/osupdate%d", i); i++; |
169 | } while (dir_exists(#osupdate)); |
||
170 | CreateDir(#osupdate); |
||
171 | |||
172 | sprintf(#latest, "%s/latest", #osupdate); |
||
173 | sprintf(#backup, "%s/rdbackup", #osupdate); |
||
174 | sprintf(#combined, "%s/combined", #osupdate); |
||
175 | sprintf(#backup_settings, "%s/settings", #backup); |
||
176 | sprintf(#exract_param, "/tmp0/1/latest.img %s -e", #latest); |
||
177 | |||
178 | |||
179 | unimg_id = RunProgram("/sys/unimg", #exract_param); |
||
7938 | leency | 180 | do { |
181 | slot_n = GetProcessSlot(unimg_id); |
||
182 | pause(10); |
||
183 | } while (slot_n!=0); |
||
184 | |||
8013 | leency | 185 | space_delta = CheckFreeSpace(#latest, #combined); |
186 | if (space_delta<0) { |
||
187 | sprintf(#param, "'Not enought free space! You need %d Kb more.'E", -space_delta); |
||
188 | notify(#param); |
||
189 | } else { |
||
190 | copyf("/sys", #backup); |
||
191 | copyf(#latest, "/sys"); |
||
192 | if (keep_settings.checked) copyf(#backup_settings, "/rd/1/settings"); |
||
193 | if (restart_apps.checked) RestartAllProcess(); |
||
194 | install_complete = true; |
||
7938 | leency | 195 | } |
196 | }0)>=>=0)>=2)> |
||
197 |