import xbmcaddon
import xbmc
import json
+import uuid
+from UniversalAnalytics import Tracker
try:
import cPickle as pickle
except:
dlg = xbmcgui.Dialog()
return dlg.numeric(heading=self.get_local_string(string_id=30019) + ' ' + self.get_local_string(string_id=30022), type=0)
- def show_adult_pin_dialog (self):
- """Asks the user for the adult pin
-
- Returns
- -------
- :obj:`int`
- 4 digit adult pin needed for adult movies
- """
- dlg = xbmcgui.Dialog()
- return dlg.input(self.get_local_string(string_id=30002), type=xbmcgui.INPUT_NUMERIC)
-
def show_search_term_dialog (self):
"""Asks the user for a term to query the netflix search for
Netflix password
"""
dlg = xbmcgui.Dialog()
- return dlg.input(self.get_local_string(string_id=30004), type=xbmcgui.INPUT_ALPHANUM)
+ return dlg.input(self.get_local_string(string_id=30004), type=xbmcgui.INPUT_ALPHANUM, option=xbmcgui.ALPHANUM_HIDE_INPUT)
def show_email_dialog (self):
"""Asks the user for its Netflix account email
dlg = xbmcgui.Dialog()
return dlg.input(self.get_local_string(string_id=30005), type=xbmcgui.INPUT_ALPHANUM)
- def show_wrong_adult_pin_notification (self):
- """Shows notification that a wrong adult pin was given
+ def show_login_failed_notification (self):
+ """Shows notification that the login failed
Returns
-------
Dialog shown
"""
dialog = xbmcgui.Dialog()
- dialog.notification(self.get_local_string(string_id=30006), self.get_local_string(string_id=30007), xbmcgui.NOTIFICATION_ERROR, 5000)
+ dialog.notification(self.get_local_string(string_id=30008), self.get_local_string(string_id=30009), xbmcgui.NOTIFICATION_ERROR, 5000)
return True
- def show_login_failed_notification (self):
- """Shows notification that the login failed
+ def show_missing_inputstream_addon_notification (self):
+ """Shows notification that the inputstream addon couldn't be found
Returns
-------
Dialog shown
"""
dialog = xbmcgui.Dialog()
- dialog.notification(self.get_local_string(string_id=30008), self.get_local_string(string_id=30009), xbmcgui.NOTIFICATION_ERROR, 5000)
+ dialog.notification(self.get_local_string(string_id=30028), self.get_local_string(string_id=30029), xbmcgui.NOTIFICATION_ERROR, 5000)
return True
- def show_missing_inputstream_addon_notification (self):
- """Shows notification that the inputstream addon couldn't be found
+ def show_no_search_results_notification (self):
+ """Shows notification that no search results could be found
Returns
-------
Dialog shown
"""
dialog = xbmcgui.Dialog()
- dialog.notification(self.get_local_string(string_id=30028), self.get_local_string(string_id=30029), xbmcgui.NOTIFICATION_ERROR, 5000)
+ dialog.notification(self.get_local_string(string_id=30011), self.get_local_string(string_id=30013))
+ return True
+
+ def show_no_seasons_notification (self):
+ """Shows notification that no seasons be found
+
+ Returns
+ -------
+ bool
+ Dialog shown
+ """
+ dialog = xbmcgui.Dialog()
+ dialog.notification(self.get_local_string(string_id=30010), self.get_local_string(string_id=30012))
return True
def set_setting (self, key, value):
'password': self.addon.getSetting('password')
}
+ def get_dolby_setting(self):
+ """
+ Returns if the dolby sound is enabled
+ :return: True|False
+ """
+ return self.addon.getSetting('enable_dolby_sound') == 'true'
+
def get_custom_library_settings (self):
"""Returns the settings in regards to the custom library folder(s)
if video_list[video_list_id]['type'] == 'movie':
# it´s a movie, so we need no subfolder & a route to play it
isFolder = False
- # check maturity index, to determine if we need the adult pin
- needs_pin = (True, False)[int(video['maturity']['level']) >= 1000]
- url = build_url({'action': 'play_video', 'video_id': video_list_id, 'pin': needs_pin})
+ url = build_url({'action': 'play_video', 'video_id': video_list_id})
# add list item info
li = self._generate_entry_info(entry=video, li=li)
li = self._generate_context_menu_items(entry=video, li=li)
bool
List could be build
"""
- li = xbmcgui.ListItem(label=self.get_local_string(30012))
- xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url='', listitem=li, isFolder=False)
+ self.show_no_seasons_notification()
xbmcplugin.endOfDirectory(self.plugin_handle)
return True
bool
List could be build
"""
- li = xbmcgui.ListItem(label=self.get_local_string(30013))
- xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=build_url({'action': action}), listitem=li, isFolder=False)
- xbmcplugin.endOfDirectory(self.plugin_handle)
- return True
+ self.show_no_search_results_notification()
+ return xbmcplugin.endOfDirectory(self.plugin_handle)
def build_user_sub_listing (self, video_list_ids, type, action, build_url):
"""Builds the video lists screen for user subfolders (genres & recommendations)
for index in seasons_sorted:
for season_id in season_list:
season = season_list[season_id]
- if int(season['id']) == index:
+ if int(season['idx']) == index:
li = xbmcgui.ListItem(label=season['text'])
# add some art to the item
li = self._generate_art_info(entry=season, li=li)
# add list item info
li = self._generate_entry_info(entry=episode, li=li, base_info={'mediatype': 'episode'})
li = self._generate_context_menu_items(entry=episode, li=li)
- # check maturity index, to determine if we need the adult pin
- needs_pin = (True, False)[int(episode['maturity']['rating']['maturityLevel']) >= 1000]
- url = build_url({'action': 'play_video', 'video_id': episode_id, 'pin': needs_pin, 'start_offset': episode['bookmark']})
+ url = build_url({'action': 'play_video', 'video_id': episode_id, 'start_offset': episode['bookmark']})
xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=url, listitem=li, isFolder=False)
xbmcplugin.addSortMethod(handle=self.plugin_handle, sortMethod=xbmcplugin.SORT_METHOD_EPISODE)
self.log(msg='Inputstream addon not found')
return False
+ # track play event
+ self.track_event('playVideo')
+
# inputstream addon properties
msl_service_url = 'http://localhost:' + str(self.addon.getSetting('msl_service_port'))
play_item = xbmcgui.ListItem(path=msl_service_url + '/manifest?id=' + video_id)
# check if we have a bookmark e.g. start offset position
if int(start_offset) > 0:
- play_item.setProperty('StartOffset', str(start_offset))
+ play_item.setProperty('StartOffset', str(start_offset) + '.0')
return xbmcplugin.setResolvedUrl(self.plugin_handle, True, listitem=play_item)
def _generate_art_info (self, entry, li):
li.addContextMenuItems(items)
return li
- def log (self, msg, level=xbmc.LOGNOTICE):
+ def log (self, msg, level=xbmc.LOGDEBUG):
"""Adds a log entry to the Kodi log
Parameters
level : :obj:`int`
Kodi log level
"""
- if self.verb_log:
- if level == xbmc.LOGDEBUG and self.verb_log:
- level = xbmc.LOGNOTICE
- if isinstance(msg, unicode):
- msg = msg.encode('utf-8')
- xbmc.log('[%s] %s' % (self.plugin, msg.__str__()), level)
+ if isinstance(msg, unicode):
+ msg = msg.encode('utf-8')
+ xbmc.log('[%s] %s' % (self.plugin, msg.__str__()), level)
def get_local_string (self, string_id):
"""Returns the localized version of a string
instance of the Library class
"""
self.library = library
+
+ def track_event(self, event):
+ """
+ Send a tracking event if tracking is enabled
+ :param event: the string idetifier of the event
+ :return: None
+ """
+ # Check if tracking is enabled
+ enable_tracking = (self.addon.getSetting('enable_tracking') == 'true')
+ if enable_tracking:
+ #Get or Create Tracking id
+ tracking_id = self.addon.getSetting('tracking_id')
+ if tracking_id is '':
+ tracking_id = str(uuid.uuid4())
+ self.addon.setSetting('tracking_id', tracking_id)
+ # Send the tracking event
+ tracker = Tracker.create('UA-46081640-5', client_id=tracking_id)
+ tracker.send('event', event)