Subversion Repositories Kolibri OS

Rev

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
}
187
}