Rev 8839 | Rev 8996 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8839 | Rev 8954 | ||
---|---|---|---|
1 | #define MEMSIZE 1024*50 |
1 | #define MEMSIZE 1024*50 |
2 | 2 | ||
3 | #include "../lib/gui.h" |
3 | #include "../lib/gui.h" |
4 | #include "../lib/copyf.h" |
4 | #include "../lib/copyf.h" |
5 | 5 | ||
6 | #include "../lib/obj/libini.h" |
6 | #include "../lib/obj/libini.h" |
7 | #include "../lib/obj/libimg.h" |
7 | #include "../lib/obj/libimg.h" |
8 | #include "../lib/obj/http.h" |
8 | #include "../lib/obj/http.h" |
9 | #include "../lib/obj/network.h" |
9 | #include "../lib/obj/network.h" |
10 | 10 | ||
11 | #include "../lib/patterns/restart_process.h" |
11 | #include "../lib/patterns/restart_process.h" |
12 | - | ||
13 | #ifndef AUTOBUILD |
- | |
14 | #include "lang.h--" |
- | |
15 | #endif |
- | |
16 | 12 | ||
17 | bool install_complete = false; |
13 | bool install_complete = false; |
18 | _http http; |
14 | _http http; |
19 | 15 | ||
20 | #define WINW 460 |
16 | #define WINW 460 |
21 | #define WINH 380 |
17 | #define WINH 380 |
22 | 18 | ||
23 | //#define LANG_RUS 1 |
19 | //#define LANG_RUS 1 |
24 | 20 | ||
25 | #ifdef LANG_RUS |
21 | #ifdef LANG_RUS |
26 | #define T_WINDOW_TITLE "« © ®¡®¢«¥¨¥ KolibriOS" |
22 | #define T_WINDOW_TITLE "« © ®¡®¢«¥¨¥ KolibriOS" |
27 | #define T_TITLE_H1 " " |
23 | #define T_TITLE_H1 " " |
28 | #define T_INTRO " ®¥ ¯à¨«®¦¥¨¥ áª ç ¥â ¯®á«¥¤îî ¢¥àá¨î KolibriOS ¨ à ᯠªã¥â ¥¥ RAM-¤¨áª. ਠí⮬ ï¤à® ¥ ¡ã¤¥â ¯¥à¥§ ¯ã饮, ¤«ï í⮣® ¥®¡å®¤¨¬® á®åà ¨âì ®¡à § ¨ ¯¥à¥§ £à㧨âáï. ®¦ «ã©áâ , § ªà®©â¥ ¢á¥ ®âªàëâë¥ ¯à¨«®¦¥¨ï ¯¥à¥¤ ç «®¬ ®¡®¢«¥¨ï. |
24 | #define T_INTRO " ®¥ ¯à¨«®¦¥¨¥ áª ç ¥â ¯®á«¥¤îî ¢¥àá¨î KolibriOS ¨ à ᯠªã¥â ¥¥ RAM-¤¨áª. ਠí⮬ ï¤à® ¥ ¡ã¤¥â ¯¥à¥§ ¯ã饮, ¤«ï í⮣® ¥®¡å®¤¨¬® á®åà ¨âì ®¡à § ¨ ¯¥à¥§ £à㧨âáï. ®¦ «ã©áâ , § ªà®©â¥ ¢á¥ ®âªàëâë¥ ¯à¨«®¦¥¨ï ¯¥à¥¤ ç «®¬ ®¡®¢«¥¨ï. |
29 | : ᥠ¨§¬¥ë¥ ä ©«ë RAM-¤¨áª¥ ¡ã¤ãâ ¯¥à¥§ ¯¨á ë!"; |
25 | : ᥠ¨§¬¥ë¥ ä ©«ë RAM-¤¨áª¥ ¡ã¤ãâ ¯¥à¥§ ¯¨á ë!"; |
30 | #define T_INSTALL "¡®¢¨âì" |
26 | #define T_INSTALL "¡®¢¨âì" |
31 | #define T_COMPLETE "¡®¢«¥¨¥ § ¢¥à襮" |
27 | #define T_COMPLETE "¡®¢«¥¨¥ § ¢¥à襮" |
32 | #define T_EXIT "ë室" |
28 | #define T_EXIT "ë室" |
33 | #define IMG_URL "http://builds.kolibrios.org/rus/data/data/kolibri.img" |
29 | #define IMG_URL "http://builds.kolibrios.org/rus/data/data/kolibri.img" |
34 | #define KS "®åà ¨âì áâனª¨" |
30 | #define KS "®åà ¨âì áâனª¨" |
35 | #define RA "¥à¥§ ¯ãáâ¨âì ¢á¥ ¯à®£à ¬¬ë" |
31 | #define RA "¥à¥§ ¯ãáâ¨âì ¢á¥ ¯à®£à ¬¬ë" |
36 | #else |
32 | #else |
37 | #define T_WINDOW_TITLE "KolibriOS Online Updater" |
33 | #define T_WINDOW_TITLE "KolibriOS Online Updater" |
38 | #define T_TITLE_H1 "ONLINE UPDATE" |
34 | #define T_TITLE_H1 "ONLINE UPDATE" |
39 | #define T_INTRO "This app will download the latest KolibriOS dirsto and update your RAM-disk with it. Kernel won't be restarted. |
35 | #define T_INTRO "This app will download the latest KolibriOS dirsto and update your RAM-disk with it. Kernel won't be restarted. |
40 | Please close all opened apps before start. |
36 | Please close all opened apps before start. |
41 | Note that all changes on RAM-disk will be lost."; |
37 | Note that all changes on RAM-disk will be lost."; |
42 | #define T_INSTALL "Update" |
38 | #define T_INSTALL "Update" |
43 | #define T_COMPLETE "Update complete" |
39 | #define T_COMPLETE "Update complete" |
44 | #define T_EXIT "Exit" |
40 | #define T_EXIT "Exit" |
45 | #define IMG_URL "http://builds.kolibrios.org/eng/data/data/kolibri.img" |
41 | #define IMG_URL "http://builds.kolibrios.org/eng/data/data/kolibri.img" |
46 | #define KS "Keep settings folder" |
42 | #define KS "Keep settings folder" |
47 | #define RA "Restart all apps" |
43 | #define RA "Restart all apps" |
48 | #endif |
44 | #endif |
49 | char accept_language[]="en"; //not used, necessary for http.get() |
45 | char accept_language[]="en"; //not used, necessary for http.get() |
50 | void Operation_Draw_Progress(dword f) {} //not used, necessary for copyf() |
46 | void Operation_Draw_Progress(dword f) {} //not used, necessary for copyf() |
51 | 47 | ||
52 | checkbox keep_settings = { KS, true }; |
48 | checkbox keep_settings = { KS, true }; |
53 | checkbox restart_apps = { RA, true }; |
49 | checkbox restart_apps = { RA, true }; |
54 | 50 | ||
55 | void main() |
51 | void main() |
56 | { |
52 | { |
57 | int btn; |
53 | int btn; |
58 | sensor progress; |
54 | sensor progress; |
59 | load_dll(libimg, #libimg_init,1); |
55 | load_dll(libimg, #libimg_init,1); |
60 | load_dll(libHTTP, #http_lib_init,1); |
56 | load_dll(libHTTP, #http_lib_init,1); |
61 | @SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_STACK); |
57 | @SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_STACK); |
62 | loop() switch(@WaitEventTimeout(300)) |
58 | loop() switch(@WaitEventTimeout(300)) |
63 | { |
59 | { |
64 | case evButton: |
60 | case evButton: |
65 | btn = @GetButtonID(); |
61 | btn = @GetButtonID(); |
66 | if (btn<=2) ExitProcess(); |
62 | if (btn<=2) ExitProcess(); |
67 | if (btn==9) goto _INSTALL; |
63 | if (btn==9) goto _INSTALL; |
68 | keep_settings.click(btn); |
64 | keep_settings.click(btn); |
69 | restart_apps.click(btn); |
65 | restart_apps.click(btn); |
70 | break; |
66 | break; |
71 | 67 | ||
72 | case evKey: |
68 | case evKey: |
73 | switch (@GetKeyScancode()) { |
69 | switch (@GetKeyScancode()) { |
74 | case SCAN_CODE_ESC: ExitProcess(); |
70 | case SCAN_CODE_ESC: ExitProcess(); |
75 | case SCAN_CODE_ENTER: |
71 | case SCAN_CODE_ENTER: |
76 | if (install_complete) ExitProcess(); |
72 | if (install_complete) ExitProcess(); |
77 | else { |
73 | else { |
78 | _INSTALL: |
74 | _INSTALL: |
79 | http.get(IMG_URL); |
75 | http.get(IMG_URL); |
80 | goto _DRAW_WINDOW; |
76 | goto _DRAW_WINDOW; |
81 | } |
77 | } |
82 | } |
78 | } |
83 | break; |
79 | break; |
84 | 80 | ||
85 | case evReDraw: |
81 | case evReDraw: |
86 | _DRAW_WINDOW: |
82 | _DRAW_WINDOW: |
87 | sc.get(); |
83 | sc.get(); |
88 | DefineAndDrawWindow(screen.width-WINW/2,screen.height-WINH/2, |
84 | DefineAndDrawWindow(screen.width-WINW/2,screen.height-WINH/2, |
89 | WINW+9,WINH+skin_height,0x34,sc.work,T_WINDOW_TITLE,0); |
85 | WINW+9,WINH+skin_height,0x34,sc.work,T_WINDOW_TITLE,0); |
90 | WriteText(30, 20, 0x81, 0xEC008C, T_TITLE_H1); |
86 | WriteText(30, 20, 0x81, 0xEC008C, T_TITLE_H1); |
91 | if (!install_complete) { |
87 | if (!install_complete) { |
92 | DrawTextViewArea(30, 50, WINW-60, WINH-80, T_INTRO, -1, sc.work_text); |
88 | DrawTextViewArea(30, 50, WINW-60, WINH-80, T_INTRO, -1, sc.work_text); |
93 | progress.set_size(30, WINH-130, WINW-60, 20); |
89 | progress.set_size(30, WINH-130, WINW-60, 20); |
94 | if (http.transfer<=0) { |
90 | if (http.transfer<=0) { |
95 | DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 9, 0x0092D8, 0xFFFfff, T_INSTALL); |
91 | DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 9, 0x0092D8, 0xFFFfff, T_INSTALL); |
96 | keep_settings.draw(30, WINH - 210); |
92 | keep_settings.draw(30, WINH - 210); |
97 | restart_apps.draw(30, WINH - 185); |
93 | restart_apps.draw(30, WINH - 185); |
98 | } |
94 | } |
99 | } else { |
95 | } else { |
100 | DrawIcon32(WINW-32/2, 140, sc.work, 49); |
96 | DrawIcon32(WINW-32/2, 140, sc.work, 49); |
101 | WriteTextCenter(0,185, WINW, sc.work_text, T_COMPLETE); |
97 | WriteTextCenter(0,185, WINW, sc.work_text, T_COMPLETE); |
102 | DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 2, |
98 | DrawCaptButton(WINW-110/2, WINH-70, 110, 28, 2, |
103 | 0x0092D8, 0xFFFfff, T_EXIT); |
99 | 0x0092D8, 0xFFFfff, T_EXIT); |
104 | } |
100 | } |
105 | 101 | ||
106 | case evNetwork: |
102 | case evNetwork: |
107 | if (http.transfer <= 0) break; |
103 | if (http.transfer <= 0) break; |
108 | http.receive(); |
104 | http.receive(); |
109 | if (http.content_length) { |
105 | if (http.content_length) { |
110 | progress.draw_progress(http.content_length - http.content_received |
106 | progress.draw_progress(http.content_length - http.content_received |
111 | * progress.w / http.content_length); |
107 | * progress.w / http.content_length); |
112 | } |
108 | } |
113 | if (!http.receive_result) { |
109 | if (!http.receive_result) { |
114 | CreateFile(http.content_received, |
110 | CreateFile(http.content_received, |
115 | http.content_pointer, "/tmp0/1/latest.img"); |
111 | http.content_pointer, "/tmp0/1/latest.img"); |
116 | http.stop(); |
112 | http.stop(); |
117 | EventDownloadComplete(); |
113 | EventDownloadComplete(); |
118 | } |
114 | } |
119 | } |
115 | } |
120 | } |
116 | } |
121 | 117 | ||
122 | dword GetFreeSpaceOfRamdisk() |
118 | dword GetFreeSpaceOfRamdisk() |
123 | { |
119 | { |
124 | dword rdempty = malloc(1440*1024); |
120 | dword rdempty = malloc(1440*1024); |
125 | CreateFile(0, 1440*1024, rdempty, "/sys/rdempty"); |
121 | CreateFile(0, 1440*1024, rdempty, "/sys/rdempty"); |
126 | free(rdempty); |
122 | free(rdempty); |
127 | rdempty = get_file_size("/sys/rdempty"); |
123 | rdempty = get_file_size("/sys/rdempty"); |
128 | DeleteFile("/sys/rdempty"); |
124 | DeleteFile("/sys/rdempty"); |
129 | return rdempty; |
125 | return rdempty; |
130 | } |
126 | } |
131 | 127 | ||
132 | signed CheckFreeSpace(dword _latest, _combined) |
128 | signed CheckFreeSpace(dword _latest, _combined) |
133 | { |
129 | { |
134 | dword cur_size, new_size, empty; |
130 | dword cur_size, new_size, empty; |
135 | DIR_SIZE dir_size; |
131 | DIR_SIZE dir_size; |
136 | 132 | ||
137 | dir_size.get("/sys"); |
133 | dir_size.get("/sys"); |
138 | cur_size = dir_size.bytes; |
134 | cur_size = dir_size.bytes; |
139 | 135 | ||
140 | copyf("/sys", _combined); |
136 | copyf("/sys", _combined); |
141 | copyf(_latest, _combined); |
137 | copyf(_latest, _combined); |
142 | dir_size.get(_combined); |
138 | dir_size.get(_combined); |
143 | new_size = dir_size.bytes; |
139 | new_size = dir_size.bytes; |
144 | 140 | ||
145 | empty = GetFreeSpaceOfRamdisk(); |
141 | empty = GetFreeSpaceOfRamdisk(); |
146 | 142 | ||
147 | return cur_size + empty - new_size / 1024; |
143 | return cur_size + empty - new_size / 1024; |
148 | } |
144 | } |
149 | 145 | ||
150 | void EventDownloadComplete() |
146 | void EventDownloadComplete() |
151 | { |
147 | { |
152 | dword unimg_id, slot_n; |
148 | dword unimg_id, slot_n; |
153 | signed space_delta; |
149 | signed space_delta; |
154 | int i=0; |
150 | int i=0; |
155 | 151 | ||
156 | char osupdate[32]; |
152 | char osupdate[32]; |
157 | char latest[40]; |
153 | char latest[40]; |
158 | char backup[40]; |
154 | char backup[40]; |
159 | char combined[40]; |
155 | char combined[40]; |
160 | char exract_param[64]; |
156 | char exract_param[64]; |
161 | char backup_settings[64]; |
157 | char backup_settings[64]; |
162 | 158 | ||
163 | do { sprintf(#osupdate, "/tmp0/1/osupdate%d", i); i++; |
159 | do { sprintf(#osupdate, "/tmp0/1/osupdate%d", i); i++; |
164 | } while (dir_exists(#osupdate)); |
160 | } while (dir_exists(#osupdate)); |
165 | CreateDir(#osupdate); |
161 | CreateDir(#osupdate); |
166 | 162 | ||
167 | sprintf(#latest, "%s/latest", #osupdate); |
163 | sprintf(#latest, "%s/latest", #osupdate); |
168 | sprintf(#backup, "%s/rdbackup", #osupdate); |
164 | sprintf(#backup, "%s/rdbackup", #osupdate); |
169 | sprintf(#combined, "%s/combined", #osupdate); |
165 | sprintf(#combined, "%s/combined", #osupdate); |
170 | sprintf(#backup_settings, "%s/settings", #backup); |
166 | sprintf(#backup_settings, "%s/settings", #backup); |
171 | sprintf(#exract_param, "/tmp0/1/latest.img %s -e", #latest); |
167 | sprintf(#exract_param, "/tmp0/1/latest.img %s -e", #latest); |
172 | 168 | ||
173 | 169 | ||
174 | unimg_id = RunProgram("/sys/unimg", #exract_param); |
170 | unimg_id = RunProgram("/sys/unimg", #exract_param); |
175 | do { |
171 | do { |
176 | slot_n = GetProcessSlot(unimg_id); |
172 | slot_n = GetProcessSlot(unimg_id); |
177 | pause(10); |
173 | pause(10); |
178 | } while (slot_n!=0); |
174 | } while (slot_n!=0); |
179 | 175 | ||
180 | space_delta = CheckFreeSpace(#latest, #combined); |
176 | space_delta = CheckFreeSpace(#latest, #combined); |
181 | if (space_delta<0) { |
177 | if (space_delta<0) { |
182 | sprintf(#param, "'Not enought free space! You need %d Kb more.'E", -space_delta); |
178 | sprintf(#param, "'Not enought free space! You need %d Kb more.'E", -space_delta); |
183 | notify(#param); |
179 | notify(#param); |
184 | } else { |
180 | } else { |
185 | copyf("/sys", #backup); |
181 | copyf("/sys", #backup); |
186 | copyf(#latest, "/sys"); |
182 | copyf(#latest, "/sys"); |
187 | if (keep_settings.checked) copyf(#backup_settings, "/sys/settings"); |
183 | if (keep_settings.checked) copyf(#backup_settings, "/sys/settings"); |
188 | if (restart_apps.checked) RestartAllProcess(); |
184 | if (restart_apps.checked) RestartAllProcess(); |
189 | install_complete = true; |
185 | install_complete = true; |
190 | } |
186 | } |
191 | }0)>=>=0)>=2)> |
187 | }0)>=>=0)>=2)> |