From f91e4a5801b99084894c4921746f9c47566f30dd Mon Sep 17 00:00:00 2001
From: Edijs <iamedijs@hotmail.com>
Date: Mon, 4 Mar 2019 21:29:56 -0800
Subject: Load post status content type from instance config

---
 src/components/settings/settings.vue | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

(limited to 'src/components/settings/settings.vue')

diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 5041b3a3..c0cfe1ab 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -105,17 +105,9 @@
                 {{$t('settings.post_status_content_type')}}
                 <label for="postContentType" class="select">
                   <select id="postContentType" v-model="postContentTypeLocal">
-                    <option value="text/plain">
-                      {{$t('settings.status_content_type_plain')}}
-                      {{postContentTypeDefault == 'text/plain' ? $t('settings.instance_default_simple') : ''}}
-                    </option>
-                    <option value="text/html">
-                      HTML
-                      {{postContentTypeDefault == 'text/html' ? $t('settings.instance_default_simple') : ''}}
-                    </option>
-                    <option value="text/markdown">
-                      Markdown
-                      {{postContentTypeDefault == 'text/markdown' ? $t('settings.instance_default_simple') : ''}}
+                    <option v-for="postFormat in postFormats" :key="postFormat" :value="postFormat">
+                      {{$t(`settings.post_formats["${postFormat}"]`)}}
+                      {{postContentTypeDefault === postFormat ? $t('settings.instance_default_simple') : ''}}
                     </option>
                   </select>
                   <i class="icon-down-open"/>
-- 
cgit v1.2.3-70-g09d2


From 292cdfb24b2d42d38728e8ff9ab16e2ad9e66410 Mon Sep 17 00:00:00 2001
From: Edijs <iamedijs@hotmail.com>
Date: Wed, 6 Mar 2019 20:13:04 -0800
Subject: Merge content types translations

---
 src/components/post_status_form/post_status_form.js  |  3 +++
 src/components/post_status_form/post_status_form.vue |  6 +++---
 src/components/settings/settings.vue                 |  2 +-
 src/i18n/en.json                                     | 10 +++-------
 src/i18n/eo.json                                     |  1 -
 src/i18n/es.json                                     |  1 -
 src/i18n/ja.json                                     |  1 -
 src/i18n/oc.json                                     |  1 -
 src/i18n/pt.json                                     |  1 -
 9 files changed, 10 insertions(+), 16 deletions(-)

(limited to 'src/components/settings/settings.vue')

diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index c28c51bf..23a2c7e2 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -171,6 +171,9 @@ const PostStatusForm = {
     },
     formattingOptionsEnabled () {
       return this.$store.state.instance.formattingOptionsEnabled
+    },
+    postFormats () {
+      return this.$store.state.instance.postFormats || []
     }
   },
   methods: {
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 5085570b..93f78f65 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -36,9 +36,9 @@
         <span class="text-format" v-if="formattingOptionsEnabled">
           <label for="post-content-type" class="select">
             <select id="post-content-type" v-model="newStatus.contentType" class="form-control">
-              <option value="text/plain">{{$t('post_status.content_type.plain_text')}}</option>
-              <option value="text/html">HTML</option>
-              <option value="text/markdown">Markdown</option>
+              <option v-for="postFormat in postFormats" :key="postFormat" :value="postFormat">
+                {{$t(`post_status.content_type["${postFormat}"]`)}}
+              </option>
             </select>
             <i class="icon-down-open"></i>
           </label>
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index c0cfe1ab..d2346747 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -106,7 +106,7 @@
                 <label for="postContentType" class="select">
                   <select id="postContentType" v-model="postContentTypeLocal">
                     <option v-for="postFormat in postFormats" :key="postFormat" :value="postFormat">
-                      {{$t(`settings.post_formats["${postFormat}"]`)}}
+                      {{$t(`post_status.content_type["${postFormat}"]`)}}
                       {{postContentTypeDefault === postFormat ? $t('settings.instance_default_simple') : ''}}
                     </option>
                   </select>
diff --git a/src/i18n/en.json b/src/i18n/en.json
index e614fb6c..01fe2fba 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -71,7 +71,9 @@
     "account_not_locked_warning_link": "locked",
     "attachments_sensitive": "Mark attachments as sensitive",
     "content_type": {
-      "plain_text": "Plain text"
+      "text/plain": "Plain text",
+      "text/html": "HTML",
+      "text/markdown": "Markdown"
     },
     "content_warning": "Subject (optional)",
     "default": "Just landed in L.A.",
@@ -220,13 +222,7 @@
     "subject_line_email": "Like email: \"re: subject\"",
     "subject_line_mastodon": "Like mastodon: copy as is",
     "subject_line_noop": "Do not copy",
-    "post_formats": {
-      "text/plain": "Plain text",
-      "text/html": "HTML",
-      "text/markdown": "Markdown"
-    },
     "post_status_content_type": "Post status content type",
-    "status_content_type_plain": "Plain text",
     "stop_gifs": "Play-on-hover GIFs",
     "streaming": "Enable automatic streaming of new posts when scrolled to the top",
     "text": "Text",
diff --git a/src/i18n/eo.json b/src/i18n/eo.json
index 2438b4d5..34851a44 100644
--- a/src/i18n/eo.json
+++ b/src/i18n/eo.json
@@ -221,7 +221,6 @@
     "subject_line_mastodon": "Kiel Mastodon: kopii senŝanĝe",
     "subject_line_noop": "Ne kopii",
     "post_status_content_type": "Afiŝi specon de la enhavo de la stato",
-    "status_content_type_plain": "Plata teksto",
     "stop_gifs": "Movi GIF-bildojn dum musa ŝvebo",
     "streaming": "Ŝalti memfaran fluigon de novaj afiŝoj ĉe la supro de la paĝo",
     "text": "Teksto",
diff --git a/src/i18n/es.json b/src/i18n/es.json
index 167e8c42..fe96dd08 100644
--- a/src/i18n/es.json
+++ b/src/i18n/es.json
@@ -202,7 +202,6 @@
     "subject_line_mastodon": "Tipo mastodon: copiar como es",
     "subject_line_noop": "No copiar",
     "post_status_content_type": "Formato de publicación",
-    "status_content_type_plain": "Texto plano",
     "stop_gifs": "Iniciar GIFs al pasar el ratón",
     "streaming": "Habilite la transmisión automática de nuevas publicaciones cuando se desplaza hacia la parte superior",
     "text": "Texto",
diff --git a/src/i18n/ja.json b/src/i18n/ja.json
index b51fa7fd..f39a5a7c 100644
--- a/src/i18n/ja.json
+++ b/src/i18n/ja.json
@@ -202,7 +202,6 @@
     "subject_line_mastodon": "マストドンふう: そのままコピー",
     "subject_line_noop": "コピーしない",
     "post_status_content_type": "とうこうのコンテントタイプ",
-    "status_content_type_plain": "プレーンテキスト",
     "stop_gifs": "カーソルをかさねたとき、GIFをうごかす",
     "streaming": "うえまでスクロールしたとき、じどうてきにストリーミングする",
     "text": "もじ",
diff --git a/src/i18n/oc.json b/src/i18n/oc.json
index ef32f83b..fd5ccc97 100644
--- a/src/i18n/oc.json
+++ b/src/i18n/oc.json
@@ -221,7 +221,6 @@
     "subject_line_mastodon": "Coma mastodon : copiar tal coma es",
     "subject_line_noop": "Copiar pas",
 "post_status_content_type": "Publicar lo tipe de contengut dels estatuts",
-    "status_content_type_plain": "Tèxte brut",
     "stop_gifs": "Lançar los GIFs al subrevòl",
     "streaming": "Activar lo cargament automatic dels novèls estatus en anar amont",
     "text": "Tèxt",
diff --git a/src/i18n/pt.json b/src/i18n/pt.json
index 39ff6c63..cbc2c9a3 100644
--- a/src/i18n/pt.json
+++ b/src/i18n/pt.json
@@ -221,7 +221,6 @@
     "subject_line_mastodon": "Como o Mastodon: copiar como está",
     "subject_line_noop": "Não copiar",
     "post_status_content_type": "Postar tipo de conteúdo do status",
-    "status_content_type_plain": "Texto puro",
     "stop_gifs": "Reproduzir GIFs ao passar o cursor em cima",
     "streaming": "Habilitar o fluxo automático de postagens quando ao topo da página",
     "text": "Texto",
-- 
cgit v1.2.3-70-g09d2


From 068c9724e45fe801ecedbea491234d0b95695629 Mon Sep 17 00:00:00 2001
From: Edijs <iamedijs@hotmail.com>
Date: Sun, 10 Mar 2019 16:58:12 -0700
Subject: Added new tab to display versions of BE/FE

---
 src/boot/after_store.js                 |  6 ++++++
 src/components/settings/settings.js     | 17 +++++++++++++++--
 src/components/settings/settings.vue    | 22 ++++++++++++++++++++++
 src/i18n/en.json                        |  5 +++++
 src/modules/instance.js                 |  6 +++++-
 src/services/version/version.service.js | 10 ++++++++++
 6 files changed, 63 insertions(+), 3 deletions(-)
 create mode 100644 src/services/version/version.service.js

(limited to 'src/components/settings/settings.vue')

diff --git a/src/boot/after_store.js b/src/boot/after_store.js
index a8e2bf35..dfaf4d68 100644
--- a/src/boot/after_store.js
+++ b/src/boot/after_store.js
@@ -176,6 +176,12 @@ const afterStoreSetup = ({ store, i18n }) => {
       const suggestions = metadata.suggestions
       store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled })
       store.dispatch('setInstanceOption', { name: 'suggestionsWeb', value: suggestions.web })
