Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/development'
Browse files Browse the repository at this point in the history
  • Loading branch information
coryo committed Nov 28, 2015
2 parents 6437dbc + fa5fcc4 commit 5c781b5
Show file tree
Hide file tree
Showing 5 changed files with 431 additions and 26 deletions.
220 changes: 220 additions & 0 deletions Contents/Code/DumbTools.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
# DumbPrefs v1.0 by Cory <babylonstudio@gmail.com>
# DumbKeyboard v1.0 by Cory <babylonstudio@gmail.com>

class DumbKeyboard:

clients = ['Plex for iOS', 'Plex Media Player', 'Plex Web']
KEYS = list('abcdefghijklmnopqrstuvwxyz1234567890-=;[]\\\',./')
SHIFT_KEYS = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+:{}|\"<>?')

def __init__(self, prefix, oc, callback, dktitle=None, dkthumb=None, dkplaceholder=None, dksecure=False, **kwargs):

cb_hash = hash(str(callback)+str(kwargs))
Route.Connect(prefix+'/dumbkeyboard/%s' % cb_hash, self.Keyboard)
Route.Connect(prefix+'/dumbkeyboard/%s/submit' % cb_hash, self.Submit)
Route.Connect(prefix+'/dumbkeyboard/%s/history' % cb_hash, self.History)
Route.Connect(prefix+'/dumbkeyboard/%s/history/clear' % cb_hash, self.ClearHistory)
Route.Connect(prefix+'/dumbkeyboard/%s/history/add/{query}' % cb_hash, self.AddHistory)

oc.add(DirectoryObject(
key = Callback(self.Keyboard, query=dkplaceholder),
title = str(dktitle) if dktitle else u'%s' % L('DumbKeyboard Search'),
thumb = dkthumb
))

if not 'DumbKeyboard-History' in Dict:
Dict['DumbKeyboard-History'] = []
Dict.Save()

self.Callback = callback
self.callback_args = kwargs
self.secure = dksecure

def Keyboard(self, query=None, shift=False):

oc = ObjectContainer()

if self.secure and query:
string = ''.join(['*' for i in range(len(query[:-1]))]) + query[-1]
else:
string = query if query else ""

oc.add(DirectoryObject(
key = Callback(self.Submit, query=query),
title = u'%s: %s' % (L('Submit'), string.replace(' ', '_')),
))

if len(Dict['DumbKeyboard-History']) > 0:
oc.add(DirectoryObject(
key = Callback(self.History),
title = u'%s' % L('Search History'),
))

oc.add(DirectoryObject(
key = Callback(self.Keyboard, query=query+" " if query else " "),
title = 'Space',
))

if query:
oc.add(DirectoryObject(
key = Callback(self.Keyboard, query=query[:-1]),
title = 'Backspace',
))

oc.add(DirectoryObject(
key = Callback(self.Keyboard, query=query, shift=True),
title = 'Shift',
))

for key in self.KEYS if not shift else self.SHIFT_KEYS:
oc.add(DirectoryObject(
key = Callback(self.Keyboard, query=query+key if query else key),
title = u'%s' % key,
))

return oc

def History(self):

oc = ObjectContainer()

if len(Dict['DumbKeyboard-History']) > 0:
oc.add(DirectoryObject(
key = Callback(self.ClearHistory),
title = u'%s' % L('Clear History')
))

for item in Dict['DumbKeyboard-History']:
oc.add(DirectoryObject(
key = Callback(self.Submit, query=item),
title = u'%s' % item,
))

return oc

def ClearHistory(self):

Dict['DumbKeyboard-History'] = []
Dict.Save()

return self.History()

def AddHistory(self, query):

if not query in Dict['DumbKeyboard-History']:
Dict['DumbKeyboard-History'].append(query)
Dict.Save()

def Submit(self, query):

self.AddHistory(query)

kwargs = {'query': query}
kwargs.update(self.callback_args)

return self.Callback(**kwargs)

class DumbPrefs:

clients = ['Plex for iOS', 'Plex Media Player', 'Plex Home Theater', 'OpenPHT', 'Plex for Roku']

def __init__(self, prefix, oc, title=None, thumb=None):

Route.Connect(prefix+'/dumbprefs/list', self.ListPrefs)
Route.Connect(prefix+'/dumbprefs/listenum', self.ListEnum)
Route.Connect(prefix+'/dumbprefs/set', self.Set)
Route.Connect(prefix+'/dumbprefs/settext', self.SetText)

oc.add(DirectoryObject(
key = Callback(self.ListPrefs),
title = title if title else L('Preferences'),
thumb = thumb,
))

self.prefix = prefix
self.host = 'http://127.0.0.1:32400'

self.GetPrefs()

def GetPrefs(self):

try:
data = HTTP.Request("%s/:/plugins/%s/prefs" % (self.host, Plugin.Identifier), headers=Request.Headers, immediate=True, cacheTime=0).content
prefs = XML.ElementFromString(data).xpath('/MediaContainer/Setting')
except Exception as e:
Log(str(e))
prefs = []

defaultPrefs = []
for pref in prefs:
item = {}
item['id'] = pref.xpath("@id")[0]
item['type'] = pref.xpath("@type")[0]
item['label'] = pref.xpath("@label")[0]
item['default'] = pref.xpath("@default")[0]
item['secure'] = True if pref.xpath("@secure")[0] == "true" else False
if item['type'] == "enum":
item['values'] = pref.xpath("@values")[0].split("|")

