Modify

Opened 9 years ago

Closed 8 years ago

#6242 closed enhancement (fixed)

A "grabber" query engine for thetvdb.com - based on tmdb.pl functionality

Reported by: r.d.vaughan@… Owned by: awithers
Priority: minor Milestone: unknown
Component: Plugin - MythVideo Version: unknown
Severity: low Keywords: grabber
Cc: Ticket locked: no

Description

ttvdb.py follows the query engine (grabber) standards as described in the README in svn directory "mythplugins/mythvideo/mythvideo/scripts/README". This script has similar functionality to tmdb.pl but against thetvdb.com wiki.

ttvdb.py provides some enhancements to the standards for query engines. For example ttvdb.py can return a season and episode number string (e.g. S04e01) if passed a mythtv "%TITLE%" "%SUBTITLE%.

To see all functionality and some command line examples run the command:

ttvdb.py -u

The module tvdb_api.py (v0.50 or greater) module must be installed. Also tvdb_api.py uses the BeautifulSoup? module. In Ubuntu that is deb package python-beautifulsoup. Using the installation instructions below should also install the BeautifulSoup? module.

Find tvdb_api.py at http://pypi.python.org/pypi?%3Aaction=search&term=tvnamer&submit=search

The module tvdb_api.py will be installed with the tvnamer.py module. For python module installation instructions please see http://docs.python.org/install/index.html

Your Linux distribution will need the Python distribution utilities installed. For example Ubuntu needs the packages "python-dev", "python-distutils-extras" and "python-setuptools" to install the tvnamer.py module. Once those packages are installed extract e.g. "tvnamer-0.5.1.tar.gz" to a temporary directory. From the command line change to the temporary directory and execute the following command line (this is an example of the where you extracted tvnamer-0.5.1.tar.gz):

cd ~/tmp/tvnamer-0.5.1

Then:

python setup.py install

The installer should take care of the rest.

This is my first submission. Suggestions for improvements/enhancements are welcome.

Attachments (12)

ttvdb.py.tar.gz (6.4 KB) - added by anonymous 9 years ago.
mythtv_ttvdb_v0.8.tar.gz (16.9 KB) - added by r.d.vaughan@… 9 years ago.
Updated version of ttvdb.py
ttvdb_v0.8.8.tar.gz (21.3 KB) - added by r.d.vaughan@… 9 years ago.
v0.8.8 is a complete replacement of previous versions of ttvdb grabber.
ttvdb_v0.8.9.tar.gz (21.3 KB) - added by r.d.vaughan@… 9 years ago.
v0.8.9 is a complete replacement of previous versions of ttvdb grabber.
ttvdb_v0.9.0.tar.gz (22.9 KB) - added by r.d.vaughan@… 8 years ago.
This version is a COMPLETE replacement of previous versions
ttvdb_v0.9.1.tar.gz (22.9 KB) - added by r.d.vaughan@… 8 years ago.
This version is a COMPLETE replacement of previous versions
ttvdb_v0.9.2.tar.gz (22.6 KB) - added by r.d.vaughan@… 8 years ago.
BUG Fix !! Complete replacement for previous versions !!
ttvdb_v0.9.3.tar.gz (23.3 KB) - added by r.d.vaughan@… 8 years ago.
Minor enhancement
ttvdb_v0.9.4.tar.gz (23.4 KB) - added by r.d.vaughan@… 8 years ago.
ttvdb.py v0.9.4 is a complete replacement of previous versions
ttvdb_v0.9.5.tar.gz (23.0 KB) - added by r.d.vaughan@… 8 years ago.
ttvdb.py v0.9.5 - complete replacement of previous versions
ttvdb_v0.9.6.tar.gz (23.9 KB) - added by r.d.vaughan@… 8 years ago.
ttvdb.py v0.9.6 - complete replacement of previous versions
ttvdb_v0.9.7.tar.gz (24.0 KB) - added by r.d.vaughan@… 8 years ago.
ttvdb.py v0.9.7 - complete replacement of previous versions

Download all attachments as: .zip

Change History (35)

Changed 9 years ago by anonymous

comment:1 Changed 9 years ago by r.d.vaughan@…

Attached is a new release of the thetvdb.com (grabber) Query engine.

This version (v0.8) has the following changes:

