Could you please raise an issue at
https://github.com/darktable-org/lua-scripts/issues/new

Thanks,

Bill

On Sun, Feb 6, 2022 at 12:21 PM Christian Birzer <
christ...@christianbirzer.de> wrote:

> Hi,
>
> I'm currently writing (or, trying to write 🙄) a lua script that will
> generate the preview cache for selected images (without leaving dt to start
> the external program...). Basically, it seems to work but I see two strange
> things that I don't understand right now.
>
> First, the essential parts of my script:
>
>
> local function stop_job( job )
>   job.valid = false
> end
> local function create_previews()
>   job = dt.gui.create_job( "generating previews", true, stop_job )
>   local images = dt.gui.action_images
>   for i,image in pairs(images) do
>     if job.valid then
>       image:generate_cache( true, 0, 8 )
>       job.percent = i / #images
>       dt.control.sleep( 1 ) -- without this, the job cannot be aborted
>     else
>       break
>     end
>   end
>   if job.valid then -- without this, dt crashes with an exception in
> dt_pthread_mutex_destroy() after aborting the job
>     job.valid = false
>   end
> end
>
> the create_previews function will be called from a registered action.
>
> My two questions:
>
> 1. Without the sleep() I cannot stop the running job. After starting the
> job, the progress bar is shown and when I hit the 'X' nothing happens until
> the for loop processed all images. Then the stop_job() is called. With the
> sleep the stop_job is called after processing the current image and the job
> terminates as desired.
>
> 2. When I set the job.valid to false after the loop it only works as long
> as the job is not terminated via the stop_job function. As this already
> sets the job to invalid I guess it is already destroyed and in the second
> job.valid=false dt crashes with an exception in dt_pthread_mutex_destroy.
>
> Both phenomena are completely understandable, but: I see a lot of scripts
> that execute job.valid=false twice (when aborted) and seem to rely on
> stopping without a call to sleep(). Hmmm. What I'm missing here?
>
> I hope you can clarify this,
> thanks a lot!
> Christian
>
> --
> Christian 
> birzerchrist...@christianbirzer.dewww.christianbirzer.dewww.500px.com/ChristianBirzerwww.flickr.com/ChristianBirzerwww.facebook.com/Birzer.Christianwww.instagram.com/birzer.christian
>
>
> ___________________________________________________________________________
> darktable developer mailing list to unsubscribe send a mail to
> darktable-dev+unsubscr...@lists.darktable.org
>

___________________________________________________________________________
darktable developer mailing list
to unsubscribe send a mail to darktable-dev+unsubscr...@lists.darktable.org

Reply via email to