diff --git a/app/services/nostr_manager/publish_event.rb b/app/services/nostr_manager/publish_event.rb index 0ad4c1e..fb6b9a5 100644 --- a/app/services/nostr_manager/publish_event.rb +++ b/app/services/nostr_manager/publish_event.rb @@ -1,50 +1,50 @@ module NostrManager class PublishEvent < NostrManagerService def initialize(event:, relay_url:) - relay_name = relay_url.gsub(/^ws(s):\/\//, "") + relay_name = URI.parse(relay_url).host @relay = Nostr::Relay.new(url: relay_url, name: relay_name) - @event = case event.class - when Nostr::Event - event - when Hash - Nostr::Event.new(**event.symbolize_keys) - # else - # TODO - # raise NotImplementedError - end + + if event.is_a?(Nostr::Event) + @event = event + else + @event = Nostr::Event.new(**event.symbolize_keys) + end + @client = Nostr::Client.new end def call client, relay, event = @client, @relay, @event + log_prefix = "[nostr][#{relay.name}]" - client.on :connect do - puts "Connected to #{relay.url}" - puts "Publishing #{event.id}..." - client.publish event - end - - client.on :error do |e| - # TODO log relay URL/name - puts "Error: #{e}" - puts "Closing thread..." - Thread.exit - end - - client.on :message do |m| - puts "Message: #{m}" - msg = JSON.parse(m) rescue [] - if msg[0] == "OK" && msg[1] == event.id - puts "Event published. Closing thread..." - else - # TODO log relay URL/name - puts "Unexpected message from relay. Closing thread..." + thread = Thread.new do + client.on :connect do + puts "#{log_prefix} Publishing #{event.id}..." + client.publish event end - Thread.exit + + client.on :error do |e| + puts "#{log_prefix} Error: #{e}" + puts "#{log_prefix} Closing thread..." + thread.exit + end + + client.on :message do |m| + puts "#{log_prefix} Message: #{m}" + msg = JSON.parse(m) rescue [] + if msg[0] == "OK" && msg[1] == event.id + puts "#{log_prefix} Event published. Closing thread..." + else + puts "#{log_prefix} Unexpected message from relay. Closing thread..." + end + thread.exit + end + + puts "#{log_prefix} Connecting to #{relay.url}..." + client.connect relay end - puts "Connecting to #{relay.url}..." - client.connect relay + thread.join end end end