2 Replies Latest reply on Nov 21, 2014 4:42 PM by TigrouMeow

    The photo:requestJpegThumbnail callback is called more than once

    TigrouMeow Level 1

      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?

        • 1. Re: The photo:requestJpegThumbnail callback is called more than once
          areohbee Level 5

          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

          • 2. Re: The photo:requestJpegThumbnail callback is called more than once
            TigrouMeow Level 1

            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!