defaultPrefs.append(item)

self.prefs = defaultPrefs

def Set(self, key, value):

HTTP.Request("%s/:/plugins/%s/prefs/set?%s=%s" % (self.host, Plugin.Identifier, key, value), headers=Request.Headers, immediate=True)
return ObjectContainer()

def ListPrefs(self):

oc = ObjectContainer(no_cache=True)

for pref in self.prefs:

do = DirectoryObject()

value = Prefs[pref['id']] if not pref['secure'] else ''.join(['*' for i in range(len(Prefs[pref['id']]))])
title = u'%s: %s = %s' % (L(pref['label']), pref['type'], value)

if pref['type'] == 'enum':
do.key = Callback(self.ListEnum, id=pref['id'])
elif pref['type'] == 'bool':
do.key = Callback(self.Set, key=pref['id'], value=str(not Prefs[pref['id']]).lower())
elif pref['type'] == 'text':
if Client.Product in DumbKeyboard.clients:
DumbKeyboard(self.prefix, oc, self.SetText, id=pref['id'],
dktitle = title,
dkplaceholder = Prefs[pref['id']],
dksecure = pref['secure']
)
else:
oc.add(InputDirectoryObject(
key = Callback(self.SetText, id=pref['id']),
title = title
))
continue
else:
do.key = Callback(self.ListPrefs)

do.title = title

oc.add(do)

return oc

def ListEnum(self, id):

oc = ObjectContainer()

for pref in self.prefs:
if pref['id'] == id:
for i, option in enumerate(pref['values']):
oc.add(DirectoryObject(
key = Callback(self.Set, key=id, value=i),
title = u'%s' % option,
))
return oc

def SetText(self, query, id):

return self.Set(key=id, value=query)
70 changes: 45 additions & 25 deletions Contents/Code/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@

import calendar
from datetime import datetime, timedelta
from updater import Updater
from DumbTools import DumbKeyboard
from DumbTools import DumbPrefs
####################################################################################################
TWITCH_API_BASE = 'https://api.twitch.tv/kraken'
TWTICH_API_VERSION = 3
Expand Down Expand Up @@ -206,7 +209,8 @@ def Start():
@handler(PATH, NAME, art=ICONS['art'])
def MainMenu():

oc = ObjectContainer(no_cache=True, replace_parent=False)
oc = ObjectContainer(no_cache=True)
Updater(PATH + '/updater', oc)

oc.add(DirectoryObject(
key = Callback(FeaturedStreamsList),
Expand Down Expand Up @@ -247,12 +251,17 @@ def MainMenu():
thumb = ICONS['following'],
))

oc.add(PrefsObject(
title = u'%s' % L('Preferences'),
tagline = u'%s' % L('Preferences'),
summary = u'%s' % L('Preferences'),
thumb = ICONS['settings'],
))
if Client.Product in DumbPrefs.clients:
DumbPrefs(PATH, oc,
title = u'%s' % L('Preferences'),
thumb = ICONS['settings'])
else:
oc.add(PrefsObject(
title = u'%s' % L('Preferences'),
tagline = u'%s' % L('Preferences'),
summary = u'%s' % L('Preferences'),
thumb = ICONS['settings'],
))

return oc

Expand Down Expand Up @@ -522,24 +531,35 @@ def SearchMenu():

oc = ObjectContainer()

oc.add(InputDirectoryObject(
key = Callback(SearchStreams),
title = u'%s %s' % (L('search'), L('streams')),
thumb = ICONS['search'],
prompt = u'%s %s' % (L('search_prompt'), L('streams')),
))
oc.add(InputDirectoryObject(
key = Callback(SearchChannels),
title = u'%s %s' % (L('search'), L('channels')),
thumb = ICONS['search'],
prompt = u'%s %s' % (L('search_prompt'), L('channels')),
))
oc.add(InputDirectoryObject(
key = Callback(SearchGames),
title = u'%s %s' % (L('search'), L('games')),
thumb = ICONS['search'],
prompt = u'%s %s' % (L('search_prompt'), L('games')),
))
if Client.Product in DumbKeyboard.clients:
DumbKeyboard(PATH, oc, SearchStreams,
dktitle = u'%s %s' % (L('search'), L('streams')),
dkthumb = ICONS['search'])
DumbKeyboard(PATH, oc, SearchChannels,
dktitle = u'%s %s' % (L('search'), L('channels')),
dkthumb = ICONS['search'])
DumbKeyboard(PATH, oc, SearchGames,
dktitle = u'%s %s' % (L('search'), L('games')),
dkthumb = ICONS['search'])
else:
oc.add(InputDirectoryObject(
key = Callback(SearchStreams),
title = u'%s %s' % (L('search'), L('streams')),
thumb = ICONS['search'],
prompt = u'%s %s' % (L('search_prompt'), L('streams')),
))
oc.add(InputDirectoryObject(
key = Callback(SearchChannels),
title = u'%s %s' % (L('search'), L('channels')),
thumb = ICONS['search'],
prompt = u'%s %s' % (L('search_prompt'), L('channels')),
))
oc.add(InputDirectoryObject(
key = Callback(SearchGames),
title = u'%s %s' % (L('search'), L('games')),
thumb = ICONS['search'],
prompt = u'%s %s' % (L('search_prompt'), L('games')),
))

return oc

Expand Down

0 comments on commit 5c781b5

Please sign in to comment.