+
+      const software = data.software
+      store.dispatch('setInstanceOption', { name: 'backendVersion', value: software.version })
+
+      const frontendVersion = window.___pleromafe_commit_hash
+      store.dispatch('setInstanceOption', { name: 'frontendVersion', value: frontendVersion })
     })
 }
 
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index 979457a5..d208ee5a 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -1,8 +1,10 @@
 /* eslint-env browser */
+import { filter, trim } from 'lodash'
+
 import TabSwitcher from '../tab_switcher/tab_switcher.js'
 import StyleSwitcher from '../style_switcher/style_switcher.vue'
 import InterfaceLanguageSwitcher from '../interface_language_switcher/interface_language_switcher.vue'
-import { filter, trim } from 'lodash'
+import { parseBackendVersionString, parseFrontendVersionString } from '../../services/version/version.service'
 
 const settings = {
   data () {
@@ -78,7 +80,10 @@ const settings = {
         // Future spec, still not supported in Nightly 63 as of 08/2018
         Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'audioTracks'),
       playVideosInModal: user.playVideosInModal,
-      useContainFit: user.useContainFit
+      useContainFit: user.useContainFit,
+
+      backendVersion: instance.backendVersion,
+      frontendVersion: instance.frontendVersion
     }
   },
   components: {
@@ -98,6 +103,14 @@ const settings = {
     },
     instanceSpecificPanelPresent () { return this.$store.state.instance.showInstanceSpecificPanel }
   },
