diff options
author | 2025-01-25 18:46:12 +0100 | |
---|---|---|
committer | 2025-01-25 18:46:12 +0100 | |
commit | 8b1ba003a8e46bda757e3fad8971d182d5dcca79 (patch) | |
tree | e8ab330ae745831abc829a15a4763a2bdc585650 | |
parent | 230edf602e47754b35f4212336c354fdd032359c (diff) | |
download | rss-bridge-8b1ba003a8e46bda757e3fad8971d182d5dcca79.tar.gz rss-bridge-8b1ba003a8e46bda757e3fad8971d182d5dcca79.tar.zst rss-bridge-8b1ba003a8e46bda757e3fad8971d182d5dcca79.zip |
Add support for custom feeds in posts (#4413)
-rw-r--r-- | bridges/BlueskyBridge.php | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/bridges/BlueskyBridge.php b/bridges/BlueskyBridge.php index 89e5f3bc..67bb5af9 100644 --- a/bridges/BlueskyBridge.php +++ b/bridges/BlueskyBridge.php @@ -255,6 +255,10 @@ class BlueskyBridge extends BridgeAbstract $description .= '<a href="' . $uri_reconstructed . '">Quoted post detached.</a>'; } elseif (isset($quotedRecord['blocked']) && $quotedRecord['blocked']) { //blocked by quote author $description .= 'Author of quoted post has blocked OP.'; + } elseif (($quotedRecord['$type'] ?? '') === 'app.bsky.feed.defs#generatorView') { + $description .= '</p>'; + $description .= $this->getGeneratorViewDescription($quotedRecord); + $description .= '<p>'; } else { $quotedAuthorDid = $quotedRecord['author']['did']; $quotedDisplayName = $quotedRecord['author']['displayName'] ?? ''; @@ -399,6 +403,10 @@ class BlueskyBridge extends BridgeAbstract $description .= '<a href="' . $uri_reconstructed . '">Quoted post detached.</a>'; } elseif (isset($replyQuotedRecord['blocked']) && $replyQuotedRecord['blocked']) { //blocked by quote author $description .= 'Author of quoted post has blocked OP.'; + } elseif (($replyQuotedRecord['$type'] ?? '') === 'app.bsky.feed.defs#generatorView') { + $description .= '</p>'; + $description .= $this->getGeneratorViewDescription($replyQuotedRecord); + $description .= '<p>'; } else { $quotedAuthorDid = $replyQuotedRecord['author']['did']; $quotedDisplayName = $replyQuotedRecord['author']['displayName'] ?? ''; @@ -584,4 +592,29 @@ class BlueskyBridge extends BridgeAbstract $response = json_decode(getContents($uri), true); return $response; } + + private function getGeneratorViewDescription(array $record): string + { + $avatar = e($record['avatar']); + $displayName = e($record['displayName']); + $displayHandle = e($record['creator']['handle']); + $likeCount = e($record['likeCount']); + preg_match('/\/([^\/]+)$/', $record['uri'], $matches); + $uri = e('https://bsky.app/profile/' . $record['creator']['did'] . '/feed/' . $matches[1]); + + return <<<END +<a href="{$uri}" style="color: inherit;"> + <div style="border: 1px solid #333; padding: 10px;"> + <div style="display: flex; margin-bottom: 10px;"> + <img src="{$avatar}" height="50" width="50" style="margin-right: 10px;"> + <div style="display: flex; flex-direction: column; justify-content: center;"> + <h3>{$displayName}</h3> + <span>Feed by @{$displayHandle}</span> + </div> + </div> + <span>Liked by {$likeCount} users</span> + </div> +</a> +END; + } } |