This site will look much better in a browser that supports web standards, but it is accessible to any browser or Internet device.
TiVo will periodically place an item in the main menu that points to an advertisement of some kind. Such menu items have a start next to them. This is not a big deal but it does become annoying after seeing it there for the Nth time, and the info is available in Showcases as well so there's no need to clutter up the main menu. Happily, if you have shell access to your TiVo, you can get rid of the ads in the main menu.
First off, you will need the dbset utility. It just makes life a bit easier changing things in the database. Once you have dbset in your PATH on the TiVo, you are ready to run tivosh and do some fiddling. In the follow real-life example, we get rid of an annoying Lexus ad. Note that dates are in days since the epoch (Jan 1, 1970). To convert from Unix time format, simply divide the return value of the Unix time() function by the number of seconds in a day (60 * 60 * 24). If you have perl available, you can get the time in the form the TiVo wants it by running:
perl -e 'printf("%d\n", (time() / (60 * 60 * 24)))'
The ads are stored in /MenuItem/1.
TiVo [~] # tivosh
% mls /MenuItem/1
Directory of /MenuItem/1 starting at ''
Name Type FsId Date Time Size
---- ---- ---- ---- ---- ----
00056514:11655 tyDb 353556 11/13/01 01:23 204
There will probably be several entries. You can tell the most
recent ones by the Date and Time fields. To see
the contents of an entry, we call dumpobj on its FsId.
% dumpobj 353556
MenuItem 353556/11 {
Data = 2/lex/lexsctag010
DisplayName = {Win The All-New Lexus ES 300}
Expiration = 11655
IndexPath = /MenuItem/1/00056514:11655 /Server/4931111
ServerId = 4931111
ServerVersion = 3
StartDate = 11634
Type = 1
UniqueName = {Lexus Approval}
Version = 1
}
To see the Expiration date in a more normal format, you can use
something like:
perl -e 'use Time::localtime; print ctime(11655 * 60 * 60 * 24), "\n"'Note that some fields may not be displayed nicely as they are not listed in the schema for some reason. On my TiVo with 3.0 software the StartDate is no longer displayed. If the StartDate field is listed, you can simply make the Expiration date equal to the StartDate.
% dbset 353556/11 Expiration 11635If the StartDate is not specified, you can just subtract a week or two from the current Expiration date and use that.
% mls /Showcase
Directory of /Showcase starting at ''
Name Type FsId Date Time Size
---- ---- ---- ---- ---- ----
00000001:131537 tyDb 131537 11/22/01 03:31 1288
00000001:352441 tyDb 352441 11/22/01 03:31 856
00000004:3323 tyDb 3323 11/22/01 03:31 1872
00000006:365998 tyDb 365998 11/18/01 02:29 952
00000008:3079 tyDb 3079 11/22/01 03:31 2588
0000000c:2949 tyDb 2949 11/17/01 02:11 1344
00000014:2518 tyDb 2518 11/17/01 02:11 2844
00000018:2736 tyDb 2736 11/22/01 03:31 1072
0000001a:226543 tyDb 226543 11/22/01 03:31 1592
00000024:3574 tyDb 3574 11/22/01 03:31 1228
00000028:2351 tyDb 2351 11/18/01 02:29 1712
0000002c:2788 tyDb 2788 11/18/01 02:29 1412
00000030:2441 tyDb 2441 11/22/01 03:31 892
00000038:2632 tyDb 2632 11/22/01 03:31 1268
0000003c:131566 tyDb 131566 11/22/01 03:31 3272
00000040:3162 tyDb 3162 11/18/01 02:28 2280
00000044:2865 tyDb 2865 11/17/01 02:11 1864
00000048:3410 tyDb 3410 11/22/01 03:31 1636
You can guess by the date what is probably an ad (also the fsid
tends to be much higher for the new entries)
% dumpobj 352441
Showcase 352441/23 {
Banner = 356817/-1
BigBanner = 356820/-1
ClipAvailableIcon = 352404/-1
DataSetName = SC_lex
ExpirationDate = 11661
ExpirationTime = 43199
Icon = 352404/-1
Identifier = 2/lex/lexsctag010
IndexPath = /Showcase/00000001:352441 /Server/4917636 /Uuid/uuid-1003439434:(192.168.240.42)
InfoBalloon = 3
Item = 352441/24 352441/25
Name = Lexus
SequenceNumber = 1
ServerId = 4917636
ServerVersion = 7
Uuid = uuid-1003439434:(192.168.240.42)
Version = 1
}
If you set the "Hidden" field to 1 you won't see the entry.
% dbset 352441/23 Hidden 1When looking at the showcase with hidden entries, you can hit TD-TU-TD-Record and the screen slides off and slides back on showing the hidden objects. Do it again and it goes back to normal. You probably need to have backdoors enabled for this to work though.
Note that the showcases will likely be reset to their old state after your TiVo does a daily call. I use the following script to hide a bunch of junk:
source $tcl_library/tv/Inc.itcl
set db [dbopen]
set ShowMeNot [list "SC_lex" "SC_st" "SC_bmw" "SC_starz" "SC_hbo" "SC_nfl" "SC_nfla" "SC_mc" "SC_max" "SC_flix"]
ForeachMfsFile id name type "/Showcase" "" {
try {
RetryTransaction {
set obj [db $db openid $id]
set ds_name [dbobj $obj get DataSetName]
foreach bad_ds_name $ShowMeNot {
if { $ds_name == $bad_ds_name } {
dbobj $obj set "Hidden" 1
}
}
}
} catch errCode {
putlog "Error hiding Showcases: $errCode"
}
}
As you can see, I just iterate over each entry and check its
DataSetName against a blacklist. Another approach is to
use a whitelist instead but then you don't see new things as they
are added. If you have cron installed on your TiVo you
could run such a script periodically.