@@ -21,6 +21,7 @@ extern "C" {
2121#include " avchapter.h"
2222#include " avprogram.h"
2323#include " avstream.h"
24+ #include " avdictionary.h"
2425
2526
2627namespace node_ffprobe {
@@ -32,46 +33,34 @@ Napi::Promise GetFileInfo(const Napi::CallbackInfo& info) {
3233
3334 Napi::Promise::Deferred deferred = Napi::Promise::Deferred::New (env);
3435
35- std::string filePath;
36- int64_t probeSize = 0 ;
37- int64_t analyzeDuration = 0 ;
3836
39- if (info[0 ].IsString ()) {
40-
41- filePath = info[ 0 ]. As <Napi::String> ();
37+ if (! info[0 ].IsString ()) {
38+ deferred. Reject ( Napi::TypeError::New (env, Napi::String::New (env, " filePath parameter should be a string value " )). Value ());
39+ return deferred. Promise ();
4240 }
43- else if (info[0 ].IsObject ()) {
4441
45- Napi::Object obj = info[ 0 ]. As <Napi::Object>() ;
42+ AvDictionary options ;
4643
47- if (!obj.Has (" filePath" ) || !obj.Get (" filePath" ).IsString ()) {
48- deferred.Reject (Napi::TypeError::New (env, " Missing or invalid 'filePath' field" ).Value ());
44+ if (!info[1 ].IsUndefined ()) {
45+ if (!info[1 ].IsObject ()) {
46+ deferred.Reject (Napi::TypeError::New (env, Napi::String::New (env," options can only be an object" )).Value ());
4947 return deferred.Promise ();
5048 }
5149
52- filePath = obj.Get (" filePath" ).As <Napi::String>();
53-
54- if (obj.Has (" options" ) && obj.Get (" options" ).IsObject ()) {
55-
56- Napi::Object opts = obj.Get (" options" ).As <Napi::Object>();
50+ Napi::Object opts = info[1 ].As <Napi::Object>();
5751
58- if (opts.Has (" probeSize" ) && opts.Get (" probeSize" ).IsNumber ()) {
59- probeSize = opts.Get (" probeSize" ).As <Napi::Number>().Int64Value ();
60- }
61-
62- if (opts.Has (" analyzeDuration" ) && opts.Get (" analyzeDuration" ).IsNumber ()) {
63- analyzeDuration = opts.Get (" analyzeDuration" ).As <Napi::Number>().Int64Value ();
64- }
52+ if (opts.Has (" probeSize" ) && opts.Get (" probeSize" ).IsNumber ()) {
53+ options.set (" probesize" , opts.Get (" probeSize" ).As <Napi::Number>().Int64Value ());
6554 }
66- }
67- else {
6855
69- deferred.Reject (Napi::TypeError::New (env, " Expected string or object as first argument" ).Value ());
70- return deferred.Promise ();
56+ if (opts.Has (" analyzeDuration" ) && opts.Get (" analyzeDuration" ).IsNumber ()) {
57+ options.set (" analyzeduration" , opts.Get (" analyzeDuration" ).As <Napi::Number>().Int64Value ());
58+ }
7159 }
7260
61+ std::string filePath = info[0 ].As <Napi::String>();
7362
74- MediaInfoWorker* worker = new MediaInfoWorker (env, filePath, probeSize, analyzeDuration , std::move (deferred));
63+ MediaInfoWorker* worker = new MediaInfoWorker (env, filePath, std::move (options) , std::move (deferred));
7564
7665 worker->Queue ();
7766
0 commit comments