From fae7a40aebc4266260c8cb0dcac929ac03500590 Mon Sep 17 00:00:00 2001
From: aka <aka@social.sakamoto.gq>
Date: Sun, 13 May 2018 20:47:08 -0300
Subject: [PATCH] Adds an option to export follows

---
 src/components/user_settings/user_settings.js | 29 +++++++++++++++++++
 .../user_settings/user_settings.vue           |  7 +++++
 src/i18n/messages.js                          |  5 +++-
 3 files changed, 40 insertions(+), 1 deletion(-)

diff --git a/src/components/user_settings/user_settings.js b/src/components/user_settings/user_settings.js
index 25ee1f35..602052ca 100644
--- a/src/components/user_settings/user_settings.js
+++ b/src/components/user_settings/user_settings.js
@@ -8,6 +8,7 @@ const UserSettings = {
       followList: null,
       followImportError: false,
       followsImported: false,
+      enableFollowsExport: true,
       uploading: [ false, false, false, false ],
       previews: [ null, null, null ]
     }
@@ -137,6 +138,34 @@ const UserSettings = {
           this.uploading[3] = false
         })
     },
+    /* This function takes an Array of Users
+     * and outputs a file with all the addresses for the user to download
+     */
+    exportPeople(Users) {
+      // Get all the friends addresses
+      var UserAddresses = Users.map(function(user) {
+	// check is it's a local user
+	if(user && user.is_local) {
+	  // append the instance address
+	  user.screen_name += '@' + location.hostname;
+	}
+	return user.screen_name;
+      }).join('\n');
+      // Make the user download the file
+      var fileToDownload = document.createElement('a');
+      fileToDownload.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(UserAddresses));
+      fileToDownload.setAttribute('download', 'friends.csv');
+      fileToDownload.style.display = 'none';
+      document.body.appendChild(fileToDownload);
+      fileToDownload.click();
+      document.body.removeChild(fileToDownload);
+    },
+    exportFollows() {
+      this.enableFollowsExport = false;
+      this.$store.state.api.backendInteractor
+	.fetchFriends({id: this.$store.state.users.currentUser.id})
+	.then(this.exportPeople);
+    },
     followListChange () {
       // eslint-disable-next-line no-undef
       let formData = new FormData()
diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue
index ed1864cc..184d158d 100644
--- a/src/components/user_settings/user_settings.vue
+++ b/src/components/user_settings/user_settings.vue
@@ -66,6 +66,13 @@
           <p>{{$t('settings.follow_import_error')}}</p>
         </div>
       </div>
+      <div class="setting-item" v-if="enableFollowsExport">
+       <h3>{{$t('settings.follow_export')}}</h3>
+       <button class="btn btn-default" @click="exportFollows">{{$t('settings.follow_export_button')}}</button>
+     </div>
+     <div class="setting-item" v-else>
+       <h3>{{$t('settings.follow_export_processing')}}</h3>
+       </div>
     </div>
   </div>
 </template>
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index 168548cf..473fd9b1 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -288,7 +288,10 @@ const en = {
     follow_import: 'Follow import',
     import_followers_from_a_csv_file: 'Import follows from a csv file',
     follows_imported: 'Follows imported! Processing them will take a while.',
-    follow_import_error: 'Error importing followers'
+    follow_import_error: 'Error importing followers',
+    follow_export: 'Follow export',
+    follow_export_processing: 'Processing, you\'ll soon be aked to download your file',
+    follow_export_button: 'Export your follows to a csv file'
   },
   notifications: {
     notifications: 'Notifications',