summaryrefslogtreecommitdiff
path: root/client.rb
diff options
context:
space:
mode:
Diffstat (limited to 'client.rb')
-rw-r--r--client.rb79
1 files changed, 77 insertions, 2 deletions
diff --git a/client.rb b/client.rb
index 759fdec..5b2aced 100644
--- a/client.rb
+++ b/client.rb
@@ -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