parent
907e6b2e83
commit
ad84adaf63
26
routes/_actions/muteConversation.js
Normal file
26
routes/_actions/muteConversation.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import { store } from '../_store/store'
|
||||||
|
import { muteConversation, unmuteConversation } from '../_api/muteConversation'
|
||||||
|
import { toast } from '../_utils/toast'
|
||||||
|
import { setStatusMuted as setStatusMutedInDatabase } from '../_database/timelines/updateStatus'
|
||||||
|
|
||||||
|
export async function setConversationMuted (statusId, mute, toastOnSuccess) {
|
||||||
|
let { currentInstance, accessToken } = store.get()
|
||||||
|
try {
|
||||||
|
if (mute) {
|
||||||
|
await muteConversation(currentInstance, accessToken, statusId)
|
||||||
|
} else {
|
||||||
|
await unmuteConversation(currentInstance, accessToken, statusId)
|
||||||
|
}
|
||||||
|
await setStatusMutedInDatabase(currentInstance, statusId, mute)
|
||||||
|
if (toastOnSuccess) {
|
||||||
|
if (mute) {
|
||||||
|
toast.say('Muted conversation')
|
||||||
|
} else {
|
||||||
|
toast.say('Unmuted conversation')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
toast.say(`Unable to ${mute ? 'mute' : 'unmute'} conversation: ` + (e.message || ''))
|
||||||
|
}
|
||||||
|
}
|
12
routes/_api/muteConversation.js
Normal file
12
routes/_api/muteConversation.js
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import { auth, basename } from './utils'
|
||||||
|
import { postWithTimeout } from '../_utils/ajax'
|
||||||
|
|
||||||
|
export async function muteConversation (instanceName, accessToken, statusId) {
|
||||||
|
let url = `${basename(instanceName)}/api/v1/statuses/${statusId}/mute`
|
||||||
|
return postWithTimeout(url, null, auth(accessToken))
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function unmuteConversation (instanceName, accessToken, statusId) {
|
||||||
|
let url = `${basename(instanceName)}/api/v1/statuses/${statusId}/unmute`
|
||||||
|
return postWithTimeout(url, null, auth(accessToken))
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ import { setAccountBlocked } from '../../../_actions/block'
|
||||||
import { setAccountMuted } from '../../../_actions/mute'
|
import { setAccountMuted } from '../../../_actions/mute'
|
||||||
import { setStatusPinnedOrUnpinned } from '../../../_actions/pin'
|
import { setStatusPinnedOrUnpinned } from '../../../_actions/pin'
|
||||||
import { importShowCopyDialog } from '../asyncDialogs'
|
import { importShowCopyDialog } from '../asyncDialogs'
|
||||||
|
import { setConversationMuted } from '../../../_actions/muteConversation'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
oncreate,
|
oncreate,
|
||||||
|
@ -63,9 +64,15 @@ export default {
|
||||||
//
|
//
|
||||||
pinLabel: ({pinned, isUser}) => isUser ? (pinned ? 'Unpin from profile' : 'Pin to profile') : '',
|
pinLabel: ({pinned, isUser}) => isUser ? (pinned ? 'Unpin from profile' : 'Pin to profile') : '',
|
||||||
visibility: ({status}) => status.visibility,
|
visibility: ({status}) => status.visibility,
|
||||||
|
mentions: ({status}) => status.mentions || [],
|
||||||
|
mentionsUser: ({mentions, verifyCredentialsId}) => !!mentions.find(_ => _.id === verifyCredentialsId),
|
||||||
|
mutingConversation: ({status}) => !!status.muted,
|
||||||
|
muteConversationLabel: ({mutingConversation}) => mutingConversation ? `Unmute conversation` : `Mute conversation`,
|
||||||
|
muteConversationIcon: ({mutingConversation}) => mutingConversation ? '#fa-volume-up' : '#fa-volume-off',
|
||||||
items: ({
|
items: ({
|
||||||
blockLabel, blocking, blockIcon, muteLabel, muteIcon, followLabel, followIcon,
|
blockLabel, blocking, blockIcon, muteLabel, muteIcon, followLabel, followIcon,
|
||||||
following, followRequested, pinLabel, isUser, visibility
|
following, followRequested, pinLabel, isUser, visibility, mentionsUser, mutingConversation,
|
||||||
|
muteConversationLabel, muteConversationIcon
|
||||||
}) => ([
|
}) => ([
|
||||||
isUser && {
|
isUser && {
|
||||||
key: 'delete',
|
key: 'delete',
|
||||||
|
@ -92,6 +99,11 @@ export default {
|
||||||
label: muteLabel,
|
label: muteLabel,
|
||||||
icon: muteIcon
|
icon: muteIcon
|
||||||
},
|
},
|
||||||
|
(isUser || mentionsUser) && {
|
||||||
|
key: 'muteConversation',
|
||||||
|
label: muteConversationLabel,
|
||||||
|
icon: muteConversationIcon
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: 'copy',
|
key: 'copy',
|
||||||
label: 'Copy link to toot',
|
label: 'Copy link to toot',
|
||||||
|
@ -121,6 +133,8 @@ export default {
|
||||||
return this.onMuteClicked()
|
return this.onMuteClicked()
|
||||||
case 'copy':
|
case 'copy':
|
||||||
return this.onCopyClicked()
|
return this.onCopyClicked()
|
||||||
|
case 'muteConversation':
|
||||||
|
return this.onMuteConversationClicked()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async onDeleteClicked () {
|
async onDeleteClicked () {
|
||||||
|
@ -153,6 +167,11 @@ export default {
|
||||||
let { url } = status
|
let { url } = status
|
||||||
let showCopyDialog = await importShowCopyDialog()
|
let showCopyDialog = await importShowCopyDialog()
|
||||||
showCopyDialog(url)
|
showCopyDialog(url)
|
||||||
|
},
|
||||||
|
async onMuteConversationClicked () {
|
||||||
|
let { statusId, mutingConversation } = this.get()
|
||||||
|
this.close()
|
||||||
|
await setConversationMuted(statusId, !mutingConversation, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,3 +45,9 @@ export async function setStatusPinned (instanceName, statusId, pinned) {
|
||||||
status.pinned = pinned
|
status.pinned = pinned
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function setStatusMuted (instanceName, statusId, muted) {
|
||||||
|
return updateStatus(instanceName, statusId, status => {
|
||||||
|
status.muted = muted
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue