diff options
author | pdp8 <pdp8@pdp8.info> | 2023-07-19 14:45:07 +0200 |
---|---|---|
committer | pdp8 <pdp8@pdp8.info> | 2023-07-19 14:45:07 +0200 |
commit | edf5c00313b42308271fdad84a003b78a9483fc8 (patch) | |
tree | f4ee567fdecbe293c157cd7601d060aff0994833 /client.rb | |
parent | bd7e17e927824461c1af167fae292906b6212894 (diff) |
tags and mentions
Diffstat (limited to 'client.rb')
-rw-r--r-- | client.rb | 47 |
1 files changed, 40 insertions, 7 deletions
@@ -29,13 +29,23 @@ post '/' do # TODO else tags = line.split(/\s+/).grep(/^#\w+$/) tags.each do |name| - href = File.join(SOCIAL_URL, 'tags', name.sub('#', '')) + # href = File.join(TAGS_URL, name.sub('#', '')) + tag_url = File.join(TAGS_URL, name.sub('#', '')) tag << { 'type' => 'Hashtag', - 'href' => href, + 'href' => tag_url, 'name' => name } - line.gsub!(name, "<a href='#{href}' class='mention hashtag' rel='tag'>#{name}</a>") + end + + mentions = line.split(/\s+/).grep(/^@\w+@\S+$/) + mentions.each do |mention| + actor = actor(mention) + tag << { + 'type' => 'Mention', + 'href' => actor, + 'name' => mention + } end content << line end @@ -51,7 +61,25 @@ post '/' do # TODO 'to' => recipients } - outbox 'Create', object, recipients, true + activity = outbox 'Create', object, recipients, true + activity['object']['tag'].each do |tag| + next unless tag['type'] == 'Hashtag' + + tag_path = File.join(TAGS_DIR, tag['name'].sub('#', '')) + '.json' + unless File.exist? tag_path + File.open(tag_path, 'w+') do |f| + tag_collection = { + '@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => tag['href'], + 'type' => 'OrderedCollection', + 'totalItems' => 0, + 'orderedItems' => [] + } + f.puts tag_collection.to_json + end + end + update_collection tag_path, activity['object']['id'] + end redirect(params['anchor'] || '/inbox') end @@ -88,8 +116,13 @@ end post '/share' do # TODO protected! - selection(params).each { |f| FileUtils.mv f, f.sub(%r{/inbox/}, '/shared/') } - outbox 'Announce', params['id'], public + inbox = JSON.parse File.read(INBOX) + object = inbox['orderedItems'].find { |i| i['id'] == params['id'] } + update_collection SHARED, object + update_collection INBOX, object, true + recipients = public + recipients << object['attributedTo'] + outbox 'Announce', params['id'], recipients redirect(params['anchor'] || '/inbox') end @@ -148,7 +181,7 @@ helpers do mention = follow when /^http/ actor = follow - mention = mention actor + mention = mention(actor) when /^@*\w+@\w+/ mention = follow actor = actor(follow) |