1) No dependency on BeautifulSoup?

2) Self contained as there are no additional scripts to install.

As tvdb_api.py ... etc modules are included.

3) tvdb_api.py now uses a thetvdb.com api key specific to MythTV

4) The -M (series name list) option is now functional

5) An issue with caching and multiple users has been resolved.

6) Enhanced ability to accurately find TV series and episodes information. This is an optional feature.

Schedule direct and then subsequently MythTV's %TITLE% and %SUBTITLE% do not always accurately reflect the naming conventions used by thetvdb.com. There is now an "-o" option that will allow the use of an override.txt file that can direct ttvdb to correctly select a TV series or episode. Please see the include file "ttvdb_example_override.txt" for details.

For a full list of ttvdb.py's functionality please type at the command line:

ttvdb.py -u

Please ignore the original instructions for installing tv_api.py or the dependencies on BeautifulSoup?.

Again I would like to thank dbr/ben the author of tv_api.py for adding functionality to accommodate the MythTV specifications for (grabber) Query Engines.

Changed 9 years ago by r.d.vaughan@…

Updated version of ttvdb.py

comment:2 Changed 9 years ago by r.d.vaughan@…

Please note that attached file mythtv_ttvdb_v0.8.tar.gz is a complete replacement of the original submission. DO NOT use "ttvdb.py.tar.gz"!

comment:3 follow-up: Changed 9 years ago by Jay

I can get this to consistently fail with the following command: ttvdb.py -N "Dora the Explorer" "The Mixed-Up Seasons"

The error: Traceback (most recent call last):

File "/usr/local/share/mythtv/mythvideo/scripts/tvdb/ttvdb.py", line 652, in <module>

main()

File "/usr/local/share/mythtv/mythvideo/scripts/tvdb/ttvdb.py", line 544, in main

seriesfound=searchseries(t, opts, x)

File "/usr/local/share/mythtv/mythvideo/scripts/tvdb/ttvdb.py", line 207, in searchseries

seriesfound=t[ series_name ] # Series only

File "/usr/local/share/mythtv/mythvideo/scripts/tvdb/tvdb_api.py", line 522, in getitem

sid = self._nameToSid(key)

File "/usr/local/share/mythtv/mythvideo/scripts/tvdb/tvdb_api.py", line 512, in _nameToSid

self._getShowData( sid )

File "/usr/local/share/mythtv/mythvideo/scripts/tvdb/tvdb_api.py", line 483, in _getShowData

epsEt = self._getetsrc( self.configurl_epInfo? % (sid) )

File "/usr/local/share/mythtv/mythvideo/scripts/tvdb/tvdb_api.py", line 346, in _getetsrc

et = ElementTree?.fromstring(src)

File "<string>", line 86, in XML

SyntaxError?: no element found: line 1, column 0

comment:4 in reply to: ↑ 3 Changed 9 years ago by Jay

Replying to Jay:

I can get this to consistently fail with the following command: ttvdb.py -N "Dora the Explorer" "The Mixed-Up Seasons"

Found my problem .. the temporary file that the file gets cached to was not writable by the user. I deleted the files and things are working now. Probably not an issue for every day use, but checking the file may make sense.

Changed 9 years ago by r.d.vaughan@…

v0.8.8 is a complete replacement of previous versions of ttvdb grabber.

Changed 9 years ago by r.d.vaughan@…

v0.8.9 is a complete replacement of previous versions of ttvdb grabber.

comment:5 Changed 9 years ago by r.d.vaughan@…

!!! THIS NEW VERSION (v0.8.9) REPLACES ALL PREVIOUS VERSIONS !!!

Bug(s) fixed:

1) Fixed bug with -N option when episode name contains words from more than one episode. Now the exact matching episode name is selected for the episode number.

2) tvdb_api fixed an obscure cache file bug if thetvdb.com site is unreachable when a cache file is being created. Previously that cache file and its associated series was locked out until a reboot or the cache file expired (~6hrs).

Change(s):

1) Removed the -o (override file)

2) Add a -c (user configuration file) this is a replacement of the override features with standard Linux configuration file format. See "ttvdb-example.conf" for details.

3) Included Series name key value pair to the output of Episode meta data (option -D)

4) Changed season/episode number default output format to e.g. "S04E12"

