Skip to content

Feature request: optional fallback certification country when preferred country has no rating #251

@Rouzax

Description

@Rouzax

Problem

When Preferred Certification Country is set to a country like nl (Netherlands), many movies have no certification on TMDB for that country. The MPAA/age rating field in Kodi is left completely empty — even though certifications for other countries (e.g. US) exist in the same API response.

I prefer NL ratings when they're available, but a fallback to another country would be much better than no rating at all.

Proposed Solution

Add an optional Fallback Certification Country dropdown in settings. When the primary country has no certification, check the fallback country. Fully user-selectable, not hardcoded. If disabled (empty), behavior is unchanged from today.

No extra API calls needed — the releases.countries array already contains all countries in a single response.

Implementation

Complete diffs for all files involved:

1. resources/language/resource.language.en_gb/strings.po — add label

After the #30018 entry, add:

msgctxt "#30019"
msgid "Fallback Certification Country"
msgstr ""

2. resources/settings.xml — add setting after tmdbcertcountry (line 216)

Insert between the closing </setting> of tmdbcertcountry and the opening of certprefix:

			<setting id="tmdbcertcountry_fallback" type="string" label="30019" help="">
				<level>0</level>
				<default/>
				<constraints>
					<allowempty>true</allowempty>
					<options>
						<option>au</option>
						<option>bg</option>
						<option>br</option>
						<option>by</option>
						<option>ca</option>
						<option>cz</option>
						<option>ge</option>
						<option>de</option>
						<option>dk</option>
						<option>ee</option>
						<option>es</option>
						<option>fi</option>
						<option>fr</option>
						<option>gb</option>
						<option>gr</option>
						<option>hr</option>
						<option>hu</option>
						<option>id</option>
						<option>il</option>
						<option>in</option>
						<option>it</option>
						<option>ir</option>
						<option>jp</option>
						<option>kr</option>
						<option>lt</option>
						<option>lv</option>
						<option>mx</option>
						<option>nl</option>
						<option>no</option>
						<option>pl</option>
						<option>pt</option>
						<option>ru</option>
						<option>si</option>
						<option>sv</option>
						<option>th</option>
						<option>tr</option>
						<option>ua</option>
						<option>us</option>
						<option>vn</option>
						<option>zh</option>
					</options>
				</constraints>
				<control type="list" format="string">
					<heading>30019</heading>
				</control>
			</setting>

3. python/scraper.py — read and pass fallback setting (lines 23-27)

 def get_tmdb_scraper(settings):
     language = settings.getSettingString('language')
     certcountry = settings.getSettingString('tmdbcertcountry')
+    certcountry_fallback = settings.getSettingString('tmdbcertcountry_fallback')
     search_language = settings.getSettingString('searchlanguage')
-    return TMDBMovieScraper(ADDON_SETTINGS, language, certcountry, search_language)
+    return TMDBMovieScraper(ADDON_SETTINGS, language, certcountry, search_language, certcountry_fallback)

4. python/lib/tmdbscraper/tmdb.py — constructor + fallback logic

Constructor (line 5):

-    def __init__(self, url_settings, language, certification_country, search_language=""):
+    def __init__(self, url_settings, language, certification_country, search_language="", certification_country_fallback=""):

Add after line 8:

        self.certification_country_fallback = certification_country_fallback

Certification extraction (lines 122-127):

         if 'countries' in movie['releases']:
             certcountry = self.certification_country.upper()
             for country in movie['releases']['countries']:
                 if country['iso_3166_1'] == certcountry and country['certification']:
                     info['mpaa'] = country['certification']
                     break
+            if 'mpaa' not in info and self.certification_country_fallback:
+                certcountry_fallback = self.certification_country_fallback.upper()
+                for country in movie['releases']['countries']:
+                    if country['iso_3166_1'] == certcountry_fallback and country['certification']:
+                        info['mpaa'] = country['certification']
+                        break

All diffs verified against current master (v3.2.0). Existing tests will continue to pass since the fallback defaults to empty string (disabled).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions