Service add-ons: Difference between revisions
(Avoid using while true statements in kodi scripts or encourage people to use them. It might cause kodi to hang on shutdown if not used properly.) |
RogueScholar (talk | contribs) (Fix dead-end page and edit for concision) |
||
(6 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
Service [[add-ons]] will be automatically started when a [[Profiles|user profile]] logs in or on Kodi startup, and stopped when the user profile logs out. They must offer the '''<code>xbmc.service</code>''' extension point. Here's a typical example of the contents of the [[addon.xml]] file such add-ons need to provide: | |||
Service | |||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
Line 11: | Line 10: | ||
<import addon="xbmc.python" version="2.1.0"/> | <import addon="xbmc.python" version="2.1.0"/> | ||
</requires> | </requires> | ||
<extension point="xbmc.service" library="service.py | <extension point="xbmc.service" library="service.py" /> | ||
<extension point="xbmc.addon.metadata"> | <extension point="xbmc.addon.metadata"> | ||
<platform>all</platform> | <platform>all</platform> | ||
Line 19: | Line 18: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
If your | If your add-on is meant to be run while Kodi is running, you need to periodically check if Kodi is exiting. The add-on is responsible for terminating when Kodi wants to exit. This can be checked by creating an <code>xbmc.Monitor</code> instance and calling the <code>abortRequested()</code> method. To wait for this event instead, call the <code>waitForAbort()</code> method. | ||
Below is an example service that prints "hello addon!" every 10 seconds until Kodi exits: | |||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> | ||
Line 37: | Line 36: | ||
xbmc.log("hello addon! %s" % time.time(), level=xbmc.LOGDEBUG) | xbmc.log("hello addon! %s" % time.time(), level=xbmc.LOGDEBUG) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Gotham and earlier == | == Gotham and earlier == | ||
<code>abortRequested()</code> and <code>waitForAbort()</code> are new | <code>abortRequested()</code> and <code>waitForAbort()</code> are new methods introduced with Kodi [[Archive:Helix|Helix]]. In [[Archive:Gotham API changes|Gotham]] and earlier, use <code>xbmc.sleep</code> and check the <code>xbmc.abortRequested</code> attribute periodically. | ||
Example: | Example: | ||
Line 49: | Line 47: | ||
if __name__ == '__main__': | if __name__ == '__main__': | ||
while not xbmc.abortRequested: | while not xbmc.abortRequested: | ||
# some code | # some code | ||
xbmc.sleep(500) | xbmc.sleep(500) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[ | == Leia and earlier == | ||
Prior to Kodi v18 [[Leia]], there was an additional option, <code>start="startup"</code>, that would start the service add-on before the first profile login, but the usefulness of that functionality was found to be negligible, and it was removed. | |||
[[Category:Add-on development]] | [[Category:Add-on development]] |
Latest revision as of 01:41, 23 September 2021
Service add-ons will be automatically started when a user profile logs in or on Kodi startup, and stopped when the user profile logs out. They must offer the xbmc.service
extension point. Here's a typical example of the contents of the addon.xml file such add-ons need to provide:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="service.example" name="Example service" version="1.0.0" provider-name=""> <requires> <import addon="xbmc.python" version="2.1.0"/> </requires> <extension point="xbmc.service" library="service.py" /> <extension point="xbmc.addon.metadata"> <platform>all</platform> <summary lang="en"></summary> </extension> </addon>
If your add-on is meant to be run while Kodi is running, you need to periodically check if Kodi is exiting. The add-on is responsible for terminating when Kodi wants to exit. This can be checked by creating an xbmc.Monitor
instance and calling the abortRequested()
method. To wait for this event instead, call the waitForAbort()
method.
Below is an example service that prints "hello addon!" every 10 seconds until Kodi exits:
import time import xbmc if __name__ == '__main__': monitor = xbmc.Monitor() while not monitor.abortRequested(): # Sleep/wait for abort for 10 seconds if monitor.waitForAbort(10): # Abort was requested while waiting. We should exit break xbmc.log("hello addon! %s" % time.time(), level=xbmc.LOGDEBUG)
Gotham and earlier
abortRequested()
and waitForAbort()
are new methods introduced with Kodi Helix. In Gotham and earlier, use xbmc.sleep
and check the xbmc.abortRequested
attribute periodically.
Example:
import xbmc if __name__ == '__main__': while not xbmc.abortRequested: # some code xbmc.sleep(500)
Leia and earlier
Prior to Kodi v18 Leia, there was an additional option, start="startup"
, that would start the service add-on before the first profile login, but the usefulness of that functionality was found to be negligible, and it was removed.