forked from platypush/platypush
Added Kodi plugin
This commit is contained in:
parent
3458fb8a23
commit
b6a4432528
1 changed files with 216 additions and 0 deletions
216
platypush/plugins/media/kodi.py
Normal file
216
platypush/plugins/media/kodi.py
Normal file
|
@ -0,0 +1,216 @@
|
||||||
|
import re
|
||||||
|
|
||||||
|
from platypush.plugins import Plugin, action
|
||||||
|
|
||||||
|
|
||||||
|
class MediaKodiPlugin(Plugin):
|
||||||
|
"""
|
||||||
|
Plugin to interact with a Kodi media player instance
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
|
||||||
|
* **kodi-json** (``pip install kodi-rtmidi``)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, url, username=None, password=None, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
:param url: URL for the JSON-RPC calls to the Kodi system (example: http://localhost:8080/jsonrpc)
|
||||||
|
:type url: str
|
||||||
|
|
||||||
|
:param username: Kodi username (optional)
|
||||||
|
:type username: str
|
||||||
|
|
||||||
|
:param password: Kodi password (optional)
|
||||||
|
:type username: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
self.url = url
|
||||||
|
self.username = username
|
||||||
|
self.password = password
|
||||||
|
|
||||||
|
|
||||||
|
def _get_kodi(self):
|
||||||
|
from kodijson import Kodi
|
||||||
|
|
||||||
|
args = [self.url]
|
||||||
|
if self.username:
|
||||||
|
args += [self.username]
|
||||||
|
if self.password: args += [self.password]
|
||||||
|
|
||||||
|
return Kodi(*args)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def get_movies(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Get the list of movies on the Kodi server
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().VideoLibrary.GetMovies()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def play_pause(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Play/pause the current media
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Player.PlayPause()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def stop(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Stop the current media
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Player.Stop()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def notify(self, title, message, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Send a notification to the Kodi UI
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().GUI.ShowNotification(title=title, message=message)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def open(self, resource, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Open and play the specified file or URL
|
||||||
|
"""
|
||||||
|
|
||||||
|
if resource.startswith('youtube:video:') \
|
||||||
|
or resource.startswith('https://www.youtube.com/watch?v='):
|
||||||
|
m1 = re.match('youtube:video:([^:?&]+)', resource)
|
||||||
|
m2 = re.match('https://www.youtube.com/watch?v=([^:?&#/]+)', resource)
|
||||||
|
youtube_id = None
|
||||||
|
|
||||||
|
if m1: youtube_id = m1.group(1)
|
||||||
|
elif m2: youtube_id = m2.group(1)
|
||||||
|
|
||||||
|
if youtube_id:
|
||||||
|
resource = 'plugin://plugin.video.youtube/?action=play_video&videoid=' + youtube_id
|
||||||
|
|
||||||
|
return self._get_kodi().Player.Open(item={'file': resource})
|
||||||
|
|
||||||
|
@action
|
||||||
|
def left(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Simulate a left input event
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Input.Left()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def right(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Simulate a right input event
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Input.Right()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def up(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Simulate an up input event
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Input.Up()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def down(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Simulate a down input event
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Input.Down()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def back(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Simulate a back input event
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Input.Back()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def select(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Simulate a select input event
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Input.Select()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def send_text(self, text, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Simulate a send_text input event
|
||||||
|
|
||||||
|
:param text: Text to send
|
||||||
|
:type text: str
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Input.SendText(text=text)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def volume(self, volume, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Set the application volume
|
||||||
|
|
||||||
|
:param volume: Volume to set
|
||||||
|
:type volume: int
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Application.SetVolume(volume=volume)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def mute(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Mute the application
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Application.SetMute(mute=True)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def unmute(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Unmute the application
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().Application.SetMute(mute=False)
|
||||||
|
|
||||||
|
@action
|
||||||
|
def scan_video_library(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Scan the video library
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().VideoLibrary.Scan()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def scan_audio_library(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Scan the audio library
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().AudioLibrary.Scan()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def clean_video_library(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Clean the video library
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().VideoLibrary.Clean()
|
||||||
|
|
||||||
|
@action
|
||||||
|
def clean_audio_library(self, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Clean the audio library
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get_kodi().AudioLibrary.Clean()
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
Loading…
Reference in a new issue