… | |
… | |
2 | |
2 | |
3 | # over-the-air update |
3 | # over-the-air update |
4 | |
4 | |
5 | # TODO: same face, different hashes, face needs new number |
5 | # TODO: same face, different hashes, face needs new number |
6 | |
6 | |
7 | cf::register_exticmd ota_update => sub { |
7 | cf::register_async_exticmd ota_update => sub { |
8 | my ($ns, $urlader, $exe_id, $exe_ver) = @_; |
8 | my ($ns, $reply, $urlader, $exe_id, $exe_ver) = @_; |
9 | |
9 | |
|
|
10 | Coro::async_pool { |
10 | my ($face, $ver, $size, $md5, $changes); |
11 | my ($face, $ver, $size, $md5, $changes); |
11 | |
12 | |
12 | if ($face = cf::face::find "res/ota_update/$urlader,$exe_id.pck") { |
13 | if ($face = cf::face::find "res/ota_update/$urlader,$exe_id.pck") { |
13 | my $meta = cf::face::get_meta $face; |
14 | my $meta = cf::face::get_meta $face; |
14 | |
15 | |
15 | if ($meta->{exe_ver} gt $exe_ver) { |
16 | if ($meta->{exe_ver} gt $exe_ver) { |
16 | $size = cf::face::get_data_size $face; |
17 | $size = cf::face::get_data_size $face; |
17 | $ver = $meta->{exe_ver}; |
18 | $ver = $meta->{exe_ver}; |
18 | $md5 = $meta->{md5}; |
19 | $md5 = $meta->{md5}; |
19 | if (my $changes_face = cf::face::find "res/ota_update/Changes") { |
20 | if (my $changes_face = cf::face::find "res/ota_update/Changes") { |
20 | $changes = cf::face::get_data $changes_face; |
21 | $changes = cf::face::get_data $changes_face; |
21 | $changes =~ s/^\(\Q$exe_ver\E\).*$//sm; |
22 | $changes =~ s/^\(\Q$exe_ver\E\).*$//sm; |
|
|
23 | } |
22 | } |
24 | } |
23 | } |
25 | } |
24 | } |
|
|
25 | |
26 | |
26 | cf::info "ota update request for <$urlader, $exe_id, $exe_ver> replying <$face,$ver,$size,*>"; |
27 | cf::info "ota update request for <$urlader, $exe_id, $exe_ver> replying <$face,$ver,$size,*>"; |
27 | |
28 | |
28 | (1, $face, $ver, $size, $md5, $changes) |
29 | $reply->(1, $face, $ver, $size, $md5, $changes); |
|
|
30 | }; |
29 | }; |
31 | }; |
30 | |
32 | |