Difference between revisions of "DevelopWDTVExtPlugin"
| Line 45: | Line 45: | ||
<code>YourPlugin.prototype.onPageTimer = function(page){ }</code> | <code>YourPlugin.prototype.onPageTimer = function(page){ }</code> | ||
| + | |||
| + | === Getting Started... === | ||
| + | I will try to explain here how to start developing WDTVExt plugins. I'm by no means a 'programmer' and learned javascript just recently while dicovering WDTVExt. So if I'm doing thins wrong here, please correct me. | ||
| + | |||
| + | ==== What can we do with WDTVExt? (v0.23.5) ==== | ||
| + | * File [https://developer.mozilla.org/en/SpiderMonkey/File_object] | ||
| + | ** read and write files (can also be used to execute shell commands and retrieve the output) | ||
| + | * XML [https://developer.mozilla.org/En/E4X/Processing_XML_with_E4X] | ||
| + | ** parse/manipulate XML content | ||
| + | * Curl | ||
| + | ** fetch web content with curl | ||
| + | * Page Control | ||
| + | ** add extra XML content | ||
| + | ** introduce new @@variables to page | ||
| + | ** read all @@variables from page | ||
| + | ** write all @@variables to page | ||
| + | ** force redraw of page | ||
| + | ** react to keys pressed on remote | ||
| + | * Menu Control | ||
| + | ** add new menu items | ||
| + | ** add new submenu item | ||
| + | ** maniplulate menu and submenu items (title, image, focusedImage, handler, ...) | ||
| + | |||
| + | ==== What can't we do with WDTVExt? (v0.23.5) ==== | ||
| + | * create entire custom pages | ||
| + | * create menu items that link to a folder or file | ||
| + | * create setup pages | ||
| + | |||
| + | |||
| + | Now, let's start creating our first WDTVext plugin: '''Example.plugin.js''' | ||
| + | |||
| + | ==== Example Plugin ==== | ||
| + | |||
| + | ===== Basic Plugin Skeleton ===== | ||
| + | |||
| + | Every Plugin strats with some basic plugin constructor: | ||
| + | <pre> | ||
| + | // all traces both trace and traceln will output in /tmp/dmaosd.log (or /tmp/wdtvext.log) | ||
| + | traceln("Plugin.Example: Start loading Example plugin") | ||
| + | |||
| + | function ExamplePlugin(path) { | ||
| + | this.rootPath = path; | ||
| + | traceln("Plugin.Example: base path is " + this.rootPath); | ||
| + | } | ||
| + | |||
| + | // chain ExamplePlugin with proper inheritance - classical in javascript | ||
| + | ExamplePlugin.prototype = new Plugin(); | ||
| + | ExamplePlugin.prototype.constructor = ExamplePlugin; | ||
| + | |||
| + | // | ||
| + | // our later to develop code and functions will | ||
| + | // | ||
| + | // go here, left blank for now | ||
| + | // | ||
| + | |||
| + | // create our plugin with baseParg pointing to current script path | ||
| + | // global variables scriptName, scriptLocation and scriptFullPath are available, no need to do the following | ||
| + | ExamplePlugin.instance = new ExamplePlugin(scriptPath); | ||
| + | |||
| + | // register our plugin with WDTVext | ||
| + | Plugin.registerPlugin(ExamplePlugin.instance); | ||
| + | |||
| + | traceln("Plugin.MediaFolder: End loading MediaFolder plugin"); | ||
| + | </pre> | ||
| + | All occurances of '''ExamplePlugin''' are of course to be substituted with the name of your plugin. | ||
| + | |||
| + | ===== Page Control ===== | ||
Revision as of 08:13, 23 May 2010
Develop - WDTV Ext's Plugin
WDTV Ext allow to add custom plugins/extensions to WDlxTV firmware.
All plugins start with Javascript file.
Filename
To load your plugin, the first Javascript filename needs to ends with ".plugin.js".
Event
Menu Event
Variable
- menuitem
- name - Menu name
- title - Menu displayed title
- image - Path to menu displayed icon
- focusedImage - Path to selected menu icon
- visible - Visible or not
Event
YourPlugin.prototype.doBuildMenus = function() { }
YourPlugin.prototype.onMenuSelect = function(menuItem){ }
YourPlugin.prototype.onMenuDeselect = function(menuItem) { }
Page Event
Variable
- page
- markupFileName - OSD XML Filename
- extraContent - XML Content to append the original XML File
- isMediaListPage
- selectedMedia
- name
- folder
- path
- setParam(paramName, value)
- getParam(paramName)
Event
YourPlugin.prototype.onPageCreated = function(page){ }
YourPlugin.prototype.onPageEnter = function(page){ }
YourPlugin.prototype.onPageKey = function(page, key){ }
YourPlugin.prototype.onPageLeave = function(page){ }
YourPlugin.prototype.onPageTimer = function(page){ }
Getting Started...
I will try to explain here how to start developing WDTVExt plugins. I'm by no means a 'programmer' and learned javascript just recently while dicovering WDTVExt. So if I'm doing thins wrong here, please correct me.
What can we do with WDTVExt? (v0.23.5)
- File [1]
- read and write files (can also be used to execute shell commands and retrieve the output)
- XML [2]
- parse/manipulate XML content
- Curl
- fetch web content with curl
- Page Control
- add extra XML content
- introduce new @@variables to page
- read all @@variables from page
- write all @@variables to page
- force redraw of page
- react to keys pressed on remote
- Menu Control
- add new menu items
- add new submenu item
- maniplulate menu and submenu items (title, image, focusedImage, handler, ...)
What can't we do with WDTVExt? (v0.23.5)
- create entire custom pages
- create menu items that link to a folder or file
- create setup pages
Now, let's start creating our first WDTVext plugin: Example.plugin.js
Example Plugin
Basic Plugin Skeleton
Every Plugin strats with some basic plugin constructor:
// all traces both trace and traceln will output in /tmp/dmaosd.log (or /tmp/wdtvext.log)
traceln("Plugin.Example: Start loading Example plugin")
function ExamplePlugin(path) {
this.rootPath = path;
traceln("Plugin.Example: base path is " + this.rootPath);
}
// chain ExamplePlugin with proper inheritance - classical in javascript
ExamplePlugin.prototype = new Plugin();
ExamplePlugin.prototype.constructor = ExamplePlugin;
//
// our later to develop code and functions will
//
// go here, left blank for now
//
// create our plugin with baseParg pointing to current script path
// global variables scriptName, scriptLocation and scriptFullPath are available, no need to do the following
ExamplePlugin.instance = new ExamplePlugin(scriptPath);
// register our plugin with WDTVext
Plugin.registerPlugin(ExamplePlugin.instance);
traceln("Plugin.MediaFolder: End loading MediaFolder plugin");
All occurances of ExamplePlugin are of course to be substituted with the name of your plugin.