From abb8f5837ee1fa72d13d255cf29f4ade35f53ece Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 23 Oct 2016 11:56:04 +0200 Subject: [PATCH] Fix public channel --- app/channels/public_channel.rb | 4 +- app/models/follow_suggestion.rb | 48 ++++++++++---------- app/models/media_attachment.rb | 38 ++++++++-------- app/services/block_domain_service.rb | 2 +- app/services/fetch_remote_account_service.rb | 2 +- 5 files changed, 49 insertions(+), 45 deletions(-) diff --git a/app/channels/public_channel.rb b/app/channels/public_channel.rb index 578cdc00..708eff05 100644 --- a/app/channels/public_channel.rb +++ b/app/channels/public_channel.rb @@ -1,7 +1,7 @@ # Be sure to restart your server when you modify this file. Action Cable runs in a loop that does not support auto reloading. class PublicChannel < ApplicationCable::Channel def subscribed - stream_from 'timeline:public', lambda do |encoded_message| + stream_from 'timeline:public', lambda { |encoded_message| message = ActiveSupport::JSON.decode(encoded_message) status = Status.find_by(id: message['id']) @@ -10,7 +10,7 @@ class PublicChannel < ApplicationCable::Channel message['message'] = FeedManager.instance.inline_render(current_user.account, status) transmit message - end + } end def unsubscribed diff --git a/app/models/follow_suggestion.rb b/app/models/follow_suggestion.rb index 22084612..cfb0887d 100644 --- a/app/models/follow_suggestion.rb +++ b/app/models/follow_suggestion.rb @@ -1,8 +1,9 @@ class FollowSuggestion - def self.get(for_account_id, limit = 10) - neo = Neography::Rest.new + class << self + def get(for_account_id, limit = 10) + neo = Neography::Rest.new - query = <(b)-[:follows]->(c) WHERE a <> c @@ -12,30 +13,30 @@ ORDER BY count(b) DESC, c.nodeRank DESC LIMIT {limit} END - results = neo.execute_query(query, id: for_account_id, limit: limit) + results = neo.execute_query(query, id: for_account_id, limit: limit) - if results.empty? || results['data'].empty? - results = fallback(for_account_id, limit) - elsif results['data'].size < limit - results['data'] = (results['data'] + fallback(for_account_id, limit - results['data'].size)['data']).uniq + if results.empty? || results['data'].empty? + results = fallback(for_account_id, limit) + elsif results['data'].size < limit + results['data'] = (results['data'] + fallback(for_account_id, limit - results['data'].size)['data']).uniq + end + + account_ids = results['data'].map(&:first) + blocked_ids = Block.where(account_id: for_account_id).pluck(:target_account_id) + accounts_map = Account.where(id: account_ids - blocked_ids).with_counters.map { |a| [a.id, a] }.to_h + + account_ids.map { |id| accounts_map[id] }.compact + rescue Neography::NeographyError, Excon::Error::Socket => e + Rails.logger.error e + return [] end - account_ids = results['data'].map(&:first) - blocked_ids = Block.where(account_id: for_account_id).pluck(:target_account_id) - accounts_map = Account.where(id: account_ids - blocked_ids).with_counters.map { |a| [a.id, a] }.to_h + private - account_ids.map { |id| accounts_map[id] }.compact - rescue Neography::NeographyError, Excon::Error::Socket => e - Rails.logger.error e - return [] - end + def fallback(for_account_id, limit) + neo = Neography::Rest.new - private - - def self.fallback(for_account_id, limit) - neo = Neography::Rest.new - - query = < b @@ -45,6 +46,7 @@ ORDER BY b.nodeRank DESC LIMIT {limit} END - neo.execute_query(query, id: for_account_id, limit: limit) + neo.execute_query(query, id: for_account_id, limit: limit) + end end end diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb index 008147a0..55eabc22 100644 --- a/app/models/media_attachment.rb +++ b/app/models/media_attachment.rb @@ -34,26 +34,28 @@ class MediaAttachment < ApplicationRecord image? ? 'image' : 'video' end - private + class << self + private - def self.file_styles(f) - if f.instance.image? - { - original: '100%', - small: '510x680>' - } - else - { - small: { - convert_options: { - output: { - vf: 'scale=\'min(510\, iw):min(680\, ih)\':force_original_aspect_ratio=decrease' - } - }, - format: 'png', - time: 1 + def file_styles(f) + if f.instance.image? + { + original: '100%', + small: '510x680>' } - } + else + { + small: { + convert_options: { + output: { + vf: 'scale=\'min(510\, iw):min(680\, ih)\':force_original_aspect_ratio=decrease' + } + }, + format: 'png', + time: 1 + } + } + end end end end diff --git a/app/services/block_domain_service.rb b/app/services/block_domain_service.rb index ac658a05..93987af2 100644 --- a/app/services/block_domain_service.rb +++ b/app/services/block_domain_service.rb @@ -1,6 +1,6 @@ class BlockDomainService < BaseService def call(domain) - block = DomainBlock.find_or_create_by!(domain: domain) + DomainBlock.find_or_create_by!(domain: domain) Account.where(domain: domain).find_each do |account| if account.subscribed? diff --git a/app/services/fetch_remote_account_service.rb b/app/services/fetch_remote_account_service.rb index 7977f5cb..7a65236b 100644 --- a/app/services/fetch_remote_account_service.rb +++ b/app/services/fetch_remote_account_service.rb @@ -19,7 +19,7 @@ class FetchRemoteAccountService < BaseService Rails.logger.debug "Going to webfinger #{username}@#{domain}" return FollowRemoteAccountService.new.call("#{username}@#{domain}") - rescue TypeError => e + rescue TypeError Rails.logger.debug "Unparseable URL given: #{url}" nil rescue Nokogiri::XML::XPath::SyntaxError