본문 바로가기
컴퓨터

XBMC 플러그인 만들기 - 4강: 트리 만들기

by Moon Madness 2015. 3. 27.

이전장에서 가장 간단한 형태를 봤지만, 실제로 동영상만 있는 경우는 드물겁니다. 즉 그룹으로 묶여 있기를 원하죠.

플러스, 모름지기 함수라면 argument를 넘겨받아 다용도로 사용도 되어야죠.


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

plugin = Plugin()

@plugin.route('/')
def main_menu():
    items = [
        {'label':'Video', 'path':plugin.url_for('video_menu')},
        {'label':'Image', 'path':plugin.url_for('image_menu', enable="yes")},
    ]
    return items

@plugin.route('/video/')
def video_menu():
    items = [
        {'label':'Hello World',
         'path':'http://goo.gl/Za1tw',
         'thumbnail':'http://goo.gl/zRbCi',
         'is_playable':True}
    ]
    return items

@plugin.route('/image/<enable>')
def image_menu(enable):
    items = []
    if enable == "yes":
        items.append({'label':'Dummy', 'path':''})
    return items

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


우선 plugin.url_for() 라는 함수가 새로 보입니다. 이것은 video_menu나 image_menu와 같은 python 함수의 이름와 인자를 route 경로 주소로 바꿔주는 역할을 합니다.

이게 왜 필요하냐면 addon.py 프로그램은 계속 실행되고 있는게 아닙니다. main_menu에서 video_menu로 간다고 해도 직접 호출되는게 아니고, 일단 플러그인 실행이 종료된 후 사용자의 입력을 받아서 어떤 경로가 가야할지가 결정되면 다시 플러그인을 호출하고 선택된 경로에서부터 함수 이름과 함수 인자를 추출해 내고 이걸로 다시 함수 실행이 되는 것입니다.


route('/image/<enable>')에서 <enable>은 함수 인자 이름을 뜻하며, 여러 개 지정하는 것도 가능합니다.


보다 고급 사용법으로는 redirectoin(사용자의 입력을 기다리지 않고 다른 함수로 이동), alias(하나의 함수에 여러 경로이름 연결)이 있습니다. 자세한건 xbmcswift2 문서를 참고하세요.