This addon will replace "youtube.com" with the chosen Invidious instance #1441

Merged
MrPetovan merged 19 commits from :develop into 2023.09-rc 2023-12-08 20:50:23 +01:00
Showing only changes of commit f2023a5eb9 - Show all commits

View file

@ -46,9 +46,9 @@ function invidious_render(array &$b)
// this needs to be a system setting
$replaced = false;
$invidious = DI::config()->get('invidious', 'server', 'https://invidio.us');
if (strstr($b['html'], 'https://www.youtube.com')) {
$b['html'] = str_replace(['https://www.youtube.com', 'https://youtube.com'], $invidious, $b['html']);
$replaced = true;
if (strpos($b['html'], 'https://www.youtube.com/') !== false || strpos($b['html'], 'https://youtube.com/') !== false || strpos($b['html'], 'https://youtu.be/') !== false) {

You need to also check for 'https://youtube.com' now that the replacement has been combined. Additionally strpos() has better performance for what you're trying to do here.

And what about https://youtu.be/[video id] links? They need to be replaced by [Invidious domain]/?watch=[video id].

Lastly, I added an ending slash to the needle strings to match video links. If someone just mentions youtube.com and links to it, it shouldn't be replaced with an Invidious link.

if (strpos($b['html'], 'https://www.youtube.com/') !== false || strpos($b['html'], 'https://youtube.com/') !== false || strpos($b['html'], 'https://youtu.be/') !== false) {
    $b['html'] = str_replace('https://youtu.be/', $invidious . '/?watch=', $b['html']);
    $b['html'] = str_replace(['https://www.youtube.com/', 'https://youtube.com/'], $invidious . '/', $b['html']);
You need to also check for `'https://youtube.com'` now that the replacement has been combined. Additionally `strpos()` has better performance for what you're trying to do here. And what about `https://youtu.be/[video id]` links? They need to be replaced by `[Invidious domain]/?watch=[video id]`. Lastly, I added an ending slash to the needle strings to match video links. If someone just mentions youtube.com and links to it, it shouldn't be replaced with an Invidious link. ```php if (strpos($b['html'], 'https://www.youtube.com/') !== false || strpos($b['html'], 'https://youtube.com/') !== false || strpos($b['html'], 'https://youtu.be/') !== false) { $b['html'] = str_replace('https://youtu.be/', $invidious . '/?watch=', $b['html']); $b['html'] = str_replace(['https://www.youtube.com/', 'https://youtube.com/'], $invidious . '/', $b['html']); ```
$b['html'] = str_replace('https://youtu.be/', $invidious . '/watch?v=', $b['html']);
$b['html'] = str_replace(['https://www.youtube.com/', 'https://youtube.com/'], $invidious . '/', $b['html']);
}
if ($replaced) {

Why is this block duplicated?

Why is this block duplicated?

To ensure that different spellings with www and without are intercepted and redirected.

To ensure that different spellings with **www** and without are intercepted and redirected.

Thanks for the reply, the indentation still needs to be corrected.

Thanks for the reply, the indentation still needs to be corrected.

you could combine the str_replace with an array as first parameter.

you could combine the `str_replace` with an array as first parameter.
$b['html'] .= '<hr><p><small>' . DI::l10n()->t('(Invidious addon enabled: YouTube links via %s)', $invidious) . '</small></p>';