diff options
author | Jed Lippold <jlippold@users.noreply.github.com> | 2017-07-31 08:16:09 -0400 |
---|---|---|
committer | enen92 <enen92@users.noreply.github.com> | 2017-07-31 13:16:09 +0100 |
commit | e5508900b62962b76cd03f61e5dd5ca6ba2f492d (patch) | |
tree | ce379ae3a0b541262fccce7763c332f11080fa55 /plugin.video.ring_doorbell/default.py | |
parent | 5a2098247be2066f13d5b17a511e44655458cbfb (diff) |
[plugin.video.ring_doorbell] 1.0.1 (#1281)
* [plugin.video.ring_doorbell] 1.0.1
* changes for kodi repo inclusion
* updates fanart, cache directory
Diffstat (limited to 'plugin.video.ring_doorbell/default.py')
-rw-r--r-- | plugin.video.ring_doorbell/default.py | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/plugin.video.ring_doorbell/default.py b/plugin.video.ring_doorbell/default.py new file mode 100644 index 0000000..dce6382 --- /dev/null +++ b/plugin.video.ring_doorbell/default.py @@ -0,0 +1,110 @@ +import sys +import urllib +import urllib2 +import urlparse +import xbmcgui +import xbmcplugin +import xbmcaddon +import json +import time +import uuid +import re + +from ring_doorbell import Ring +from datetime import datetime +from dateutil import tz + + +base_url = sys.argv[0] +addon_handle = int(sys.argv[1]) +args = urlparse.parse_qs(sys.argv[2][1:]) +ADDON = xbmcaddon.Addon(id='plugin.video.ring_doorbell') + +xbmcplugin.setContent(addon_handle, 'movies') +mode = args.get('mode', None) + +def init(): + + + email = ADDON.getSetting('email') + password = ADDON.getSetting('password') + items = ADDON.getSetting('items') + + if len(email) <= 7: + return showModal(ADDON.getLocalizedString(30200)) + if not re.match(r'[\w.-]+@[\w.-]+.\w+', email): + return showModal(ADDON.getLocalizedString(30200)) + if len(password) <= 3: + return showModal(ADDON.getLocalizedString(30201)) + if items.isdigit() == False: + return showModal(ADDON.getLocalizedString(30202)) + + try: + myring = Ring(email, password) + except: + return showModal(ADDON.getLocalizedString(30203)) + + if mode is None: + events = [] + for device in list(myring.stickup_cams + myring.doorbells): + for event in device.history(limit=items): + event['formatted'] = format_event(device, event) + event['doorbell_id'] = device.id + events.append(event) + sorted_events = sorted(events, key=lambda k: k['id'], reverse=True) + for event in sorted_events: + url = build_url({'mode': 'play', 'doorbell_id': event['doorbell_id'], 'video_id': event['id']}) + li = xbmcgui.ListItem(str(event['formatted']), iconImage='DefaultVideo.png') + xbmcplugin.addDirectoryItem(handle=addon_handle, url=url, listitem=li, isFolder=True) + xbmcplugin.endOfDirectory(addon_handle) + else: + if mode[0] == 'play': + doorbell_id = args['doorbell_id'][0] + video_id = args['video_id'][0] + for doorbell in list(myring.stickup_cams + myring.doorbells): + if doorbell.id == doorbell_id: + try: + url = doorbell.recording_url(video_id) + play_video(url) + except: + return showModal(ADDON.getLocalizedString(30204)) + +def play_video(path): + if xbmc.Player().isPlaying(): + xbmc.Player().stop() + + play_item = xbmcgui.ListItem(path=path) + xbmc.Player().play(item=path, listitem=play_item) + +def build_url(query): + return base_url + '?' + urllib.urlencode(query) + +def build_url2(query): + return base_url + ', ' + urllib.urlencode(query) + +def format_event(device, event): + from_zone = tz.tzutc() + to_zone = tz.tzlocal() + utc = event['created_at'].replace(tzinfo=from_zone) + local_time = utc.astimezone(to_zone) + + local_time_string = local_time.strftime('%I:%M %p ') + local_time_string += ADDON.getLocalizedString(30300) + local_time_string += local_time.strftime(' %A %b %d %Y') + + event_name = '' + if event['kind'] == 'on_demand': + event_name = ADDON.getLocalizedString(30301) + if event['kind'] == 'motion': + event_name = ADDON.getLocalizedString(30302) + if event['kind'] == 'ding': + event_name = ADDON.getLocalizedString(30303) + + return ' '.join([device.name, event_name, local_time_string]) + +def showModal(text): + __addon__ = xbmcaddon.Addon() + __addonname__ = __addon__.getAddonInfo('name') + xbmcgui.Dialog().ok(__addonname__, text) + +init()
\ No newline at end of file |