[python-win32] possible data corruption when deleting iTunes playlist items
Jeremy Nicoll
jn.ml.pyth.93 at letterboxes.org
Thu Mar 9 15:13:23 EST 2023
On Wed, 8 Mar 2023, at 22:28, Clayton Macleod wrote:
> On Wed, Mar 8, 2023 at 5:34 AM Jeremy Nicoll <jn.ml.pyth.93 at letterboxes.org>
> wrote:
Please stop sending me private copies of your replies. I can easily read them
on the mail list itself.
>> I also wondered just how often your add/deletes failed? Are you adding a
>> track at the instant that your app notices that iTunes has just reached
>> the end of one track and started the next, and presumably at that point
>> removed the just-played track from the playlist?
> The old feature I'm trying to emulate was a 25-song ... So the songs that
> are being deleted from the playlist haven't been played in quite some time
> by the time it comes to actually delete it, and even with that, I've added a
> 1-second delay anyway.
ok
>> It also struck me that in the GUI application - even if as a user you
>> may think you can make changes to playlists at any time - the GUI
>> may inhibit user-made changes for a few fractions of a second if IT
>> is about to make a change, but the COM interface might just be
>> offering you the code that makes the change without the locking
>> around it.
>>
>> So eg you might need to search the iTunes COM docs (I know there's
>> some ... for any sign of "locks" or "serialisation" or "queuing" or "data
>> integrity" controls to prevent the app and you simultaneously updating
>> a data structure inside iTunes. ... It's also possible that - say - it
>> renumbers or completely rebuilds a playlist structure whenever it
>> changes. I wondered if, if that's so, your code would get the rebuilt one
>> each time.
> Well, if I'm there watching it as one song is about to end I can see that
> it deletes the song at the top of the list just fine ...
That's interesting; I know I asked a while back if you could watch stuff
changing in the GUI as your script ran, but in between times I read at
https://www.joshkunz.com/iTunesControl/
that (it says this right at the top)
"Note that calls to the iTunes COM interface will be suspended when a
dialog is being displayed in iTunes."
which made me think you wouldn't in fact be able to do that - that your
script would be frozen.
> and adds a new song to the end of the list just fine, ignoring the fact
> that there are sometimes errors
I read in one of the snippets of code that you posted that you were
ignoring errors because you couldn't do anything about them, but
I wonder if eg your script should at least be logging them, perhaps
to see if there's a relationship between when adds fail vv when deletes
do?
> It was my understanding that the song library was doing snagged
What? Errored?
> and put into a local dicationary, and that this
> was where I was selecting my songs from.
> And also that the delete command
> only deletes the song from the current playlist, and only actually deletes
> the song from the filesystem
Nobody - neither you nor I - has suggested anything has been deleted
from the file system.
> What strikes me as odd is how the references work fine as long as I haven't
> made a delete call, but after I make a delete call the references fail all
> over the place. It isn't just one reference that no longer works. It
> throws hundreds of random failures from each of the five groups in the
> 1000-test even though only one file has been through the delete call.
No /file/ has been through a delete call, unless you're changing the
story. I hope that was just a slip of the keyboard!
--
Jeremy Nicoll - my opinions are my own.
More information about the python-win32
mailing list