Repository navigation
Store download, delete and new actions without overwriting play positions - #244
Conversation
|
Hello Thank you for trying to resolve this annoying issue. Thank you again and happy podcasting ! |
YourPods and Podcast Merlin do not check the action type of the rows they receive, so download, delete and new rows with position -1 would hide or overwrite the play position there. GET episode_action keeps returning only play actions, and allActions=true also returns the others. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thanks @Xefir, that settles RePod. I also checked the list path: While checking that, I read the other clients in the README as well, and two of them don't look at the action type (details in the description). So I changed the approach: all action types are stored, but |
|
thanks for you contribution! |
Since 3.13.3 (531d6f4) the app drops every action except
play, because the table kept a single row per episode and adownload,deleteornewaction replaced the play position (#168, AntennaPod/AntennaPod#6957).This keeps one row per episode and action type instead. The unique indexes become (episode, action, user_id) and (guid, action, user_id), and the lookups that decide between insert and update include the action. A
downloadordeleteaction can no longer touch the play position, so theplayfilter on upload is removed. Lookups called without an action still return theplayrow.GET episode_actionstill returns onlyplayactions, unless a client asks for the others withallActions=true. Existing clients keep seeing what they see today. One exception: rows of another action type stored before 3.13.3 no longer appear in the default list.Why: clients can see what other devices downloaded, for example a desktop app that offers what AntennaPod downloaded on the phone.
Why opt-in: not every client checks the action type. YourPods keeps the newest row per episode whatever its type, and Podcast Merlin writes the position of every row to its database, so a
deleterow with position -1 would hide or overwrite the play position there. FocusPodcast appliesnewwithout comparing times. AntennaPod 3.12.3, Podcini.X, Kasts, Cardo and RePod act onplayonly. I read this in their sources and did not run them.Testing:
allActions=trueit listed an episode as downloaded elsewhere and kept its play position after a laterdelete. The phone's actions were sent to the HTTP API in AntennaPod's JSON format, not by AntennaPod on a real device.The migration runs once the app version is raised; I left that for the release. Made with AI assistance (Claude Code), including the tests above.
🤖 Generated with Claude Code