summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2017-12-23 19:41:39 +0000
committerdakkar <dakkar@thenautilus.net>2017-12-23 19:41:39 +0000
commit2cf7611e7c2aa5a6b374a4b89f7c9aa5d84d6e7d (patch)
tree837e9ff78c69832511fb8adfab8866c7fbcf0720
parentfix .finish in gather/take (diff)
downloadUltramarine-2cf7611e7c2aa5a6b374a4b89f7c9aa5d84d6e7d.tar.gz
Ultramarine-2cf7611e7c2aa5a6b374a4b89f7c9aa5d84d6e7d.tar.bz2
Ultramarine-2cf7611e7c2aa5a6b374a4b89f7c9aa5d84d6e7d.zip
MusicFile is now synchronous
-rw-r--r--lib/Ultramarine/Model/MusicFile.pm628
1 files changed, 7 insertions, 21 deletions
diff --git a/lib/Ultramarine/Model/MusicFile.pm6 b/lib/Ultramarine/Model/MusicFile.pm6
index ec1cbd7..c82d433 100644
--- a/lib/Ultramarine/Model/MusicFile.pm6
+++ b/lib/Ultramarine/Model/MusicFile.pm6
@@ -1,29 +1,15 @@
use v6.d.PREVIEW;
use JSON::Fast;
-=begin example
-
-my @files = @*ARGS.map: { Ultramarine::Model::MusicFile.new(path=>$_) };
-my @metadata-p = @filesĀ».metadata;
-await Promise.allof(@metadata-p);
-
-say (@metadata-pĀ».result).perl;
-
-=end example
-
class Ultramarine::Model::MusicFile {
has $.path is required;
- method metadata(-->Promise) {
- my $result = Promise.new;
- my $proc = Proc::Async.new(
- 'avprobe',
- '-show_format','-of', 'json',
- $.path,
- );
- my Str $json-str='';
- $proc.stdout.tap(->$data { $json-str~=$data });
- $proc.stderr.tap(->$err {});
- return $proc.start.then(->$status { from-json $json-str });
+ method metadata() {
+ my $proc = run 'avprobe', '-show_format','-of', 'json', $.path,
+ :err,:out;
+ CATCH { when X::Proc::Unsuccessful { .resume } }
+ my $json-str = $proc.out.slurp(:close);
+ $proc.err.close();
+ return from-json $json-str;
}
}