This addon will replace "youtube.com" with the chosen Invidious instance #1441
4
invidious/README.md
Normal file
4
invidious/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
invidious Addon for Friendica
|
||||
==========================
|
||||
|
||||
This addon will replace "youtube.com" with the chosen Invidious instance
|
64
invidious/invidious.php
Normal file
64
invidious/invidious.php
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?php
|
||||
/*
|
||||
* Name: invidious
|
||||
* Description: Replaces links to youtube.com to an invidious instance in all displays of postings on a node.
|
||||
* Version: 0.1
|
||||
* Author: Matthias Ebers <@feb@loma.ml>
|
||||
*
|
||||
*/
|
||||
|
||||
use Friendica\App;
|
||||
use Friendica\Core\Hook;
|
||||
use Friendica\Core\Renderer;
|
||||
use Friendica\DI;
|
||||
|
||||
function invidious_install()
|
||||
{
|
||||
Hook::register('prepare_body_final', 'addon/invidious/invidious.php', 'invidious_render');
|
||||
}
|
||||
|
||||
/* Handle the send data from the admin settings
|
||||
*/
|
||||
function invidious_addon_admin_post()
|
||||
{
|
||||
DI::config()->set('invidious', 'server', rtrim(trim($_POST['invidiousserver']), '/'));
|
||||
}
|
||||
|
||||
/* Hook into the admin settings to let the admin choose an
|
||||
* invidious server to use for the replacement.
|
||||
*/
|
||||
function invidious_addon_admin(string &$o)
|
||||
{
|
||||
$invidiousserver = DI::config()->get('invidious', 'server');
|
||||
$t = Renderer::getMarkupTemplate('admin.tpl', 'addon/invidious/');
|
||||
$o = Renderer::replaceMacros($t, [
|
||||
'$settingdescription' => DI::l10n()->t('Which Invidious server shall be used for the replacements in the post bodies? Use the URL with servername and protocol. See %s for a list of available public Invidious servers.', 'https://redirect.invidious.io'),
|
||||
'$invidiousserver' => ['invidiousserver', DI::l10n()->t('Invidious server'), $invidiousserver, 'https://example.com'],
|
||||
'$submit' => DI::l10n()->t('Save Settings'),
|
||||
]);
|
||||
}
|
||||
|
||||
/*
|
||||
* replace "youtube.com" with the chosen Invidious instance
|
||||
*/
|
||||
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', $invidious, $b['html']);
|
||||
$replaced = true;
|
||||
}
|
||||
if (strstr($b['html'], 'https://youtube.com')) {
|
||||
heluecht
commented
Why is this block duplicated? Why is this block duplicated?
loma-one
commented
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.
MrPetovan
commented
Thanks for the reply, the indentation still needs to be corrected. Thanks for the reply, the indentation still needs to be corrected.
heluecht
commented
you could combine the you could combine the `str_replace` with an array as first parameter.
|
||||
$b['html'] = str_replace('https://youtube.com', $invidious, $b['html']);
|
||||
$replaced = true;
|
||||
}
|
||||
if (strstr($b['html'], 'https://youtu.be')) {
|
||||
heluecht
commented
You can simply do
You can simply do
```
$b['html'] = str_replace(['https://www.youtube.com', 'https://youtube.com'], $invidious, $b['html']);
```
|
||||
$b['html'] = str_replace('https://youtu.be', $invidious, $b['html']);
|
||||
$replaced = true;
|
||||
}
|
||||
if ($replaced) {
|
||||
$b['html'] .= '<hr><p><small>' . DI::l10n()->t('(Invidious addon enabled: YouTube links via %s)', $invidious) . '</small></p>';
|
||||
}
|
||||
}
|
1
invidious/lang/C/messages.po
Normal file
1
invidious/lang/C/messages.po
Normal file
|
@ -0,0 +1 @@
|
|||
|
5
invidious/templates/admin.tpl
Normal file
5
invidious/templates/admin.tpl
Normal file
|
@ -0,0 +1,5 @@
|
|||
<p>{{$settingdescription}}</p>
|
||||
|
||||
{{include file="field_input.tpl" field=$invidiousserver}}
|
||||
|
||||
<div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>
|
Loading…
Reference in a new issue
You need to also check for
'https://youtube.com'
now that the replacement has been combined. Additionallystrpos()
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.