SageTV Community  

Go Back   SageTV Community > SageTV Development and Customizations > SageTV Github Development

Notices

SageTV Github Development Discussion related to SageTV Open Source Development. Use this forum for development topics about the Open Source versions of SageTV, hosted on Github.

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 06-14-2016, 09:23 PM
SageWizdom SageWizdom is offline
Sage Advanced User
 
Join Date: Oct 2013
Location: https://github.com/SageWizdom/SageConnect
Posts: 216
Is there a way to programmatically install plugins?

Greetings,
I've been reading some good comments in some of the plugin posts (commercial skipping, etc), and I would love to try and auto install a base set of plugins as part of an automatic install... or at least ask a user and if they say yes auto install. Does anyone know how to install plugins automatically?

I would note that I think the sagex api will let you do it (or possibly through the web interface which I assume is using sagex). That said, whichever plugin is providing this support has to be installed first so its a bit chicken and egg I think?

A totally acceptable solution to me is something that bootstraps in the basic api (sagex) and then uses sagex to install everything else. Side note, is there a list of recommended/favorite plugins? (commercial skip, web servers, sagex, UI mod, ??)

Thanks in advance!
__________________
Server: Centos Server 14.04 LTS - 64Bit, VM in XenServer, 2 cores of a Intel i7, 2-4 GB Ram, 8 GB system Disk, 1.8 TB storage, SageTV V9.0.4.232, HDHR Prime x 1

Clients: PC Client x 1, HD-300 x 1, AppleTV x 2, WebClient (phone/tablet) x 3
Reply With Quote
  #2  
Old 06-14-2016, 10:16 PM
Skirge01's Avatar
Skirge01 Skirge01 is offline
SageTVaholic
 
Join Date: Jun 2007
Location: New Jersey
Posts: 2,599
While I can appreciate your enthusiasm and applaud your effort, your final question highlights the issue with such a project. Plugins are such a personal choice that asking for recommendations or favorites is problematic. If you ask 20 people what plugins they have installed or what their favorites are, I'm pretty confident you'll get 20 different answers. What people probably need is a way to discover what plugins are out there. This is currently done by asking if there's a way to accomplish a certain thing, after they've played with the stock Sage for a bit. Then, the friendly people on this forum reply with, "Oh, check out the X plugin." There might be a more effective way, but I'm not sure bundling plugins with a stock install is it. Additionally, particularly for new users, making the default installation even more complicated could wind up being a deterrent.

Now, if this is for experienced users to be able to have an installer which will add in all the plugins from an existing installation to be carried over to a new installation, I might be singing a different tune.
__________________
Server: XP, SuperMicro X9SAE-V, i7 3770T, Thermalright Archon SB-E, 32GB Corsair DDR3, 2 x IBM M1015, Corsair HX1000W PSU, CoolerMaster CM Storm Stryker case
Storage: 2 x Addonics 5-in-3 3.5" bays, 1 x Addonics 4-in-1 2.5" bay, 24TB
Client: Windows 7 64-bit, Foxconn G9657MA-8EKRS2H, Core2Duo E6600, Zalman CNPS7500, 2GB Corsair, 320GB, HIS ATI 4650, Antec Fusion
Tuners: 2 x HD-PVR (HTTP tuning), 2 x HDHR, USB-UIRT
Software: SageTV 7
Reply With Quote
  #3  
Old 06-15-2016, 01:42 AM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
If there was a clean way to have a plugin auto-install, I doubt Andy would have put the prompts to install the Google Weather plug-in the way he did.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #4  
Old 06-15-2016, 06:10 AM
stuckless's Avatar
stuckless stuckless is offline
SageTVaholic
 
Join Date: Oct 2007
Location: London, Ontario, Canada
Posts: 9,711
I've given this some thought, since sagetv has gone open source. Ultimately, I'd like to build "packages" of SageTV that would be auto-configured with some plugins, out of the box.

Personally I think that sagetv might require some changes to make this happen smoothly.

On thought that I had was that we could have a "manifest" in an "core-plugins" directory and when sagetv starts it would check if these plugins are installed, and if not, then install them using the plugin manager apis.

I think the plugin system does need a "refresh" to have it work a little better, and this might be a good excuse to do that...

