From cee8369194448c07d9162d9e80a0deba3ad3f509 Mon Sep 17 00:00:00 2001 From: nupplaPhil Date: Sat, 18 Apr 2026 21:02:21 +0200 Subject: [PATCH 1/2] [CI] Bump PHP versions - new PHP versions - Include missing extensions "gmp" and "imagick" --- .woodpecker/.continuous-deployment-allinone.yml | 7 ++++++- .woodpecker/.continuous-deployment.yml | 7 ++++++- .woodpecker/.phpunit.yml | 10 ++++++---- .woodpecker/.releaser.yml | 7 ++++++- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/.woodpecker/.continuous-deployment-allinone.yml b/.woodpecker/.continuous-deployment-allinone.yml index 8d608db8..6128e8c6 100644 --- a/.woodpecker/.continuous-deployment-allinone.yml +++ b/.woodpecker/.continuous-deployment-allinone.yml @@ -5,6 +5,11 @@ labels: skip_clone: true +matrix: + include: + - PHP_MAJOR_VERSION: 8.5 + PHP_VERSION: 8.5.5 + steps: clone_friendica_base: image: alpine/git @@ -48,7 +53,7 @@ steps: branch: [ develop, '*-rc' ] event: push composer_install: - image: friendicaci/php8.2:php8.2.28 + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} commands: - export COMPOSER_HOME=.composer - composer validate diff --git a/.woodpecker/.continuous-deployment.yml b/.woodpecker/.continuous-deployment.yml index d6d8a22a..3c4206de 100644 --- a/.woodpecker/.continuous-deployment.yml +++ b/.woodpecker/.continuous-deployment.yml @@ -5,6 +5,11 @@ labels: skip_clone: true +matrix: + include: + - PHP_MAJOR_VERSION: 8.5 + PHP_VERSION: 8.5.5 + steps: clone_friendica_base: image: alpine/git @@ -48,7 +53,7 @@ steps: branch: [ develop, '*-rc' ] event: push composer_install: - image: friendicaci/php8.2:php8.2.28 + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} commands: - export COMPOSER_HOME=.composer - composer validate diff --git a/.woodpecker/.phpunit.yml b/.woodpecker/.phpunit.yml index b0745ad0..a59242af 100644 --- a/.woodpecker/.phpunit.yml +++ b/.woodpecker/.phpunit.yml @@ -5,13 +5,15 @@ matrix: - PHP_MAJOR_VERSION: 8.0 PHP_VERSION: 8.0.30 - PHP_MAJOR_VERSION: 8.1 - PHP_VERSION: 8.1.31 + PHP_VERSION: 8.1.34 - PHP_MAJOR_VERSION: 8.2 - PHP_VERSION: 8.2.28 + PHP_VERSION: 8.2.30 - PHP_MAJOR_VERSION: 8.3 - PHP_VERSION: 8.3.17 + PHP_VERSION: 8.3.30 - PHP_MAJOR_VERSION: 8.4 - PHP_VERSION: 8.4.5 + PHP_VERSION: 8.4.20 + - PHP_MAJOR_VERSION: 8.5 + PHP_VERSION: 8.5.5 # This forces PHP Unit executions at the "opensocial" labeled location (because of much more power...) labels: diff --git a/.woodpecker/.releaser.yml b/.woodpecker/.releaser.yml index 7407f2bc..f2516cc8 100644 --- a/.woodpecker/.releaser.yml +++ b/.woodpecker/.releaser.yml @@ -5,6 +5,11 @@ labels: skip_clone: true +matrix: + include: + - PHP_MAJOR_VERSION: 8.5 + PHP_VERSION: 8.5.5 + steps: clone_friendica_base: image: alpine/git @@ -45,7 +50,7 @@ steps: repo: friendica/friendica-addons event: tag composer_install: - image: friendicaci/php8.2:php8.2.28 + image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION} commands: - export COMPOSER_HOME=.composer - composer validate From f00c96b7341f087c87a85b30dd6db86fa3b6232e Mon Sep 17 00:00:00 2001 From: Michael Date: Sat, 25 Apr 2026 10:10:30 +0000 Subject: [PATCH 2/2] Issue 14439: Check for the exipration days / use "Atmosphere" --- bluesky/bluesky.php | 38 ++++++++-------- bluesky/lang/C/messages.po | 88 +++++++++++++++++++------------------- 2 files changed, 65 insertions(+), 61 deletions(-) diff --git a/bluesky/bluesky.php b/bluesky/bluesky.php index 0ca8a3e1..ad6b2351 100644 --- a/bluesky/bluesky.php +++ b/bluesky/bluesky.php @@ -1,7 +1,7 @@ * @@ -234,7 +234,7 @@ function bluesky_addon_admin(string &$o) $o = Renderer::replaceMacros($t, [ '$submit' => DI::l10n()->t('Save Settings'), - '$friendica_handles' => ['friendica_handles', DI::l10n()->t('Allow your users to use your hostname for their AT Protocol handles'), DI::config()->get('bluesky', 'friendica_handles'), DI::l10n()->t('Before enabling this option, you have to setup a wildcard domain configuration and you have to enable wildcard requests in your webserver configuration. On Apache this is done by adding "ServerAlias *.%s" to your HTTP configuration. You don\'t need to change the HTTPS configuration.', DI::baseUrl()->getHost())], + '$friendica_handles' => ['friendica_handles', DI::l10n()->t('Allow your users to use your hostname for their Atmosphere handles'), DI::config()->get('bluesky', 'friendica_handles'), DI::l10n()->t('Before enabling this option, you have to setup a wildcard domain configuration and you have to enable wildcard requests in your webserver configuration. On Apache this is done by adding "ServerAlias *.%s" to your HTTP configuration. You don\'t need to change the HTTPS configuration.', DI::baseUrl()->getHost())], ]); } @@ -266,7 +266,7 @@ function bluesky_settings(array &$data) if (DI::config()->get('bluesky', 'friendica_handles')) { $self = User::getById(DI::userSession()->getLocalUserId(), ['nickname']); $host_handle = $self['nickname'] . '.' . DI::baseUrl()->getHost(); - $friendica_handle = ['bluesky_friendica_handle', DI::l10n()->t('Allow to use %s as your AT Protocol handle.', $host_handle), $custom_handle, DI::l10n()->t('When enabled, you can use %s as your AT Protocol handle. After you enabled this option, please go to https://bsky.app/settings and select to change your handle. Select that you have got your own domain. Then enter %s and select "No DNS Panel". Then select "Verify Text File".', $host_handle, $host_handle)]; + $friendica_handle = ['bluesky_friendica_handle', DI::l10n()->t('Allow to use %s as your Atmosphere handle.', $host_handle), $custom_handle, DI::l10n()->t('When enabled, you can use %s as your Atmosphere handle. After you enabled this option, please go to https://bsky.app/settings and select to change your handle. Select that you have got your own domain. Then enter %s and select "No DNS Panel". Then select "Verify Text File".', $host_handle, $host_handle)]; if ($custom_handle) { $handle = $host_handle; } @@ -281,23 +281,23 @@ function bluesky_settings(array &$data) $t = Renderer::getMarkupTemplate('connector_settings.tpl', 'addon/bluesky/'); $html = Renderer::replaceMacros($t, [ - '$enable' => ['bluesky', DI::l10n()->t('Enable AT Protocol Addon'), $enabled], - '$bydefault' => ['bluesky_bydefault', DI::l10n()->t('Post via AT Protocol by default'), $def_enabled], + '$enable' => ['bluesky', DI::l10n()->t('Enable Atmosphere Addon'), $enabled], + '$bydefault' => ['bluesky_bydefault', DI::l10n()->t('Post to the Atmosphere by default'), $def_enabled], '$import' => ['bluesky_import', DI::l10n()->t('Import the remote timeline'), $import], - '$import_feeds' => ['bluesky_import_feeds', DI::l10n()->t('Import the pinned feeds'), $import_feeds, DI::l10n()->t('When activated, Posts will be imported from all the feeds that you pinned in AT Protocol.')], + '$import_feeds' => ['bluesky_import_feeds', DI::l10n()->t('Import the pinned feeds'), $import_feeds, DI::l10n()->t('When activated, Posts will be imported from all the feeds that you pinned in your Atmosphere client.')], '$complete_threads' => ['bluesky_complete_threads', DI::l10n()->t('Complete the threads'), $complete_threads, DI::l10n()->t('When activated, the system fetches additional replies for the posts in the timeline. This leads to more complete threads.')], '$custom_handle' => $friendica_handle, '$pds' => ['bluesky_pds', DI::l10n()->t('Personal Data Server'), $pds, DI::l10n()->t('The personal data server (PDS) is the system that hosts your profile.'), '', 'readonly'], - '$handle' => ['bluesky_handle', DI::l10n()->t('AT Protocol handle'), $handle, '', '', $custom_handle ? 'readonly' : ''], - '$did' => ['bluesky_did', DI::l10n()->t('AT Protocol DID'), $did, DI::l10n()->t('This is the unique identifier. It will be fetched automatically, when the handle is entered.'), '', 'readonly'], - '$password' => ['bluesky_password', DI::l10n()->t('AT Protocol app password'), '', DI::l10n()->t("Please don't add your real password here, but instead create a specific app password in the settings of your AT Protocol system.")], + '$handle' => ['bluesky_handle', DI::l10n()->t('Atmosphere handle'), $handle, '', '', $custom_handle ? 'readonly' : ''], + '$did' => ['bluesky_did', DI::l10n()->t('Atmosphere DID'), $did, DI::l10n()->t('This is the unique identifier. It will be fetched automatically, when the handle is entered.'), '', 'readonly'], + '$password' => ['bluesky_password', DI::l10n()->t('Atmosphere app password'), '', DI::l10n()->t("Please don't add your real password here, but instead create a specific app password in the settings of your Atmosphere client.")], '$web' => ['bluesky_web', DI::l10n()->t('Web front end'), $web, DI::l10n()->t('Choose your preferred external web front end for displaying posts and profiles.'), $web_frontend, ''], '$status' => bluesky_get_status($handle, $did, $pds, $token), ]); $data = [ 'connector' => 'bluesky', - 'title' => DI::l10n()->t('AT Protocol (Bluesky, Eurosky, Blacksky, ...) Import/Export'), + 'title' => DI::l10n()->t('Atmosphere (Bluesky, Eurosky, Blacksky, ...) Import/Export'), 'image' => 'images/500px-AT_Protocol_logo.png', 'enabled' => $enabled, 'html' => $html, @@ -328,7 +328,7 @@ function bluesky_get_status(string $handle = null, string $did = null, string $p switch ($status) { case ATProtocol::STATUS_TOKEN_OK: - return DI::l10n()->t("You are authenticated to the AT Protocol PDS. For security reasons the password isn't stored."); + return DI::l10n()->t("You are authenticated to the Atmosphere PDS. For security reasons the password isn't stored."); case ATProtocol::STATUS_SUCCESS: return DI::l10n()->t('The communication with the personal data server service (PDS) is established.'); case ATProtocol::STATUS_API_FAIL; @@ -408,7 +408,7 @@ function bluesky_jot_nets(array &$jotnets_fields) 'type' => 'checkbox', 'field' => [ 'bluesky_enable', - DI::l10n()->t('Post via the AT Protocol'), + DI::l10n()->t('Post via the Atmosphere'), DI::pConfig()->get(DI::userSession()->getLocalUserId(), 'bluesky', 'post_by_default') ] ]; @@ -514,9 +514,9 @@ function bluesky_hook_fork(array &$b) } if (DI::pConfig()->get($post['uid'], 'bluesky', 'import')) { - // Don't post if it isn't a reply to an AT Protocol post + // Don't post if it isn't a reply to an Atmosphere post if (($post['gravity'] != Item::GRAVITY_PARENT) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::ATPROTO])) { - DI::logger()->notice('No AT Protocol parent found', ['item' => $post['id']]); + DI::logger()->notice('No Atmosphere parent found', ['item' => $post['id']]); $b['execute'] = false; return; } @@ -574,7 +574,7 @@ function bluesky_send(array &$b) if ($b['deleted']) { $uri = DI::atpProcessor()->getUriClass($b['uri']); if (empty($uri)) { - DI::logger()->debug('Not an AT Protocol post', ['uri' => $b['uri']]); + DI::logger()->debug('Not an Atmosphere post', ['uri' => $b['uri']]); return; } DI::atProtocol()->deleteRecord($b['uid'], $uri->uri); @@ -585,7 +585,7 @@ function bluesky_send(array &$b) $parent = DI::atpProcessor()->getUriClass($b['thr-parent']); if (empty($root) || empty($parent)) { - DI::logger()->debug('No AT Protocol post', ['parent' => $b['parent'], 'thr-parent' => $b['thr-parent']]); + DI::logger()->debug('No Atmosphere post', ['parent' => $b['parent'], 'thr-parent' => $b['thr-parent']]); return; } @@ -1046,6 +1046,10 @@ function bluesky_fetch_notifications(int $uid) } foreach ($data->notifications as $notification) { + if (DI::contentItem()->isTooOld($notification->indexedAt)) { + continue; + } + $uri = DI::atpProcessor()->getUri($notification); if (Post::exists(['uri' => $uri, 'uid' => $uid]) || Post::exists(['extid' => $uri, 'uid' => $uid])) { DI::logger()->debug('Notification already processed', ['uid' => $uid, 'reason' => $notification->reason, 'uri' => $uri, 'indexedAt' => $notification->indexedAt]); diff --git a/bluesky/lang/C/messages.po b/bluesky/lang/C/messages.po index 0307bc6c..79785243 100644 --- a/bluesky/lang/C/messages.po +++ b/bluesky/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-18 13:20+0000\n" +"POT-Creation-Date: 2026-04-25 10:10+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,126 +17,126 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: bluesky.php:248 +#: bluesky.php:236 msgid "Save Settings" msgstr "" -#: bluesky.php:249 -msgid "Allow your users to use your hostname for their AT Protocol handles" +#: bluesky.php:237 +msgid "Allow your users to use your hostname for their Atmosphere handles" msgstr "" -#: bluesky.php:249 +#: bluesky.php:237 #, php-format msgid "Before enabling this option, you have to setup a wildcard domain configuration and you have to enable wildcard requests in your webserver configuration. On Apache this is done by adding \"ServerAlias *.%s\" to your HTTP configuration. You don't need to change the HTTPS configuration." msgstr "" -#: bluesky.php:281 +#: bluesky.php:269 #, php-format -msgid "Allow to use %s as your AT Protocol handle." +msgid "Allow to use %s as your Atmosphere handle." msgstr "" -#: bluesky.php:281 +#: bluesky.php:269 #, php-format -msgid "When enabled, you can use %s as your AT Protocol handle. After you enabled this option, please go to https://bsky.app/settings and select to change your handle. Select that you have got your own domain. Then enter %s and select \"No DNS Panel\". Then select \"Verify Text File\"." +msgid "When enabled, you can use %s as your Atmosphere handle. After you enabled this option, please go to https://bsky.app/settings and select to change your handle. Select that you have got your own domain. Then enter %s and select \"No DNS Panel\". Then select \"Verify Text File\"." msgstr "" -#: bluesky.php:298 -msgid "Enable AT Protocol Addon" +#: bluesky.php:284 +msgid "Enable Atmosphere Addon" msgstr "" -#: bluesky.php:299 -msgid "Post via AT Protocol by default" +#: bluesky.php:285 +msgid "Post to the Atmosphere by default" msgstr "" -#: bluesky.php:300 +#: bluesky.php:286 msgid "Import the remote timeline" msgstr "" -#: bluesky.php:301 +#: bluesky.php:287 msgid "Import the pinned feeds" msgstr "" -#: bluesky.php:301 -msgid "When activated, Posts will be imported from all the feeds that you pinned in AT Protocol." +#: bluesky.php:287 +msgid "When activated, Posts will be imported from all the feeds that you pinned in your Atmosphere client." msgstr "" -#: bluesky.php:302 +#: bluesky.php:288 msgid "Complete the threads" msgstr "" -#: bluesky.php:302 +#: bluesky.php:288 msgid "When activated, the system fetches additional replies for the posts in the timeline. This leads to more complete threads." msgstr "" -#: bluesky.php:304 +#: bluesky.php:290 msgid "Personal Data Server" msgstr "" -#: bluesky.php:304 +#: bluesky.php:290 msgid "The personal data server (PDS) is the system that hosts your profile." msgstr "" -#: bluesky.php:305 -msgid "AT Protocol handle" +#: bluesky.php:291 +msgid "Atmosphere handle" msgstr "" -#: bluesky.php:306 -msgid "AT Protocol DID" +#: bluesky.php:292 +msgid "Atmosphere DID" msgstr "" -#: bluesky.php:306 +#: bluesky.php:292 msgid "This is the unique identifier. It will be fetched automatically, when the handle is entered." msgstr "" -#: bluesky.php:307 -msgid "AT Protocol app password" +#: bluesky.php:293 +msgid "Atmosphere app password" msgstr "" -#: bluesky.php:307 -msgid "Please don't add your real password here, but instead create a specific app password in the settings of your AT Protocol system." +#: bluesky.php:293 +msgid "Please don't add your real password here, but instead create a specific app password in the settings of your Atmosphere client." msgstr "" -#: bluesky.php:308 +#: bluesky.php:294 msgid "Web front end" msgstr "" -#: bluesky.php:308 +#: bluesky.php:294 msgid "Choose your preferred external web front end for displaying posts and profiles." msgstr "" -#: bluesky.php:314 -msgid "AT Protocol (Bluesky, Eurosky, Blacksky, ...) Import/Export" +#: bluesky.php:300 +msgid "Atmosphere (Bluesky, Eurosky, Blacksky, ...) Import/Export" msgstr "" -#: bluesky.php:324 +#: bluesky.php:310 msgid "You are not authenticated. Please enter your handle and the app password." msgstr "" -#: bluesky.php:345 -msgid "You are authenticated to the AT Protocol PDS. For security reasons the password isn't stored." +#: bluesky.php:331 +msgid "You are authenticated to the Atmosphere PDS. For security reasons the password isn't stored." msgstr "" -#: bluesky.php:347 +#: bluesky.php:333 msgid "The communication with the personal data server service (PDS) is established." msgstr "" -#: bluesky.php:349 +#: bluesky.php:335 #, php-format msgid "Communication issues with the personal data server service (PDS): %s" msgstr "" -#: bluesky.php:351 +#: bluesky.php:337 msgid "The DID for the provided handle could not be detected. Please check if you entered the correct handle." msgstr "" -#: bluesky.php:353 +#: bluesky.php:339 msgid "The personal data server service (PDS) could not be detected." msgstr "" -#: bluesky.php:355 +#: bluesky.php:341 msgid "The authentication with the provided handle and password failed. Please check if you entered the correct password." msgstr "" -#: bluesky.php:425 -msgid "Post via the AT Protocol" +#: bluesky.php:411 +msgid "Post via the Atmosphere" msgstr ""