![]() |
|
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. |
![]() |
|
Thread Tools | Search this Thread | Display Modes |
#21
|
|||
|
|||
My thoughts:
I like the idea of being able to pull dependencies right from Maven Central. Quote:
Quote:
These would be candidates for a sagetv-dev github repo. I don't think we should allow this. I like that the plugin manager has an idea that the download went correctly. |
#22
|
||||
|
||||
My $0.02 on some of these proposals:
Plugins get their own plugin directory: They should also have a well-defined place to store their configuration settings. This could be a separate .properties file, or a subtree of Sage.properties, but in either case all of a plugin's settings should be in one place where they can be exported or deleted as a unit by the plugin manager. This should be enforced by the API so that calls to Get/SetProperty are transparently redirected to the appropriate plugin property space. Multiple plugin repositories: I don't think this needs to be in the core. It should be straightforward to extend the plugin UI to gather manifests from multiple sources and merge them on the fly into SageTVPluginsDev.xml. I've been doing this for years with dev builds of my own plugins. Simplified plugin manifest: Generating manifests doesn't have to be done manually. I have Ant tasks that generate manifests from XML fragments embedded in my build scripts. So I don't see a pressing need to simplify the manifest specification. Ability to publish using non-interactive means: This worries me, since it seems to invite abuse by spambots. My feeling is that any plugin release ought to require confirmation from a human being. Maybe things could be batched up better when releasing a system of interdependent plugins, so that one confirmation suffices for all of them. Scriptable plugins: Again, maybe I'm missing something, but I don't see why this needs to be in the core. If a scripting host can be implemented as a plugin, then script plugins just need to declare a dependency on that host. It would be the host's responsibility to notice when a script plugin has been loaded and take the appropriate steps to start it. Backward compatibility: If V9 can't run plugins built for V7, then I'm guessing a lot of plugins will be left behind, and a lot of useful functionality lost unless somebody adopts those orphaned plugins and ports them to V9. It also creates extra work for plugin devs who aren't particularly eager to issue new releases of all their V7 plugins.
__________________
-- Greg |
#23
|
|||||||||
|
|||||||||
Quote:
![]() Quote:
![]() Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Quote:
Yeah, my comment was more about do we care if the change the plugin system in V9 such that a V9 plugin is not compatible with V7. Not the other way around. An example being... if we introduce new manifest attributes or elements, those will no longer be valid for V7 (not sure if v7 uses a dtd or not), and as such, the developer will need to be sure they add the Min sage version and the plugin will not be compatible with V7. Do we care? I don't.
__________________
Batch Metadata Tools (User Guides) - SageTV App (Android) - SageTV Plex Channel - My Other Android Apps - sagex-api wrappers - Google+ - Phoenix Renamer Downloads SageTV V9 | Android MiniClient |
#24
|
|||
|
|||
Just the thought. The SageMyMovies plugin is a very heavily used plugin based on the forum traffic.
Its author has abandoned it. MyMovies also has abandoned the version that supports it (4, now on 5 and cannot upgrade to 5 without breaking plugin). So what do we do in this situation? The moviewall type interface is the primary reason I use Sagetv. With 2000+ movies, its essential.
__________________
Gigabyte GA-MA770-DS3/4gb DDR2/AMD Phenom 955 3.2ghz Quad Core Windows 7 64bit Home Premium Hauppauge 1600/1850/2250/colossus/2650(CableCard 2 tuner) 8tb RAID5 storage/media/other &3tb RAID5 backup storage on a HighPoint RocketRaid 2680 1tb 3 disk Recording Pool all in a beautiful Antec 1200 SageMyMovies/Comskip/PlayON/SageDCT/SRE HD100/HD300 extenders |
#25
|
|||
|
|||
Quote:
As for alternates there is phoenix,diamond and gemstone all offer great views. |
#26
|
|||
|
|||
but but but.. .
i like your plugin ![]()
__________________
Gigabyte GA-MA770-DS3/4gb DDR2/AMD Phenom 955 3.2ghz Quad Core Windows 7 64bit Home Premium Hauppauge 1600/1850/2250/colossus/2650(CableCard 2 tuner) 8tb RAID5 storage/media/other &3tb RAID5 backup storage on a HighPoint RocketRaid 2680 1tb 3 disk Recording Pool all in a beautiful Antec 1200 SageMyMovies/Comskip/PlayON/SageDCT/SRE HD100/HD300 extenders |
#27
|
||||
|
||||
Okay, so how about a discussion of near-term solutions to the plugin issue. Currently, the biggest hurdle I see with the plugin system and people moving to v7 is the lucene plugin needing to be deprecated only on v9 installs. I see two ways this can be fixed.
1. Remove lucene from the core and make it a 'mandatory' plugin, and replacing the current lucene plugin in the repository. 2. Make a new repository that v9 pulls down, and in that repository, remove all lucene dependencies. #1 would keep the plugin manager pointing to the same sage.tv server to get its information, but would limit it's utility to the single lucene issue #2 would provide a way to separate v9 plugins from v7 plugins, as well as moving the repository into community control. This would require a location to put the SageTVPlugins.xml (and SageTVPlugins.ver) file, in a place that the community could easily access it, as well as changing the plugin source location within CorePluginManager.java. I think #2 may be the more forward thinking solution, and if the plugin source location is made to be a property (it is currently hard-coded in), would allow changing the source in the future, as well as perhaps adding the ability to parse out multiple repository locations from the property and have the software grab each and then parse them all together (as it currently does with SageTVPlugins.xml and SageTVPluginsDev.xml). For starters, the xml can be hosted on the git. This would provide a level of version control that would help to avoid it becoming broken at some point, as well as move towards taking it out of Google control (of course, meaning it would have to be in a non-google fork).
__________________
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 |
#28
|
|||
|
|||
fwiw, I vote #2. I just envision massive headaches ahead if v7 & v9 plugins are forced to coexist in one repo.
Especially when you consider that the majority of devs are going to be writing for v9 anyway. If you duplicate the repo and separate them then v7 is v7 and those who decide to stay there don't have to worry about their plugins being updated with a MinVersion=9.0 manifest meaning they can't ever reinstall their v7 plugin from the repo again (at least not without some very bothersome SageTVPluginsDev.xml hacks). One repo for v7, one for v9. To ease dev tedium, perhaps some additional tooling to make it possible to submit plugins for inclusion in both repos, just v7 or just v9 (but I don't really think that's going to be necessary -- how many devs plan on continuing dev on v7 and not v9? Very few, I'd imagine).
__________________
Twitter: @ddb_db Server: Intel i5-4570 Quad Core, 16GB RAM, 1 x 128GB OS SSD (Win7 Pro x64 SP1), 1 x 2TB media drive Capture: 2 x Colossus STB Controller: 1 x USB-UIRT Software:Java 1.7.0_71; SageTV 7.1.9 Clients: 1 x HD300, 2 x HD200, 1 x SageClient, 1 x PlaceShifter Plugins: Too many to list now... |
#29
|
||||
|
||||
Another option...just remove the newly added Lucene stuff from SageTV.
![]() If Lucene is going to cause a fracture of the plugins between V7/V9; then it's probably best to just kill it.
__________________
Jeffrey Kardatzke Founder of SageTV |
#30
|
|||
|
|||
I think the lucene issue just foreshadows other problems that can/will arise.
The big one being what I've already alluded to. Someone updates a plugin today and slaps a MinVersion=9.0 in the manifest. Well v7 users are done, they can never install the plugin again. I suspect this will be an issue in a year from now or maybe sooner depending how quickly dev revs up on the OSS version. Off the top of my head, the Jetty plugin is in desperate need of an upgrade. Presumably whomever does that is going to move to Jetty 9.x (we're at 6.x today). Well that implies Java 7+. When the update adds a JRE MinVersion=1.7 to the manifest how many Sage 7 users still on Java 6 (or <shuttering> Java 5) does that prevent from being able to reinstall their v7 setup down the road? To me, it just seems logical to create a new repo specifically for v9. Especially when v9 starts to introduce things that make it impossible for (some) plugins to maintain Sage 7 support going forward. I'm assuming, of course, that there is a desire to keep Sage 7 owners operational long term. If that's not in the cards then forget everything I say with the understanding that when a dev decides their plugin update can only run on v9 then that automatically implies v7 users will never be able to reinstall it again.
__________________
Twitter: @ddb_db Server: Intel i5-4570 Quad Core, 16GB RAM, 1 x 128GB OS SSD (Win7 Pro x64 SP1), 1 x 2TB media drive Capture: 2 x Colossus STB Controller: 1 x USB-UIRT Software:Java 1.7.0_71; SageTV 7.1.9 Clients: 1 x HD300, 2 x HD200, 1 x SageClient, 1 x PlaceShifter Plugins: Too many to list now... |
#31
|
||||
|
||||
Quote:
I spent the last hour trying to re-host the files, since, I haven't re-submitted phoenix since google code died ![]() But, even shipping a phoenix without the lucene dependency doesn't fix things, because if I recall, savetv doesn't remove a dependency when you update a plugin... so at the end of the day, removing lucene from phoenix does nothing to fix the problem ![]() Maybe disabling lucene from the core is the easiest solution.
__________________
Batch Metadata Tools (User Guides) - SageTV App (Android) - SageTV Plex Channel - My Other Android Apps - sagex-api wrappers - Google+ - Phoenix Renamer Downloads SageTV V9 | Android MiniClient |
#32
|
|||
|
|||
Quote:
The complicated, dynamic way would probably involve the server keeping track of all submitted versions, rather than the latest (which it may already for all I know) and the client sending its version with the request so the server could send it a manifest that is compatible with the version. The easy way would be maybe just one repository per major version of SageTV? |
#33
|
|||
|
|||
Quote:
![]() ![]() ![]() ![]() ![]() ![]() I think there are just too many gotchas to think about (including many we probably haven't even thought of yet) when the easy solution is just so easy in this case. New major version number, new isolated plugin repo. Especially when the added benefit is that we aren't touching the older version's repo and therefore can never mess up the older version's ability to reinstall plugins as needed. Plus you alleviate the need for devs to worry about if their new manifest is going to break users 1, 2, 3, etc. releases back.
__________________
Twitter: @ddb_db Server: Intel i5-4570 Quad Core, 16GB RAM, 1 x 128GB OS SSD (Win7 Pro x64 SP1), 1 x 2TB media drive Capture: 2 x Colossus STB Controller: 1 x USB-UIRT Software:Java 1.7.0_71; SageTV 7.1.9 Clients: 1 x HD300, 2 x HD200, 1 x SageClient, 1 x PlaceShifter Plugins: Too many to list now... |
#34
|
||||
|
||||
So what would be the best hosting and validating system to use for the SageTV9Plugins.xml?
__________________
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 |
#35
|
||||
|
||||
Quote:
__________________
Sage Server: 8th gen Intel based system w/32GB RAM running Ubuntu Linux, HDHomeRun Prime with cable card for recording. Runs headless. Accessed via RD when necessary. Four HD-300 Extenders. |
#36
|
||||
|
||||
Quote:
As for hosting, I did create an OpenSageTV organization on GitHub a few days ago. https://github.com/OpenSageTV Organizations are similar to users, except they can have multiple admins. Users can have specific roles, etc. I think that using a separate plugin repo per sagetv major version is probably a good idea, but still doesn't fix Slugger's comment about when a developer decides to upgrade to Java 8 and set the Min java version to 8 whether it be saget 7 or 9. So do we start doing separate plugin repos per java version as well?? So, perhaps the bigger flaw here is the fact that SageTV only knows about a single version of a plugin (as skiingwiz pointed out), and not about the history of the plugin, where they can be multiple instances of the plugin based on jvm requirements, sage version requirements, etc. This obviously makes the server processing more complicated, but I'd favour that over forcing a developer to re-publish plugins to several different repositories. (For all I know the plugin system might already do some of this) Something else to consider as well... If we used multiple repositories, could we have repositories "inherit" from another repository. So, S9 repo could inherit from S7, meaning, initially the S9 repo is basically blank. When a developer publishes a plugin, if their Min sage version is 9, then it gets added to the S9 repo, and S7 is unaffected. If the Min version is left out then it goes to the base S7 repo, and then it is picked up by S7 and S9 and the plugin is only published once. Still doesn't solve the Java version issue. And "inherit" in this sense could be a simple as the SageTVPlugins.xml having one or more <inherit> elements that simply points to other SageTVPlugins.xml URLs that need to be loaded before this one. I'm sure the existing plugin system already does the work to resolve the latest version when processing multiple sources, so this would be easy to implement.
__________________
Batch Metadata Tools (User Guides) - SageTV App (Android) - SageTV Plex Channel - My Other Android Apps - sagex-api wrappers - Google+ - Phoenix Renamer Downloads SageTV V9 | Android MiniClient |
#37
|
|||||
|
|||||
Quote:
Quote:
But if devs do want to maintain v7 support long term then my thoughts on extra tooling to ease the dual maintenance becomes a little more relevant than I originally thought. Quote:
Quote:
Quote:
__________________
Twitter: @ddb_db Server: Intel i5-4570 Quad Core, 16GB RAM, 1 x 128GB OS SSD (Win7 Pro x64 SP1), 1 x 2TB media drive Capture: 2 x Colossus STB Controller: 1 x USB-UIRT Software:Java 1.7.0_71; SageTV 7.1.9 Clients: 1 x HD300, 2 x HD200, 1 x SageClient, 1 x PlaceShifter Plugins: Too many to list now... |
#38
|
||||
|
||||
Sadly, the most 'robust' solution would end up being the most complicated. There could be a way to 'overload' the manifest for different versions of a plugin with the same name based on the min and max version information, we'd just have to figure out the best way for sage to handle the situation where min and max from different 'versions' of a plugin overlap.
I'd say that when parsing the repository, sage would have to find the highest version of a plugin that has it's prerequisites met, and that is the only version of it that makes it past the initial phase of reading. However, it would also have to check if all the dependencies for a given plugin also passed this test, so it would be a nested process. Likely not 'hard' to code, especially if each plugin object has it's own validation method in it, that would only show valid if all the plugin's dependencies also show valid.
__________________
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 |
#39
|
||||
|
||||
Managing this might not be totally difficult if there was a better database editor for the repository. Currently, there is the fire-and-forget web form, which doesn't allow for minor changes. If there was instead a web based manifest editor, this would provide the ability to easily visualize and make changes to an existing plugin manifest. This is, of course, a whole other project that needs to be handled, but would be rather simple database manipulation.
__________________
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 |
#40
|
||||
|
||||
Quote:
Quote:
__________________
Batch Metadata Tools (User Guides) - SageTV App (Android) - SageTV Plex Channel - My Other Android Apps - sagex-api wrappers - Google+ - Phoenix Renamer Downloads SageTV V9 | Android MiniClient |
![]() |
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
|
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
PlayOn Plugin Linux Discussion | evilpenguin | SageTV v7 Customizations | 35 | 01-23-2013 12:18 AM |
Linux install problem, wrong architecture 'i386' | davephan | SageTV Linux | 40 | 03-25-2011 12:03 PM |
Architecture advice | rykr | Hardware Support | 4 | 10-27-2010 02:18 PM |
Multi-Task Architecture | glbrown | SageTV Software | 1 | 11-24-2003 04:34 PM |
SageTV Client<-> Master Architecture question | IVB | SageTV Software | 4 | 11-12-2003 08:00 PM |