mirror of
https://github.com/LBRYFoundation/lbry-desktop.git
synced 2025-08-23 17:47:24 +00:00
edit option delete option analytics for channel claim support option follow option fix revert subscription actions block actions mute actions block and mute buttons mute menu option lint handle edit channel fix comment mute logic analytics handle delete channel fix claimismine fix rebase
78 lines
2.5 KiB
JavaScript
78 lines
2.5 KiB
JavaScript
// @flow
|
|
import * as ACTIONS from 'constants/action_types';
|
|
import REWARDS from 'rewards';
|
|
import { Lbryio } from 'lbryinc';
|
|
import { doClaimRewardType } from 'redux/actions/rewards';
|
|
import { parseURI } from 'lbry-redux';
|
|
import { doAlertWaitingForSync } from 'redux/actions/app';
|
|
import { doToast } from 'redux/actions/notifications';
|
|
|
|
type SubscriptionArgs = {
|
|
channelName: string,
|
|
uri: string,
|
|
notificationsDisabled?: boolean,
|
|
};
|
|
|
|
export function doToggleSubscription(subscription: SubscriptionArgs, isSubscribed: boolean = false) {
|
|
return async (dispatch: Dispatch, getState: GetState) => {
|
|
const {
|
|
settings: { daemonSettings },
|
|
sync: { prefsReady: ready },
|
|
} = getState();
|
|
|
|
if (!ready) {
|
|
return dispatch(doAlertWaitingForSync());
|
|
}
|
|
|
|
const { share_usage_data: shareSetting } = daemonSettings;
|
|
const isSharingData = shareSetting || IS_WEB;
|
|
|
|
if (!isSubscribed) {
|
|
const subscriptionUri = subscription.uri;
|
|
if (!subscriptionUri.startsWith('lbry://')) {
|
|
throw Error(`Subscription uris must include the "lbry://" prefix.\nTried to subscribe to ${subscriptionUri}`);
|
|
}
|
|
}
|
|
|
|
dispatch({
|
|
type: !isSubscribed ? ACTIONS.CHANNEL_SUBSCRIBE : ACTIONS.CHANNEL_UNSUBSCRIBE,
|
|
data: subscription,
|
|
});
|
|
|
|
// if the user isn't sharing data, keep the subscriptions entirely in the app
|
|
if (isSharingData || IS_WEB) {
|
|
const { channelClaimId } = parseURI(subscription.uri);
|
|
|
|
if (!isSubscribed) {
|
|
// They are sharing data, we can store their subscriptions in our internal database
|
|
Lbryio.call('subscription', 'new', {
|
|
channel_name: subscription.channelName,
|
|
claim_id: channelClaimId,
|
|
notifications_disabled: subscription.notificationsDisabled,
|
|
});
|
|
|
|
dispatch(doClaimRewardType(REWARDS.TYPE_SUBSCRIPTION, { failSilently: true }));
|
|
} else {
|
|
Lbryio.call('subscription', 'delete', {
|
|
claim_id: channelClaimId,
|
|
});
|
|
}
|
|
}
|
|
|
|
dispatch(doToast({
|
|
message: __(!isSubscribed ? 'You followed %CHANNEL_NAME%!' : 'Unfollowed %CHANNEL_NAME%.', { CHANNEL_NAME: subscription.channelName }),
|
|
}));
|
|
};
|
|
}
|
|
|
|
export function doChannelSubscribe(subscription: SubscriptionArgs) {
|
|
return (dispatch: Dispatch) => {
|
|
return dispatch(doToggleSubscription(subscription));
|
|
};
|
|
}
|
|
|
|
export function doChannelUnsubscribe(subscription: SubscriptionArgs) {
|
|
return (dispatch: Dispatch) => {
|
|
return dispatch(doToggleSubscription(subscription, true));
|
|
};
|
|
}
|