diff options
-rw-r--r-- | client.rb | 33 | ||||
-rw-r--r-- | helpers.rb | 7 | ||||
-rw-r--r-- | server.rb | 10 |
3 files changed, 21 insertions, 29 deletions
@@ -55,13 +55,6 @@ post '/' do redirect(params['anchor'] || '/inbox') end -post '/share' do - protected! - selection(params).each { |f| FileUtils.mv f, f.sub(%r{/inbox/}, '/shared/') } - outbox 'Announce', params['id'], public - redirect(params['anchor'] || '/inbox') -end - post '/delete' do protected! collection = Kernel.const_get(params['dir'].upcase) @@ -83,14 +76,21 @@ end post '/unfollow' do protected! actor, mention = parse_follow params['follow'] - outbox 'Undo', JSON.parse(File.read(following_path)), [actor] - p actor - following_path = File.join(FOLLOWING_DIR, "#{mention}.json") - if File.exist?(following_path) - outbox 'Undo', JSON.parse(File.read(following_path)), [actor] - FileUtils.rm_f following_path - redirect(params['anchor'] || '/inbox') + Dir[File.join(OUTBOX_DIR, 'follow', '*.json')].each do |f| + activity = JSON.parse(File.read(f)) + if activity['object'] == actor + outbox 'Undo', activity, [actor] + update_collection FOLLOWING, actor, true + end end + redirect(params['anchor'] || '/inbox') +end + +post '/share' do + protected! + selection(params).each { |f| FileUtils.mv f, f.sub(%r{/inbox/}, '/shared/') } + outbox 'Announce', params['id'], public + redirect(params['anchor'] || '/inbox') end post '/login' do @@ -107,10 +107,7 @@ end get path, provides: 'html' do protected! @dir = path.sub('/', '') - # p(Kernel.const_get(@dir.upcase)) - # p(File.read(Kernel.const_get(@dir.upcase))) collection = JSON.parse(File.read(Kernel.const_get(@dir.upcase)))['orderedItems'].uniq - # collection = ordered_collection(File.join(SOCIAL_DIR, path, 'note'))['orderedItems'] @threads = [] collection.each do |object| object['indent'] = 0 @@ -123,8 +120,6 @@ end object['indent'] = o['indent'] + 2 o['replies'] << object - # else - # p o end end end @@ -83,13 +83,12 @@ helpers do json = f.read collection = JSON.parse(json) objects.each do |object| + id = object['id'] || object if delete - collection['orderedItems'].delete_if { |o| o['id'] == object['id'] } - modified = true + collection['orderedItems'].delete_if { |o| o['id'] == id or o == id } else ids = collection['orderedItems'].collect { |i| i['id'] } - collection['orderedItems'] << object unless ids.include?(object['id']) - modified = true + collection['orderedItems'] << object unless ids.include?(id) or collection['orderedItems'].include?(id) end end collection['totalItems'] = collection['orderedItems'].size @@ -38,9 +38,9 @@ helpers do def create return unless @object - return if File.readlines(VISITED).collect { |l| l.chomp }.include? @object['id'] + # return if File.readlines(VISITED).collect { |l| l.chomp }.include? @object['id'] - File.open(VISITED, 'a+') { |f| f.puts @object['id'] } + # File.open(VISITED, 'a+') { |f| f.puts @object['id'] } update_collection INBOX, @object return unless @object['inReplyTo'] @@ -58,14 +58,12 @@ helpers do end def accept - return unless @object['type'] == 'Follow' - + halt 501 unless @object['type'] == 'Follow' update_collection FOLLOWING, @object['object'] end def undo - return unless @object['type'] == 'Follow' - + halt 501 unless @object['type'] == 'Follow' update_collection FOLLOWERS, @object['actor'], true end |