A collection of developer tools and runtime classes for SageTV plugin developers and SageTV Studio users. At present this includes four main components:
This component implements a plugin manager for Studio, allowing Java programmers to extend Studio functionality by adding custom commands to the Studio menus. For details, see the {@link gkusnick.sagetv.studio} package documentation.
This Studio plugin implements a number of useful commands such as Search, Replace, Select Safe Subtree, List References, and more. For details, see the {@link gkusnick.sagetv.studio.Tools} class documentation.
The Tools plugin source code also serves as an example of a working Studio plugin for developers seeking to write their own plugins.
This Studio plugin implements commands and runtime functions for automating STVI creation. For details, see the {@link gkusnick.sagetv.studio.STVI} class documentation.
This component implements a set of strongly-typed wrapper classes for the SageTV API, simplying the use of API functions in Java code. For details, see the {@link gkusnick.sagetv.api} package documentation.
These tools require SageTV version 6.1 or better, and Java version 1.5 or better.
Version History | |
---|---|
0.5 |
Added hotkey support for plugin commands via
Studio.hotkeys .Added a Logging>/b> menu for enabling or disabling debug logging by class. Set as Non-Primary can now be applied to multiple selected references, so long as they're all primary references. Fixed some scrollbar issues with List windows. Added {@link gkusnick.sagetv.studio.STVI#ProcessImportEx STVI.ProcessImportEx}, {@link gkusnick.sagetv.studio.STVI#InsertWidgetEx STVI.InsertWidgetEx}, {@link gkusnick.sagetv.studio.STVI#RemoveWidgetEx STVI.RemoveWidgetEx}, {@link gkusnick.sagetv.studio.STVI#RenameWidgetEx STVI.RenameWidgetEx}, and {@link gkusnick.sagetv.studio.STVI#SetWidgetPropertyEx STVI.SetWidgetPropertyEx} to enable STVI import on Placeshifter and Extender clients. {@link gkusnick.sagetv.studio.STVI#ProcessImport STVI.ProcessImport}, {@link gkusnick.sagetv.studio.STVI#InsertWidget STVI.InsertWidget}, {@link gkusnick.sagetv.studio.STVI#RemoveWidget STVI.RemoveWidget}, {@link gkusnick.sagetv.studio.STVI#RenameWidget STVI.RenameWidget}, and {@link gkusnick.sagetv.studio.STVI#SetWidgetProperty STVI.SetWidgetProperty} are now deprecated (but will continue to work in existing STVIs). {@link gkusnick.sagetv.studio.STVI#ProcessImportEx STVI.ProcessImportEx} will now implicitly create the Global theme if it's needed for a backref and does not exist. Export As STVI now optionally allows the use of a "REM ProcessImport" widget to specify where the call to {@link gkusnick.sagetv.studio.STVI#ProcessImportEx STVI.ProcessImportEx} should be inserted in the STVImported hook. Added API extensions {@link gkusnick.sagetv.api.AiringAPI.Airing#Watch airing.Watch()} and {@link gkusnick.sagetv.api.MediaFileAPI.MediaFile#Watch mediafile.Watch()}. Added API extensions {@link gkusnick.sagetv.api.CaptureDeviceAPI.CaptureDevice#GetEncoderID capturedevice.GetEncoderID()}, {@link gkusnick.sagetv.api.CaptureDeviceAPI.CaptureDevice#GetEncoderMerit capturedevice.GetEncoderMerit()}, and {@link gkusnick.sagetv.api.CaptureDeviceAPI.CaptureDevice#SetEncoderMerit capturedevice.SetEncoderMerit(merit)}. Added an additional overload for the {@link gkusnick.sagetv.api.WidgetAPI#FindWidget widgetAPI.FindWidget()} API extension. {@link gkusnick.sagetv.api.WidgetAPI.Widget#GetProperties widget.GetProperties()} no longer blows up on earlier versions of SageTV in which some property names aren't defined. {@link gkusnick.sagetv.api.WidgetAPI#GetWidgetFromPath widgetAPI.GetWidgetFromPath(szPath)} now works properly with root-level hook widgets. It also tolerates ambiguity at intermediate levels of the widget path, and accepts wildcards in place of actual widget names for some path elements. Fixed Linux compatibility issues. Removed Java 1.6 dependencies. API wrappers are current as of SageTV V6.2. |
0.4 |
Reorganized the reference list machinery and added a number of new
list commands and features. See the {@link
gkusnick.sagetv.studio.Tools} documentation for new List commands,
and the {@link gkusnick.sagetv.studio.RefList} documentation for new
features of the List windows. Search and Replace now support whole-word matching, displaying search results as a reference list, plus an additional search scope that includes the selected widgets and their descendents. Added the following commands to the {@link gkusnick.sagetv.studio.Tools} menu: Auto-Arrange Lists, Select Shared Descendents, List Variable References, List Selection, Paste Ref Before, Paste Ref After, Paste Above, and Delete & Promote Children. The {@link gkusnick.sagetv.studio.Tools} plugin now exposes the following methods for use by other plugins: {@link gkusnick.sagetv.studio.Tools#OpenListWindow OpenListWindow} and {@link gkusnick.sagetv.studio.Tools#ManageWindow ManageWindow}. Export As STVI now looks for an existing STVImported hook beneath the exported menus and will reference any code it contains from the global STVImported hook. See the {@link gkusnick.sagetv.studio.STVI} documentation for revised STVI creation instructions. The Import STVI file browser dialog now says Open instead of Save. Added {@link gkusnick.sagetv.studio.STVI#InsertWidget STVI.InsertWidget} and {@link gkusnick.sagetv.studio.STVI#SetWidgetProperty STVI.SetWidgetProperty}. {@link gkusnick.sagetv.studio.STVI#RemoveWidget STVI.RemoveWidget} now deletes the widget from the STV if no references to it remain, instead of letting it dangle. {@link gkusnick.sagetv.studio.STVI#ProcessImport STVI.ProcessImport} now deletes the STVImported hook in Safe mode, preserving any shared descendents. Added the following methods to the {@link tv.sage.StudioAPI}: {@link tv.sage.StudioAPI#GetWidgetTypeIcon GetWidgetTypeIcon} and {@link tv.sage.StudioAPI#GetPlugin GetPlugin}. {@link gkusnick.sagetv.api.WidgetAPI.Widget#GetWidgetPath widget.GetWidgetPath()} and {@link gkusnick.sagetv.api.WidgetAPI#GetWidgetFromPath GetWidgetFromPath(szPath)} can now distinguish untitled Listener widgets by listener event. Changed the definition of .equals() for wrapped API
objects from "wraps the same underlying object" to "underlying
.equals() method returns true". For most wrapped API
objects this should return the same result as before, but the new
definition is technically more correct.API wrappers are current as of SageTV V6.1.6. Most of the debug log spew is turned off by default in this version, but can be selectively re-enabled by setting properties in gkusnick.util.Log.properties . |
0.3.2 |
Fixed a menu export bug in the {@link gkusnick.sagetv.studio.STVI}
plugin. |
0.3.1 |
If an STVI attempts to insert new code under a non-existent hook,
{@link gkusnick.sagetv.studio.STVI#ProcessImport ProcessImport} now
implicitly creates the hook. Fixed various minor bugs in version 0.3. |
0.3 |
Added the {@link gkusnick.sagetv.studio.STVI} plugin class defining
Studio commands and runtime methods for automating STVI creation. Added the following commands to the {@link gkusnick.sagetv.studio.Tools} menu: Normalize References, Paste Before, Paste After, Shift Block Up, and Shift Block Down. Added dropdown lists of recently-used strings to the Search and Replace dialogs. Added the {@link gkusnick.sagetv.studio.MRUFileChooser} and {@link gkusnick.sagetv.studio.MRUCombo} dialog control classes. Added {@link tv.sage.StudioAPI#InvokeMenuCommand StudioAPI.InvokeMenuCommand}. Added WidgetAPI extension {@link gkusnick.sagetv.api.WidgetAPI.Widget#clone clone()}. Fixed a bug in which the right-click menu hook did not initialize correctly if the Studio window is too small. |
0.2 |
Added {@link tv.sage.StudioAPI#AddTreeModelListener
StudioAPI.AddTreeModelListener} and {@link
tv.sage.StudioAPI#RemoveTreeModelListener
StudioAPI.RemoveTreeModelListener}. Added the following commands to the {@link gkusnick.sagetv.studio.Tools} menu: List References, Copy Widget Name, Copy Widget Path, and Set as Non-Primary. Added an option to the Search and Replace commands to limit the search to specific widget types. Added drag & drop support for reordering plugins in the Manage... dialog. Added WidgetAPI extensions {@link gkusnick.sagetv.api.WidgetAPI#GetWidgetTypes GetWidgetTypes()}, {@link gkusnick.sagetv.api.WidgetAPI.Widget#IsUIWidget widget.IsUIWidget()}, and {@link gkusnick.sagetv.api.WidgetAPI.Widget#IsUIChain widget.IsUIChain()}. Fixed a bug initializing the popup menu when using the standard STV. Fixed a bug in which the right-click context menu was not properly cleared by the Manage... command. Fixed a bug in {@link tv.sage.StudioAPI#SelectWidgetRefs StudioAPI.SelectWidgetRefs} the first time a secondary reference is selected. Fixed a {@link java.util.ConcurrentModificationException} in {@link gkusnick.sagetv.api.WidgetAPI#GetWidgetDescendents WidgetAPI.GetWidgetDescendents} and {@link gkusnick.sagetv.api.WidgetAPI.Widget#GetDescendents widget.GetDescendents}. |
0.1 |
Initial release. |