5) Now ALL available episode meta data is returned. This includes meta data that the MythTV data base does not currently store.

6) Meta data 'Year' now derived from the year in episode release date.

Enhancement(s):

1) Increased accuracy of -N option when thetvdb.com episode name is slightly different then what MythTV provides via Schedule Direct.

2) Added option (-t) to return only a TV Show's top rated graphic URLs as rated on thetvdb.com wiki

3) Added option (-l) to select only graphic URLs that match the local user language

4) Added option (-n) to return the series's season numbers in a comma delimited string (e.g. "1,2,3")

5) Added option (-m) so that ttvdb works better when executed within mythvideo to download data

6) Added Posters and Banners URLs selection for a specific Season of a Series

7) Increased the amount of massaging of episode meta data to replace XML characters like "&amp;"

8) A thetvdb.com SID (5 digit series identification number) or series name can be used for all data retrieval except -M (lists) which assumes series names for searches. Series names like "90210" are handled correctly.

9) A TV episode filename can be used instead of a series name and ttvdb will parse the name to extract the series name, season and episode numbers which are then used to get data.

Know bug:

1) If thetvdb.com site is so overloaded that it cannot respond to it's own SQL call an invalid cache file is created. Queries to that specific TV series will cause a series not found error message until the cache expires or is cleared (a reboot). This issue is within tvdb_api. Hopefully a solution will be found shortly. It only rarely occurs.

comment:6 Changed 9 years ago by awithers

  • Component changed from Contributed Scripts & Apps to Plugin - MythVideo
  • Owner changed from ijr to awithers
  • Status changed from new to assigned

Changed 8 years ago by r.d.vaughan@…

This version is a COMPLETE replacement of previous versions

comment:7 Changed 8 years ago by r.d.vaughan@…

!!!! RELEASE v0.9.0 REPLACES ALL PREVIOUS VERSIONS !!!! http://svn.mythtv.org/trac/attachment/ticket/6242/ttvdb_v0.9.0.tar.gz

Fixes:

1) Numerous Unicode issues resolved.

2) Re sync with tvdb_api getting bug fixes and new features.

Changes:

1) The language option now requires that the prefered language is specified (e.g. -l es). If no language option is specified then English (en) is the default.

Enhancements:

1) Now when a season level Banner is not found then the top rated series level banner is returned instead. This feature had previously only been available for posters.

2) Add series runtime (in minutes) to episode meta data (-D). It is always the same for each episode as the information is only available for the series.

3) Added the TV Series cast members (combined with guest stars) as part of episode meta data. Option (-D)

4) Added TV Series series genres as part of episode meta data. Option (-D)

5) Added episode data selected specific to the a language see -l 'es' option. If there is no episode data for the specified language then any existing English episode data is returned. English is the default language. thetvdb.com wiki supported languages are (da, fi, nl, de, it, es, fr, pl, hu, el, tr, ru, he, ja, pt, zh, cs, sl, hr, ko, en, sv, no)

NOTE: The new language feature has a limitation in that the -M option (series list) is still only in English. I am waiting on a tvdb_api fix and will issue a new release when the fix is available the parameters for ttvdb.

NOTE: If you are already using ttvdb with mythtvideo downloads then you will need to change the ttvdb parameters on page 8/8. See this wiki page http://www.mythtv.org/wiki/Ttvdb.py section "Configuring MythVideo? 0.22 to use ttvdb.py" for details.

comment:8 follow-up: Changed 8 years ago by drayson@…

I am running an issue with the tmdb.pl from this ticket. All my other movie backdrop downloads work fine with the exception of Dead Like Me: Life After Death. Examples: This one works fine. “Babylon A.D.” # ./tmdb.pl -M "Babylon A.D." 0364970:Babylon A.D. (2008)

# ./tmdb.pl -B 0364970 http://www.themoviedb.org/image/backdrops/3314/tt0364970-2.jpg http://www.themoviedb.org/image/backdrops/5402/tt0364970.jpg http://www.themoviedb.org/image/backdrops/18590/Babylon_AD.jpg

This one does not. (Dead Like Me: Life After Death) # ./tmdb.pl -M "Dead Like Me: Life After Death" 1079444:Dead Like Me: Life After Death (2009) 1079444:Dead like Me-Life After Death

