Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

The photo:requestJpegThumbnail callback is called more than once

Explorer ,
Oct 05, 2014 Oct 05, 2014

Hello,

I am running into an issue where photo:requestJpegThumbnail  is called more than once.

Basically, inside a LrTask, I am looping through a selection of photos and I am calling photo:requestJpegThumbnail for each of them. Since it seems there is no way I can pause my task during the callback is executed, I have a look with a sleep. I would prefer to use a promise for this if possible but I didn't find a way to do it. It actually works without any problem but... the callback of photo:requestJpegThumbnail is sometimes called more than once. I can use a isFirstTry variable in there and then it works but I want to avoid using any hack. Here is what my (pseudo) code looks like.

(LrTask)

-- 'photos' is a selection of photos from the catalog

-- 'total' is the total number of photos and 'current' starts at 1

while not current < total do

     local isRunning = true

     current = current + 1

     photo = photos[current]

    

     thumbnail = photo:requestJpegThumbnail( 400, 400, function ( thumbnail )

               -- hello! I am sometimes called more than once for the same photo

               isRunning = false

     end )

    

     while isRunning do

          LrTasks.sleep( 1 / 5 )

     end

end

(/LrTask)

Any ideas?

TOPICS
SDK
669
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Nov 14, 2014 Nov 14, 2014

I don't use requestJpegThumbnail, because of a multitude of problems I had with it. I use a proprietary reverse-engineered method instead.

That said, one thing of note:

If you reload the plugin, it won't auto-kill asynchronous tasks, so it's possible to have them stack up.

So, if you have any long-running tasks, it's good to have a LrShutdownPlugin module which sets a global 'shutdown' flag, then code your task functions thusly:

while..

  if killTask then return end

  if shutdown then return end

end-while.

Dunno if that will help your problem or not.

Similarly, use context:addCleanupHandler( function() killTask = true end ) kinda code to make sure tasks are killed in case of error..

Also, it would be good to put a watchdog timer on your calls to requestJpegThumbnail, so you're not wholly dependent on trust in callback to keep plugin from hanging.

Cheers,

Rob

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Nov 21, 2014 Nov 21, 2014
LATEST

Hello Rob,

I exactly did that, I am now using some kind of shutdown flag everywhere! I am not sure what else I have changed since 2 months ago but I don't have this issue at all anymore, maybe thanks to that.

Now I have some more work to do with the addCleanupHandler, I have to admit I don't use it for all my tasks...

Thanks for your help always Rob!

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines