diff options
Diffstat (limited to 'send.rb')
-rw-r--r-- | send.rb | 79 |
1 files changed, 79 insertions, 0 deletions
@@ -0,0 +1,79 @@ +post '/' do # TODO + protected! + + recipients = public + recipients << params[:to] + + # content = [] + tag = [] + params[:content].lines.each do |line| + # line.chomp! + tags = line.split(/\s+/).grep(/^#\w+$/) + tags.each do |name| + tag_url = File.join(TAGS[:url], name.sub('#', '')) + tag << { + 'type' => 'Hashtag', + 'href' => tag_url, + 'name' => name + } + 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 + + attachment = [] + extensions = { + image: %w[jpeg png], + audio: %w[flac wav mp3 ogg], + video: %w[mp4 webm] + } + params[:media].each do |_media| + ext = File.extname(line).sub('.', '') + media_type = extensions.select { |_k, v| v.include? ext }.keys[0].to_s + '/' + ext + attachment << { + 'type' => 'Document', + 'mediaType' => media_type, + 'url' => line + } + end + + object = { + 'type' => 'Note', + 'attributedTo' => ACTOR, + 'inReplyTo' => params[:inReplyTo], + 'content' => "<p>\n#{content.join("\n<br>")}\n</p>", + 'attachment' => attachment, + 'tag' => tag, + 'to' => recipients + } + + 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' + next if 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 + # update_collection tag_path, activity['object']['id'] + end + redirect(params['anchor'] || '/inbox') +end |