]> cat aescling's git repositories - mastodon.git/commitdiff
Allow import/export of mutes list (#1541)
authorMatt Jankowski <mjankowski@thoughtbot.com>
Wed, 12 Apr 2017 16:20:44 +0000 (12:20 -0400)
committerEugen <eugen@zeonfederated.com>
Wed, 12 Apr 2017 16:20:44 +0000 (18:20 +0200)
* Allow export of mutes list

* Allow importing of mutes list

* Refactor to use Settings::Exports::BaseController and DRY up exports code

13 files changed:
app/controllers/settings/exports/base_controller.rb [new file with mode: 0644]
app/controllers/settings/exports/blocked_accounts_controller.rb
app/controllers/settings/exports/following_accounts_controller.rb
app/controllers/settings/exports/muted_accounts_controller.rb [new file with mode: 0644]
app/controllers/settings/exports_controller.rb
app/models/import.rb
app/views/settings/exports/show.html.haml
app/workers/import_worker.rb
config/locales/en.yml
config/routes.rb
spec/controllers/settings/exports/blocked_accounts_controller_spec.rb
spec/controllers/settings/exports/following_accounts_controller_spec.rb
spec/controllers/settings/exports/muted_accounts_controller_spec.rb [new file with mode: 0644]

diff --git a/app/controllers/settings/exports/base_controller.rb b/app/controllers/settings/exports/base_controller.rb
new file mode 100644 (file)
index 0000000..0b79095
--- /dev/null
@@ -0,0 +1,23 @@
+# frozen_string_literal: true
+
+module Settings
+  module Exports
+    class BaseController < ApplicationController
+      before_action :authenticate_user!
+
+      def index
+        export_data = Export.new(export_accounts).to_csv
+
+        respond_to do |format|
+          format.csv { send_data export_data, filename: export_filename }
+        end
+      end
+
+      private
+
+      def export_filename
+        "#{controller_name}.csv"
+      end
+    end
+  end
+end
index 0bf8848b49c6a0bdcaad5d57d68d818f7b912fc5..9c4bcaa5320f3ed4892ce68bf0f96d6c1abb4d7f 100644 (file)
@@ -2,15 +2,11 @@
 
 module Settings
   module Exports
-    class BlockedAccountsController < ApplicationController
-      before_action :authenticate_user!
+    class BlockedAccountsController < BaseController
+      private
 
-      def index
-        export_data = Export.new(current_account.blocking).to_csv
-
-        respond_to do |format|
-          format.csv { send_data export_data, filename: 'blocking.csv' }
-        end
+      def export_accounts
+        current_account.blocking
       end
     end
   end
index a7f4344ca78b0e841204f4d6e7532097da92aaee..8d06bcc954932027ad7c54d028f3192de264b503 100644 (file)
@@ -2,15 +2,11 @@
 
 module Settings
   module Exports
-    class FollowingAccountsController < ApplicationController
-      before_action :authenticate_user!
+    class FollowingAccountsController < BaseController
+      private
 
-      def index
-        export_data = Export.new(current_account.following).to_csv
-
-        respond_to do |format|
-          format.csv { send_data export_data, filename: 'following.csv' }
-        end
+      def export_accounts
+        current_account.following
       end
     end
   end
diff --git a/app/controllers/settings/exports/muted_accounts_controller.rb b/app/controllers/settings/exports/muted_accounts_controller.rb
new file mode 100644 (file)
index 0000000..a77a9af
--- /dev/null
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+module Settings
+  module Exports
+    class MutedAccountsController < BaseController
+      private
+
+      def export_accounts
+        current_account.muting
+      end
+    end
+  end
+end
index e060f03d3c698455612b72d58cfdf4095bafb21a..77dea32316452c7de0634610d922f3bdff8e4295 100644 (file)
@@ -9,5 +9,6 @@ class Settings::ExportsController < ApplicationController
     @total_storage = current_account.media_attachments.sum(:file_file_size)
     @total_follows = current_account.following.count
     @total_blocks  = current_account.blocking.count
+    @total_mutes = current_account.muting.count
   end
 end
index 5384986d8119925930fa938ef5c9aea7762b2d39..3013bc50eb47c9a6b06efad2bb40dc3cabcf943b 100644 (file)
@@ -3,7 +3,7 @@
 class Import < ApplicationRecord
   self.inheritance_column = false
 
-  enum type: [:following, :blocking]
+  enum type: [:following, :blocking, :muting]
 
   belongs_to :account
 
index 432a61b4a4349204a5a27ba063c20f798d83fcc5..51be40fb623e978b93c4b197edb5fe758fb4e78a 100644 (file)
@@ -15,3 +15,7 @@
       %th= t('exports.blocks')
       %td= @total_blocks
       %td= table_link_to 'download', t('exports.csv'), settings_exports_blocks_path(format: :csv)
+    %tr
+      %th= t('exports.mutes')
+      %td= @total_mutes
+      %td= table_link_to 'download', t('exports.csv'), settings_exports_mutes_path(format: :csv)
index 60529c0e1c6a5ceaa28268a84f1086299ce61f8a..bb21468e7b99193151c447a414af5a4f3739b277 100644 (file)
@@ -16,6 +16,8 @@ class ImportWorker
       process_blocks
     when 'following'
       process_follows
+    when 'muting'
+      process_mutes
     end
 
     @import.destroy
@@ -35,6 +37,18 @@ class ImportWorker
     CSV.new(import_contents).reject(&:blank?)
   end
 
+  def process_mutes
+    import_rows.each do |row|
+      begin
+        target_account = FollowRemoteAccountService.new.call(row.first)
+        next if target_account.nil?
+        MuteService.new.call(from_account, target_account)
+      rescue Goldfinger::Error, HTTP::Error, OpenSSL::SSL::SSLError
+        next
+      end
+    end
+  end
+
   def process_blocks
     import_rows.each do |row|
       begin
index 802db148c67acf8b6172b12495d01807577802bc..6e32d2c3856d819c702567df03ad6289b44d01e6 100644 (file)
@@ -76,6 +76,7 @@ en:
       x_seconds: "%{count}s"
   exports:
     blocks: You block
+    mutes: You mute
     csv: CSV
     follows: You follow
     storage: Media storage
@@ -92,6 +93,7 @@ en:
     types:
       blocking: Blocking list
       following: Following list
+      muting: Muting list
     upload: Upload
   landing_strip_html: <strong>%{name}</strong> is a user on <strong>%{domain}</strong>. You can follow them or interact with them if you have an account anywhere in the fediverse. If you don't, you can <a href="%{sign_up_path}">sign up here</a>.
   media_attachments:
index 99ce1754e9139daf28ad3646f2fa0c8517cfc7e4..78bf7870cdb5d59349e98c5408eae187aa5ea129 100644 (file)
@@ -57,6 +57,7 @@ Rails.application.routes.draw do
     namespace :exports, constraints: { format: :csv } do
       resources :follows, only: :index, controller: :following_accounts
       resources :blocks, only: :index, controller: :blocked_accounts
+      resources :mutes, only: :index, controller: :muted_accounts
     end
 
     resource :two_factor_auth, only: [:show, :new, :create] do
index 574d4d875861d4ca19e1e815a2dacadb934e529f..c815bdfec1dadf46aa8091644f73ee29910b94ce 100644 (file)
@@ -11,7 +11,7 @@ describe Settings::Exports::BlockedAccountsController do
 
       expect(response).to have_http_status(:success)
       expect(response.content_type).to eq 'text/csv'
-      expect(response.headers['Content-Disposition']).to eq 'attachment; filename="blocking.csv"'
+      expect(response.headers['Content-Disposition']).to eq 'attachment; filename="blocked_accounts.csv"'
     end
   end
 end
index bf7680523247a9af9062fe2679820490cc9af503..a7029709cf59c31d8477f33b4548866a8316f69e 100644 (file)
@@ -11,7 +11,7 @@ describe Settings::Exports::FollowingAccountsController do
 
       expect(response).to have_http_status(:success)
       expect(response.content_type).to eq 'text/csv'
-      expect(response.headers['Content-Disposition']).to eq 'attachment; filename="following.csv"'
+      expect(response.headers['Content-Disposition']).to eq 'attachment; filename="following_accounts.csv"'
     end
   end
 end
diff --git a/spec/controllers/settings/exports/muted_accounts_controller_spec.rb b/spec/controllers/settings/exports/muted_accounts_controller_spec.rb
new file mode 100644 (file)
index 0000000..bb52b6f
--- /dev/null
@@ -0,0 +1,17 @@
+require 'rails_helper'
+
+describe Settings::Exports::MutedAccountsController do
+  before do
+    sign_in Fabricate(:user), scope: :user
+  end
+
+  describe 'GET #index' do
+    it 'returns a csv of the muting accounts' do
+      get :index, format: :csv
+
+      expect(response).to have_http_status(:success)
+      expect(response.content_type).to eq 'text/csv'
+      expect(response.headers['Content-Disposition']).to eq 'attachment; filename="muted_accounts.csv"'
+    end
+  end
+end