fix: language filter
This commit is contained in:
@@ -54,7 +54,6 @@ export default class extends Controller {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addLanguages(option, props) {
|
addLanguages(option, props) {
|
||||||
console.log('herey');
|
|
||||||
const languages = Object.assign([], JSON.parse(props['languages']));
|
const languages = Object.assign([], JSON.parse(props['languages']));
|
||||||
languages.forEach((language) => {
|
languages.forEach((language) => {
|
||||||
if (!this.languages.includes(language)) {
|
if (!this.languages.includes(language)) {
|
||||||
@@ -62,9 +61,22 @@ export default class extends Controller {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.languageTarget.innerHTML = '<option value="">n/a</option>';
|
const preferred = this.languageTarget.dataset.preferred;
|
||||||
|
if (preferred) {
|
||||||
|
this.languageTarget.innerHTML = '<option value="'+preferred+'" selected>'+preferred+'</option>';
|
||||||
|
this.languageTarget.innerHTML += '<option value="">n/a</option>';
|
||||||
|
} else {
|
||||||
|
this.languageTarget.innerHTML = '<option value="">n/a</option>';
|
||||||
|
}
|
||||||
|
|
||||||
this.languageTarget.innerHTML += this.languages.sort()
|
this.languageTarget.innerHTML += this.languages.sort()
|
||||||
.map((language) => '<option value="'+language+'">'+language+'</option>')
|
.map((language) => {
|
||||||
|
const preferred = this.languageTarget.dataset.preferred;
|
||||||
|
if (preferred === language) {
|
||||||
|
return '<option value="'+preferred+'" selected>'+preferred+'</option>';
|
||||||
|
}
|
||||||
|
return '<option value="'+language+'">'+language+'</option>';
|
||||||
|
})
|
||||||
.join();
|
.join();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace App\Torrentio\Result;
|
namespace App\Torrentio\Result;
|
||||||
|
|
||||||
use App\Util\CountryCodes;
|
use App\Util\CountryCodes;
|
||||||
|
use App\Util\CountryLanguages;
|
||||||
use Nihilarr\PTN;
|
use Nihilarr\PTN;
|
||||||
|
|
||||||
class ResultFactory
|
class ResultFactory
|
||||||
@@ -89,13 +90,14 @@ class ResultFactory
|
|||||||
});
|
});
|
||||||
|
|
||||||
$languages = array_map(function ($flag) {
|
$languages = array_map(function ($flag) {
|
||||||
return CountryCodes::convertFromAbbr(strtoupper(substr($flag['short_name'], strlen('flag-'))));
|
return CountryLanguages::fromCountryCode(strtoupper(substr($flag['short_name'], strlen('flag-'))));
|
||||||
},
|
},
|
||||||
$flags);
|
$flags);
|
||||||
|
|
||||||
if (count($languages) > 0) {
|
if (count($languages) > 0) {
|
||||||
return array_values($languages);
|
return array_values($languages);
|
||||||
} else {
|
} else {
|
||||||
return ["English"];
|
return ["English (US)"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ use App\User\Framework\Entity\User;
|
|||||||
use App\User\Framework\Entity\UserPreference;
|
use App\User\Framework\Entity\UserPreference;
|
||||||
use App\User\Framework\Repository\PreferencesRepository;
|
use App\User\Framework\Repository\PreferencesRepository;
|
||||||
use App\Util\CountryCodes;
|
use App\Util\CountryCodes;
|
||||||
|
use App\Util\CountryLanguages;
|
||||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||||
use Symfony\Bundle\SecurityBundle\Security;
|
use Symfony\Bundle\SecurityBundle\Security;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
@@ -36,11 +37,14 @@ class PreferencesController extends AbstractController
|
|||||||
$userPreferences = Map::from($userPreferences)
|
$userPreferences = Map::from($userPreferences)
|
||||||
->rekey(fn($preference) => $preference->getPreference()->getId());
|
->rekey(fn($preference) => $preference->getPreference()->getId());
|
||||||
|
|
||||||
|
$languages = CountryLanguages::$languages;
|
||||||
|
sort($languages);
|
||||||
|
|
||||||
return $this->render(
|
return $this->render(
|
||||||
'user/preferences.html.twig',
|
'user/preferences.html.twig',
|
||||||
[
|
[
|
||||||
'preferences' => $this->preferencesRepository->findEnabled(),
|
'preferences' => $this->preferencesRepository->findEnabled(),
|
||||||
'languages' => CountryCodes::$countries,
|
'languages' => $languages,
|
||||||
'providers' => ['test' => 'Test'],
|
'providers' => ['test' => 'Test'],
|
||||||
'userPreferences' => $userPreferences->toArray(),
|
'userPreferences' => $userPreferences->toArray(),
|
||||||
]
|
]
|
||||||
@@ -55,11 +59,14 @@ class PreferencesController extends AbstractController
|
|||||||
$userPreferences = $this->saveUserMediaPreferencesHandler->handle($input->toCommand())->userPreferences;
|
$userPreferences = $this->saveUserMediaPreferencesHandler->handle($input->toCommand())->userPreferences;
|
||||||
$userPreferences = Map::from($userPreferences)->rekey(fn($preference) => $preference->getPreference()->getId());
|
$userPreferences = Map::from($userPreferences)->rekey(fn($preference) => $preference->getPreference()->getId());
|
||||||
|
|
||||||
|
$languages = CountryLanguages::$languages;
|
||||||
|
sort($languages);
|
||||||
|
|
||||||
return $this->render(
|
return $this->render(
|
||||||
'user/preferences.html.twig',
|
'user/preferences.html.twig',
|
||||||
[
|
[
|
||||||
'preferences' => $this->preferencesRepository->findEnabled(),
|
'preferences' => $this->preferencesRepository->findEnabled(),
|
||||||
'languages' => CountryCodes::$countries,
|
'languages' => $languages,
|
||||||
'providers' => ['test' => 'Test'],
|
'providers' => ['test' => 'Test'],
|
||||||
'userPreferences' => $userPreferences->toArray(),
|
'userPreferences' => $userPreferences->toArray(),
|
||||||
]
|
]
|
||||||
|
|||||||
140
src/Util/CountryLanguages.php
Normal file
140
src/Util/CountryLanguages.php
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Util;
|
||||||
|
|
||||||
|
class CountryLanguages
|
||||||
|
{
|
||||||
|
public static $languages = [
|
||||||
|
'English (US)',
|
||||||
|
'English',
|
||||||
|
'French',
|
||||||
|
'German',
|
||||||
|
'Italian',
|
||||||
|
'Spanish',
|
||||||
|
'Portuguese',
|
||||||
|
'Mandarin',
|
||||||
|
'Japanese',
|
||||||
|
'Korean',
|
||||||
|
'Russian',
|
||||||
|
'Hindi',
|
||||||
|
'Arabic',
|
||||||
|
'Dutch',
|
||||||
|
'Swedish',
|
||||||
|
'Norwegian',
|
||||||
|
'Danish',
|
||||||
|
'Finnish',
|
||||||
|
'Polish',
|
||||||
|
'Turkish',
|
||||||
|
'Persian',
|
||||||
|
'Thai',
|
||||||
|
'Vietnamese',
|
||||||
|
'Indonesian',
|
||||||
|
'Urdu',
|
||||||
|
'Bengali',
|
||||||
|
'Ukrainian',
|
||||||
|
'Greek',
|
||||||
|
'Hebrew',
|
||||||
|
'Malay',
|
||||||
|
'Filipino'
|
||||||
|
];
|
||||||
|
|
||||||
|
public static function fromCountryCode(string $countryCode): string
|
||||||
|
{
|
||||||
|
$countryLanguages = [
|
||||||
|
'US' => 'English (US)',
|
||||||
|
'GB' => 'English',
|
||||||
|
'CA' => 'English', // Note: French is also official in parts of Canada
|
||||||
|
'FR' => 'French',
|
||||||
|
'DE' => 'German',
|
||||||
|
'IT' => 'Italian',
|
||||||
|
'ES' => 'Spanish',
|
||||||
|
'MX' => 'Spanish',
|
||||||
|
'BR' => 'Portuguese',
|
||||||
|
'PT' => 'Portuguese',
|
||||||
|
'CN' => 'Mandarin',
|
||||||
|
'JP' => 'Japanese',
|
||||||
|
'KR' => 'Korean',
|
||||||
|
'RU' => 'Russian',
|
||||||
|
'IN' => 'Hindi', // Note: India has multiple official languages
|
||||||
|
'SA' => 'Arabic',
|
||||||
|
'EG' => 'Arabic',
|
||||||
|
'ZA' => 'English', // South Africa has 11 official languages
|
||||||
|
'NG' => 'English',
|
||||||
|
'AU' => 'English',
|
||||||
|
'AR' => 'Spanish',
|
||||||
|
'CH' => 'German', // Also French, Italian, Romansh
|
||||||
|
'BE' => 'Dutch', // Also French and German
|
||||||
|
'NL' => 'Dutch',
|
||||||
|
'SE' => 'Swedish',
|
||||||
|
'NO' => 'Norwegian',
|
||||||
|
'DK' => 'Danish',
|
||||||
|
'FI' => 'Finnish',
|
||||||
|
'PL' => 'Polish',
|
||||||
|
'TR' => 'Turkish',
|
||||||
|
'IR' => 'Persian',
|
||||||
|
'TH' => 'Thai',
|
||||||
|
'VN' => 'Vietnamese',
|
||||||
|
'ID' => 'Indonesian',
|
||||||
|
'PK' => 'Urdu',
|
||||||
|
'BD' => 'Bengali',
|
||||||
|
'UA' => 'Ukrainian',
|
||||||
|
'GR' => 'Greek',
|
||||||
|
'IL' => 'Hebrew',
|
||||||
|
'MY' => 'Malay',
|
||||||
|
'PH' => 'Filipino',
|
||||||
|
'KE' => 'English', // Also Swahili
|
||||||
|
];
|
||||||
|
|
||||||
|
return $countryLanguages[$countryCode];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function fromCountryName(string $countryName): string
|
||||||
|
{
|
||||||
|
$countryLanguages = [
|
||||||
|
'United States' => 'English (US)',
|
||||||
|
'United Kingdom' => 'English',
|
||||||
|
'Canada' => 'English', // French is also official
|
||||||
|
'France' => 'French',
|
||||||
|
'Germany' => 'German',
|
||||||
|
'Italy' => 'Italian',
|
||||||
|
'Spain' => 'Spanish',
|
||||||
|
'Mexico' => 'Spanish',
|
||||||
|
'Brazil' => 'Portuguese',
|
||||||
|
'Portugal' => 'Portuguese',
|
||||||
|
'China' => 'Mandarin',
|
||||||
|
'Japan' => 'Japanese',
|
||||||
|
'South Korea' => 'Korean',
|
||||||
|
'Russia' => 'Russian',
|
||||||
|
'India' => 'Hindi', // Also English and many regional languages
|
||||||
|
'Saudi Arabia' => 'Arabic',
|
||||||
|
'Egypt' => 'Arabic',
|
||||||
|
'South Africa' => 'English', // One of 11 official languages
|
||||||
|
'Nigeria' => 'English',
|
||||||
|
'Australia' => 'English',
|
||||||
|
'Argentina' => 'Spanish',
|
||||||
|
'Switzerland' => 'German', // Also French, Italian, Romansh
|
||||||
|
'Belgium' => 'Dutch', // Also French and German
|
||||||
|
'Netherlands' => 'Dutch',
|
||||||
|
'Sweden' => 'Swedish',
|
||||||
|
'Norway' => 'Norwegian',
|
||||||
|
'Denmark' => 'Danish',
|
||||||
|
'Finland' => 'Finnish',
|
||||||
|
'Poland' => 'Polish',
|
||||||
|
'Turkey' => 'Turkish',
|
||||||
|
'Iran' => 'Persian',
|
||||||
|
'Thailand' => 'Thai',
|
||||||
|
'Vietnam' => 'Vietnamese',
|
||||||
|
'Indonesia' => 'Indonesian',
|
||||||
|
'Pakistan' => 'Urdu',
|
||||||
|
'Bangladesh' => 'Bengali',
|
||||||
|
'Ukraine' => 'Ukrainian',
|
||||||
|
'Greece' => 'Greek',
|
||||||
|
'Israel' => 'Hebrew',
|
||||||
|
'Malaysia' => 'Malay',
|
||||||
|
'Philippines' => 'Filipino',
|
||||||
|
'Kenya' => 'English', // Also Swahili
|
||||||
|
];
|
||||||
|
|
||||||
|
return $countryLanguages[$countryName];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -34,8 +34,13 @@
|
|||||||
</label>
|
</label>
|
||||||
<label for="language">
|
<label for="language">
|
||||||
Language
|
Language
|
||||||
<select id="language" data-result-filter-target="language" class="px-1 py-0.5 bg-stone-100 text-gray-800 rounded-md">
|
<select id="language"
|
||||||
<option selected value="{{ filter.language }}">{{ filter.language }}</option>
|
data-result-filter-target="language"
|
||||||
|
class="px-1 py-0.5 bg-stone-100 text-gray-800 rounded-md"
|
||||||
|
{% if this.userPreferences['language'] != null %}
|
||||||
|
data-preferred="{{ this.userPreferences['language'] }}"
|
||||||
|
{% endif %}
|
||||||
|
>
|
||||||
</select>
|
</select>
|
||||||
</label>
|
</label>
|
||||||
<label for="provider">
|
<label for="provider">
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for result in results.results %}
|
{% for result in results.results %}
|
||||||
<tr class="bg-white border-b dark:bg-slate-700 dark:border-gray-600 border-gray-200" data-languages="{{ result.languages|json_encode }}" {% if "tvshows" == results.media.mediaType %} data-season="{{ results.season }} {% endif %}">
|
<tr class="bg-white border-b dark:bg-slate-700 dark:border-gray-600 border-gray-200" data-provider="{{ result.provider }}" data-languages="{{ result.languages|json_encode }}" {% if "tvshows" == results.media.mediaType %} data-season="{{ results.season }} {% endif %}">
|
||||||
<td id="size" class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-gray-50">
|
<td id="size" class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-800 dark:text-gray-50">
|
||||||
{{ result.size }}
|
{{ result.size }}
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -40,11 +40,11 @@
|
|||||||
|
|
||||||
<label class="text-gray-50" for="language">Language</label>
|
<label class="text-gray-50" for="language">Language</label>
|
||||||
<select class="p-1.5 rounded-md mb-2" name="language" id="language" value="{{ userPreferences['language'].getPreferenceValue() }}">
|
<select class="p-1.5 rounded-md mb-2" name="language" id="language" value="{{ userPreferences['language'].getPreferenceValue() }}">
|
||||||
{% for key, value in languages %}
|
{% for language in languages %}
|
||||||
<option class="text-gray-800"
|
<option class="text-gray-800"
|
||||||
value="{{ key }}"
|
value="{{ language }}"
|
||||||
{{ key == userPreferences['language'].getPreferenceValue() ? "selected" }}
|
{{ language == userPreferences['language'].getPreferenceValue() ? "selected" }}
|
||||||
>{{ value }}</option>
|
>{{ language }}</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user