]> git.ktnx.net Git - mpd-feeder.git/blob - lib/App/MPD/Feeder/WorkQueue.pm
fixup idle rework: add WorkQueue
[mpd-feeder.git] / lib / App / MPD / Feeder / WorkQueue.pm
1 use v5.28;
2 use utf8;
3 use Object::Pad;
4 class App::MPD::Feeder::WorkQueue;
5
6 use Log::Any qw($log);
7
8 has @queue;
9 has %present;
10
11 method add($key) {
12     if ( exists $present{$key} ) {
13         $log->trace("job '$key' already queued");
14     }
15     else {
16         $present{$key} = undef;
17         push @queue, $key;
18
19         $log->trace("job '$key' queued");
20     }
21 }
22
23 method next {
24     my $item = shift @queue;
25
26     if ( defined($item) ) {
27         $log->trace("next job: '$item'");
28         delete $present{$item};
29     }
30     else {
31         $log->trace("job queue is empty");
32     }
33
34     return $item;
35 }
36
37 method clear {
38     @queue   = ();
39     %present = ();
40     $log->trace('work queue cleared');
41 }
42
43 method has_jobs {
44     $log->trace( "Queue jobs: " . scalar(@queue) );
45     return scalar @queue;
46 }
47
48 1;