@@ -231,6 +231,28 @@ static void progress_callback(struct whisper_context *ctx, struct whisper_state
231231 }
232232}
233233
234+ static bool abort_callback (void * user_data) {
235+ const ruby_whisper_callback_container *container = (ruby_whisper_callback_container *)user_data;
236+ if (!NIL_P (container->callback )) {
237+ VALUE result = rb_funcall (container->callback , id_call, 1 , container->user_data );
238+ if (!NIL_P (result) && Qfalse != result) {
239+ return true ;
240+ }
241+ }
242+ const long callbacks_len = RARRAY_LEN (container->callbacks );
243+ if (0 == callbacks_len) {
244+ return false ;
245+ }
246+ for (int j = 0 ; j < callbacks_len; j++) {
247+ VALUE cb = rb_ary_entry (container->callbacks , j);
248+ VALUE result = rb_funcall (cb, id_call, 1 , container->user_data );
249+ if (!NIL_P (result) && Qfalse != result) {
250+ return true ;
251+ }
252+ }
253+ return false ;
254+ }
255+
234256static VALUE ruby_whisper_params_allocate (VALUE klass) {
235257 ruby_whisper_params *rwp;
236258 rwp = ALLOC (ruby_whisper_params);
@@ -407,28 +429,8 @@ static VALUE ruby_whisper_transcribe(int argc, VALUE *argv, VALUE self) {
407429 }
408430
409431 if (!NIL_P (rwp->abort_callback_container ->callback ) || 0 != RARRAY_LEN (rwp->abort_callback_container ->callbacks )) {
410- rwp->params .abort_callback = [](void * user_data) {
411- const ruby_whisper_callback_container *container = (ruby_whisper_callback_container *)user_data;
412- if (!NIL_P (container->callback )) {
413- VALUE result = rb_funcall (container->callback , id_call, 1 , container->user_data );
414- if (!NIL_P (result) && Qfalse != result) {
415- return true ;
416- }
417- }
418- const long callbacks_len = RARRAY_LEN (container->callbacks );
419- if (0 == callbacks_len) {
420- return false ;
421- }
422- for (int j = 0 ; j < callbacks_len; j++) {
423- VALUE cb = rb_ary_entry (container->callbacks , j);
424- VALUE result = rb_funcall (cb, id_call, 1 , container->user_data );
425- if (!NIL_P (result) && Qfalse != result) {
426- return true ;
427- }
428- }
429- return false ;
430- };
431432 rwp->abort_callback_container ->context = &self;
433+ rwp->params .abort_callback = abort_callback;
432434 rwp->params .abort_callback_user_data = rwp->abort_callback_container ;
433435 }
434436
0 commit comments