Issue description:
There’s an ever lasting bug in Kodis core which has yet to be fixed (I’m actually trying to do so myself but am not to familiar with c++ or Kodis core so when and if this gets fixed is very much up in the air).
The actual issue
The issue manifests itself when a music plugin tries to make a infinite playlist.
Following chain of events works for a video plugin but does not for a music one:
RPC Call: Player.Open with '{"file": "plugin://<addon-path to setResolveUrl>"}
Plugin Code: Playlist.Clear()
Plugin Code: Playlist.add(<resolved url>, <item with resolved url>)
Plugin Code: xbmcplugin.setResolvedUrl(<handle>, True, <item with resolved url>)
Plugin Code: Playlist.add(<another item with proper urls etc.>)
Points 4. and 5. start cycling to create an infinite playlist
Expected result (works for video):
Player is playing something
First playlist entry is the currently playing item (Highlighted as such by kodi)
Player can skip to the next item in playlist
Actual result (only for audio):
Player is playing something
First playlist entry is NOT displayed as being playing
Can NOT skip to next item.
Seems like the player thinks there’s no more items in the playlist
As a dev myself I do understand that this should preferably be fixed in kodi and not be worked around by external clients but as mentioned above, this has been an issue for a long time and I’m not sure if I (without help) can get this fixed.
Initial feedback was that this might not be as easy to fix as I was making it out to be.
The workaround
Instead of using Player.Open with the item-path, doing the following works (e.g. Chorus2 does that)
Playlist.Clear: playlistid 0
Playlist.Insert: playlistid 0, position 0
Player.Open: playlistid 0
This will obviously also work for video (given the correct playlistid) so no need to keep separate code.
As you said long lasting Kodi issue You should ask the Json maintainer, ho well I forget I was banned for saying there’s no one
Some addons does work so something can be done at addon level.
Your workaround is applied on some cases where I know for sure the playlist, but as you know Kodi playlist handling is a mess and addons can be audio and/or video and some ever do not announce their type.
It’s impossible to properly handle the correct playlist for each cases and Kodi mixed playlist have even more bugs to rely on only pushing to video playlist and Kodi magic.
The only addons that work are the ones not creating infinite playlists (like I do).
The reason for this is because the way plugin urls are resolved is different when they come from the internal playlist vs. through Player.Open
From a plugin perspective I tried literally everything imaginable to make this work (been about 6 hours now, no kidding) but there’s no way to make it work properly.
My outline workaround should always work no matter the content type so again, please consider changing this.
You do understand that I need to pass the playlist id for the call? And that addons can be video and/or audio and I have, a lot of the time, no way to know what playlist I should use?
Let’s avoid repeating the Wear/Google+ stuff and your actions please. I have maybe just a little more experience on Kodi core and Json than you may have
And yes I’m fully aware of that answer since I did gave the same a lot of times earlier on that same forum. (https://forum.kodi.tv/showthread.php?tid=315249&pid=2593814#pid2593814 even just in that same thread a year earlier…)
And I do that for music playlist since I’m able to know the kind of media and use the proper playlist.
Furthermore you can easily do the exact same thing from the addon
You do know you have access to JSON and can do the call from the addon yourself and it’s even better since you know the playlist type?
I wonder why I try to help Team Kodi on Json part when I was banned for trying to help on Json part, ask the great Martijn he is a master on Kodi core and Json and addons
Or at least he will be able to tell you who to ask since he banned the only one who cared about that part.
@gdpr since you no more answer I suppose you have not understood that I still helped you here despite the situation as I always did
You can easily detect when your plugin is started from GUI or from Json by the number of arguments passed
You can call Json yourself to restart your addons in workaround mode xbmc.executeJSONRPC('[{"id":0,"jsonrpc":"2.0","method":"Playlist.Clear","params":{"playlistid":XXX}},{"id":1,"jsonrpc":"2.0","method":"Playlist.add","params":{"playlistid":XXX,"item":{"file":"%s"}}},{"id":2,"jsonrpc":"2.0","method":"Player.Open","params":{"playlistid":XXX,"position":0}}]' % TheAddonPath)
Of course no need to say thanks I’m the bad guy since all those years after all
I am at work so time for replies is limited.
Further, I hope you understand that your attitude is quite… stuck up and to be honest, I had to calm myself first because who knows what I would have written otherwise.
Because I’m mainly interested in a solution I am appreciative of any help so thanks.
I did figure out at some point that the handle is valid in case of e.g. Player.Open while it’s not for my listitem (no folder and not playable) and used that to work around prior issues already.
Me figuring this out was about 5 hours worth of frustration already.
I honestly forgot that this would re-open the possibility to call myself.
if valid_handle:
# Item activated through e.g. Chorus2
xbmcplugin.setResolvedUrl(HANDLE, False, item)
xbmc.executebuiltin('RunPlugin({})'.format(
utils.build_path('play', network, channel, cache=True)))
else:
# Item activated through Kodi itself
xbmc.Player().play()
Initial tests show promise although this causes a few more busy dialogs to pop up than there should but ¯_(ツ)_/¯.
Many of my earlier attempts involved me doing an explicite playwithouttelling kodi that - whatever it tried just now - failed (setResolvedUrl(HANDLE, False, item) in this case) causing a crash because two play events (kodi internally and my addon) would overlap (At least that’s what I suspect)
Anyway, I’m sure you really don’t care so… Again thanks. This seems to be the only solution giving me what I want.
You are Team Kodi and participated indirectly in the ban from forum and github preventing me to fix many things in Kodi.
You ask me to add a workaround in Yatse for a bug in Kodi.
I give you the details about why I can’t do that (still no way to get the playlist id)
I give you the proper solution.
And yet you are mad at me? My attitude is perfectly fine, not sure I can say the same from you, seeing how you acted previously for Wear and bad rating for feature requests without any excuses.
And now despite solutions and details why your workaround does not work on Yatse side you continue to think I’m stuck and the bad guy. Repeating I want that, when I’ve explained why it’s not possible is not a nice way.
I should have just deleted your requests and banned you, yet I did everything correctly.
Seriously, we do not see the same reality right now I know you don’t care and certainly will never understand that the issue here is your attitude. And that the fact that I did gave you the solution 2 times means that I do care…
Some people really amaze me by being totally unable to see the whole picture.
And as you already know if you want the busy dialogs to go, ask Json maintainer, I could fix Kodi but can’t thanks to marvelous Martijn that prefer his pride over Kodi.
Posting here so that everyone can see the real you
You ask for help to someone who have no reason to help, yet have the help and act like a little princess
I guess you have no shame To be honest I’m the one speechless because your acts were easy to predict but I really did not thought you’d do it after all
My dear Tadly you won’t get out that easily from your actions
You do not take responsibility for your actions that fine, but since posting that bad rating is acting like an asshole, people have the right to know who you are and the kind of people you are.
tadly (tadly) · GitHub from Team Kodi, yes everything I wrote was just the truth, sorry princess.
Exact same behavior, is persuaded to be right, do not read or try to understand the explanations and think that I owe him everything so can use bad ratings or insults as he wants.
Each times despite your actions, I take time to answer and help, and each times you think you can insult and bad rate despite getting proper answers and help.