ff9ca662f2
## Issue > 5459 Add setting for changing your comment server. Visible on desktop (and possibly defaulting to Odysee URL), hidden on odysee. ## Comments Not sure how this would actually work properly without the user recompiling the app to handle server differences. For example, even when we use our own server but switch between v1 and v2, some code changes are need to handle the differences. At that point, it seems easier for the user to just change the .env file? Anyway... ## Changes - Added Desktop-only options to define custom server. [Settings > Advanced Settings > "Comment server" section].
71 lines
3.2 KiB
JavaScript
71 lines
3.2 KiB
JavaScript
// @flow
|
|
import { COMMENT_SERVER_API } from 'config';
|
|
|
|
const Comments = {
|
|
url: COMMENT_SERVER_API,
|
|
enabled: Boolean(COMMENT_SERVER_API),
|
|
isCustomServer: false,
|
|
|
|
setServerUrl: (customUrl: ?string) => {
|
|
Comments.url = customUrl === undefined ? COMMENT_SERVER_API : customUrl;
|
|
Comments.enabled = Boolean(Comments.url);
|
|
Comments.isCustomServer = Comments.url !== COMMENT_SERVER_API;
|
|
},
|
|
|
|
moderation_block: (params: ModerationBlockParams) => fetchCommentsApi('moderation.Block', params),
|
|
moderation_unblock: (params: ModerationBlockParams) => fetchCommentsApi('moderation.UnBlock', params),
|
|
moderation_block_list: (params: ModerationBlockParams) => fetchCommentsApi('moderation.BlockedList', params),
|
|
moderation_add_delegate: (params: ModerationAddDelegateParams) => fetchCommentsApi('moderation.AddDelegate', params),
|
|
moderation_remove_delegate: (params: ModerationRemoveDelegateParams) =>
|
|
fetchCommentsApi('moderation.RemoveDelegate', params),
|
|
moderation_list_delegates: (params: ModerationListDelegatesParams) =>
|
|
fetchCommentsApi('moderation.ListDelegates', params),
|
|
moderation_am_i: (params: ModerationAmIParams) => fetchCommentsApi('moderation.AmI', params),
|
|
comment_list: (params: CommentListParams) => fetchCommentsApi('comment.List', params),
|
|
comment_abandon: (params: CommentAbandonParams) => fetchCommentsApi('comment.Abandon', params),
|
|
comment_create: (params: CommentCreateParams) => fetchCommentsApi('comment.Create', params),
|
|
comment_by_id: (params: CommentByIdParams) => fetchCommentsApi('comment.ByID', params),
|
|
comment_pin: (params: CommentPinParams) => fetchCommentsApi('comment.Pin', params),
|
|
comment_edit: (params: CommentEditParams) => fetchCommentsApi('comment.Edit', params),
|
|
reaction_list: (params: ReactionListParams) => fetchCommentsApi('reaction.List', params),
|
|
reaction_react: (params: ReactionReactParams) => fetchCommentsApi('reaction.React', params),
|
|
setting_list: (params: SettingsParams) => fetchCommentsApi('setting.List', params),
|
|
setting_block_word: (params: BlockWordParams) => fetchCommentsApi('setting.BlockWord', params),
|
|
setting_unblock_word: (params: BlockWordParams) => fetchCommentsApi('setting.UnBlockWord', params),
|
|
setting_list_blocked_words: (params: SettingsParams) => fetchCommentsApi('setting.ListBlockedWords', params),
|
|
setting_update: (params: UpdateSettingsParams) => fetchCommentsApi('setting.Update', params),
|
|
super_list: (params: SuperListParams) => fetchCommentsApi('comment.SuperChatList', params),
|
|
};
|
|
|
|
function fetchCommentsApi(method: string, params: {}) {
|
|
if (!Comments.url) {
|
|
return Promise.reject(new Error('Commenting server is not set.'));
|
|
} else if (!Comments.enabled) {
|
|
return Promise.reject('Comments are not currently enabled.'); // eslint-disable-line
|
|
}
|
|
|
|
const url = `${Comments.url}?m=${method}`;
|
|
const options = {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
jsonrpc: '2.0',
|
|
id: 1,
|
|
method,
|
|
params,
|
|
}),
|
|
};
|
|
|
|
return fetch(url, options)
|
|
.then((res) => res.json())
|
|
.then((res) => {
|
|
if (res.error) {
|
|
throw new Error(res.error.message);
|
|
}
|
|
return res.result;
|
|
});
|
|
}
|
|
|
|
export default Comments;
|