Skip to content
Permalink
Browse files

add domain blocking (#496)

* add domain blocking

fixes another thing from #6

* show "domain blocking" on profile page
  • Loading branch information...
nolanlawson committed Aug 26, 2018
1 parent ac82419 commit 072219a3ea66f55014494c66e55c6563b513cfe2
@@ -9,7 +9,7 @@ import {
} from '../_database/relationships'
import { store } from '../_store/store'

async function updateAccount (accountId, instanceName, accessToken) {
async function _updateAccount (accountId, instanceName, accessToken) {
let localPromise = getAccountFromDatabase(instanceName, accountId)
let remotePromise = getAccount(instanceName, accessToken, accountId).then(account => {
/* no await */ setAccountInDatabase(instanceName, account)
@@ -28,7 +28,7 @@ async function updateAccount (accountId, instanceName, accessToken) {
}
}

async function updateRelationship (accountId, instanceName, accessToken) {
async function _updateRelationship (accountId, instanceName, accessToken) {
let localPromise = getRelationshipFromDatabase(instanceName, accountId)
let remotePromise = getRelationship(instanceName, accessToken, accountId).then(relationship => {
/* no await */ setRelationshipInDatabase(instanceName, relationship)
@@ -66,7 +66,13 @@ export async function updateProfileAndRelationship (accountId) {
let { currentInstance, accessToken } = store.get()

await Promise.all([
updateAccount(accountId, currentInstance, accessToken),
updateRelationship(accountId, currentInstance, accessToken)
_updateAccount(accountId, currentInstance, accessToken),
_updateRelationship(accountId, currentInstance, accessToken)
])
}

export async function updateRelationship (accountId) {
let { currentInstance, accessToken } = store.get()

await _updateRelationship(accountId, currentInstance, accessToken)
}
@@ -0,0 +1,26 @@
import { store } from '../_store/store'
import { blockDomain, unblockDomain } from '../_api/blockDomain'
import { toast } from '../_utils/toast'
import { updateRelationship } from './accounts'

export async function setDomainBlocked (accountId, domain, block, toastOnSuccess) {
let { currentInstance, accessToken } = store.get()
try {
if (block) {
await blockDomain(currentInstance, accessToken, domain)
} else {
await unblockDomain(currentInstance, accessToken, domain)
}
await updateRelationship(accountId)
if (toastOnSuccess) {
if (block) {
toast.say(`Hiding ${domain}`)
} else {
toast.say(`Unhiding ${domain}`)
}
}
} catch (e) {
console.error(e)
toast.say(`Unable to ${block ? 'hide' : 'unhide'} domain: ` + (e.message || ''))
}
}
@@ -0,0 +1,12 @@
import { post, WRITE_TIMEOUT, paramsString, del } from '../_utils/ajax'
import { auth, basename } from './utils'

export async function blockDomain (instanceName, accessToken, domain) {
let url = `${basename(instanceName)}/api/v1/domain_blocks?${paramsString({ domain })}`
return post(url, null, auth(accessToken), {timeout: WRITE_TIMEOUT})
}

export async function unblockDomain (instanceName, accessToken, domain) {
let url = `${basename(instanceName)}/api/v1/domain_blocks?${paramsString({ domain })}`
return del(url, auth(accessToken), {timeout: WRITE_TIMEOUT})
}
@@ -19,6 +19,7 @@
import { setAccountMuted } from '../../../_actions/mute'
import { setAccountFollowed } from '../../../_actions/follow'
import { setShowReblogs } from '../../../_actions/setShowReblogs'
import { setDomainBlocked } from '../../../_actions/setDomainBlocked'
export default {
oncreate,
@@ -66,10 +67,18 @@
? `Hide boosts from @${acct}`
: `Show boosts from @${acct}`
),
domain: ({ acct }) => acct.split('@')[1],
blockingDomain: ({ relationship }) => !!relationship.domain_blocking,
blockDomainLabel: ({ blockingDomain, domain }) => (
blockingDomain
? `Unhide ${domain}`
: `Hide ${domain}`
),
items: ({
blockLabel, blocking, blockIcon, muteLabel, muteIcon,
followLabel, followIcon, following, followRequested,
accountId, verifyCredentialsId, acct, isUser, showReblogsLabel
accountId, verifyCredentialsId, acct, isUser, showReblogsLabel,
domain, blockDomainLabel
}) => ([
!isUser && {
key: 'mention',
@@ -96,6 +105,11 @@
label: showReblogsLabel,
icon: '#fa-retweet'
},
!isUser && domain && {
key: 'blockDomain',
label: blockDomainLabel,
icon: '#fa-ban'
},
{
key: 'copy',
label: 'Copy link to account',
@@ -116,10 +130,12 @@
return this.onBlockClicked()
case 'mute':
return this.onMuteClicked()
case 'copy':
return this.onCopyClicked()
case 'showReblogs':
return this.onShowReblogsClicked()
case 'blockDomain':
return this.onBlockDomainClicked()
case 'copy':
return this.onCopyClicked()
}
},
async onMentionClicked () {
@@ -151,6 +167,11 @@
this.close()
await setShowReblogs(accountId, !showingReblogs, true)
},
async onBlockDomainClicked () {
let { accountId, domain, blockingDomain } = this.get()
this.close()
await setDomainBlocked(accountId, domain, !blockingDomain, true)
},
async onCopyClicked () {
let { account } = this.get()
let { url } = account
@@ -20,7 +20,14 @@
<div class="account-profile-followed-by">
{#if relationship && relationship.blocking}
<span class="account-profile-followed-by-span">Blocked</span>
{:elseif relationship && relationship.followed_by}
{/if}
{#if relationship && relationship.domain_blocking}
<span class="account-profile-followed-by-span">Domain hidden</span>
{/if}
{#if relationship && relationship.muting}
<span class="account-profile-followed-by-span">Muted</span>
{/if}
{#if relationship && relationship.followed_by}
<span class="account-profile-followed-by-span">Follows you</span>
{/if}
</div>
@@ -31,6 +38,7 @@
text-transform: uppercase;
color: var(--deemphasized-text-color);
font-size: 0.8em;
white-space: nowrap;
}
.account-profile-followed-by-span {
background: rgba(30, 30, 30, 0.2);

0 comments on commit 072219a

Please sign in to comment.
You can’t perform that action at this time.