For example, I'd like to specify plugin dependencies (especially jar dependecies) are just references to Maven Central archives. I'd also like to modify the plugin xml to include an architecture field like 32 or 64... so that we can create some native plugins (ie, the tuner plugins should be installed as plugins, but we'd only want to install the 32bit ones on a 32bit system, etc).

And lastly, I think that since we are re-entering the "age of javascript", I think the plugin system should be tweaked to allow JavaScript as a first class programming language to extend SageTV. This would push the min java requirement to Java 8 (Java 7 could also we min, but Java 8 has much better JavaScript support with a better JS engine).
Reply With Quote
  #5  
Old 06-15-2016, 01:27 PM
EnterNoEscape's Avatar
EnterNoEscape EnterNoEscape is offline
SageTVaholic
 
Join Date: Jun 2010
Location: Harrisburg, PA
Posts: 2,656
It would be nice to add the ability to install and configure tuning plugins. One of the things that is still somewhat difficult for new users is when they need to use one of the tuning plugins that doesn't come with SageTV. It would be nice if the configuration was accessible through the UI instead of requiring the importing of a registry key or editing a configuration file.

Also adding to your idea about a "manifest." I don't know if you can already do this or not, but it would be nice to be able to export what plugins are currently installed so you can easily get all of the plugins you had before installed again after a complete reinstall or transfer the configuration over to a SageTV Client install.
__________________
SageTV v9 Server: ASRock Z97 Extreme4, Intel i7-4790K @ 4.4Ghz, 32GB RAM, 6x 3TB 7200rpm HD, 2x 5TB 7200rpm HD, 2x 6TB 7200rpm HD, 4x 256GB SSD, 4x 500GB SSD, unRAID Pro 6.7.2 (Dual Parity + SSD Cache).
Capture: 1x Ceton InfiniTV 4 (ClearQAM), 2x Ceton InfiniTV 6, 1x BM1000-HDMI, 1x BM3500-HDMI.

Clients: 1x HD300 (Living Room), 1x HD200 (Master Bedroom).
Software: OpenDCT :: WMC Live TV Tuner :: Schedules Direct EPG
Reply With Quote
  #6  
Old 06-15-2016, 04:11 PM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by EnterNoEscape View Post
It would be nice to add the ability to install and configure tuning plugins. One of the things that is still somewhat difficult for new users is when they need to use one of the tuning plugins that doesn't come with SageTV. It would be nice if the configuration was accessible through the UI instead of requiring the importing of a registry key or editing a configuration file.
This can be done via the current plugin system. They just need to include not just the plugin files itself, but also an STVi that handles the configuration.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #7  
Old 06-15-2016, 05:37 PM
EnterNoEscape's Avatar
EnterNoEscape EnterNoEscape is offline
SageTVaholic
 
Join Date: Jun 2010
Location: Harrisburg, PA
Posts: 2,656
Quote:
Originally Posted by Fuzzy View Post
This can be done via the current plugin system. They just need to include not just the plugin files itself, but also an STVi that handles the configuration.
Yes, but where's the convenience in that? That's going back to the way things used to be done. The whole process should be available via the plugin system so you don't need to copy some files to the right place, then import an STVi.
__________________
SageTV v9 Server: ASRock Z97 Extreme4, Intel i7-4790K @ 4.4Ghz, 32GB RAM, 6x 3TB 7200rpm HD, 2x 5TB 7200rpm HD, 2x 6TB 7200rpm HD, 4x 256GB SSD, 4x 500GB SSD, unRAID Pro 6.7.2 (Dual Parity + SSD Cache).
Capture: 1x Ceton InfiniTV 4 (ClearQAM), 2x Ceton InfiniTV 6, 1x BM1000-HDMI, 1x BM3500-HDMI.

Clients: 1x HD300 (Living Room), 1x HD200 (Master Bedroom).
Software: OpenDCT :: WMC Live TV Tuner :: Schedules Direct EPG

Last edited by EnterNoEscape; 06-15-2016 at 05:40 PM. Reason: too many plugins
Reply With Quote
  #8  
Old 06-15-2016, 06:34 PM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by EnterNoEscape View Post
Yes, but where's the convenience in that? That's going back to the way things used to be done. The whole process should be available via the plugin system so you don't need to copy some files to the right place, then import an STVi.
The UI MOD section of the plugin system ARE .stvi files.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #9  
Old 06-15-2016, 08:01 PM
EnterNoEscape's Avatar
EnterNoEscape EnterNoEscape is offline
SageTVaholic
 
Join Date: Jun 2010
Location: Harrisburg, PA
Posts: 2,656
Quote:
Originally Posted by Fuzzy View Post
The UI MOD section of the plugin system ARE .stvi files.
I know that. This would still be a two part installation. If I'm not mistaken, I don't believe there any tuning plugins that actually show up in the plugins section of the UI. Are you saying that today it's possible to install a tuning plugin from the UI?
__________________
SageTV v9 Server: ASRock Z97 Extreme4, Intel i7-4790K @ 4.4Ghz, 32GB RAM, 6x 3TB 7200rpm HD, 2x 5TB 7200rpm HD, 2x 6TB 7200rpm HD, 4x 256GB SSD, 4x 500GB SSD, unRAID Pro 6.7.2 (Dual Parity + SSD Cache).
Capture: 1x Ceton InfiniTV 4 (ClearQAM), 2x Ceton InfiniTV 6, 1x BM1000-HDMI, 1x BM3500-HDMI.

Clients: 1x HD300 (Living Room), 1x HD200 (Master Bedroom).
Software: OpenDCT :: WMC Live TV Tuner :: Schedules Direct EPG
Reply With Quote
  #10  
Old 06-15-2016, 08:08 PM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by EnterNoEscape View Post
I know that. This would still be a two part installation. If I'm not mistaken, I don't believe there any tuning plugins that actually show up in the plugins section of the UI. Are you saying that today it's possible to install a tuning plugin from the UI?
yes, you should be able to install just about anything. It wouldn't be two part, but it would require two plugins. Likely installing the plugin file itself via a standard plugin, and the configuration as a UI Mod. If the UI Mod is set up with the general as a dependency, than all you have to do is install the ui mod in a single step.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #11  
Old 06-16-2016, 06:54 AM
SageWizdom SageWizdom is offline
Sage Advanced User
 
Join Date: Oct 2013
Location: https://github.com/SageWizdom/SageConnect
Posts: 216
Quote:
Originally Posted by Skirge01 View Post
Now, if this is for experienced users to be able to have an installer which will add in all the plugins from an existing installation to be carried over to a new installation, I might be singing a different tune.
This is my goal, auto installing all the plugins I care about across new installs (or installs for friends/family).

That said, what I can imagine for a new user is a web based wizard (wizard like?) selection guide. It could ask a user things they care about (skipping commercials?) type of hardware, etc. It could then provide a guided install file to help automatically install / upgrade the default SageTV to be better for them. Almost like slipstreaming a windows install or getting a curated linux distribution. If sage is to really be accessible to people, it must "just work" out of the box. Then when folks get comfortable with it, they can come ask questions.

My personal opinion is that in today's world, Sage should always install with a WebUI (both mobile optimized and desktop - looking forward to the respin I think folks are talking about). I also believe that a programmatic API and commercial skipping should come pre-installed. These provide a pretty competitive system out of the box.
__________________
Server: Centos Server 14.04 LTS - 64Bit, VM in XenServer, 2 cores of a Intel i7, 2-4 GB Ram, 8 GB system Disk, 1.8 TB storage, SageTV V9.0.4.232, HDHR Prime x 1

Clients: PC Client x 1, HD-300 x 1, AppleTV x 2, WebClient (phone/tablet) x 3
Reply With Quote
  #12  
Old 06-16-2016, 07:00 AM
SageWizdom SageWizdom is offline
Sage Advanced User
 
Join Date: Oct 2013
Location: https://github.com/SageWizdom/SageConnect
Posts: 216
Quote:
Originally Posted by Fuzzy View Post
If there was a clean way to have a plugin auto-install, I doubt Andy would have put the prompts to install the Google Weather plug-in the way he did.
That is what I was afraid of. I was hoping there was a sneaky way to install SageX and then use that to install everything else (I'm assuming this is how the web interface does it). Perhaps auto download sagex to a specific directory and put some specific configuration lines into the Sage.Properties file (at least that is what I have considered trying). I just don't know enough about the internals to know if I'm about to horribly corrupt something ... again

It used to be possible to hook running windows applications through rpc calls... any of you really smart Java guys know if its possible to do this with Java? Can an external process execute a procedure in a running Sage Java instance? Specifically (or obviously), whatever call it is that the UI calls when I click install on the UI.

(Edit: I probably said this wrong, can I have my own java application that loads the sage jar and executes the same "install" function that would correctly download, install and update the config file?)
__________________
Server: Centos Server 14.04 LTS - 64Bit, VM in XenServer, 2 cores of a Intel i7, 2-4 GB Ram, 8 GB system Disk, 1.8 TB storage, SageTV V9.0.4.232, HDHR Prime x 1

Clients: PC Client x 1, HD-300 x 1, AppleTV x 2, WebClient (phone/tablet) x 3
Reply With Quote
  #13  
Old 06-16-2016, 07:59 AM
nyplayer nyplayer is offline
SageTVaholic
 
Join Date: Sep 2005
Posts: 4,798
The most Important plugin to "unlicensed" users is the Schedules Direct Plugin ... this should be included out of the box as SageTV needs this plugin all other plugins are optional. If you do not enter a license it should Install this plugin.
__________________
Windows 10 I3 Dual Core 3.0 Server, SageTV9... OpenDCT with 2 HDHRPrimes and 4 HDHRconnects for a total of 14 Tuners.

Last edited by nyplayer; 06-16-2016 at 09:40 AM.
Reply With Quote
  #14  
Old 06-16-2016, 08:35 AM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by SageWizdom View Post
That is what I was afraid of. I was hoping there was a sneaky way to install SageX and then use that to install everything else (I'm assuming this is how the web interface does it). Perhaps auto download sagex to a specific directory and put some specific configuration lines into the Sage.Properties file (at least that is what I have considered trying). I just don't know enough about the internals to know if I'm about to horribly corrupt something ... again

It used to be possible to hook running windows applications through rpc calls... any of you really smart Java guys know if its possible to do this with Java? Can an external process execute a procedure in a running Sage Java instance? Specifically (or obviously), whatever call it is that the UI calls when I click install on the UI.

(Edit: I probably said this wrong, can I have my own java application that loads the sage jar and executes the same "install" function that would correctly download, install and update the config file?)
Honestly, the best way to deal with this would be to add an offline temp file similar to the one used for modifying and deleting files in use (for background, if the plugin system is unable to replace or delete a file while sage is running, it will write a temporary .txt file with the incomplete steps in it, and trigger a restart. The launcher will then take the appropriate actions on next start-up, prior to actually loading the JVM, and delete the .txt files).

We can modify the plugin system to, on startup once the plugin manager is up and running, look for a loadplugins.txt file that is a simple list of plugins by id, pull those plugins in, and then delete the text file. The installer would simply have to dynamically create this file as it needs.

Put up an issue on github, and it can be looked at - I don't actually foresee this being incredibly hard to implement.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #15  
Old 06-16-2016, 09:35 AM
EnterNoEscape's Avatar
EnterNoEscape EnterNoEscape is offline
SageTVaholic
 
Join Date: Jun 2010
Location: Harrisburg, PA
Posts: 2,656
Quote:
Originally Posted by nyplayer View Post
The most Important plugin to "unlicensed" users is the Schedules Direct Plugin ... this should be included out of the box as SageTV needs this plugin all other plugins are optional. If you do not enter a license is should Install this plugin.
Agreed. This is critical.
__________________
SageTV v9 Server: ASRock Z97 Extreme4, Intel i7-4790K @ 4.4Ghz, 32GB RAM, 6x 3TB 7200rpm HD, 2x 5TB 7200rpm HD, 2x 6TB 7200rpm HD, 4x 256GB SSD, 4x 500GB SSD, unRAID Pro 6.7.2 (Dual Parity + SSD Cache).
Capture: 1x Ceton InfiniTV 4 (ClearQAM), 2x Ceton InfiniTV 6, 1x BM1000-HDMI, 1x BM3500-HDMI.

Clients: 1x HD300 (Living Room), 1x HD200 (Master Bedroom).
Software: OpenDCT :: WMC Live TV Tuner :: Schedules Direct EPG
Reply With Quote
  #16  
Old 06-16-2016, 05:41 PM
Narflex's Avatar
Narflex Narflex is offline
Sage
 
Join Date: Feb 2003
Location: Redondo Beach, CA
Posts: 6,319
I should say that plugins can definitely be installed programmatically; the way the STV does it right now is through API calls...so those API calls can be executed by anything (STVI, sagex, startup runnables). You just need some kind of initial hook in that will do this.
__________________
Jeffrey Kardatzke
Google
Founder of SageTV
Reply With Quote
  #17  
Old 06-16-2016, 08:24 PM
Fuzzy's Avatar
Fuzzy Fuzzy is offline
SageTVaholic
 
Join Date: Sep 2005
Location: Jurupa Valley, CA
Posts: 9,957
Quote:
Originally Posted by Narflex View Post
I should say that plugins can definitely be installed programmatically; the way the STV does it right now is through API calls...so those API calls can be executed by anything (STVI, sagex, startup runnables). You just need some kind of initial hook in that will do this.
Yeah, of course the API can do it, but his issue was he was wanting to do it externally via something like sagex - which of course, needs to be installed first.
__________________
Buy Fuzzy a beer! (Fuzzy likes beer)

unRAID Server: i7-6700, 32GB RAM, Dual 128GB SSD cache and 13TB pool, with SageTVv9, openDCT, Logitech Media Server and Plex Media Server each in Dockers.
Sources: HRHR Prime with Charter CableCard. HDHR-US for OTA.
Primary Client: HD-300 through XBoxOne in Living Room, Samsung HLT-6189S
Other Clients: Mi Box in Master Bedroom, HD-200 in kids room
Reply With Quote
  #18  
Old 06-16-2016, 11:47 PM
JREkiwi's Avatar
JREkiwi JREkiwi is offline
Sage Icon
 
Join Date: Jan 2005
Location: Auckland, New Zealand
Posts: 2,123
Quote:
Originally Posted by EnterNoEscape View Post
Agreed. This is critical.
May be critical for you, but not for anyone outside the US

John
Reply With Quote
  #19  
Old 06-17-2016, 04:40 AM
EnterNoEscape's Avatar
EnterNoEscape EnterNoEscape is offline
SageTVaholic
 
Join Date: Jun 2010
Location: Harrisburg, PA
Posts: 2,656
Quote:
Originally Posted by JREkiwi View Post
May be critical for you, but not for anyone outside the US

John
I thought that Schedules Direct was expanding/has expanded their EPG support to other countries. It's not really that important to me personally since I have a SageTV license, however I believe that all EPG support beyond what the licensed users get is very important to the future of the SageTV platform (not just for US).

Do you have an EPG service in mind that you would like to see available in SageTV?
__________________
SageTV v9 Server: ASRock Z97 Extreme4, Intel i7-4790K @ 4.4Ghz, 32GB RAM, 6x 3TB 7200rpm HD, 2x 5TB 7200rpm HD, 2x 6TB 7200rpm HD, 4x 256GB SSD, 4x 500GB SSD, unRAID Pro 6.7.2 (Dual Parity + SSD Cache).
Capture: 1x Ceton InfiniTV 4 (ClearQAM), 2x Ceton InfiniTV 6, 1x BM1000-HDMI, 1x BM3500-HDMI.

Clients: 1x HD300 (Living Room), 1x HD200 (Master Bedroom).
Software: OpenDCT :: WMC Live TV Tuner :: Schedules Direct EPG
Reply With Quote
  #20  
Old 06-17-2016, 05:52 AM
stanger89's Avatar
stanger89 stanger89 is offline
SageTVaholic
 
Join Date: May 2003
Location: Marion, IA
Posts: 15,188
I do agree that ideally EPG plugin selection would be part of the installer so that a new user could just select which EPG source they wanted to use, and configure it easily.

An alternative option would be to have that be part of the setup wizard (in the STV) that's run the first time you run Sage.
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Trying to install a few plugins but some of the dependencies are failing to download craigap SageTV v7 Customizations 5 07-17-2015 09:23 PM
Programmatically add timed recordings to SageTV? hagur SageTV Customizations 13 11-07-2011 07:11 PM
Programmatically detect a current recording? rjudge SageTV Software 2 03-05-2011 08:59 AM
How do plugins get into the list of plugins? michaeldjcox SageTV v7 Customizations 4 06-12-2010 03:05 AM
How/Where to install plugins on the Mac? cnr1089 SageTV Mac Edition 0 04-10-2009 10:40 AM


All times are GMT -6. The time now is 09:17 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2022, vBulletin Solutions Inc.
Copyright 2003-2005 SageTV, LLC. All rights reserved.