Return list of available first letters for manage navigation

This commit is contained in:
Ruud
2012-01-21 23:08:27 +01:00
parent fb795c277e
commit 470629d398
+40 -1
View File
@@ -29,6 +29,7 @@ class MoviePlugin(Plugin):
addApiView('movie.search', self.search)
addApiView('movie.list', self.listView)
addApiView('movie.refresh', self.refresh)
addApiView('movie.available_chars', self.charView)
addApiView('movie.add', self.add)
addApiView('movie.edit', self.edit)
@@ -72,7 +73,7 @@ class MoviePlugin(Plugin):
if starts_with in ascii_letters:
filter_or.append(LibraryTitle.title.startswith(toUnicode(starts_with)))
else:
for letter in ('!-=+,.?' + digits):
for letter in ('()!-=+,.?' + digits):
filter_or.append(LibraryTitle.title.startswith(toUnicode(letter)))
if search:
@@ -99,6 +100,32 @@ class MoviePlugin(Plugin):
return movies
def availableChars(self, status = ['active']):
chars = ''
db = get_session()
# Make a list from string
if not isinstance(status, (list, tuple)):
status = [status]
q = db.query(Movie) \
.join(Movie.library, Library.titles) \
.options(joinedload_all('library.titles')) \
.filter(LibraryTitle.default == True) \
.filter(or_(*[Movie.status.has(identifier = s) for s in status]))
results = q.all()
for movie in results:
char = movie.library.titles[0].title[0].lower()
char = char if char in ascii_letters else '#'
if char not in chars:
chars += char
return chars
def listView(self):
params = getParams()
@@ -115,6 +142,18 @@ class MoviePlugin(Plugin):
'movies': movies,
})
def charView(self):
params = getParams()
status = params.get('status', ['active'])
chars = self.availableChars(status)
return jsonified({
'success': True,
'empty': len(chars) == 0,
'chars': chars,
})
def refresh(self):
params = getParams()