Browse Source

Optimization od naddr fetch

imwald
Nuša Pukšič 7 months ago
parent
commit
302cab24c3
  1. 5
      src/Controller/ArticleController.php
  2. 57
      src/Service/NostrClient.php

5
src/Controller/ArticleController.php

@ -47,11 +47,6 @@ class ArticleController extends AbstractController @@ -47,11 +47,6 @@ class ArticleController extends AbstractController
throw new \Exception('Not a long form article');
}
if (empty($relays)) {
// get author npub relays from their config
$relays = $nostrClient->getNpubRelays($author);
}
$nostrClient->getLongFormFromNaddr($slug, $relays, $author, $kind);
if ($slug) {
return $this->redirectToRoute('article-slug', ['slug' => $slug]);

57
src/Service/NostrClient.php

@ -218,52 +218,15 @@ class NostrClient @@ -218,52 +218,15 @@ class NostrClient
*/
public function getLongFormFromNaddr($slug, $relayList, $author, $kind): void
{
if (!empty($relayList)) {
// Filter out relays that exist in the REPUTABLE_RELAYS list
$relayList = array_filter($relayList, function ($relay) {
// in array REPUTABLE_RELAYS
return str_starts_with($relay, 'wss:') && !str_contains($relay, 'localhost');
});
$relaySet = $this->createRelaySet($relayList);
if (empty($relayList)) {
$topAuthorRelays = $this->getTopReputableRelaysForAuthor($author);
$authorRelaySet = $this->createRelaySet($topAuthorRelays);
} else {
$authorRelaySet = $this->createRelaySet($relayList);
}
$hasEvents = false;
try {
// Create request using the helper method for forest relay set
$request = $this->createNostrRequest(
kinds: [$kind],
filters: [
'authors' => [$author],
'tag' => ['#d', [$slug]]
],
relaySet: $relaySet ?? $this->defaultRelaySet
);
// Process the response
$events = $this->processResponse($request->send(), function($event) {
return $event;
});
if (!empty($events)) {
$this->saveLongFormContent(array_map(function($event) {
$wrapper = new \stdClass();
$wrapper->type = 'EVENT';
$wrapper->event = $event;
return $wrapper;
}, $events));
$hasEvents = true;
}
// If no events found in theforest, try author's reputable relays
if (!$hasEvents) {
$topAuthorRelays = $this->getTopReputableRelaysForAuthor($author);
$authorRelaySet = $this->createRelaySet($topAuthorRelays);
$this->logger->info('No results, trying author relays', [
'relays' => $topAuthorRelays
]);
// Create request using the helper method for author relay set
$request = $this->createNostrRequest(
kinds: [$kind],
filters: [
@ -279,17 +242,15 @@ class NostrClient @@ -279,17 +242,15 @@ class NostrClient
});
if (!empty($events)) {
$this->saveLongFormContent(array_map(function($event) {
// Save only the first event (most recent)
$event = $events[0];
$wrapper = new \stdClass();
$wrapper->type = 'EVENT';
$wrapper->event = $event;
return $wrapper;
}, $events));
}
$this->saveLongFormContent([$wrapper]);
}
} catch (\Exception $e) {
// If any error occurs, fall back to default relay set
$this->logger->error('Error querying relays, falling back to defaults', [
$this->logger->error('Error querying relays', [
'error' => $e->getMessage()
]);
throw new \Exception('Error querying relays', 0, $e);

Loading…
Cancel
Save