# ./tmdb.pl -B 1079444 Pseudo-hashes are deprecated at ./tmdb.pl line 268. Use of uninitialized value in concatenation (.) or string at ./tmdb.pl line 87. Can't use string ("You need to search for something") as a HASH ref while "strict refs" in use at ./tmdb.pl line 275.

comment:9 in reply to: ↑ 8 Changed 8 years ago by Marc Tousignant <drayson@…>

Replying to drayson@net1plus.com: Sorry its not from this ticket. My bad.

Changed 8 years ago by r.d.vaughan@…

This version is a COMPLETE replacement of previous versions

comment:10 Changed 8 years ago by r.d.vaughan@…

!!!! RELEASE v0.9.1 REPLACES ALL PREVIOUS VERSIONS !!!! http://svn.mythtv.org/trac/attachment/ticket/6242/ttvdb_v0.9.1.tar.gz

Bug fix: script would abort if a TV series did not have a genre. e.g. "Blackpool" season 1 episode 1

Thanks to Robert McNamara? for reporting this bug.

comment:11 Changed 8 years ago by Marc Tousignant <drayson@…>

Found an error with every Heroes episode. Not sure how to troubleshoot.

Here is what I get:

scripts # ./ttvdb.py -D Heroes 1 1

Title:Heroes

Season:1

Episode:1

Subtitle:Genesis

Year:2006

ReleaseDate:2006-09-25

Director:David Semel

Plot:In this episode, we are introduced to Peter Petrelli, a young man who dreams offlying, and his brother Nathan, a ruthless politician who thinks that Peter is dreaming his life away. Meanwhile, ordinary people from all around the world are starting to suspect that they have abilities beyond those of normal humans. Artist Isaac Mendez believes that he is painting the future, high school cheerleader Claire Bennet is suddenly able to recover from any wound almost instantly, Japanese businessman Hiro Nakamura tries to convince a friend that he can bend space and time, and single mother Niki Sanders starts seeing strange things in mirrors.Upon learning of his father's death, genetics Professor Mohinder Suresh begins to look into his research for a clue to why he was killed. When he follows his father's trail to New York City, however, Mohinder learns that someone else is on the trail of the same research. Someone who may kill to protect the secrets of the next step in human evolution.

UserRating:8.7

Writers:Tim Kring

Episode Image:http://www.thetvdb.com/banners/episodes/79501/308906.jpg

Language:en

Dvd_Episodenumber:1.0

Combined_Episodenumber:1.0

Id:308906

Seasonid:16446

Lastupdated:1213197160

Combined_Season:1

Dvd_Season:1

Traceback (most recent call last):

File "./ttvdb.py", line 1086, in <module>

main()

File "./ttvdb.py", line 967, in main

Getseries_episode_data(t, opts, series_season_ep, language=opts.language)

File "./ttvdb.py", line 627, in Getseries_episode_data

print extra_data

File "./ttvdb.py", line 334, in write

self.out.write(obj.encode(self.encoding))

UnicodeEncodeError?: 'ascii' codec can't encode character u'\xed' in position 175: ordinal not in range(128)

comment:12 Changed 8 years ago by Marc Tousignant <drayson@…>

Simillar issues with Denno Coil 1 1

Traceback (most recent call last):

File "./ttvdb.py", line 1086, in <module>

main()

File "./ttvdb.py", line 967, in main

Getseries_episode_data(t, opts, series_season_ep, language=opts.language)

File "./ttvdb.py", line 620, in Getseries_episode_data

print u'%s%s' % (data_titles[index], key_values[index])

File "./ttvdb.py", line 334, in write

self.out.write(obj.encode(self.encoding))

UnicodeEncodeError?: 'ascii' codec can't encode character u'\u201c' in position 18: ordinal not in range(128)

The Melancholy of Haruhi Suzumiya 1 3

Traceback (most recent call last):

File "./ttvdb.py", line 1086, in <module>

main()

File "./ttvdb.py", line 967, in main

Getseries_episode_data(t, opts, series_season_ep, language=opts.language)

File "./ttvdb.py", line 620, in Getseries_episode_data

print u'%s%s' % (data_titles[index], key_values[index])

File "./ttvdb.py", line 334, in write

self.out.write(obj.encode(self.encoding))

