Compare commits

...
Sign in to create a new pull request.

4 commits

Author SHA1 Message Date
6eb9b55af0 Merge pull request 'Issue 14439: Check for the exipration days / use "Atmosphere"' (#1653) from heluecht/friendica-addons:issue-14439 into develop
Reviewed-on: friendica/friendica-addons#1653
Reviewed-by: Hypolite Petovan <hypolite@mrpetovan.com>
2026-04-26 23:06:40 +02:00
f00c96b734 Issue 14439: Check for the exipration days / use "Atmosphere" 2026-04-26 23:06:40 +02:00
1d9da6d09e Merge pull request '[CI] Bump PHP versions' (#1649) from nupplaPhil/friendica-addons:ci/bump_versions into develop
Reviewed-on: friendica/friendica-addons#1649
Reviewed-by: Hypolite Petovan <hypolite@mrpetovan.com>
2026-04-20 20:26:16 +02:00
cee8369194
[CI] Bump PHP versions
- new PHP versions
- Include missing extensions "gmp" and "imagick"
2026-04-18 21:02:21 +02:00
6 changed files with 89 additions and 68 deletions

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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

View file

@ -1,7 +1,7 @@
<?php
/**
* Name: AT Protocol Connector (Bluesky, Eurosky, Blacksky, ...)
* Description: Post via AT Protocol, import timelines and feeds
* Name: AT Protocol Atmosphere Connector (Bluesky, Eurosky, Blacksky, ...)
* Description: Post to the Atmosphere via the AT Protocol, import timelines and feeds
* Version: 1.1
* Author: Michael Vogel <https://pirati.ca/profile/heluecht>
*
@ -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]);

View file

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 ""