Granted, this is a rather simplistic question but I’ll ask it nonetheless: René, in your opinion, could this also be used to import tags and ratings from a digiKam database? I’m hoping that I could take advantage of your heavy lifting and just drop in the references to digikam accordingly. Would this be a waste of time or, is it feasible?
> On 30 Jan 2017, at 09:43, René Seindal <r...@seindal.dk> wrote: > > Hi > > I found a solution, even if its not exactly obvious. > > In the main loop of my script, I do > > progress.percent = count/total > dt.gui.selection() > if cancelled then break end > > That does it. > > The darktable.gui.selection function is marked as implicit_yield so it gives > the gui a chance to update, so the progress bar ticks along and if you click > the cancel job button, the variable cancelled is true afterwards, and the > loop breaks. > > I've tried quite a few other things. > > I tried using > > coroutine.yield('WAIT_MS', 10) > > to put in a delay and leave time for the gui to run, but it gives me a run > time error: > > LUA ERROR : attempt to yield across a C-call boundary > > I haven't quite understood why. > > I tried with the undocumented > > dt.control.sleep(10) > > and nothing. If I increase the delay to 1000ms the progress bar updates, but > of course the script is very very slow that way. > > I tried to open a file that's always readable, like /dev/zero, and use > > dt.control.read(file) > > but that did nothing either. > > Going through the documentation systematically, I found dt.gui.selection() > which implicitly yields and that does the trick. > > Its totally not obvious but it works. > > René > > > On 2017-01-30 14:02, Christian Kanzian wrote: >> Hi, >> >> I'm not familar with programming and it is often hard for me to >> distinguish between LUA core functions and darkable LUA API. You have to >> look at LUA docs as well [0]. >> >> Am 2017-01-30 12:34, schrieb René Seindal: >>> On 2017-01-30 12:28, Tobias Ellinghaus wrote: >>>> Am Montag, 30. Januar 2017, 12:04:03 CET schrieb René Seindal: >>>>> Hi >>>>> >> [...] >>> >>> I have put in a progress bar (background job) but the progress bar >>> doesn't update and the cancel button doesn't work, because I can't >>> find a way to hand off control to the gui to update, while looping >>> through the images, looking stuff up in the other sqlite3 database. >> >> From your script >>> progress.percent = total / count >> >> The API [1] says the value should be between 0 and 1. So I think this >> should look like: >> progress.percent = count / total >> >> I think it is not enough to break the loop. Also you need to set the >> job.valid to false to cancel it, like the script which Tobias mentioned. >> >> Christian >> >> [0] https://www.lua.org/manual/5.3/ >> [1] https://www.darktable.org/lua-api/ar01s02s30.html.php > > > -- > René Seindal - r...@seindal.dk <mailto:r...@seindal.dk> > ____________________________________________________________________________ > darktable user mailing list > to unsubscribe send a mail to darktable-user+unsubscr...@lists.darktable.org > <mailto:darktable-user+unsubscr...@lists.darktable.org>
signature.asc
Description: Message signed with OpenPGP using GPGMail