UnicodeEncodeError?: 'ascii' codec can't encode character u'\u2014' in position 199: ordinal not in range(128)

comment:13 follow-up: Changed 8 years ago by Marc Tousignant <drayson@…>

I fixed the ascii errors by changing line 334 to

self.out.write(obj.encode("utf-8"))

However, now I get the following errors on some items.

scripts # ./ttvdb.py -D "denno coil" 1 1
Title:denno coil
Season:1
Episode:1
Subtitle:Kids with Glasses
Year:2007
ReleaseDate:2007-05-12
Director:None
Plot:Yuko Okonogi âYasakoâ
                          UserRating:None
Writers:None
Episode Image:http://www.thetvdb.com/banners/episodes/82390/373906.jpg
Language:en
Combined_Episodenumber:1
Epimgflag:3
Id:373906
Seasonid:33462
Lastupdated:1224514836
Combined_Season:1
Seriesid:82390
Traceback (most recent call last):
  File "./ttvdb.py", line 1086, in <module>
    main()
  File "./ttvdb.py", line 967, in main
    Getseries_episode_data(t, opts, series_season_ep, language=opts.language)
  File "./ttvdb.py", line 629, in Getseries_episode_data
    print u"Cast:%s" % cast_members
UnboundLocalError: local variable 'cast_members' referenced before assignment
scripts # ./ttvdb.py -D "Kanon 2006" 1 1
Title:Kanon 2006
Season:1
Episode:1
Subtitle:Silver Overture ~overture~
ReleaseDate:None
Director:None
Plot:None
UserRating:None
Writers:None
Episode Image:None
Language:en
Combined_Episodenumber:1
Id:326098
Seasonid:17463
Lastupdated:1174757557
Combined_Season:1
Seriesid:79911
Traceback (most recent call last):
  File "./ttvdb.py", line 1086, in <module>
    main()
  File "./ttvdb.py", line 967, in main
    Getseries_episode_data(t, opts, series_season_ep, language=opts.language)
  File "./ttvdb.py", line 629, in Getseries_episode_data
    print u"Cast:%s" % cast_members
UnboundLocalError: local variable 'cast_members' referenced before assignment

comment:14 in reply to: ↑ 13 Changed 8 years ago by r.d.vaughan@…

Replying to Marc Tousignant <drayson@net1plus.com>: For each of the posted errors, I beleive that you are not using the latest version v0.9.1 in that version the problems you are have have been resolved. You can check your current version at the command line with:

./ttvdb.py -v

It needs to be version v0.9.1

I test each of the problems you posted with the same parameters and v0.9.1 of ttvdb.py displayed without error.

comment:15 Changed 8 years ago by r.d.vaughan@…

!! New release ttvdb.py v0.9.2 Completely replaces any previous release !!

Bug fix when TV series does not have a Cast in thetvdb.com wiki

Thanks gbee for pointing out this bug.

Changed 8 years ago by r.d.vaughan@…

BUG Fix !! Complete replacement for previous versions !!

comment:16 Changed 8 years ago by Marc Tousignant <drayson@…>

R.D. you are incorrect. My version

scripts # ./ttvdb.py -v

Title: (thetvdb.com Query Engine); Version: (v0.9.2); Author: (R.D.Vaughan)
This python script uses the included python module tvdb_api.py (v0.6 or higher). Also found at
'http://pypi.python.org/pypi?%3Aaction=search&term=tvnamer&submit=search' thanks to the authors 'dbr/Ben' for this excellant module.

The tvdb_api.py module uses the full access XML api published by thetvdb.com see:
'http://thetvdb.com/wiki/index.php?title=Programmers_API'

Users of this script are encouraged to populate thetvdb.com with TV show information, posters,
fan art and banners. The richer the source the more valuable the script.

The errors that can be caused: ./ttvdb.py -l en -mD Heroes 1 1:

Traceback (most recent call last):
  File "./ttvdb.py", line 1091, in <module>
    main()
  File "./ttvdb.py", line 970, in main
    Getseries_episode_data(t, opts, series_season_ep, language=opts.language)
  File "./ttvdb.py", line 632, in Getseries_episode_data
    print extra_data
  File "./ttvdb.py", line 335, in write
    self.out.write(obj.encode(self.encoding))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 175: ordinal not in range(128)

