diff --git a/app/controllers/remote_follow_controller.rb b/app/controllers/remote_follow_controller.rb index 17bc1940a..dc15e63bf 100644 --- a/app/controllers/remote_follow_controller.rb +++ b/app/controllers/remote_follow_controller.rb @@ -9,18 +9,10 @@ class RemoteFollowController < ApplicationController before_action :set_body_classes def new - @remote_follow = RemoteFollow.new(session_params) - end + raise Mastodon::NotPermittedError unless user_signed_in? - def create - @remote_follow = RemoteFollow.new(resource_params) - - if @remote_follow.valid? - session[:remote_follow] = @remote_follow.acct - redirect_to @remote_follow.subscribe_address_for(@account) - else - render :new - end + FollowService.new.call(current_account, @account) + redirect_to TagManager.instance.url_for(@account) end private diff --git a/app/controllers/remote_interaction_controller.rb b/app/controllers/remote_interaction_controller.rb index d7197d434..b1b304055 100644 --- a/app/controllers/remote_interaction_controller.rb +++ b/app/controllers/remote_interaction_controller.rb @@ -5,24 +5,34 @@ class RemoteInteractionController < ApplicationController layout 'modal' - before_action :set_interaction_type - before_action :set_status before_action :set_body_classes before_action :set_pack + before_action :set_status def new - @remote_follow = RemoteFollow.new(session_params) - end + raise Mastodon::NotPermittedError unless user_signed_in? - def create - @remote_follow = RemoteFollow.new(resource_params) - - if @remote_follow.valid? - session[:remote_follow] = @remote_follow.acct - redirect_to @remote_follow.interact_address_for(@status) - else - render :new + case params[:type] + when 'reblog' + if current_account.statuses.where(reblog: @status).exists? + status = current_account.statuses.find_by(reblog: @status) + RemoveStatusService.new.call(status) + else + ReblogService.new.call(current_account, @status) + end + when 'favourite' + if Favourite.where(account: current_account, status: @status).exists? + UnfavouriteService.new.call(current_account, @status) + else + FavouriteService.new.call(current_account, @status) + end + when 'follow' + FollowService.new.call(current_account, @status.account) + when 'unfollow' + UnfollowService.new.call(current_account, @status.account) end + + redirect_to TagManager.instance.url_for(@status) end private @@ -51,8 +61,4 @@ class RemoteInteractionController < ApplicationController def set_pack use_pack 'modal' end - - def set_interaction_type - @interaction_type = %w(reply reblog favourite).include?(params[:type]) ? params[:type] : 'reply' - end end diff --git a/app/javascript/flavours/glitch/styles/components/status.scss b/app/javascript/flavours/glitch/styles/components/status.scss index 3428dabf6..fe75919bf 100644 --- a/app/javascript/flavours/glitch/styles/components/status.scss +++ b/app/javascript/flavours/glitch/styles/components/status.scss @@ -605,6 +605,15 @@ .detailed-status__link { color: inherit; text-decoration: none; + +} + +.detailed-status__star-icon { + color: $gold-star; +} + +.detailed-status__boost-icon { + color: $red-bookmark; } .detailed-status__favorites, diff --git a/app/views/stream_entries/_detailed_status.html.haml b/app/views/stream_entries/_detailed_status.html.haml index b7015e356..2cafdf4b4 100644 --- a/app/views/stream_entries/_detailed_status.html.haml +++ b/app/views/stream_entries/_detailed_status.html.haml @@ -67,13 +67,13 @@ = fa_icon('lock') - elsif user_signed_in? && !@account.user_hides_stats? · - = link_to remote_interaction_path(status, type: :reblog), class: 'modal-button detailed-status__link', title: number_to_human(status.reblogs_count, strip_insignificant_zeros: true) do + = link_to remote_interaction_path(status, type: :reblog), class: "detailed-status__link #{user_signed_in? && @account.statuses.where(reblog: status).exists? ? 'detailed-status__boost-icon' : nil}", title: number_to_human(status.reblogs_count, strip_insignificant_zeros: true) do = fa_icon('repeat') = " " - if user_signed_in? && !@account.user_hides_stats? · - = link_to remote_interaction_path(status, type: :favourite), class: 'modal-button detailed-status__link', title: number_to_human(status.favourites_count, strip_insignificant_zeros: true) do + = link_to remote_interaction_path(status, type: :favourite), class: "detailed-status__link #{user_signed_in? && Favourite.where(account: @account, status: status).exists? ? 'detailed-status__star-icon' : nil}", title: number_to_human(status.favourites_count, strip_insignificant_zeros: true) do = fa_icon('star') = " " diff --git a/app/views/stream_entries/_simple_status.html.haml b/app/views/stream_entries/_simple_status.html.haml index f18844d02..b8d1cf69b 100644 --- a/app/views/stream_entries/_simple_status.html.haml +++ b/app/views/stream_entries/_simple_status.html.haml @@ -53,12 +53,12 @@ - else = fa_icon 'reply-all fw' .status__action-bar__counter__label= obscured_counter status.replies_count - = link_to remote_interaction_path(status, type: :reblog), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do + = link_to remote_interaction_path(status, type: :reblog), class: 'status__action-bar-button icon-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do - if status.public_visibility? || status.unlisted_visibility? = fa_icon 'repeat fw' - elsif status.private_visibility? = fa_icon 'lock fw' - else = fa_icon 'envelope fw' - = link_to remote_interaction_path(status, type: :favourite), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do + = link_to remote_interaction_path(status, type: :favourite), class: 'status__action-bar-button icon-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do = fa_icon 'star fw'