diff options
Diffstat (limited to 'client.rb')
-rw-r--r-- | client.rb | 79 |
1 files changed, 77 insertions, 2 deletions
@@ -14,7 +14,6 @@ post "/outbox" do recipients.delete ACTOR recipients.uniq! - p params create = { "@context" => "https://www.w3.org/ns/activitystreams", "id" => File.join(SOCIAL_URL, outbox_path), @@ -44,7 +43,7 @@ post "/outbox" do #create["object"]["to"] += recipients #create["to"] += recipients #p params["to"] - p create + #p create File.open(outbox_path, "w+") { |f| f.puts create.to_json } File.open(object_path, "w+") { |f| f.puts create["object"].to_json } @@ -131,4 +130,80 @@ helpers do redirect("/login.html") unless session['client'] end + def items + nr = 0 + files = Dir[File.join(@dir, '*.json')] + Dir['public/objects/*.json'] + @items = files.sort.collect do |file| + item = JSON.parse(File.read(file)) + mention = mention(item['attributedTo']) + following_path = File.join('public', 'following', mention + '.json') + File.exists?(following_path) ? follow = 'unfollow' : follow = 'follow' + nr += 1 + { :id => item['id'], + :nr => nr, + :parent => item['inReplyTo'], + :file => file, + :actor_url => item['attributedTo'], + :mention => mention, + :follow => follow, + :content => item['content'], + :attachment => item['attachment'], + :indent => 2, + :replies => [] + } + end.compact + @items.last[:nr] = @items.last[:nr] - 2 unless @items.empty? + end + + def threads + items + @threads = [] + @items.each do |i| + if i[:parent].nil? or @items.select{|it| it[:id] == i[:parent] }.empty? + @threads << i + else + @items.select{|it| it[:id] == i[:parent] }.each do |it| + i[:indent] = it[:indent] + 2 + it[:replies] << i + end + end + end + end + + def html item + @item = item + erb :item + end + + def people + File.read('cache/people.tsv').split("\n").collect {|l| l.chomp.split("\t")} + end + + def mention actor + person = people.select{|p| p[1] == actor} + if person.empty? + mention = "#{fetch(actor)["preferredUsername"]}@#{URI(actor).host}" + File.open('cache/people.tsv','a'){|f| f.puts "#{mention}\t#{actor}"} + mention + else + person[0][0] + end + end + + def actor mention + mention = mention.sub(/^@/, '').chomp + actors = people.select{|p| p[0] == mention} + if actors.empty? + user, server = mention.split("@") + actor = fetch("https://#{server}/.well-known/webfinger?resource=acct:#{mention}", + "application/jrd+json")["links"].select { |l| + l["rel"] == "self" + }[0]["href"] + File.open('cache/people.tsv','a'){|f| f.puts "#{mention}\t#{actor}"} + actor + else + actors[0][1] + end + end + end |