./ttvdb.py -l en -mD "denno coil" 1 1

Traceback (most recent call last):
  File "./ttvdb.py", line 1091, in <module>
    main()
  File "./ttvdb.py", line 970, in main
    Getseries_episode_data(t, opts, series_season_ep, language=opts.language)
  File "./ttvdb.py", line 622, in Getseries_episode_data
    print u'%s%s' % (data_titles[index], key_values[index])
  File "./ttvdb.py", line 335, in write
    self.out.write(obj.encode(self.encoding))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 18: ordinal not in range(128)

Both of these 'ascii' errors can be fixed by changing line 335 from

self.out.write(obj.encode(self.encoding))

to

self.out.write(obj.encode("utf-8"))

The cast members error I was reporting about after I fixed the 'ascii' errors however, got fixed in 0.9.2.

Changed 8 years ago by r.d.vaughan@…

Minor enhancement

comment:17 Changed 8 years ago by r.d.vaughan@…

!! ttvdb.py v0.9.3 REPLACE ALL PREVIOUS VERSIONS !!

http://svn.mythtv.org/trac/attachment/ticket/6242/ttvdb_v0.9.3.tar.gz

1) Changed option -N when episodes partially match each combination of season/episode numbers are returned. This was added to deal with episodes which have a "(1)" trailing the episode name. Most people do not add the extra (#) as part of the video's name or subtitle, therefore ttvdb was not returning the requested season and episode numbers.

Changed 8 years ago by r.d.vaughan@…

ttvdb.py v0.9.4 is a complete replacement of previous versions

comment:18 Changed 8 years ago by r.d.vaughan@…

!!ttvdb.py v0.9.4 COMPLETE REPLACEMENT OF ALL PREVIOUS VERSIONS!!

Now the (-M) option can list TV series in multiple languages. This means all ttvdb.py functionality is capable of multi-language support.

http://svn.mythtv.org/trac/attachment/ticket/6242/ttvdb_v0.9.4.tar.gz

comment:19 Changed 8 years ago by Markus Schulz <msc@…>

nice work, perhaps you should randomize the Fanart and Bannerlist before output, cause currently only one banner and fanart for each series can be saved and you will get the same one for each season.

Changed 8 years ago by r.d.vaughan@…

ttvdb.py v0.9.5 - complete replacement of previous versions

comment:20 Changed 8 years ago by r.d.vaughan@…

!! ttvdb.py v0.9.5 REPLACES ALL PREVIOUS VERSIONS !!

1) Change: If the "Director" metadata field is returned by tvdb_api as "None" it is changed to the string "Unknown" (without quotes). Any other metadata returned as None is left as empty fields.

2) Change: File name regex parsing strings were changed to support multi-languages

3) Change: Example user configuration file "ttvdb-example.conf" regex section was changed to reflect the multi-language regex pattern string format.

http://svn.mythtv.org/trac/attachment/ticket/6242/ttvdb_v0.9.5.tar.gz

comment:21 Changed 8 years ago by r.d.vaughan@…

!! ttvdb.py v0.9.6 replaces all previous versions !!

1) Synced up to the 1.0 release of tvdb_api

2) Added a tvdb_api version check and abort if not at least v1.0

3) Changed to new tvdb_api's method of assigning the tvdb api key. MythTV specific key is used.

Changed 8 years ago by r.d.vaughan@…

ttvdb.py v0.9.6 - complete replacement of previous versions

Changed 8 years ago by r.d.vaughan@…

ttvdb.py v0.9.7 - complete replacement of previous versions

comment:22 Changed 8 years ago by r.d.vaughan@…

ttvdb.py v0.9.7 - complete replacement of previous versions

One change: thetvdb.com site has started using reference numbers greater than 5 digits (e.g. "Defying Gravity" -> 104581). This version allows any number of digits to be used as a reference number and still accounts for series such as "90210". Thanks to iamlindoro for pointing out this bug.

comment:23 Changed 8 years ago by awithers

  • Resolution set to fixed
  • Status changed from assigned to closed

(In [21138]) Closes #6242

Feature from Doug Vaughan adds metadata retrieval from thetvdb.com.

Add Comment

Modify Ticket

Action
as closed The owner will remain awithers.
The resolution will be deleted. Next status will be 'new'.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.