… | |
… | |
2 | |
2 | |
3 | our $SCHEDULE_INTERVAL = $cf::CFG{extractor_schedule_interval} || 3600; |
3 | our $SCHEDULE_INTERVAL = $cf::CFG{extractor_schedule_interval} || 3600; |
4 | |
4 | |
5 | use JSON::XS; |
5 | use JSON::XS; |
6 | |
6 | |
7 | my $db_mapinfo = cf::sync_job { cf::db_table "tag-mapinfo" }; # info/cache for maps |
7 | our $db_mapinfo = cf::sync_job { cf::db_table "tag-mapinfo" }; # info/cache for maps |
8 | my $db_target = cf::sync_job { cf::db_table "tag-target" }; # tag => maps |
8 | our $db_target = cf::sync_job { cf::db_table "tag-target" }; # tag => maps |
9 | |
9 | |
10 | sub remove_tag_target { |
10 | sub remove_tag_target { |
11 | my ($txn, $tag, $target) = @_; |
11 | my ($txn, $tag, $target) = @_; |
12 | # - U O |
12 | # - U O |
13 | |
13 | |
… | |
… | |
84 | warn "tag-updated $file (= $key) <@tags>\n" |
84 | warn "tag-updated $file (= $key) <@tags>\n" |
85 | if @tags; |
85 | if @tags; |
86 | } |
86 | } |
87 | |
87 | |
88 | sub scan_static { |
88 | sub scan_static { |
89 | my ($dir, $map) = @_; |
89 | my $maps = cf::map::static_maps; |
90 | |
90 | |
91 | my ($dirs, $files) = Coro::AIO::aio_scandir $dir, 2 |
91 | scan_map "s$_", "$cf::MAPDIR$_.map" |
92 | or return; |
|
|
93 | |
|
|
94 | for my $file (@$files) { |
|
|
95 | my $name = $file; |
|
|
96 | next unless $name =~ s/\.map$//; |
|
|
97 | utf8::decode $name; |
|
|
98 | |
|
|
99 | scan_map "s$map$name", "$dir/$file"; |
|
|
100 | } |
|
|
101 | |
|
|
102 | &scan_static ("$dir/$_", "$map$_/") |
|
|
103 | for @$dirs; |
92 | for @$maps; |
104 | } |
93 | } |
105 | |
94 | |
106 | sub reload { |
95 | sub reload { |
107 | my $guard = cf::lock_acquire "map-tags::reload"; |
96 | my $guard = cf::lock_acquire "map-tags::reload"; |
108 | |
97 | |
… | |
… | |
178 | $Coro::current->prio (Coro::PRIO_MIN); |
167 | $Coro::current->prio (Coro::PRIO_MIN); |
179 | $Coro::current->desc ("map-tag scanner"); |
168 | $Coro::current->desc ("map-tag scanner"); |
180 | reload; |
169 | reload; |
181 | }; |
170 | }; |
182 | |
171 | |
183 | cf::async { reload }; # force at startup |
172 | cf::post_init { |
|
|
173 | $RELOAD_SCHEDULER->invoke (0); # force at startup |
|
|
174 | }; |
184 | |
175 | |
185 | # find all objects with the given tag, or at least try to |
176 | # find all objects with the given tag, or at least try to |
186 | sub find($) { |
177 | sub find($) { |
187 | my ($tag) = @_; |
178 | my ($tag) = @_; |
188 | |
179 | |