+  methods: {
+    parseBackendVersion (versionString) {
+      return parseBackendVersionString(versionString)
+    },
+    parseFrontendVersion (versionString) {
+      return parseFrontendVersionString(versionString)
+    }
+  },
   watch: {
     hideAttachmentsLocal (value) {
       this.$store.dispatch('setOption', { name: 'hideAttachments', value })
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index d2346747..3ca7bdc0 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -261,6 +261,28 @@
           </div>
         </div>
       </div>
+      <div :label="$t('settings.version.title')" >
+        <div class="setting-item">
+          <ul class="setting-list">
+            <li>
+              <p>{{$t('settings.version.backend_version')}}</p>
+              <ul class="option-list">
+                <li>
+                  <div v-html="parseBackendVersion(backendVersion)"></div>
+                </li>
+              </ul>
+            </li>
+            <li>
+              <p>{{$t('settings.version.frontend_version')}}</p>
+              <ul class="option-list">
+                <li>
+                  <div v-html="parseFrontendVersion(frontendVersion)"></div>
+                </li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+      </div>
     </tab-switcher>
 </keep-alive>
   </div>
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 01fe2fba..1fe201a4 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -347,6 +347,11 @@
         "checkbox": "I have skimmed over terms and conditions",
         "link": "a nice lil' link"
       }
+    },
+    "version": {
+      "title": "Version",
+      "backend_version": "Backend Version",
+      "frontend_version": "Frontend Version"
     }
   },
   "timeline": {
diff --git a/src/modules/instance.js b/src/modules/instance.js
index 24c52f9c..155aa2eb 100644
--- a/src/modules/instance.js
+++ b/src/modules/instance.js
@@ -48,7 +48,11 @@ const defaultState = {
 
   // Html stuff
   instanceSpecificPanelContent: '',
-  tos: ''
+  tos: '',
+
+  // Version Information
+  backendVersion: '',
+  frontendVersion: ''
 }
 
 const instance = {
diff --git a/src/services/version/version.service.js b/src/services/version/version.service.js
new file mode 100644
index 00000000..6c5036c1
--- /dev/null
+++ b/src/services/version/version.service.js
@@ -0,0 +1,10 @@
+
+export const parseBackendVersionString = versionString => {
+  const regex = /(-g)(\w+)$/i
+  const replacer = '$1<a href="https://git.pleroma.social/pleroma/pleroma/commit/$2" target="_blank">$2</a>'
+  return versionString.replace(regex, replacer)
+}
+
+export const parseFrontendVersionString = versionString => {
+  return `<a href="https://git.pleroma.social/pleroma/pleroma-fe/commit/${versionString}" target="_blank">#${versionString}</a>`
+}
-- 
cgit v1.2.3-70-g09d2


From 8952761370a9fc08a3f931940050ccbdd8df9767 Mon Sep 17 00:00:00 2001
From: Edijs <iamedijs@hotmail.com>
Date: Sun, 10 Mar 2019 18:06:51 -0700
Subject: Version links to BE/FE

---
 src/components/settings/settings.js     | 17 +++++++++--------
 src/components/settings/settings.vue    |  4 ++--
 src/services/version/version.service.js | 12 ++++--------
 3 files changed, 15 insertions(+), 18 deletions(-)

(limited to 'src/components/settings/settings.vue')

diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index d208ee5a..3579f6db 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -4,7 +4,10 @@ import { filter, trim } from 'lodash'
 import TabSwitcher from '../tab_switcher/tab_switcher.js'
 import StyleSwitcher from '../style_switcher/style_switcher.vue'
 import InterfaceLanguageSwitcher from '../interface_language_switcher/interface_language_switcher.vue'
-import { parseBackendVersionString, parseFrontendVersionString } from '../../services/version/version.service'
+import { extractCommit } from '../../services/version/version.service'
+
+const pleromaFeCommitUrl = 'https://git.pleroma.social/pleroma/pleroma-fe/commit/'
+const pleromaBeCommitUrl = 'https://git.pleroma.social/pleroma/pleroma/commit/'
 
 const settings = {
   data () {
@@ -101,14 +104,12 @@ const settings = {
     postFormats () {
       return this.$store.state.instance.postFormats || []
     },
-    instanceSpecificPanelPresent () { return this.$store.state.instance.showInstanceSpecificPanel }
-  },
-  methods: {
-    parseBackendVersion (versionString) {
-      return parseBackendVersionString(versionString)
+    instanceSpecificPanelPresent () { return this.$store.state.instance.showInstanceSpecificPanel },
+    frontendVersionLink () {
+      return pleromaFeCommitUrl + this.$store.state.instance.frontendVersion
     },
-    parseFrontendVersion (versionString) {
-      return parseFrontendVersionString(versionString)
+    backendVersionLink () {
+      return pleromaBeCommitUrl + extractCommit(this.$store.state.instance.backendVersion)
     }
   },
   watch: {
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 3ca7bdc0..17f1f1a1 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -268,7 +268,7 @@
               <p>{{$t('settings.version.backend_version')}}</p>
               <ul class="option-list">
                 <li>
-                  <div v-html="parseBackendVersion(backendVersion)"></div>
+                  <a :href="backendVersionLink" target="_blank">{{backendVersion}}</a>
                 </li>
               </ul>
             </li>
@@ -276,7 +276,7 @@
               <p>{{$t('settings.version.frontend_version')}}</p>
               <ul class="option-list">
                 <li>
-                  <div v-html="parseFrontendVersion(frontendVersion)"></div>
+                  <a :href="frontendVersionLink" target="_blank">{{frontendVersion}}</a>
                 </li>
               </ul>
             </li>
diff --git a/src/services/version/version.service.js b/src/services/version/version.service.js
index 6c5036c1..a750b0dd 100644
--- a/src/services/version/version.service.js
+++ b/src/services/version/version.service.js
@@ -1,10 +1,6 @@
 
-export const parseBackendVersionString = versionString => {
-  const regex = /(-g)(\w+)$/i
-  const replacer = '$1<a href="https://git.pleroma.social/pleroma/pleroma/commit/$2" target="_blank">$2</a>'
-  return versionString.replace(regex, replacer)
-}
-
-export const parseFrontendVersionString = versionString => {
-  return `<a href="https://git.pleroma.social/pleroma/pleroma-fe/commit/${versionString}" target="_blank">#${versionString}</a>`
+export const extractCommit = versionString => {
+  const regex = /-g(\w+)$/i
+  const matches = versionString.match(regex)
+  return matches ? matches[1] : ''
 }
-- 
cgit v1.2.3-70-g09d2


From 9857002bf5dc902302644e981712b611124a5845 Mon Sep 17 00:00:00 2001
From: taehoon <th.dev91@gmail.com>
Date: Sat, 2 Mar 2019 08:07:14 -0500
Subject: Add hideMutedPosts setting and wire up to post-returning endpoints

---
 src/boot/after_store.js                                   | 1 +
 src/components/settings/settings.js                       | 8 ++++++++
 src/components/settings/settings.vue                      | 4 ++++
 src/i18n/en.json                                          | 1 +
 src/modules/config.js                                     | 1 +
 src/modules/instance.js                                   | 1 +
 src/services/api/api.service.js                           | 3 ++-
 src/services/timeline_fetcher/timeline_fetcher.service.js | 4 ++++
 8 files changed, 22 insertions(+), 1 deletion(-)

(limited to 'src/components/settings/settings.vue')

diff --git a/src/boot/after_store.js b/src/boot/after_store.js
index a5f8c978..f5e84cbc 100644
--- a/src/boot/after_store.js
+++ b/src/boot/after_store.js
@@ -97,6 +97,7 @@ const setSettings = async ({ apiConfig, staticConfig, store }) => {
   copyInstanceOption('showInstanceSpecificPanel')
   copyInstanceOption('scopeOptionsEnabled')
   copyInstanceOption('formattingOptionsEnabled')
+  copyInstanceOption('hideMutedPosts')
   copyInstanceOption('collapseMessageWithSubject')
   copyInstanceOption('loginMethod')
   copyInstanceOption('scopeCopy')
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index b77c5197..1d5f75ed 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -47,6 +47,11 @@ const settings = {
       pauseOnUnfocusedLocal: user.pauseOnUnfocused,
       hoverPreviewLocal: user.hoverPreview,
 
+      hideMutedPostsLocal: typeof user.hideMutedPosts === 'undefined'
+        ? instance.hideMutedPosts
+        : user.hideMutedPosts,
+      hideMutedPostsDefault: this.$t('settings.values.' + instance.hideMutedPosts),
+
       collapseMessageWithSubjectLocal: typeof user.collapseMessageWithSubject === 'undefined'
         ? instance.collapseMessageWithSubject
         : user.collapseMessageWithSubject,
@@ -177,6 +182,9 @@ const settings = {
       value = filter(value.split('\n'), (word) => trim(word).length > 0)
       this.$store.dispatch('setOption', { name: 'muteWords', value })
     },
+    hideMutedPostsLocal (value) {
+      this.$store.dispatch('setOption', { name: 'hideMutedPosts', value })
+    },
     collapseMessageWithSubjectLocal (value) {
       this.$store.dispatch('setOption', { name: 'collapseMessageWithSubject', value })
     },
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 17f1f1a1..33dad549 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -36,6 +36,10 @@
         <div class="setting-item">
           <h2>{{$t('nav.timeline')}}</h2>
           <ul class="setting-list">
+            <li>
+              <input type="checkbox" id="hideMutedPosts" v-model="hideMutedPostsLocal">
+              <label for="hideMutedPosts">{{$t('settings.hide_muted_posts')}} {{$t('settings.instance_default', { value: hideMutedPostsDefault })}}</label>
+            </li>
             <li>
               <input type="checkbox" id="collapseMessageWithSubject" v-model="collapseMessageWithSubjectLocal">
               <label for="collapseMessageWithSubject">
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 68503f99..ecf9628f 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -153,6 +153,7 @@
     "general": "General",
     "hide_attachments_in_convo": "Hide attachments in conversations",
     "hide_attachments_in_tl": "Hide attachments in timeline",
+    "hide_muted_posts": "Hide posts of muted users",
     "max_thumbnails": "Maximum amount of thumbnails per post",
     "hide_isp": "Hide instance-specific panel",
     "preload_images": "Preload images",
diff --git a/src/modules/config.js b/src/modules/config.js
index 1c30c203..c5491c01 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -5,6 +5,7 @@ const browserLocale = (window.navigator.language || 'en').split('-')[0]
 
 const defaultState = {
   colors: {},
+  hideMutedPosts: undefined, // instance default
   collapseMessageWithSubject: undefined, // instance default
   hideAttachments: false,
   hideAttachmentsInConv: false,
diff --git a/src/modules/instance.js b/src/modules/instance.js
index 155aa2eb..f778ac4d 100644
--- a/src/modules/instance.js
+++ b/src/modules/instance.js
@@ -18,6 +18,7 @@ const defaultState = {
   scopeOptionsEnabled: true,
   formattingOptionsEnabled: false,
   alwaysShowSubjectInput: true,
+  hideMutedPosts: false,
   collapseMessageWithSubject: false,
   hidePostStats: false,
   hideUserStats: false,
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 14bc919f..73ea15aa 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -345,7 +345,7 @@ const fetchStatus = ({id, credentials}) => {
     .then((data) => parseStatus(data))
 }
 
-const fetchTimeline = ({timeline, credentials, since = false, until = false, userId = false, tag = false}) => {
+const fetchTimeline = ({timeline, credentials, since = false, until = false, userId = false, tag = false, withMuted = false}) => {
   const timelineUrls = {
     public: PUBLIC_TIMELINE_URL,
     friends: FRIENDS_TIMELINE_URL,
@@ -381,6 +381,7 @@ const fetchTimeline = ({timeline, credentials, since = false, until = false, use
   }
 
   params.push(['count', 20])
+  params.push(['with_muted', withMuted])
 
   const queryString = map(params, (param) => `${param[0]}=${param[1]}`).join('&')
   url += `?${queryString}`
diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js
index 6f99616f..8e954cdf 100644
--- a/src/services/timeline_fetcher/timeline_fetcher.service.js
+++ b/src/services/timeline_fetcher/timeline_fetcher.service.js
@@ -19,6 +19,9 @@ const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false
   const args = { timeline, credentials }
   const rootState = store.rootState || store.state
   const timelineData = rootState.statuses.timelines[camelCase(timeline)]
+  const hideMutedPosts = typeof rootState.config.hideMutedPosts === 'undefined'
+    ? rootState.instance.hideMutedPosts
+    : rootState.config.hideMutedPosts
 
   if (older) {
     args['until'] = until || timelineData.minId
@@ -28,6 +31,7 @@ const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false
 
   args['userId'] = userId
   args['tag'] = tag
+  args['withMuted'] = !hideMutedPosts
 
   const numStatusesBeforeFetch = timelineData.statuses.length
 
-- 
cgit v1.2.3-70-g09d2

