This file outlines the overall directory layout for the SageTV codebase,
what all the various components in it and what you need to build it on
different platforms.
Directory Layout
build - build files/scripts for Linux
buildwin - misc. files for Windows & Linux installs, and build scripts for
non-MS dev built files on Windows
i18n - internationalization files
images - graphics that are included in the Sage.jar file
install - default config files for installs
java - java source code
native - C/C++ source code, top-level MSDEV projects for Windows native code
native/ax - Windows DirectShow filter C++ source code
native/Build/ - Windows binaries; created dynamically by building Native code
native/common - shared common source/header files
native/crosslibs - cross platform native code
native/dll - Windows DLL C++ source code
native/elf - native executable linux source code
native/exe - Windows executable C++ source code
native/include - includes files (both platforms)
native/so - Linux native library C/C++ code
stvs - STV XML, resource and image files
third_party - Third party source code is located here.
Various components in SageTV rely on code that is in the third_party directory
and utilize it directly in some cases. Some other third party components stand
on their own and are just part of the overall distribution.
For building on Linux you should set JDK_HOME to be the directory where the JDK
is installed (it should have an include and an include/linux folder at that path).
Extra Linux packages required to build (not exhaustive): lib1394raw-dev,
libavc1394-dev, libiec61883-dev, libfreetype6-dev, yasm
jhead is NOT included in the open source distribution due to it being under the
ambiguous Public Domain license. It can be acquired separately and is needed for
fixing the EXIF JPEG header after rotating pictures.
You can use the build/buildall.sh script on Linux to build the entire platform and
have it packaged into tarballs and debian installers.
The Windows components need to be built with Visual Studio 2005, mingw/msys and javac.
There is no script for doing this included.
Release Notes for V9
- Java compliance level is now 1.5
- Read/write locking support in the database (previously, it only had generic rw locks... now there are explicit locks for read and write on each table)
- If on a menu w/out full screen video, but video is playing, switch to the full screen video menu when the screen saver timeout expires
- Lucene support for search (search API calls are now executed on the server and utilize the Lucene index for performance)
- Loads of various bug fixes and performance enhancements :)
- New Airing API calls: GetParentalLimitsExceeded, GetPlayableAiring
- New Channel API calls: GetChannelLogoURL
- New Configuration API calls: SetCurrentlyAiringProgramsStartLive, GetCurrentlyAiringProgramsStartLive
- New Database API calls(NTE methods support numeric text input, such as using 228 would match ‘cat’ or ‘bat’, more details in the code): SearchForPeopleNTE, SearchForTitlesNTE, SearchSelectedFieldsNTE, GetMediaMask, HasMediaMask, SearchForChannel
- Various filtering, sorting and grouping methods in the Database API are now optimized and don’t go back through the API interpreter for filter/sort/group method execution
- Following Database API calls now support extra args to pass to filter/sort/group methods: FilterByBoolMethod, FilterByMethod, GroupByMethod
- New Favorite API calls: GetFavoritePresentationName, GetFavoritePresentationPrefix, GetFavoritesForAiring
- New Global API calls: SageCommand (with payload), IsTransitioningToMenus, IsTransitioningFromMenus, GetUIComponentPositionXf, GetUIComponentPositionYf, GetUIComponentWidthf, GetUIComponentHeightf, IsClientDisconnected, GetClientServerConnectionProgress, GetEPGUpdateState, SwitchEmbeddedModeTo/AreScreenshotsSupported/SaveScreenshotToFile (these 3 are only useful on embedded)
- New MediaPlayer API calls: GetRecentChannels, ClearRecentChannels
- New SeriesInfo API calls: GetSeriesImage(bool), GetSeriesImageURL, GetSeriesImageCount, GetSeriesImageAtIndex, GetSeriesImageURLAtIndex, HasSeriesActorImage, GetSeriesActorImage, GetSeriesActorImageURL
- New Show API calls: IsMovie, HasMovieImage, GetMovieImage, GetMovieImageURL, GetMovieImageCount, GetMovieImageAtIndex, GetMovieImageURLAtIndex, HasPersonImage, GetPersonImage, GetPersonImageURL, GetPersonDateOfBirth, GetPersonDateOfDeath, GetPersonBirthplace, GetPersonID, GetPersonForID, GetMovieStarRating
- New Utility API calls: GetMetaImageAspectRatio, GetMetaImageBytes, GetLocalFileAsString, ConvertNteChars, StringIndexOfNTE, StringStartsWithNTE, DumpServerThreadStates
- Person is a new database object (rather than just being Stringer objects as they were previously)
- Series/person/character image information now exists in the database (follows TMS naming conventions)
- Thread monitoring and regular logging of CPU usage of various threads
- Significant performance improvements to overall database system
- Licensing/key checking code removed
- “Spoiler Protection” when watching live TV, it will not default to a channel which could possibly ‘spoil’ something else you care about. It also tries to avoid selecting anything that needs parental control by default.
- Codebase from EMBEDDED (HD300) merged with main SageTV codebase (NOTE: This will no longer run on the HD300 because it’s not Java 1.5 source rather than Java 1.4)
- Added new hooks: RecordRequestLiveMultiConflict, WatchRequestLiveMultiConflict (these allow processing all conflicts for watch/record requests at once rather than one at a time; if these hooks are not in the STV then the non-Multi hooks that have always existed will be called instead)
- TVTV support removed
- Added property “hdmi_always_select_best” which defaults to false, but if set true will auto select the best HDMI resolution for extender clients
- Added property “studio/alert_on_syntax_error” which defaults to false, but if true will popup an alert in the Studio if a syntax error is entered (i.e. an expression the parser cannot properly compile)
- Support for rendering of CEA-708 closed captions (i.e. Digital TV closed captions)
- Added downloader for Weather Underground data (API license key required to use)
- CVS integration for SageTV Studio (although not that useful since this is hosted on GIT now; but it’s done in an abstract way so GIT support could be added)
- Added RemotePusherClient support. This allows for a separate process that handles the streaming (push & pull mode) for SageTV rather than running this through the Java classes.
- On Windows, the global environment variable SAGETVUSERKEY should be set to be your license key if you’re using the EXE built from the open source codebase. This will then allow you to communicate with the SageTV EPG server.