diff --git a/invidious/invidious.php b/invidious/invidious.php index ec16b4dc..1078d26d 100644 --- a/invidious/invidious.php +++ b/invidious/invidious.php @@ -5,7 +5,8 @@ * Version: 0.3 * Author: Matthias Ebers * Author: Michael Vogel - * + * Status: Unsupported + * Note: Please use the URL Replace addon instead */ use Friendica\Core\Hook; @@ -91,7 +92,7 @@ function invidious_render(array &$b) $original = $b['html']; $server = DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'invidious', 'server', DI::config()->get('invidious', 'server', INVIDIOUS_DEFAULT)); - + $b['html'] = preg_replace("/https?:\/\/www.youtube.com\/watch\?v\=(.*?)/ism", $server . '/watch?v=$1', $b['html']); $b['html'] = preg_replace("/https?:\/\/www.youtube.com\/embed\/(.*?)/ism", $server . '/embed/$1', $b['html']); $b['html'] = preg_replace("/https?:\/\/www.youtube.com\/shorts\/(.*?)/ism", $server . '/shorts/$1', $b['html']); diff --git a/nitter/nitter.php b/nitter/nitter.php index e9454c5d..946b18c0 100644 --- a/nitter/nitter.php +++ b/nitter/nitter.php @@ -4,18 +4,20 @@ * Description: Replaces links to twitter.com to a nitter server in all displays of postings on a node. * Version: 2.0 * Author: Tobias Diekershoff + * Status: Unsupported + * Note: Please use the URL Replace addon instead * * Copyright (c) 2020 Tobias Diekershoff * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and * associated documentation files (the "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to * the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all copies or substantial * portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, @@ -49,7 +51,7 @@ function nitter_addon_admin(string &$o) $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/nitter/'); $o = Renderer::replaceMacros($t, [ '$settingdescription' => DI::l10n()->t('Which nitter 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 Nitter servers.', 'https://github.com/zedeus/nitter/wiki/Instances'), - '$nitterserver' => ['nitterserver', DI::l10n()->t('Nitter server'), $nitterserver, 'https://example.com'], + '$nitterserver' => ['nitterserver', DI::l10n()->t('Nitter server'), $nitterserver, 'https://example.com'], '$submit' => DI::l10n()->t('Save Settings'), ]); } diff --git a/url_replace/README.md b/url_replace/README.md index 278de91b..348c4426 100644 --- a/url_replace/README.md +++ b/url_replace/README.md @@ -4,7 +4,8 @@ This addon will replace all occurrences of specified URLs with the address of alternative servers in all displayed postings on a Friendica node. You can use this to switch from Twitter (or X) to a nitter instance, from -YouTube to an invidious instance, or from some news sites to 12ft.io. +YouTube to an invidious instance, from Instagram to a proxigram instance, +or from some news sites to 12ft.io. Note: If you are using the twitter connector on your server, the links to the contacts profile pages will not be replaced by this addon. Only links in the diff --git a/url_replace/lang/C/messages.po b/url_replace/lang/C/messages.po index c09ad6d9..e8dbb04c 100644 --- a/url_replace/lang/C/messages.po +++ b/url_replace/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-01-05 00:06+0100\n" +"POT-Creation-Date: 2024-03-14 09:05+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,34 +17,48 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: url_replace.php:54 +#: url_replace.php:68 +msgid "Replace links to X." +msgstr "" + +#: url_replace.php:73 msgid "Nitter server" msgstr "" -#: url_replace.php:56 -msgid "Specify the URL with protocol. The default is https://nitter.net." +#: url_replace.php:75 url_replace.php:88 url_replace.php:101 +#, php-format +msgid "Specify the URL with protocol. The default is %s." msgstr "" -#: url_replace.php:62 +#: url_replace.php:81 +msgid "Replace links to YouTube." +msgstr "" + +#: url_replace.php:86 msgid "Invidious server" msgstr "" -#: url_replace.php:64 -msgid "Specify the URL with protocol. The default is https://yewtu.be." +#: url_replace.php:94 +msgid "Replace links to Instagram." msgstr "" -#: url_replace.php:70 +#: url_replace.php:99 +msgid "Proxigram server" +msgstr "" + +#: url_replace.php:107 msgid "Sites which are accessed through 12ft.io" msgstr "" -#: url_replace.php:72 +#: url_replace.php:109 msgid "Specify the URLs with protocol, one per line." msgstr "" -#: url_replace.php:76 +#: url_replace.php:113 msgid "Save settings" msgstr "" -#: url_replace.php:125 -msgid "(URL replace addon enabled for X, YouTube and some news sites.)" +#: url_replace.php:179 +msgid "" +"(URL replace addon enabled for X, YouTube, Instagram and some news sites.)" msgstr "" diff --git a/url_replace/templates/admin.tpl b/url_replace/templates/admin.tpl index b99e6355..fec5a253 100644 --- a/url_replace/templates/admin.tpl +++ b/url_replace/templates/admin.tpl @@ -1,5 +1,9 @@ +{{include file="field_checkbox.tpl" field=$nitter_server_enabled}} {{include file="field_input.tpl" field=$nitter_server}} +{{include file="field_checkbox.tpl" field=$invidious_server_enabled}} {{include file="field_input.tpl" field=$invidious_server}} +{{include file="field_checkbox.tpl" field=$proxigram_server_enabled}} +{{include file="field_input.tpl" field=$proxigram_server}} {{include file="field_textarea.tpl" field=$twelvefeet_sites}}
diff --git a/url_replace/url_replace.php b/url_replace/url_replace.php index de16234f..cd3b60b4 100644 --- a/url_replace/url_replace.php +++ b/url_replace/url_replace.php @@ -2,7 +2,7 @@ /** * Name: URL Replace * Description: Replaces occurrences of specified URLs with the address of alternative servers in all displays of postings on a node. - * Version: 1.0 + * Version: 1.1 * Author: Dr. Tobias Quathamer * Maintainer: Dr. Tobias Quathamer */ @@ -11,6 +11,10 @@ use Friendica\Core\Hook; use Friendica\Core\Renderer; use Friendica\DI; +const URL_REPLACE_NITTER_DEFAULT = 'https://nitter.net'; +const URL_REPLACE_INVIDIOUS_DEFAULT = 'https://invidio.us'; +const URL_REPLACE_PROXIGRAM_DEFAULT = 'https://proxigram.lunar.icu'; + function url_replace_install() { Hook::register('prepare_body_final', 'addon/url_replace/url_replace.php', 'url_replace_render'); @@ -21,18 +25,37 @@ function url_replace_install() */ function url_replace_addon_admin_post() { - DI::config()->set('url_replace', 'nitter_server', rtrim(trim($_POST['nitter_server']), '/')); - DI::config()->set('url_replace', 'invidious_server', rtrim(trim($_POST['invidious_server']), '/')); + DI::config()->set('url_replace', 'nitter_server_enabled', !empty($_POST['nitter_server_enabled'])); + $nitter_server = rtrim(trim($_POST['nitter_server']), '/'); + if ($nitter_server) { + DI::config()->set('url_replace', 'nitter_server', $nitter_server); + } else { + DI::config()->delete('url_replace', 'nitter_server'); + } + DI::config()->set('url_replace', 'invidious_server_enabled', !empty($_POST['invidious_server_enabled'])); + $invidious_server = rtrim(trim($_POST['invidious_server']), '/'); + if ($invidious_server) { + DI::config()->set('url_replace', 'invidious_server', $invidious_server); + } else { + DI::config()->delete('url_replace', 'invidious_server'); + } + DI::config()->set('url_replace', 'proxigram_server_enabled', !empty($_POST['proxigram_server_enabled'])); + $proxigram_server = rtrim(trim($_POST['proxigram_server']), '/'); + if ($proxigram_server) { + DI::config()->set('url_replace', 'proxigram_server', $proxigram_server); + } else { + DI::config()->delete('url_replace', 'proxigram_server'); + } // Convert twelvefeet_sites into an array before setting the new value $twelvefeet_sites = explode(PHP_EOL, $_POST['twelvefeet_sites']); // Normalize URLs by using lower case, removing a trailing slash and whitespace - $twelvefeet_sites = array_map(fn($value): string => rtrim(trim(strtolower($value)), '/'), $twelvefeet_sites); + $twelvefeet_sites = array_map(fn ($value): string => rtrim(trim(strtolower($value)), '/'), $twelvefeet_sites); // Do not store empty lines or duplicates - $twelvefeet_sites = array_filter($twelvefeet_sites, fn($value): bool => !empty($value)); + $twelvefeet_sites = array_filter($twelvefeet_sites, fn ($value): bool => !empty($value)); $twelvefeet_sites = array_unique($twelvefeet_sites); // Ensure a protocol and default to HTTPS $twelvefeet_sites = array_map( - fn($value): string => substr($value, 0, 4) !== 'http' ? 'https://' . $value : $value, + fn ($value): string => substr($value, 0, 4) !== 'http' ? 'https://' . $value : $value, $twelvefeet_sites ); asort($twelvefeet_sites); @@ -41,31 +64,58 @@ function url_replace_addon_admin_post() /** * Hook into admin settings to enable choosing a different server - * for twitter, youtube, and news sites. + * for Twitter, YouTube, Instagram, and news sites. */ function url_replace_addon_admin(string &$o) { - $nitter_server = DI::config()->get('url_replace', 'nitter_server'); - $invidious_server = DI::config()->get('url_replace', 'invidious_server'); - $twelvefeet_sites = implode(PHP_EOL, DI::config()->get('url_replace', 'twelvefeet_sites') ?? [] ?: []); + $nitter_server_enabled = DI::config()->get('url_replace', 'nitter_server_enabled') ?? true; + $nitter_server = DI::config()->get('url_replace', 'nitter_server') ?? ''; + $invidious_server_enabled = DI::config()->get('url_replace', 'invidious_server_enabled') ?? true; + $invidious_server = DI::config()->get('url_replace', 'invidious_server') ?? ''; + $proxigram_server_enabled = DI::config()->get('url_replace', 'proxigram_server_enabled') ?? true; + $proxigram_server = DI::config()->get('url_replace', 'proxigram_server') ?? ''; + $twelvefeet_sites = implode(PHP_EOL, DI::config()->get('url_replace', 'twelvefeet_sites') ?? []); $t = Renderer::getMarkupTemplate('admin.tpl', 'addon/url_replace/'); $o = Renderer::replaceMacros($t, [ + '$nitter_server_enabled' => [ + 'nitter_server_enabled', + DI::l10n()->t('Replace links to X.'), + $nitter_server_enabled, + ], '$nitter_server' => [ 'nitter_server', DI::l10n()->t('Nitter server'), $nitter_server, - DI::l10n()->t('Specify the URL with protocol. The default is https://nitter.net.'), + DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_NITTER_DEFAULT), null, - 'placeholder="https://nitter.net"', + 'placeholder="' . URL_REPLACE_NITTER_DEFAULT . '"', + ], + '$invidious_server_enabled' => [ + 'invidious_server_enabled', + DI::l10n()->t('Replace links to YouTube.'), + $invidious_server_enabled, ], '$invidious_server' => [ 'invidious_server', DI::l10n()->t('Invidious server'), $invidious_server, - DI::l10n()->t('Specify the URL with protocol. The default is https://yewtu.be.'), + DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_INVIDIOUS_DEFAULT), null, - 'placeholder="https://yewtu.be"', + 'placeholder="' . URL_REPLACE_INVIDIOUS_DEFAULT . '"', + ], + '$proxigram_server_enabled' => [ + 'proxigram_server_enabled', + DI::l10n()->t('Replace links to Instagram.'), + $proxigram_server_enabled, + ], + '$proxigram_server' => [ + 'proxigram_server', + DI::l10n()->t('Proxigram server'), + $proxigram_server, + DI::l10n()->t('Specify the URL with protocol. The default is %s.', URL_REPLACE_PROXIGRAM_DEFAULT), + null, + 'placeholder="' . URL_REPLACE_PROXIGRAM_DEFAULT . '"', ], '$twelvefeet_sites' => [ 'twelvefeet_sites', @@ -84,29 +134,41 @@ function url_replace_addon_admin(string &$o) */ function url_replace_render(array &$b) { - $replaced = false; + $replaced = false; + $replacements = []; - $nitter_server = DI::config()->get('url_replace', 'nitter_server'); - if (empty($nitter_server)) { - $nitter_server = 'https://nitter.net'; + $nitter_server = DI::config()->get('url_replace', 'nitter_server') ?? URL_REPLACE_NITTER_DEFAULT; + $nitter_server_enabled = DI::config()->get('url_replace', 'nitter_server_enabled') ?? true; + if ($nitter_server_enabled) { + $replacements = array_merge($replacements, [ + 'https://mobile.twitter.com' => $nitter_server, + 'https://twitter.com' => $nitter_server, + 'https://mobile.x.com' => $nitter_server, + 'https://x.com' => $nitter_server, + ]); } - $invidious_server = DI::config()->get('url_replace', 'invidious_server'); - if (empty($invidious_server)) { - $invidious_server = 'https://yewtu.be'; + $invidious_server = DI::config()->get('url_replace', 'invidious_server') ?? URL_REPLACE_INVIDIOUS_DEFAULT; + $invidious_server_enabled = DI::config()->get('url_replace', 'invidious_server_enabled') ?? true; + if ($invidious_server_enabled) { + $replacements = array_merge($replacements, [ + 'https://www.youtube.com' => $invidious_server, + 'https://youtube.com' => $invidious_server, + 'https://m.youtube.com' => $invidious_server, + 'https://youtu.be' => $invidious_server, + ]); + } + + $proxigram_server = DI::config()->get('url_replace', 'proxigram_server') ?? URL_REPLACE_PROXIGRAM_DEFAULT; + $proxigram_server_enabled = DI::config()->get('url_replace', 'proxigram_server_enabled') ?? true; + if ($proxigram_server_enabled) { + $replacements = array_merge($replacements, [ + 'https://www.instagram.com' => $proxigram_server, + 'https://instagram.com' => $proxigram_server, + 'https://ig.me' => $proxigram_server, + ]); } - // Handle some of twitter and youtube - $replacements = [ - 'https://mobile.twitter.com' => $nitter_server, - 'https://twitter.com' => $nitter_server, - 'https://mobile.x.com' => $nitter_server, - 'https://x.com' => $nitter_server, - 'https://www.youtube.com' => $invidious_server, - 'https://youtube.com' => $invidious_server, - 'https://m.youtube.com' => $invidious_server, - 'https://youtu.be' => $invidious_server, - ]; foreach ($replacements as $server => $replacement) { if (strpos($b['html'], $server) !== false) { $b['html'] = str_replace($server, $replacement, $b['html']); @@ -114,7 +176,7 @@ function url_replace_render(array &$b) } } - $twelvefeet_sites = DI::config()->get('url_replace', 'twelvefeet_sites') ?? [] ?: []; + $twelvefeet_sites = DI::config()->get('url_replace', 'twelvefeet_sites') ?? []; foreach ($twelvefeet_sites as $twelvefeet_site) { if (strpos($b['html'], $twelvefeet_site) !== false) { $b['html'] = str_replace($twelvefeet_site, 'https://12ft.io/' . $twelvefeet_site, $b['html']); @@ -122,8 +184,7 @@ function url_replace_render(array &$b) } } - if ($replaced) { - $b['html'] .= '

' . DI::l10n()->t('(URL replace addon enabled for X, YouTube and some news sites.)') . '

'; + $b['html'] .= '

' . DI::l10n()->t('(URL replace addon enabled for X, YouTube, Instagram and some news sites.)') . '

'; } }