def removeFromPlaylist(list='favorites'):
    movieList = mc.GetActiveWindow().GetList(MOVIES_ID)
    index = movieList.GetFocusedItem()
    items = movieList.GetItems()
    movie = items[index]
    voddlerapi.getAPI().removeFromPlaylist(movie.GetProperty('id'), list)
    movie.SetProperty('is%s' % string.capitalize(list), 'false')
    mc.ShowDialogNotification("%s removed from %s" % (movie.GetLabel(), list))
    updateMovieListItem(movieList, index, movie)
def addToPlaylist(list='favorites'):
    movieList = mc.GetActiveWindow().GetList(MOVIES_ID)
    index = movieList.GetFocusedItem()
    items = movieList.GetItems()
    movie = movieList.GetItem(index)
    voddlerapi.getAPI().addToPlaylist(movie.GetProperty('id'), list)
    movie.SetProperty('is%s' % string.capitalize(list), 'true')
    mc.ShowDialogNotification("%s added to %s" % (movie.GetLabel(), list))
    updateMovieListItem(movieList, index, movie)
def playMovie(listId=MOVIES_ID):
    movieList = GetActiveWindow().GetList(listId)
    index = movieList.GetFocusedItem()
    movie = movieList.GetItem(index)

    ShowDialogWait()
    try:
        status("Playing movie %s" % movie.GetLabel())
        player = mc.GetApp().GetLocalConfig().GetValue('player')
        url = voddlerapi.getAPI().getMovieURL(movie.GetProperty('id'), player)
        if not url:
            # revert to web-url
            url = movie.GetProperty('url')
        print "Playing %s" % url
        movie.SetPath(url)
    finally:
        hideWaitDialog()
    mc.GetPlayer().PlayWithActionMenu(movie)
def populateGenre():
    global pageType
    genres = voddlerapi.getAPI().getGenres(pageType)
    #pprint(data)
    items = mc.ListItems()
    itemList = []
    # dicts are not that easily sorted...
    for value, name in genres.items():
        #pprint(g)
        item = ListItem(ListItem.MEDIA_UNKNOWN)
        item.SetLabel(name)
        item.SetProperty('value', value)
        itemList.append(item)
    # ... so we wait, and then sort
    for item in sorted(itemList, key=_getGenreKey):
        items.append(item)
    genre = mc.GetActiveWindow().GetList(GENRE_ID)
    genre.SetItems(items)
def searchPlaylist(window, mainList):
    global currentPage, pageCache, pageSize, maxCount, maxPage
    offset = currentPage * pageSize
    items = ListItems()
    if currentPage in pageCache.keys():
        items = pageCache[currentPage]
    else:
        status("Fetching page %i" % (currentPage+1))
        # TODO: Support sorting?
        maxCount, data = voddlerapi.getAPI().getMoviesOnPlaylist(pageType, 'alphabetical')
        maxPage = (maxCount-1) / pageSize
        if maxPage < 0:
            maxPage = 0
        itemsOnCurrentPage = min(pageSize, maxCount, maxCount - (currentPage*pageSize))
        for index, movie in enumerate(data):
            status("Generating page %i of %i" % (currentPage+1, maxPage+1), index+1, itemsOnCurrentPage)
            item = ListItem(ListItem.MEDIA_VIDEO_FEATURE_FILM)
            movie.showOnListItem(item, offset+index)
            items.append(item)
        pageCache[currentPage] = items
    mainList.SetItems(items)
def searchNormal(window, mainList):
    global currentPage, pageCache, pageSize, maxCount, maxPage
    g = getGenre()
    s = getSorting()
    c = getCategory()
    offset = currentPage * pageSize
    items = ListItems()
    if currentPage in pageCache.keys():
        items = pageCache[currentPage]
    else:
        status("Fetching page %i" % (currentPage+1))
        maxCount, data = voddlerapi.getAPI().browse(pageType, c, g, s, offset, pageSize)
        maxPage = (maxCount-1) / pageSize
        if maxPage < 0:
            maxPage = 0
        itemsOnCurrentPage = min(pageSize, maxCount, maxCount - (currentPage*pageSize))
        for index, movie in enumerate(data):
            status("Generating page %i of %i" % (currentPage+1, maxPage+1), index+1, itemsOnCurrentPage)
            item = ListItem(ListItem.MEDIA_VIDEO_FEATURE_FILM)
            movie.showOnListItem(item, offset+index)
            items.append(item)
        pageCache[currentPage] = items
    mainList.SetItems(items)