본문 바로가기
컴퓨터

XBMC 플러그인 만들기 - 5강: 페이지 만들기

by Moon Madness 2015. 4. 2.

한 화면에 표시할게 많으면 다음 페이지로 넘어가 거기에다 표시되게 하고 싶죠.

또 이전 페이지로도 돌아가게 하고 싶구요.


# -*- coding: utf-8 -*-
from xbmcswift2 import Plugin

plugin = Plugin()

@plugin.route('/')
def main_menu():
    return [{'label':'Video', 'path':plugin.url_for('video_menu', page='-')}]

@plugin.route('/video/<page>')
def video_menu(page):
    page2 = 1 if page == '-' else int(page)
    result = parse_site()
    items = result[page-1]
    if page2 > 1:
        items.append({'label':u'[B]<<이전 페이지[/B]', 
            'path':plugin.url_for('video_menu', page=page2-1)})
    if page2 < len(result):
        items.append({'label':u'[B]다음 페이지>>[/B]',
            'path':plugin.url_for('video_menu', page=page2+1)})
    cont_page = True if page == '-' else False
    return plugin.finish(items, update_listing=cont_page)

if __name__ == "__main__":
    plugin.run()
# vim:sw=4:sts=4:et

plugin.url_for에 page 인자를 주는 것은 4강에서 배웠죠. 그런데 page에 번호를 주지 않고 '-'를 준 것은 후에 설명할 update_listing을 위한 트릭입니다.


video_menu()를 보면 string으로 취급된 page를 다시 integer로 바꾼 후 이를 기반으로 페이지 넘기는 메뉴를 추가한 것을 알 수 있을겁니다.

label에 쓰인 [B]은 bold를 뜻하며 그외에도 [COLOR]라던가 [U]도 있습니다.


여기서 가장 중요한 것은 plugin.finish() 가 등장했고 함수의 리턴값으로 쓰인다는 것입니다. 여기서 update_listing은 새로 트리를 만드는게 아니고 이전걸 덮어쓰라는 의미입니다.

이것은 상위폴더로 이동하는 메뉴('..')가 이전 레벨이 아닌 이전 페이지로 가는 것을 막아줍니다.