|
Phoenix This forum is for discussing the user-created Phoenix custom interface for SageTV. |
|
Thread Tools | Search this Thread | Display Modes |
#1
|
||||
|
||||
VFS Examples?
I’ve been creating some of my own views for a variety of tasks both for BMT and for Phoenix. I’m curious to know if others are building their own too? If so, I’d love to see what other users are doing to get ideas from. It would be nice to have some consolidation for future reference as well.
Here are a couple of the views that I’ve found beneficial. This view pulls out all the Kid’s movies from my collection. I used PQL to make sure that as movies are added to the collection basically no maintenance would need to be done. Except maybe refining the PQL look up. I previously was setting genre codes to achieve the same result. I then put it to its own menu fragment to insert it into Phoenix: Code:
<view name="wr_kids_movies" label="WR Movies - Kid's Only"> <description>Display Kid's Movies Only</description> <view-source name="sagevideoimportsv7" > <filter by="pql" value="Genre contains 'Family' or Genre contains 'Animation' or Genre contains 'Musical' or Genre contains 'Short' or Rated='G' and MediaType='Movie'"/> </view-source> <presentation> <sort by="title"> </sort> </presentation> </view> </views> Code:
<view name="wr_movies_only" label="WR Movies - Cinematic Only" flat="false"> <option name="bookmark" value="/Movies/"/> <option name="children-only" value="true"/> <description>Movies in the New folder</description> <tag value="video"/> <view-source name="sagevideoimportsv7"/> <presentation> <sort by="title"> <option name="folders-first" value="false"/> </sort> </presentation> </view> Code:
<view name="wr_recently_added" label="WR Movies - Recently Added"> <description>Recently Added Movies</description> <view-source name="videos" > <filter by="homevideos"> <option name="scope" value="exclude"/> </filter> </view-source> <presentation> <sort by="recentactivity"> <option name="sort-order" value="desc"/> </sort> </presentation> </view> Code:
<view name="wr_movies" label="Movies Only"> <description>Movies Only</description> <view-source name="sagevideoimportsv7"/> <filter by="genre" value="Movie" /> <presentation> <sort by="title"> </sort> </presentation> </view> |
#2
|
||||
|
||||
Chick Flicks VFS
I just got the idea for a view for the women of our lives... I call it the Chick Flicks view:
Code:
<view name="wr_chick_flicks" label="WR Movies - Chick Flicks"> <description>Display chick flick related movies</description> <view-source name="sagevideoimportsv7" > <filter by="pql" value="Genre contains 'Romance' or Genre contains 'Musical' or Genre contains 'Music' or Genre contains 'Drama' and MediaType = 'Movie'"/> </view-source> <presentation> <sort by="title"> </sort> </presentation> </view> |
#3
|
||||
|
||||
Kid’s only TV Shows
Here’s a nice one for the TV section. It simply breaks out TV shows suitable for young children:
Code:
<!DOCTYPE vfs SYSTEM "vfs.dtd"> <vfs> <views> <view name="wr_basic_tv" label="WR Simple TV Lookup"> <description>WR TV Simple Lookup of All TV Shows</description> <tag value="tv"/> <view-source name="recordings"/> <view-source name="archivedrecordings"/> <view-source name="videos" > <filter by="mediatype" value="tv" /> </view-source> </view> <view name="wr_kids_tv" label="WR TV - Kid's Only"> <description>WR Display Kid's Shows Only</description> <view-source name="wr_basic_tv" > <filter by="pql" value="Genre contains 'Animation' or Genre contains 'Animated' or Genre contains 'Children' and MediaType = 'TV' and ParentalRating <> 'TV14' and ParentalRating <> 'TVM'"/> </view-source> <presentation level="1"> <group by="show"/> <sort by="title"/> <hint value="series"/> </presentation> </view> </views> </vfs> Last edited by wrems; 05-23-2011 at 07:30 AM. |
#4
|
||||
|
||||
The top view isn't really necessary - there are 'built in' views already that are the same. It doesn't hurt to have your own of course, but it is duplication.
Look for the views named phoenix.view.primary.* These are good candidates to be used in the <view-source> tag for any custom views you make. They will eventually be the basis for the GUI view builder. Code:
<view name="phoenix.view.primary.importedmovies" <view name="phoenix.view.primary.recordedmovies" <view name="phoenix.view.primary.recordedtv" <view name="phoenix.view.primary.recordedtvarchived" <view name="phoenix.view.primary.importedtv" <view name="phoenix.view.primary.homevideos" <view name="phoenix.view.primary.scheduledrecordings" <view name="phoenix.view.primary.upcomingairings"
__________________
PHOENIX 3 is here! Server : Linux V9, Clients : Win10 and Nvidia Shield Android Miniclient |
#5
|
||||
|
||||
This is a view that is in the 313 release - it basically finds everything that is on TV right now, then groups it by genre. So it's kind of like an alternate way to look at EPG data:
Code:
<view name="phoenix.view.default.nowshowing" label="Now Showing"> <description>Currently Airing TV shows</description> <tag value="epg"/> <tag value="tv"/> <tag value="movie"/> <tag value="default"/> <view-source name="phoenix.view.primary.currentlyairing"/> <presentation level="1"> <group by="genre"> <option name="prune-single-item-groups" value="false"/> </group> <sort by="title"/> </presentation> <presentation level="2"> <sort by="title"/> </presentation> </view>
__________________
PHOENIX 3 is here! Server : Linux V9, Clients : Win10 and Nvidia Shield Android Miniclient |
#6
|
||||
|
||||
here is one i created for baby media
VFS: Code:
<!DOCTYPE vfs SYSTEM "vfs.dtd"> <vfs> <views> <view name="mr_baby_media" label="MR Media - All Baby Media"> <description>MR Display all baby media</description> <view-source name="sagevideoimportsv7" > <filter by="pql" value="MediaTitle contains 'Baby' or IMDBID = 'tt1476037' and (MediaType = 'TV' or MediaType = 'Movie')" /> </view-source> <presentation> <sort by="title"/> </presentation> </view> </views> </vfs> Code:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE menus SYSTEM "menus.dtd"> <menus> <fragment parentMenu="phoenix.menu.lz.videos" insertBefore="phoenix.menu.lz.videos.alltitlescoverflow"> <menuItem name="mr_baby_media" label="Baby Media" visible="true"> <description>MR - Display baby media</description> <screen name="Phoenix UMB - Cover Flow" /> </menuItem> </fragment> <fragment parentMenu="phoenix.menu.lz.tv" insertBefore="phoenix.menu.lz.TV.alltitlescoverflow"> <menuItem name="mr_baby_media" label="Baby Media" visible="true"> <description>MR - Display baby </description> <screen name="Phoenix UMB - Cover Flow" /> </menuItem> </fragment> </menus> Last edited by PiX64; 05-26-2011 at 07:43 PM. |
#7
|
||||
|
||||
Here's another example. One for my workout videos.
Can take a folder of an import path and show all contents in that folder. In my case my full path is: Code:
\\sage\SageTV Video\Workout Videos Here's the vfs: Code:
<!DOCTYPE vfs SYSTEM "vfs.dtd"> <vfs> <views> <view name="wr_workout_videos_only" label="WR Movies - Workout Videos" flat="false"> <option name="root" value="/Workout Videos/"/> <option name="children-only" value="true"/> <description>WR Display workout videos only</description> <tag value="video"/> <view-source name="sagevideoimportsv7"/> <presentation> <sort by="title"> <option name="folders-first" value="false"/> </sort> </presentation> </view> </views> </vfs> |
#8
|
||||
|
||||
Chick Flicks VFS
Here’s my full VFS for the chick flicks view. I’ve been pretty happy with it. It’s designed to allow movies that are chick flicks to be grabbed automatically with the first PQL statement. Then the second statement excludes the all specific titles that are not chick flicks by using their IMDB ID. Using BMT one can peruse this view and copy and paste the IMDB ID’s pretty quickly for the suspect ones.
This way not matter what happens with BMT those excluded titles will not creep back into the view. I’ve found it much easier to let BMT do it’s thing and not fight with the genres, because future metadata updates will over write the genres back to the TMDB standard - then you have to go and update those again. So for me, it’s easier to leave it as is and exclude the creepers in another manner. There’s a bit of ongoing maintenance to keep it up over time since there is no silver bullet to getting to an accurate chick flicks definition, it’s pretty subjective. The maintenance is mostly once in a while eyeballing the view and excluding the movies that creep up by their IMDB ID’s. Which should be minimal over time, a few here and there and some of them will be pretty close regardless. The first definition is broad enough to capture all of the chick flicks and then some. The excludes are really the fringe movies with a genre of Drama. My thoughts are if others are interested in a view like this that over time the exclude list of IMDB ID’s will become pretty extensive. My thoughts are, if we each shared our list of excludes it would save the effort of building it from scratch. I would bet that a lot of us have the same movies, so the excludes would overlap. Eventually we’d be able to create one master list of all the excludes of the movies currently available and the definition would be pretty darn accurate. Then the only additions would be going forward and those would probably be minimal. It would just take a few minutes here and there to take a scalpel to the view and add the new IMDB ID’s to a master list... Code:
<!DOCTYPE vfs SYSTEM "vfs.dtd"> <vfs> <views> <view name="wr_chick_flicks_Temp" label="Chick Flicks Temp" visible="false"> <description>Intermediary View for the final Chick Flicks View NOT FINAL VIEW</description> <view-source name="sagevideoimportsv7" > <filter by="pql" value= " Genre contains 'Romance' or Genre contains 'Musical' or Genre contains 'Music' or Genre contains 'Drama' and MediaType = 'Movie' and Rated <> 'G' "/> </view-source> </view> <view name="wr_chick_flicks" label="WR Movies - Chick Flicks"> <description>WR Display chick flick related movies</description> <view-source name="wr_chick_flicks_Temp" > <filter by="pql" value= " IMDBID = 'tt1067106' or IMDBID = 'tt0078788' or IMDBID = 'tt0372784' or IMDBID = 'tt1020558' or IMDBID = 'tt0206634' or IMDBID = 'tt0097162' or IMDBID = 'tt1136608' or IMDBID = 'tt0083866' or IMDBID = 'tt0060390' or IMDBID = 'tt1433108' or IMDBID = 'tt0093058' or IMDBID = 'tt0119177' or IMDBID = 'tt0947810' or IMDBID = 'tt0113277' or IMDBID = 'tt0910905' or IMDBID = 'tt0361748' or IMDBID = 'tt0460780' or IMDBID = 'tt1075747' or IMDBID = 'tt0947802' or IMDBID = 'tt0065988' or IMDBID = 'tt0467197' or IMDBID = 'tt0087803' or IMDBID = 'tt0477348' or IMDBID = 'tt0093748' or IMDBID = 'tt0482572' or IMDBID = 'tt1152836' or IMDBID = 'tt1053424' or IMDBID = 'tt1034331' or IMDBID = 'tt0479537' or IMDBID = 'tt0046303' or IMDBID = 'tt1130884' or IMDBID = 'tt0286106' or IMDBID = 'tt0413300' or IMDBID = 'tt0473705' or IMDBID = 'tt0438488' or IMDBID = 'tt1095217' or IMDBID = 'tt1037705' or IMDBID = 'tt0468569' or IMDBID = 'tt0970416' or IMDBID = 'tt0077416' or IMDBID = 'tt0068646' or IMDBID = 'tt0071562' or IMDBID = 'tt0099674' or IMDBID = 'tt0887912' or IMDBID = 'tt0087553' or IMDBID = 'tt0049730' or IMDBID = 'tt0081505' or IMDBID = 'tt0075213' or IMDBID = 'tt0840361' or IMDBID = 'tt0040897' or IMDBID = 'tt0780653' or IMDBID = 'tt1125849' or IMDBID = 'tt0065126' or IMDBID = 'tt0114738' or IMDBID = 'tt0141926' or IMDBID = 'tt0477080' or IMDBID = 'tt0096446' or IMDBID = 'tt0486674' or IMDBID = 'tt0386117' or IMDBID = 'tt0080339' or IMDBID = 'tt0050083' or IMDBID = 'tt1190080' or IMDBID = 'tt0357413' or IMDBID = 'tt0034492' or IMDBID = 'tt0033563' or IMDBID = 'tt0106973' or IMDBID = 'tt0780567' or IMDBID = 'tt0448011' or IMDBID = 'tt0048280' or IMDBID = 'tt1470827' or IMDBID = 'tt1182921' or IMDBID = 'tt0200465' or IMDBID = 'tt1130080' or IMDBID = 'tt0054047' or IMDBID = 'tt0056217' or IMDBID = 'tt0914863' or IMDBID = 'tt0985699' or IMDBID = 'tt1175491' or IMDBID = 'tt0960144' "> <option name="scope" value="exclude"/> </filter> </view-source> <presentation> <sort by="title"> </sort> </presentation> </view> </views> </vfs> |
#9
|
||||
|
||||
Here is another example of what I ended up doing. Jamie and I are having a baby in a week or so and we wanted a way to categories all of his stuff.
so I added a landing menu item called MJ Media with menu sub items of Baby DVDs, Kids Movies and Kids TV here is what everything looks like landing menu frag: Code:
<menus> <fragment parentMenu="phoenix.menu.lz" insertBefore="phoenix.menu.lz.recentimports"> <menu background="GlobalMenuBackground.jpg" icon="gMoviesMenuIcon" label="MJ Media" name="phoenix.menu.lz.videos" type="Video"> <menuItem name="mr_baby_media" label="Baby DVDs" visible="true"> <description>MR - Display baby dvd</description> <eval>AddGlobalContext("DefaultView","mr_baby_dvd")</eval> <screen name="Phoenix UMB - Cover Flow" /> </menuItem> <menuItem name="mr_kids_movies" label="Kids Movies" visible="true"> <description>MR - Display kids movies</description> <eval>AddGlobalContext("DefaultView","mr_kids_movies")</eval> <screen name="Phoenix UMB - Cover Flow" /> </menuItem> <menuItem name="mr_kids_cartoons" label="Kids TV" visible="true"> <description>MR - Display kids TV</description> <eval>AddGlobalContext("DefaultView","mr_kids_tv")</eval> <eval>AddStaticContext( "FlowType" , "BANNER" )</eval> <screen name="Phoenix UMB - Art Flow" /> </menuItem> </menu> </fragment> </menus> Code:
<vfs> <views> <view name="mr_baby_dvd" label="MR Media - All Baby DVDs" flat="false"> <option name="root" value="/BabyDVDs/"/> <option name="children-only" value="true"/> <description>MR Display all baby dvds</description> <tag value="video"/> <view-source name="sagevideoimportsv7"/> <presentation> <sort by="title"> <option name="folders-first" value="false"/> </sort> </presentation> </view> </views> </vfs> Code:
<vfs> <views> <view name="mr_kids_movies" label="MR Media - Kids Movies"> <description>MR Display Kids related movies</description> <view-source name="sagevideoimportsv7" > <filter by="pql" value="Genre contains 'Animation' and MediaType='Movie' and (Rated='G' or Rated='PG')" /> </view-source> </view> <view name="mr_kids_movies" label="MR Media - Kids Movies"> <description>MR Display Kids related movies</description> <view-source name="mr_kids_movies" > <filter by="pql" value="IMDBID = 'tt1219342'"> <option name="scope" value="exclude"/> </filter> </view-source> <presentation> <sort by="title"> </sort> </presentation> </view> </views> </vfs> Code:
<vfs> <views> <view name="mr_kids_tv" label="MR Media - Kids TV" flat="false"> <option name="root" value="/Kids Cartoons/"/> <option name="children-only" value="true"/> <description>MR Display kids tv</description> <tag value="video"/> <view-source name="sagevideoimportsv7"/> <presentation level="1"> <group by="show"/> <sort by="title"/> <hint value="series"/> </presentation> <presentation level="2"> <group by="season"> <option name="prune-singe-item-groups" value="true"/> </group> <sort by="title"/> </presentation> <presentation level="3"> <sort by="seasonepisode" /> </presentation> </view> </views> </vfs> |
#10
|
||||
|
||||
Congrats on the baby. We're expecting number 2 in December
|
#11
|
||||
|
||||
thanks! and 2 u too.
|
#12
|
||||
|
||||
Here’s a view that is slightly different than Brian’s New Movies. I like my version a bit better because it shows cinematic movies only, because I place all my cinematic movies in a specific folder called Movies. Even across multiple hard drives they’re grouped together for this view. Also, it displays them all of them and not just the top few.
Here’s the VFS: Code:
<view name="wr_movies_by_path" label="WR Movies by Path" flat="false" visible="false"> <option name="root" value="/Movies/"/> <option name="children-only" value="true"/> <description>Grab content from the combined import paths</description> <view-source name="sagevideoimportsv7"/> <presentation> <sort by="recentactivity"> <option name="sort-order" value="desc"/> </sort> </presentation> </view> <view name="wr_recently_added_movies" label="WR Movies - Recently Added" flat="true" visible="true"> <view-source name="wr_movies_by_path"/> </view> |
#13
|
||||
|
||||
Very nice.
You realize 'New Movies' isn't exactly a view so much as a ViewMenu - since it's part of the landing zone it can't be too big cuz it won't fit. There are some helper views that are used on the Box Landing zone and Info Menu's - they might be called 'New Movies' also, but ideally you shouldn't see them. Turn off 'advanced' views in the Phoenix options to hide all of the 'helper' views - makes browsing your views a lot less painful! There's a sort that is called 'Date Added' which would probably work better for the above view all things considered - recent activity looks at the file date, while Date Added looks at sage's Media ID which is incremented each time something is added to Wiz.bin - so you've got basically 'New on HardDrive' vs 'New to Sage' - and new to Sage is really what you want to see (normally) when looking for "new" content.
__________________
PHOENIX 3 is here! Server : Linux V9, Clients : Win10 and Nvidia Shield Android Miniclient |
#14
|
||||
|
||||
Disclaimer - if you end up having a network hickup and Sage 'finds' a network path that it thought was lost - you might end up with a bunch of 'old' movies showing up as recently added IF Sage goes and re-imports them all. This happened to me!
Nothing we (phoenix) can do about that phenom......
__________________
PHOENIX 3 is here! Server : Linux V9, Clients : Win10 and Nvidia Shield Android Miniclient |
#15
|
||||
|
||||
Yeah, I was trying the MediaFileId in my plight to get this to work out. However, it was never accurate. It was entirely incorrect. Maybe I set the view up incorrectly. I'm not sure. Maybe I'll try to play with it again to see if it changes. It may be because a while back I nuked my wiz.bin and started over from scratch...
|
#16
|
||||
|
||||
Here’s a view very similar to the recently added content above. It’s a view that combines import paths across multiple hard drives and brings it back into 1 flattened view:
Code:
<view name="wr_movies_by_path" label="WR Movies by Path" flat="false" visible="false"> <option name="root" value="/Movies/"/> <option name="children-only" value="true"/> <description>Grab content from the combined import paths</description> <view-source name="sagevideoimportsv7"/> </view> <view name="wr_movies_only" label="WR Movies - Cinematic Only" flat="true" visible="true"> <view-source name="wr_movies_by_path"/> <presentation> <sort by="title"> <option name="sort-order" value="asc"/> <option name="ignore-all" value="true"/> </sort> </presentation> </view> FYI, I'm posting all of these here for a couple of reasons. Hopefully others will find them useful, and more importantly I'm documenting my journey to get these right and have some notes while they're fresh in my mind. At least I should be able to rebuild my views in the event of a major (usually self inflicted) catastrophe! |
#17
|
||||
|
||||
So I have a view for kids movies that shows up when i browse for it. To get it in the Landing Zone which instruction do I follow? Do I add the 'fragment' into the real menu xml file or a copy or the landing zone xml and point to that somehow or just copy over the real xml? Confused as to the landing zone bit right now.
Thanks
__________________
Happy Sage customer since 2003 Proud owner of a HD200 connected to a 47" LCD. Loving Sage 7 and Phoenix |
#18
|
||||
|
||||
Place the menu fragment in the userdata area. It's a stand-alone code widget. That way when they release new versions of the menu your menu items won't disappear. You'll probably have to create the folder for 'menus' and for 'vfs' in userdata>phoenix. This is where you'll keep the vfs statements too. Remember to back these up from time to time so if you lose your stuff you can restore them easily enough.
Last edited by wrems; 06-17-2011 at 06:47 PM. |
#19
|
||||
|
||||
Kid’s Only TV View Revised
I previously created this one in a couple of ways. One with PQL and one that includes by IMDB ID’s. Neither worked quite right. The PQL gets pretty close though. Just leaves some remnants that need to be excluded manually. The include by IMDB worked really well since I could control exactly the titles that were presented. This worked until Sage recorded a new one. The new stuff doesn’t always get matched properly or get an IMDB until after BMT scans it after the file is done recording. So the active recordings are basically invisible until they are finsihed recording or they’re fixed in bmt. Too much maintenance.
So, here is the latest incarnation of my kid’s only view. It uses the verbatim title to do the include. That way currently recording stuff shows up as expected. My sort is different than the default but that could easily be changed back to ‘recentactivity’ instead of seasonepisode... The flip side of this vfs is one for the difference... Basically everything else other than kid’s. I use the titles from below to make an exclude. This way I have 1 view that is everything but kid’s shows and then the below view for kid’s only. These 2 views really helped clean up my TV screens. Code:
<views> <view name="wr_basic_tv" label="WR Simple TV Lookup" visible="false"> <description>WR TV Simple Lookup of All TV Shows</description> <tag value="tv"/> <view-source name="recordings"/> <view-source name="archivedrecordings"/> <view-source name="videos" > <filter by="mediatype" value="tv" /> </view-source> </view> <view name="wr_kids_tv" label="WR TV - Kid's Only"> <description>WR Display Kid's Shows Only</description> <view-source name="wr_basic_tv" > <filter by="pql"> <option name="value"> ><![CDATA[ Title = 'The Backyardigans' or Title = 'Caillou' or Title = 'The Cat in the Hat Knows a Lot About That!' or Title = 'Clifford the Big Red Dog' or Title = 'Curious George' or Title = 'Dinosaur Train' or Title = 'Prep & Landing' or Title = 'Shaun the Sheep' or Title = 'Sid the Science Kid' or Title = 'The Smurfs' or Title = 'SpongeBob SquarePants' or Title = 'Yo Gabba Gabba!' ]]></option> <option name="scope" value="include"/> </filter> </view-source> <presentation level="1"> <group by="show"/> <sort by="title"> <option name="ignore-all" value="true"/> </sort> </presentation> <presentation level="2"> <sort by="seasonepisode"> <option name="sort-order" value="desc"/> </sort> </presentation> </view> </views> |
#20
|
||||
|
||||
Instant Status Recently Recorded and Currently Recording
I created a vfs which I really like. It’s really for the instant status update area. It combines 2 of the view that are there with a bit of a twist. One of the problems I had with the recently recorded view was the spam from my son’s cartoon recording. All my shows inevitably got pushed off the list and I never used that list to start a program for him.
Here’s the basic view: Code:
<views> <view name="wr_recent_recordings" label="WR Recordings - Recent and Current" flat="true" visible="true"> <view-source name="phoenix.view.source.sagerecordings"> </view-source> <presentation> <sort by="recentactivity"> <option name="sort-order" value="desc"/> </sort> </presentation> </view> </views> Code:
<filter by="pql"> <option name="value" ><![CDATA[ Title = 'The Backyardigans' or Title = 'Caillou' or Title = 'The Cat in the Hat Knows a Lot About That!' or Title = 'Clifford the Big Red Dog' or Title = 'Curious George' or Title = 'Dinosaur Train' or Title = 'Lassie' or Title = 'Looney Tunes' or Title = 'Prep & Landing' or Title = 'Shaun the Sheep' or Title = 'Sid the Science Kid' or Title = 'SpongeBob SquarePants' or Title = 'Star Wars - The Clone Wars' ]]></option> <option name="scope" value="exclude"/> </filter> I’ve been using the above spam filter on a bunch of my TV views to reduce some of the clutter and organize specific content in specific views. |
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Examples of glitches in SageTV recordings & PVR-250 (what causes this?) | jimbobuk | Hardware Support | 18 | 05-24-2003 06:31 AM |