View Full Version : VFS Examples?
wrems
05-20-2011, 11:50 AM
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:
<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>
This view like the Kid’s movies from above grabs only the cinematic movies in my collection. It’s based on the import path where I store movies only. No home vids etc. All one needs to change is the bookmark value to the location of their combined movie collection:
<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>
The next snippet is to get recently added Movies into BMT as well as for my Phoenix menu. I like the new movies that’s default in Phoenix but it includes my home videos and workout videos which I don’t prefer, so this one does a nice job of only showing the most recent movies added to my collection:
<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>
The following view I no longer use because I changed my approach. I used to batch update the genre field to +Movie so that I could use the following look up to get movies only. Required a little maintenance moving forward but as an example I thought I would include it:
<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>
I’m hoping that others have examples to share. I’d like to see them to get ideas from! :D
wrems
05-22-2011, 04:11 PM
I just got the idea for a view for the women of our lives... I call it the Chick Flicks view:
<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>
I got instant bonus points the second I added this view to my Phoenix Videos library. I’m still working on a way to clean up the few oddities that crop up into the look up. Overall, it’s pretty accurate at getting a nice subset for my wife’s perusal!
wrems
05-23-2011, 05:39 AM
Here’s a nice one for the TV section. It simply breaks out TV shows suitable for young children:
<!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>
I had to use 2 views for this one for the 2 filters. I’m sure there’s a better way to achieve this but the method above seems to work well.
bialio
05-23-2011, 09:23 AM
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.
<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"
btl.
bialio
05-23-2011, 09:29 AM
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:
<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>
If you are so inclined you can make some nice specific views like "Kids shows on right now" or "Cooking shows on right now" based on this.
PiX64
05-26-2011, 03:02 PM
here is one i created for baby media
VFS:
<!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>
menu fragment:
<?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>
wrems
05-26-2011, 03:38 PM
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:
\\sage\SageTV Video\Workout Videos
Here's the vfs:
<!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>
wrems
05-27-2011, 07:02 AM
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...
<!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>
PiX64
05-27-2011, 09:41 PM
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:
<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>
baby dvd vfs
<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>
kids movies vfs
<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>
kids tv vfs
<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>
I have Baby DVD and Kids Movies using Cover Flow, and the Kids TV using Season view.
wrems
05-28-2011, 05:37 AM
Congrats on the baby. We're expecting number 2 in December:eek:
PiX64
05-28-2011, 09:07 AM
thanks! and 2 u too.
:goodjob:
wrems
06-16-2011, 12:50 PM
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:
<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>
It’s two parts because it first needs to combine the sources and then the second one flattens the structure. If done in a single view the results are totally different and not correct. The above code seems to do really well at giving a laundry list of all the movies added in the order they were added to the system. This is the only way I could get the results to be accurate.
bialio
06-16-2011, 01:18 PM
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.
bialio
06-16-2011, 01:21 PM
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......
wrems
06-16-2011, 02:03 PM
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...
wrems
06-16-2011, 02:23 PM
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:
<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>
It’s 2 parts again to make sure only a specific folder is utilized and displayed. In this case, Movies. But it could be set for any folder one wants to display.
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!;)
RedCoat999
06-17-2011, 06:01 PM
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
wrems
06-17-2011, 06:45 PM
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.
wrems
06-18-2011, 06:36 AM
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.
<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>
wrems
06-20-2011, 01:55 PM
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:
<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>
Here’s the filter I add to the above code where I specify the names of the shows that won’t be displayed here. It works great! Now only my shows are listed and I can access them quickly. My son’s shows need to be accessed the normal way. Here’s the filter, just substitue your show names and drop it into the code above after </view-source> :
<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. :)
Torkild
06-21-2011, 05:24 AM
Would be nice to see a screenshoy of your VFS examples :D
wrems
06-21-2011, 05:50 AM
I would... But, I wouldn't even know what to show... I’m not sure it would be terribly exciting to see my TV and movie collections. I don’t know that one would discern anything specific from it. Unless you mean a video showing how to create a custom view?
Basically, the VFS incarnations I have put together are just subtle twists on the default views to hone in on what I myself and my family want to see. I’m sure not everyone want’s their media set up the way I have it. I’ve just documented my progress to give others ideas and have some sort of record of my attempts at manipulating VFS.
I’ve just been excited that I can personally and fairly easily manipulate the menus and precisely what they display. I hope others find these examples at least a little bit useful in tinkering with their media. I know they probably aren’t as efficient as they could be and I keep modifying them as I learn more too. My hopes are others will come up with good ideas that they implement that I can leverage too!
A lot can be accomplished with VFS and these examples are probably a fairly insignificant portion of their capability.
wrems
06-24-2011, 01:50 PM
Here’s a view that works really well at tracking down all the episodes in all of your series that have gone unwatched. Per the watched status flag, and normally the ones marked as Favorites in Sage.
This particular version is a bit special in the sense it is tailored to my specific situation and that the current Favorites filter doesn’t work for content that was once recorded and then archived in a different location.
For example, I record stuff then remove the commercials transcode it and place them in their individual folders for long-term archival reasons. This process breaks the ability of the favorites filter to track them.
That’s why in this case I had to go through all the shows I have and manually type in the show name so that only those specific ones show. I don’t care about my son’s recordings unwatched shows so they are left off. I would normally just exclude them but this case was a bit different.
<views>
<view name="wr_unwatched_filter" label="WR UNWATCHED filter" visible="false">
<description>WR collect TV from all sources and apply filters</description>
<view-source name="recordings">
<filter by="watched" value="false"/>
</view-source>
<view-source name="archivedrecordings">
<filter by="watched" value="false"/>
</view-source>
<view-source name="videos" >
<filter by="mediatype" value="tv" />
<filter by="watched" value="false"/>
</view-source>
</view>
<view name="wr_unwatched" label="WR TV - Unwatched " visible="true">
<view-source name="wr_unwatched_filter">
<filter by="pql">
<option name="value">
<![CDATA[
Title = "Bones" or
Title = "Breaking Bad" or
Title = "Castle (2009)" or
Title = "Dexter" or
Title = "Family Guy" or
Title = "Fringe" or
Title = "Grey's Anatomy"
]]></option>
<option name="scope" value="include"/>
</filter>
</view-source>
<presentation level="1">
<group by="show"/>
<sort by="recentactivity">
<option name="sort-order" value="desc"/>
</sort>
</presentation>
<presentation level="2">
<sort by="seasonepisode">
<option name="sort-order" value="asc"/>
</sort>
</presentation>
</view>
</views>
Obviously not all the shows are listed if you're interested you'll just need to substitute your show names.
The only other consideration about this view is that it assumes that you're using BMT to ensure that the Season/Episodes numbers exist for your recordings. Weird things might happen if you have a bunch of missing metadata... If that's the case you'll probably want to spend some time making sure that you have season episode numbers there. Or sort the last presentation level by MediaFileID if you don't have a bunch of archived stuff.
dflachbart
06-28-2011, 08:19 PM
Here's a view that I use to show all recently watched videos (combined TV and other video files) for the last week. It filters out any titles that don't have a corresponding video file any more (e.g. watched LiveTV):
<view name="all_recently_watched" label="All Recently Watched">
<description>My Recently Watched</description>
<tag value="tv" />
<source name="expression">
<option name="expression">
GetRecentlyWatched( 604800000 )
</option>
</source>
<filter by="filepath" value=".*">
<option name="scope" value="include"/>
<option name="use-regex-matching" value="true"/>
</filter>
</view>
Dirk
wrems
06-29-2011, 04:34 PM
Nice to see you back around Dirk!:D I was taken aback by your recent posts. Where have you been keeping yourself?
dflachbart
06-30-2011, 06:52 PM
Nice to see you back around Dirk!:D I was taken aback by your recent posts. Where have you been keeping yourself?
Hiding under a rock... ? :D
Dirk
White94Cobra
07-01-2011, 12:26 PM
OK... I've been messing with VFS for a day now and am making some progress. However, in many of the examples I don't know the overall configuration of someone's system so it can make it difficult to apply to my system. I want to create a view that points to a specific folder. My import directories are defined in Sage as:
\\main-pc\movies
\\media-pc\Movies1
\\media-pc\Movies2
\\media-pc\Movies3
Each UNC path represents a share on a different system/hard drive.
Under each of these I have folders as follows:
DVD Rentals
HD Movies
My Movies
TVShows
UFC
Vicki's Movies
Workout Videos
Each video is in it's own folder. Most movies are MKV or M2TS format, but some are still actual DVD rips.
It's been this way forever, I'd love to simplify it but I don't have the energy.
I want to create a view that shows all of the movies in the "Vicki's Movies" folder. I found a few examples that use <option name="bookmark"... and <option name="root"... but I have been unable to get these to work. They just show every video in every folder.
Any assistance would be appreciated. I feel like I'm very close to understanding almost 5% of this :D
Thanks!
PiX64
07-01-2011, 12:57 PM
OK... I've been messing with VFS for a day now and am making some progress. However, in many of the examples I don't know the overall configuration of someone's system so it can make it difficult to apply to my system. I want to create a view that points to a specific folder. My import directories are defined in Sage as:
\\main-pc\movies
\\media-pc\Movies1
\\media-pc\Movies2
\\media-pc\Movies3
Each UNC path represents a share on a different system/hard drive.
Under each of these I have folders as follows:
DVD Rentals
HD Movies
My Movies
TVShows
UFC
Vicki's Movies
Workout Videos
Each video is in it's own folder. Most movies are MKV or M2TS format, but some are still actual DVD rips.
It's been this way forever, I'd love to simplify it but I don't have the energy.
I want to create a view that shows all of the movies in the "Vicki's Movies" folder. I found a few examples that use <option name="bookmark"... and <option name="root"... but I have been unable to get these to work. They just show every video in every folder.
Any assistance would be appreciated. I feel like I'm very close to understanding almost 5% of this :D
Thanks!
Try this out
<vfs>
<views>
<view name="vickis_movies" label="Vickis Movies" flat="false">
<option name="root" value="/Vicki's Movies/"/>
<option name="children-only" value="true"/>
<description>Display Vickis Movies</description>
<tag value="video"/>
<view-source name="sagevideoimportsv7"/>
<presentation>
<sort by="title">
<option name="folders-first" value="false"/>
</sort>
</presentation>
</view>
</views>
</vfs>
*Edit - if that works and you need help with a menu fragment, just post back and ill help if i can.
White94Cobra
07-01-2011, 01:26 PM
Here's what I originally tried, but it pulls ALL movies. It seems _similar_ to yours. I'll try copying/pasting yours to see if it works. Thanks!
Figured it out. Was using back slash instead of forward slash for the path and had to specify "sagevideoimportsv7" as the view-source name. Thanks again!!
<view name="df.view.vicki.media" label="Vicki's Movies" flat="false">
<option name="root" value="\Vicki's Movies\" />
<option name="children-only" value="true"/>
<description>Display Vicki's Movies</description>
<tag value="movie" />
<tag value="bluray" />
<tag value="video" />
<view-source name="phoenix.view.primary.importedmovies" />
<presentation>
<sort by="title">
<option name="folders-first" value="false"/>
</sort>
</presentation>
</view>
PiX64
07-01-2011, 01:37 PM
sweet so my example worked then?
White94Cobra
07-01-2011, 01:47 PM
It did... I modified two pieces in mine to match yours (<option name="root" ...> and <view-source name="sagevideoimportsv7"...>
The menu fragments seem fairly straight forward. I've alredy added a few simple views.
Thanks again!!
PiX64
07-01-2011, 01:55 PM
No prob. earlier in this thread, i have an example of what i did for my media. My wife and I jus thad a baby, and I wanted a new Menu item, not just a sub item...so i setup the following
Baby Media (top level menu item)
Baby DVD's (sub menu items)
Kids Cartoons (sub menu items)
Kids Movies (sub menu items)
Take a look at that guy, it may be useful to ya.
pmpj218
07-01-2011, 02:19 PM
What's the difference between the view-source "sagevideoimportsv7" and the view-source "phoenix.view.default.videofolders"?
I was trying to work on a similar vfs in another thread (http://forums.sagetv.com/forums/showthread.php?p=506223&postcount=12) and stuckless had suggested to me to use "phoenix.view.default.videofolders". I tried both, and it yielded the same results (as far as I could tell). But I ended up going with "phoenix.view.default.videofolders".
I'm just curious as to when, if ever, one view-source would be more appropriate than the other?
Anyway, because of the way my video import sources were setup the default "All Movies" view was including a bunch of other videos that aren't really movies. Since I have all my movies in specific folders, namely "Bluray" and "DVD", I made a a similar view to combine these into my own "All Movies" view.
<view name="tam.view.bluray" label="TAM - Bluray Rips" flat="false">
<option name="root" value="/Bluray/"/>
<option name="children-only" value="true"/>
<description>Blu-ray Movie Rips</description>
<tag value="video"/>
<tag value="movie"/>
<view-source name="phoenix.view.default.videofolders"/>
<presentation>
<sort by="title">
<option name="ignore-all" value="true"/>
</sort>
</presentation>
</view>
<view name="tam.view.dvd" label="TAM - DVD Rips" flat="false">
<option name="root" value="/DVD/"/>
<option name="children-only" value="true"/>
<description>DVD Movie Rips</description>
<tag value="video"/>
<tag value="movie"/>
<view-source name="phoenix.view.default.videofolders"/>
<presentation>
<sort by="title">
<option name="ignore-all" value="true"/>
</sort>
</presentation>
</view>
<view name="tam.view.allMovies" label="TAM - All Movie Rips" flat="true">
<description>All Movie Rips</description>
<tag value="video"/>
<tag value="movie"/>
<view-source name="tam.view.bluray"/>
<view-source name="tam.view.dvd"/>
<presentation>
<sort by="title">
<option name="ignore-all" value="true"/>
</sort>
</presentation>
</view>
stuckless
07-01-2011, 02:22 PM
the sagevideoimportsv7 is a legacy viewname so you went with the right choice. We'll be removing core view sources that don't start with phoenix at some point.
pmpj218
07-01-2011, 06:05 PM
Gotcha. Thanks for the clarification.
White94Cobra
07-01-2011, 09:50 PM
So I decided to rename most of my video file folders and filenames with the date to aid in matching for lookups. I removed my import folders from sage, scanned, added them back, then scanned again. About 90% of my media now has the proper fan art and description. Unfortunately the MediaTitle value did not populate on any of the titles. This makes filtering on MediaTitle difficult :)
Any ideas?
Thanks!
crusing
07-01-2011, 11:23 PM
I struggled for a while getting simple movie views built based on the file path of the media to replicate my existing setup. I am posting my examples in the hope that someone will find it useful even though I am just learning myself. Apparently the VFS expects you to have sub folders in your import paths instead of media files. It took me quite a while to figure out why my views wouldn't work when using "bookmark" or "root". I didn't want to rebuild my folder structure as I am quite happy with the way it is working. I found a reference to "filepath" in the documentation and gave it a go and seem to have figured out a solution that will work good for me.
Here are the facts:
path to VFS file: "C:\Program Files\SageTV\SageTV\userdata\Phoenix\vfs\MC Movie Archive.xml"
path to Menu file: "C:\Program Files\SageTV\SageTV\userdata\Phoenix\Menus\MC_Movie_Archive_Menu.xml"
Import Directory Path: "F:\Movie Archive\"
Here is "MC Movie Archive.xml"
<!DOCTYPE vfs SYSTEM "vfs.dtd">
<vfs>
<views>
<view name="MC_Movie_Archive" label="MC Move Archive">
<description>Archived Movies</description>
<tag value="video"/>
<view-source name="phoenix.view.primary.importedmovies" >
<filter by="filepath" value="Movie Archive"/>
</view-source>
<presentation>
<sort by="title"/>
</presentation>
</view>
</views>
</vfs>
Here is "MC_Movie_Archive_Menu."
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE menus SYSTEM "menus.dtd">
<menus>
<fragment parentMenu="phoenix.menu.lz.videos" insertBefore="phoenix.menu.lz.videos.blueraydefaultbrowser">
<menuItem name="MC_Movie_Archive_Menu" label="Archived Movies" visible="true">
<description>Archived Movies</description>
<eval>AddGlobalContext("DefaultView","MC_Movie_Archive")</eval>
<screen name="Phoenix Universal Media Browser" />
</menuItem>
</fragment>
</menus>
Its been easy to add new menus now that I have a working starting point.
wrems
07-02-2011, 06:40 AM
I'm just learning too.:D So the more we figure out and document the better. I didn't know about the filepath. That's a good one.
If you check the bmt webgui view for combined import folders that's where you would see the eligible root/bookmark folders. Assuming that your import paths are designed like that. In the long run it really does help for having a consolidated method to drill down into your media from those folders.
crusing
07-04-2011, 03:53 PM
Wrems, I see from another post that you have issues with the default home movie view that are similar to mine. Have you come up with a solution?
Thanks
wrems
07-04-2011, 04:36 PM
Yeah, I created a vfs that points directly at my home video collection. I haven't integrated it into or in replace of the default menu icon. All I did so far was to add a menu to my videos area for it. Although I will replace the default action sometime soon.
crusing
07-04-2011, 05:04 PM
What did you do for the VFS? As far as I can tell you can't group using filepath. I am playing with using year and original air date in the metadata to create a drill down view to match my folder structure of year\month\video name.* but this requires manual maintenance.
Thanks
wrems
07-04-2011, 06:09 PM
Here is my vfs:
<view name="wr_home_videos_only" label="WR Movies - Home Videos" flat="false">
<option name="root" value="/Home Videos/"/>
<option name="children-only" value="true"/>
<description>Display Home Videos Only</description>
<tag value="video"/>
<view-source name="sagevideoimportsv7"/>
<presentation>
<sort by="title">
<option name="folders-first" value="true"/>
</sort>
</presentation>
</view>
Because I'm using sagevideoimportsv7 as the source the view emulates the physical folder style structure that I use within my import path for my home videos which are strewn into my pics collection. It works well.
wrems
07-06-2011, 09:42 AM
I created a view that works with collections. While not official support it does work well. This method works a bit different than naming your files like ‘01 Harry Potter - Sorcerer's Stone’ with BMT. You can leave the title as is and it will sort properly or the exact way you want it to appear. Also, if you have to do the manipulations like I’m going to outline you’ll be assured that you will only have to do it once. Since the changes below will persist regardless of everything else. The title field in BMT can easily be over-written and you’d have to redo all of your title manipulations in such an event.
The main way this vfs works is to look at the date the movie was created on your system according to the file attributes (Date Created). The file attributes can be changed easily with this gui tool for ones that fall out of the order you would like to see the movies appear in: http://www.petges.lu/ . So the gist of it is to sort the collections ascending by the date they were ripped to your computer. If they fall out of order then change the dates so the order is how you wish it to appear.
I found that almost all of my collections worked in the order they were meant to since I added the movies as they were released and so the date’s were already sequential. I didn’t have to manipulate many of them at all. Your mileage may vary depending on the order they were added to the system. Likewise, moving forward one just needs to be cognizant to add the files in the order you wish them to be displayed. Really only if you’re adding a complete collection all at once.
You’ll also see that I moved the collections in order to group them. It makes it much easier in the long run to have them broken away from being weaved into a group of standard movies.
The view heavily relies on the underlying physical structure of your files and utilizing ROOT. If your system isn’t organized to benefit from using ROOT’s you’ll have problems and you may consider reorganizing your import paths to make it easier for yourself in all matters. If you can go into BMT’s webgui and look at the combined import path and see a nice collection of subfolders and your media properly organized you are in good shape. If you see a bunch of single files without the grouping folders you might want to organize your files first.
<!-- This involves 3 intermediary views that are not visible and 1 final vfs that combines the pieces and displays the data -->
<!-- The first view grabs the separate combined folder where the collections are stored -->
<view name="wr_collections" label="WR Collections - Collections Only" flat="false" visible="false">
<option name="root" value="/Collections/"/>
<option name="children-only" value="true"/>
<view-source name="sagevideoimportsv7" > </view-source>
</view>
<!-- The second view grabs the standard single movies -->
<view name="wr_collections_movies" label="WR Collections - Movies Only" flat="false" visible="false">
<option name="root" value="/Movies/"/>
<option name="children-only" value="true"/>
<view-source name="sagevideoimportsv7" > </view-source>
</view>
<!-- The third view flattens the second view, it seems redundant but if you flatten the other view you'll end up with a whole bunch more than just your movies -->
<view name="wr_collections_movies2" label="WR Collections - Movies Only2" flat="true" visible="false">
<view-source name="wr_collections_movies" > </view-source>
</view>
<!-- The fourth and final view takes the two views above: collections and movies and merges them together into a seamless single view with both a folder structure and a flat structure -->
<view name="wr_collections_combined2" label="WR Collections - Merged Movies and Collections" flat="false" visible="true">
<option name="children-only" value="true"/>
<view-source name="wr_collections"/>
<view-source name="wr_collections_movies2"/>
<presentation level="1">
<sort by="title">
<option name="ignore-all" value="true"/>
<option name="folders-first" value="false"/>
</sort>
</presentation>
<presentation level="2">
<sort by="starttime">
<option name="sort-order" value="asc"/>
</sort>
</presentation>
</view>
All that needs to be defined for anyone to use the above code is to rename the roots to the folder naming you have on your system. My two combined folders are: Collections and Movies respectively. On my system movies are movies... I don’t physically separate for BD’s, DVD’s, kid’s movies etc. Especially since there are views that can organize that data virtually. It’s just easier imo to keep a single group of just movies. As long as they are cinematic then I don’t care, I will create VFS’s to group and present the different subsets. The point is if you have a bunch of separations you will probably need to adjust the code to accept more sources. Or, consider changing your structure...
The final thing to remember is that when changing the file attributes the movie has to be removed from the import path and re-added. Just changing the date created won’t affect anything. So basically any of the culprits need to be removed from the import path. Then execute a SageTV library scan. Then move the file(s) back into the import path and scan again. The final scan will accept the changes in the date.
I think it’s easiest to move all the collections to a common collections folder and then see how it all lines up in Phoenix. Then move the collections out that don’t work and rescan. Then fix those dates with the above tool. Then move them all back and scan once more. Then it’s done. Moving forward you really shouldn't have to do much.
VIDEO: http://db.tt/X8DSjwr
pmpj218
07-06-2011, 11:19 AM
Thanks for posting that. I've been wanting to do something for collections too, since many of them aren't sorted together. I haven't tried anything yet, because I think I have to move some of my movies around like you have to its own "Collections" folder. But instead of sorting by "starttime", did you try sorting by "originalairdate"? It seems like that would work, and then you wouldn't have to worry about changing file attributes.
wrems
07-06-2011, 11:32 AM
In most cases the originalairdate did work. The ones where I ran into problems were for collections that are supposed to be viewed out of the order they were released, like Star Wars. At least with the manipulation of the date created attribute one could order them anyway they choose. Although it seems like a lot of work to change the attributes it's not too bad. If you've consistently added media to your collection in roughly the order in which they were released the collection will be already sorted for you and the vfs will pick them up accordingly. I probably only had to change the sequence in 4 of my collections.
I added a video link to the above vfs that hopefully shows/explains what I did.
pmpj218
07-06-2011, 11:59 AM
That makes sense. I do think it would look weird if Stars Wars was ordered Episodes 4, 5, 6, 1, 2, 3 while I was browsing through my movies. However, I don't think they're supposed to be viewed out of the order they were released. (Unless by "view" you mean in terms of vfs's and not watching the actual movies) ;) But that's another topic...
Thanks for all the examples. It has helped alot in my efforts to set up pheonix. I have one last thing I want to do before I spring pheonix on my family (or I thought I had one thing until I read about collections above). Now maybe I have two things...
Anyway, the one I have not been able to figure out is how to have the TV shows view with three presentaion levels (show, season, episode) use the grid view on any level other that the top level. I'd like for the season level to also be a grid, showing the cover art that is in the season level of the phoenix fanart.
Has anyone done this?
bialio
08-23-2011, 11:05 AM
No one has done that yet since it's not possible :D
The Grid and Banner flow are both basically "ART" at to top level, then a list from the 2nd on.
There have been a few requests for season artwork to show at the second level, but we haven't gotten around to adding anything for that yet.
btl.
ok. Now I know why I could not figure it out. :)
Phoenix is awsome. I really like it and appreciate the work that has gone into it.
Add me to the list of "a few requests" for this feature. I have set up a view for all my ripped TV series and since the fanart is there, it would be cool to have the grid view apply to at least the first two levels and maybe even the third level.
The same would apply to movie collections like Harry Potter. One Harry Potter poster on the main grid of movies and then a grid showing the 8 movies when the first one is selected.
I guess I should read the thread you have for feature requests. I'm just a little late to the phoenix party and trying to catch up!
gabrielcab
10-08-2011, 11:47 AM
Some screen shots would be awesome :jump:
wrems
12-13-2011, 08:17 AM
For any interested in segregating Christmas movies and TV I created a simple view that looks for any tagged (Christmas) media. This VFS doesn't care if it's recorded, imported TV or movies. It's just looking for any of the media in any import directory that you previously and manually appended the custom tag (Christmas) to. Use BMT to tag the media and it only takes a few minutes. Add this VFS to a menu item and you're in business.
<view name="wr_christmas" label="Christmas Programs">
<description>Christmas Movies and TV</description>
<tag value="video"/>
<tag value="movie"/>
<tag value="primary"/>
<source name="mediafiles">
<option name="mediamask" value="DBTVL"/>
</source>
<filter by="pql" value="Genre contains 'Christmas'"/>
<presentation>
<sort by="title">
<option name="ignore-all" value="true"/>
</sort>
</presentation>
</view>
vBulletin® v3.7.6, Copyright ©2000-2013, Jelsoft Enterprises Ltd.