From 8ab359ed840c656252c3aab256c23c33ab2cd700 Mon Sep 17 00:00:00 2001 From: Jason Sadler Date: Sat, 8 Jun 2019 12:04:43 -0400 Subject: [PATCH] Fixes brave/brave-browser#4907 --- browser/extensions/api/brave_rewards_api.cc | 92 ++++++++++--------- common/extensions/api/brave_rewards.json | 14 ++- .../browser/ads_service_impl_unittest.cc | 5 +- .../brave_rewards/browser/rewards_service.h | 6 +- .../browser/rewards_service_impl.cc | 41 +-------- .../browser/rewards_service_impl.h | 12 +-- .../extension/brave_rewards/background.ts | 25 +++-- .../brave_rewards/content_scripts/reddit.ts | 10 +- .../brave_rewards/content_scripts/twitter.ts | 7 +- .../resources/tip/components/app.tsx | 29 ++---- .../resources/tip/components/siteBanner.tsx | 60 +++++++----- .../{tipTwitterUser.tsx => tipMediaUser.tsx} | 52 ++++++++--- .../tip/components/tipRedditUser.tsx | 80 ---------------- components/definitions/chromel.d.ts | 4 +- components/definitions/rewardsTip.d.ts | 10 +- 15 files changed, 188 insertions(+), 259 deletions(-) rename components/brave_rewards/resources/tip/components/{tipTwitterUser.tsx => tipMediaUser.tsx} (55%) delete mode 100644 components/brave_rewards/resources/tip/components/tipRedditUser.tsx diff --git a/browser/extensions/api/brave_rewards_api.cc b/browser/extensions/api/brave_rewards_api.cc index a8ffb575b8e2..dd253178c173 100644 --- a/browser/extensions/api/brave_rewards_api.cc +++ b/browser/extensions/api/brave_rewards_api.cc @@ -106,10 +106,11 @@ BraveRewardsTipTwitterUserFunction::Run() { if (rewards_service) { AddRef(); std::map args; - args["user_id"] = params->tweet_meta_data.user_id; - args["name"] = params->tweet_meta_data.name; - args["screen_name"] = params->tweet_meta_data.screen_name; - rewards_service->SaveTwitterPublisherInfo( + args["user_id"] = params->media_meta_data.user_id; + args["twitter_name"] = params->media_meta_data.twitter_name; + args["screen_name"] = params->media_meta_data.screen_name; + rewards_service->SaveInlineMediaInfo( + params->media_meta_data.media_type, args, base::Bind(&BraveRewardsTipTwitterUserFunction:: OnTwitterPublisherInfoSaved, @@ -143,10 +144,11 @@ ExtensionFunction::ResponseAction BraveRewardsTipRedditUserFunction::Run() { if (rewards_service) { AddRef(); std::map args; - args["user_name"] = params->reddit_meta_data.user_name; - args["post_text"] = params->reddit_meta_data.post_text; - args["post_rel_date"] = params->reddit_meta_data.post_rel_date; - rewards_service->SaveRedditPublisherInfo( + args["user_name"] = params->media_meta_data.user_name; + args["post_text"] = params->media_meta_data.post_text; + args["post_rel_date"] = params->media_meta_data.post_rel_date; + rewards_service->SaveInlineMediaInfo( + params->media_meta_data.media_type, args, base::Bind( &BraveRewardsTipRedditUserFunction::OnRedditPublisherInfoSaved, @@ -184,17 +186,20 @@ void BraveRewardsTipTwitterUserFunction::OnTwitterPublisherInfoSaved( params_dict->SetString("publisherKey", publisher_info->id); params_dict->SetString("url", publisher_info->url); - auto tweet_meta_data_dict = std::make_unique(); - tweet_meta_data_dict->SetString("name", publisher_info->name); - tweet_meta_data_dict->SetString("screenName", - params->tweet_meta_data.screen_name); - tweet_meta_data_dict->SetString("userId", params->tweet_meta_data.user_id); - tweet_meta_data_dict->SetString("tweetId", params->tweet_meta_data.tweet_id); - tweet_meta_data_dict->SetInteger("tweetTimestamp", - params->tweet_meta_data.tweet_timestamp); - tweet_meta_data_dict->SetString("tweetText", - params->tweet_meta_data.tweet_text); - params_dict->SetDictionary("tweetMetaData", std::move(tweet_meta_data_dict)); + base::Value media_meta_data_dict(base::Value::Type::DICTIONARY); + media_meta_data_dict.SetStringKey("twitter_name", publisher_info->name); + media_meta_data_dict.SetStringKey("mediaType", + params->media_meta_data.media_type); + media_meta_data_dict.SetStringKey("screenName", + params->media_meta_data.screen_name); + media_meta_data_dict.SetStringKey("userId", params->media_meta_data.user_id); + media_meta_data_dict.SetStringKey("tweetId", + params->media_meta_data.tweet_id); + media_meta_data_dict.SetDoubleKey("tweetTimestamp", + params->media_meta_data.tweet_timestamp); + media_meta_data_dict.SetStringKey("tweetText", + params->media_meta_data.tweet_text); + params_dict->SetPath("mediaMetaData", std::move(media_meta_data_dict)); ::brave_rewards::OpenTipDialog(contents, std::move(params_dict)); @@ -213,31 +218,30 @@ void BraveRewardsTipRedditUserFunction::OnRedditPublisherInfoSaved( content::WebContents* contents = nullptr; if (!ExtensionTabUtil::GetTabById( - params->tab_id, - Profile::FromBrowserContext(browser_context()), - false, - nullptr, - nullptr, - &contents, - nullptr)) { - return; - } - - std::unique_ptr params_dict = - std::make_unique(); - params_dict->SetStringKey("publisherKey", publisher_info->id); - params_dict->SetStringKey("url", publisher_info->url); - - base::Value reddit_meta_data_dict(base::Value::Type::DICTIONARY); - reddit_meta_data_dict.SetStringKey("name", publisher_info->name); - reddit_meta_data_dict.SetStringKey( - "userName", params->reddit_meta_data.user_name); - reddit_meta_data_dict.SetStringKey( - "postText", params->reddit_meta_data.post_text); - reddit_meta_data_dict.SetStringKey( - "postRelDate", params->reddit_meta_data.post_rel_date); - params_dict->SetPath( - "redditMetaData", std::move(reddit_meta_data_dict)); + params->tab_id, + Profile::FromBrowserContext(browser_context()), + false, + nullptr, + nullptr, + &contents, + nullptr)) { + return; + } + + auto params_dict = std::make_unique(); + params_dict->SetString("publisherKey", publisher_info->id); + params_dict->SetString("url", publisher_info->url); + + base::Value media_meta_data_dict(base::Value::Type::DICTIONARY); + media_meta_data_dict.SetStringKey("mediaType", + params->media_meta_data.media_type); + media_meta_data_dict.SetStringKey("userName", + params->media_meta_data.user_name); + media_meta_data_dict.SetStringKey("postText", + params->media_meta_data.post_text); + media_meta_data_dict.SetStringKey("postRelDate", + params->media_meta_data.post_rel_date); + params_dict->SetPath("mediaMetaData", std::move(media_meta_data_dict)); ::brave_rewards::OpenTipDialog( contents, std::move(params_dict)); diff --git a/common/extensions/api/brave_rewards.json b/common/extensions/api/brave_rewards.json index acce5bff90c4..e143d9cef9b6 100644 --- a/common/extensions/api/brave_rewards.json +++ b/common/extensions/api/brave_rewards.json @@ -396,14 +396,18 @@ "type": "integer" }, { - "name": "tweetMetaData", + "name": "mediaMetaData", "type": "object", "properties": { + "mediaType": { + "type": "string", + "description": "description used in UI to identify the media type" + }, "userId": { "type": "string", "description": "User ID of tweet author" }, - "name": { + "twitterName": { "type": "string", "description": "Name of tweet author" }, @@ -437,9 +441,13 @@ "type": "integer" }, { - "name": "redditMetaData", + "name": "mediaMetaData", "type": "object", "properties": { + "mediaType": { + "type": "string", + "description": "description used in UI to identify the media type" + }, "userName": { "type": "string", "description": "User name of the Reddit post/comment author" diff --git a/components/brave_ads/browser/ads_service_impl_unittest.cc b/components/brave_ads/browser/ads_service_impl_unittest.cc index 92599a326a08..e643e78f2fc7 100644 --- a/components/brave_ads/browser/ads_service_impl_unittest.cc +++ b/components/brave_ads/browser/ads_service_impl_unittest.cc @@ -142,8 +142,9 @@ class MockRewardsService : public RewardsService { brave_rewards::RefreshPublisherCallback)); MOCK_METHOD0(GetAllNotifications, const brave_rewards::RewardsNotificationService::RewardsNotificationsMap&()); - MOCK_METHOD2(SaveTwitterPublisherInfo, - void(const std::map&, + MOCK_METHOD3(SaveInlineMediaInfo, + void(const std::string&, + const std::map&, brave_rewards::SaveMediaInfoCallback)); MOCK_METHOD2(SetInlineTipSetting, void(const std::string& key, bool enabled)); diff --git a/components/brave_rewards/browser/rewards_service.h b/components/brave_rewards/browser/rewards_service.h index 7ae064af71b2..11bd30f4c295 100644 --- a/components/brave_rewards/browser/rewards_service.h +++ b/components/brave_rewards/browser/rewards_service.h @@ -225,10 +225,8 @@ class RewardsService : public KeyedService { virtual const RewardsNotificationService::RewardsNotificationsMap& GetAllNotifications() = 0; - virtual void SaveTwitterPublisherInfo( - const std::map& args, - SaveMediaInfoCallback callback) = 0; - virtual void SaveRedditPublisherInfo( + virtual void SaveInlineMediaInfo( + const std::string& media_type, const std::map& args, SaveMediaInfoCallback callback) = 0; diff --git a/components/brave_rewards/browser/rewards_service_impl.cc b/components/brave_rewards/browser/rewards_service_impl.cc index 142c6253a90e..01d35a879ccc 100644 --- a/components/brave_rewards/browser/rewards_service_impl.cc +++ b/components/brave_rewards/browser/rewards_service_impl.cc @@ -2214,39 +2214,7 @@ void RewardsServiceImpl::SaveRecurringTip( AsWeakPtr())); } -void RewardsServiceImpl::OnTwitterPublisherInfoSaved( - SaveMediaInfoCallback callback, - int32_t result, - ledger::PublisherInfoPtr publisher) { - if (!Connected()) { - std::move(callback).Run(nullptr); - return; - } - if (Connected()) { - ledger::Result result_converted = static_cast(result); - std::unique_ptr site; - - if (result_converted == ledger::Result::LEDGER_OK) { - site = std::make_unique( - PublisherInfoToContentSite(*publisher)); - } - - std::move(callback).Run(std::move(site)); - } -} - -void RewardsServiceImpl::SaveTwitterPublisherInfo( - const std::map& args, - SaveMediaInfoCallback callback) { - bat_ledger_->SaveMediaInfo( - "twitter", - mojo::MapToFlatMap(args), - base::BindOnce(&RewardsServiceImpl::OnTwitterPublisherInfoSaved, - AsWeakPtr(), - std::move(callback))); -} - -void RewardsServiceImpl::OnRedditPublisherInfoSaved( +void RewardsServiceImpl::OnMediaInlineInfoSaved( SaveMediaInfoCallback callback, int32_t result, ledger::PublisherInfoPtr publisher) { @@ -2265,13 +2233,14 @@ void RewardsServiceImpl::OnRedditPublisherInfoSaved( std::move(callback).Run(std::move(site)); } -void RewardsServiceImpl::SaveRedditPublisherInfo( +void RewardsServiceImpl::SaveInlineMediaInfo( + const std::string& media_type, const std::map& args, SaveMediaInfoCallback callback) { bat_ledger_->SaveMediaInfo( - "reddit", + media_type, mojo::MapToFlatMap(args), - base::BindOnce(&RewardsServiceImpl::OnRedditPublisherInfoSaved, + base::BindOnce(&RewardsServiceImpl::OnMediaInlineInfoSaved, AsWeakPtr(), std::move(callback))); } diff --git a/components/brave_rewards/browser/rewards_service_impl.h b/components/brave_rewards/browser/rewards_service_impl.h index dd4993c7c883..5ec0e466ffb7 100644 --- a/components/brave_rewards/browser/rewards_service_impl.h +++ b/components/brave_rewards/browser/rewards_service_impl.h @@ -218,11 +218,8 @@ class RewardsServiceImpl : public RewardsService, void SetContributionAmount(const double amount) const override; - void SaveTwitterPublisherInfo( - const std::map& args, - SaveMediaInfoCallback callback) override; - - void SaveRedditPublisherInfo( + void SaveInlineMediaInfo( + const std::string& media_type, const std::map& args, SaveMediaInfoCallback callback) override; @@ -562,10 +559,7 @@ class RewardsServiceImpl : public RewardsService, RefreshPublisherCallback callback, const std::string& publisher_key, bool verified); - void OnTwitterPublisherInfoSaved(SaveMediaInfoCallback callback, - int32_t result, - ledger::PublisherInfoPtr publisher); - void OnRedditPublisherInfoSaved( + void OnMediaInlineInfoSaved( SaveMediaInfoCallback callback, int32_t result, ledger::PublisherInfoPtr publisher); diff --git a/components/brave_rewards/resources/extension/brave_rewards/background.ts b/components/brave_rewards/resources/extension/brave_rewards/background.ts index 3b9ab8d187f1..0fa70af6374e 100644 --- a/components/brave_rewards/resources/extension/brave_rewards/background.ts +++ b/components/brave_rewards/resources/extension/brave_rewards/background.ts @@ -79,7 +79,8 @@ chrome.runtime.onConnect.addListener(function () { }) }) -const tipTwitterUser = (tweetMetaData: RewardsTip.TweetMetaData) => { +const tipTwitterMedia = (mediaMetaData: RewardsTip.MediaMetaData) => { + mediaMetaData.mediaType = 'twitter' chrome.tabs.query({ active: true, windowId: chrome.windows.WINDOW_ID_CURRENT @@ -91,11 +92,12 @@ const tipTwitterUser = (tweetMetaData: RewardsTip.TweetMetaData) => { if (tabId === undefined) { return } - chrome.braveRewards.tipTwitterUser(tabId, tweetMetaData) + chrome.braveRewards.tipTwitterUser(tabId, mediaMetaData) }) } -const tipRedditUser = (redditMetaData: RewardsTip.RedditMetaData) => { +const tipRedditMedia = (mediaMetaData: RewardsTip.MediaMetaData) => { + mediaMetaData.mediaType = 'reddit' chrome.tabs.query({ active: true, windowId: chrome.windows.WINDOW_ID_CURRENT @@ -107,19 +109,22 @@ const tipRedditUser = (redditMetaData: RewardsTip.RedditMetaData) => { if (tabId === undefined) { return } - chrome.braveRewards.tipRedditUser(tabId, redditMetaData) + chrome.braveRewards.tipRedditUser(tabId, mediaMetaData) }) } chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { const action = typeof msg === 'string' ? msg : msg.type switch (action) { - case 'tipTwitterUser': { - tipTwitterUser(msg.tweetMetaData) - return false - } - case 'tipRedditUser': { - tipRedditUser(msg.redditMetaData) + case 'tipInlineMedia': { + switch (msg.mediaMetaData.mediaType) { + case 'twitter': + tipTwitterMedia(msg.mediaMetaData) + break + case 'reddit': + tipRedditMedia(msg.mediaMetaData) + break + } return false } case 'rewardsEnabled': { diff --git a/components/brave_rewards/resources/extension/brave_rewards/content_scripts/reddit.ts b/components/brave_rewards/resources/extension/brave_rewards/content_scripts/reddit.ts index 59066c1f7975..95a749944f68 100644 --- a/components/brave_rewards/resources/extension/brave_rewards/content_scripts/reddit.ts +++ b/components/brave_rewards/resources/extension/brave_rewards/content_scripts/reddit.ts @@ -13,7 +13,7 @@ const isOldReddit = () => { redditUrl.hostname.startsWith('np') } -const getOldRedditMetaData = (redditPost: Element): RewardsTip.RedditMetaData | null => { +const getOldRedditMetaData = (redditPost: Element): RewardsTip.MediaMetaData | null => { if (!redditPost) { return null } @@ -55,13 +55,14 @@ const getOldRedditMetaData = (redditPost: Element): RewardsTip.RedditMetaData | } return { + mediaType: 'reddit', userName: userName, postText: postText || '', postRelDate: postRelDate || '' } } -const getRedditMetaData = (redditPost: Element): RewardsTip.RedditMetaData | null => { +const getRedditMetaData = (redditPost: Element): RewardsTip.MediaMetaData | null => { if (!redditPost) { return null } @@ -117,6 +118,7 @@ const getRedditMetaData = (redditPost: Element): RewardsTip.RedditMetaData | nul } return { + mediaType: 'reddit', userName: userName, postText: postText || '', postRelDate: postRelDate @@ -284,7 +286,7 @@ const createBraveTipActionForOld = (redditPost: Element) => { braveTipButton.onclick = function (event) { const redditMetaData = getOldRedditMetaData(redditPost) if (redditMetaData) { - const msg = { type: 'tipRedditUser', redditMetaData: redditMetaData } + const msg = { type: 'tipInlineMedia', mediaMetaData: redditMetaData } chrome.runtime.sendMessage(msg) } event.stopPropagation() @@ -308,7 +310,7 @@ const createBraveTipAction = (redditPost: Element, isPost: boolean) => { braveTipButton.onclick = function (event) { const redditMetaData = getRedditMetaData(redditPost) if (redditMetaData) { - const msg = { type: 'tipRedditUser', redditMetaData: redditMetaData } + const msg = { type: 'tipInlineMedia', mediaMetaData: redditMetaData } chrome.runtime.sendMessage(msg) } event.stopPropagation() diff --git a/components/brave_rewards/resources/extension/brave_rewards/content_scripts/twitter.ts b/components/brave_rewards/resources/extension/brave_rewards/content_scripts/twitter.ts index c29c370cc81f..855a73f7ef4f 100644 --- a/components/brave_rewards/resources/extension/brave_rewards/content_scripts/twitter.ts +++ b/components/brave_rewards/resources/extension/brave_rewards/content_scripts/twitter.ts @@ -7,7 +7,7 @@ import { getMessage } from '../background/api/locale_api' let timeout: any = null -const getTweetMetaData = (tweet: Element): RewardsTip.TweetMetaData | null => { +const getTweetMetaData = (tweet: Element): RewardsTip.MediaMetaData | null => { if (!tweet) { return null } @@ -27,7 +27,8 @@ const getTweetMetaData = (tweet: Element): RewardsTip.TweetMetaData | null => { const tweetTimestamp = tweetTimestampElements[0].getAttribute('data-time') || '' return { - name: tweet.getAttribute('data-name') || '', + mediaType: 'twitter', + twitterName: tweet.getAttribute('data-name') || '', screenName: tweet.getAttribute('data-screen-name') || '', userId: tweet.getAttribute('data-user-id') || '', tweetId: tweet.getAttribute('data-tweet-id') || '', @@ -61,7 +62,7 @@ const createBraveTipAction = (tweet: Element) => { braveTipButton.onclick = function (event) { const tweetMetaData = getTweetMetaData(tweet) if (tweetMetaData) { - const msg = { type: 'tipTwitterUser', tweetMetaData: tweetMetaData } + const msg = { type: 'tipInlineMedia', mediaMetaData: tweetMetaData } chrome.runtime.sendMessage(msg) } event.stopPropagation() diff --git a/components/brave_rewards/resources/tip/components/app.tsx b/components/brave_rewards/resources/tip/components/app.tsx index c14933a1aee1..16f2a9cf5048 100644 --- a/components/brave_rewards/resources/tip/components/app.tsx +++ b/components/brave_rewards/resources/tip/components/app.tsx @@ -8,8 +8,7 @@ import { connect } from 'react-redux' // Components import TipSite from './tipSite' -import TipTwitterUser from './tipTwitterUser' -import TipRedditUser from './tipRedditUser' +import TipMediaUser from './tipMediaUser' // Utils import * as rewardsActions from '../actions/tip_actions' @@ -17,8 +16,7 @@ import * as rewardsActions from '../actions/tip_actions' interface TipDialogArgs { url: string publisherKey: string - tweetMetaData?: RewardsTip.TweetMetaData - redditMetaData?: RewardsTip.RedditMetaData + mediaMetaData?: RewardsTip.MediaMetaData } interface Props extends RewardsTip.ComponentProps { @@ -30,28 +28,20 @@ export class App extends React.Component { return this.props.actions } - getTipBanner = (url: string, publisher: RewardsTip.Publisher, tweetMetaData?: RewardsTip.TweetMetaData, redditMetaData?: RewardsTip.RedditMetaData) => { - if (tweetMetaData) { + getTipBanner = (url: string, publisher: RewardsTip.Publisher, mediaMetaData: RewardsTip.MediaMetaData | undefined) => { + if (!mediaMetaData) { return ( - - ) - } else if (redditMetaData) { - return ( - ) } else { return ( - ) } @@ -65,8 +55,7 @@ export class App extends React.Component { } const url = this.props.dialogArgs.url - const tweetMetaData = this.props.dialogArgs.tweetMetaData - const redditMetaData = this.props.dialogArgs.redditMetaData + const mediaMetaData = this.props.dialogArgs.mediaMetaData const publisherKey = this.props.dialogArgs.publisherKey const publisher = publishers[publisherKey] @@ -76,7 +65,7 @@ export class App extends React.Component { return (
- {this.getTipBanner(url, publisher, tweetMetaData, redditMetaData)} + {this.getTipBanner(url, publisher, mediaMetaData)}
) } diff --git a/components/brave_rewards/resources/tip/components/siteBanner.tsx b/components/brave_rewards/resources/tip/components/siteBanner.tsx index 9faa15ea871e..1dc740419874 100644 --- a/components/brave_rewards/resources/tip/components/siteBanner.tsx +++ b/components/brave_rewards/resources/tip/components/siteBanner.tsx @@ -16,8 +16,7 @@ import * as utils from '../utils' interface Props extends RewardsTip.ComponentProps { publisher: RewardsTip.Publisher - tweetMetaData?: RewardsTip.TweetMetaData - redditMetaData?: RewardsTip.RedditMetaData + mediaMetaData?: RewardsTip.MediaMetaData } interface State { @@ -121,14 +120,14 @@ class Banner extends React.Component { return !!recurringDonation } - getScreenName = (tweetMetaData?: RewardsTip.TweetMetaData, redditMetaData?: RewardsTip.RedditMetaData) => { - if (!tweetMetaData && !redditMetaData) { + getScreenName = (mediaMetaData?: RewardsTip.MediaMetaData) => { + if (!mediaMetaData) { return '' } - if (tweetMetaData) { - return `@${tweetMetaData.screenName}` - } else if (redditMetaData) { - return `u/${redditMetaData.userName}` + if (mediaMetaData.mediaType === 'twitter') { + return `@${mediaMetaData.screenName}` + } else if (mediaMetaData.mediaType === 'reddit') { + return `u/${mediaMetaData.userName}` } return '' } @@ -138,33 +137,43 @@ class Banner extends React.Component { } getTweetText () { - if (!this.props.tweetMetaData || - !this.props.tweetMetaData.tweetText || - this.props.tweetMetaData.tweetText.length === 0) { + const mediaMetaData = this.props.mediaMetaData + if (!mediaMetaData) { + return + } + + if (mediaMetaData.mediaType !== 'twitter' || + !mediaMetaData.tweetText || + mediaMetaData.tweetText.length === 0) { return null } return ( ) } getRedditText () { - if (!this.props.redditMetaData || - !this.props.redditMetaData.postText || - this.props.redditMetaData.postText.length === 0) { + const mediaMetaData = this.props.mediaMetaData + if (!mediaMetaData) { + return + } + + if (mediaMetaData.mediaType !== 'reddit' || + !mediaMetaData.postText || + mediaMetaData.postText.length === 0) { return null } return ( ) } @@ -172,8 +181,7 @@ class Banner extends React.Component { const { balance } = this.props.rewardsDonateData const { total } = balance - const tweetMetaData = this.props.tweetMetaData - const redditMetaData = this.props.redditMetaData + const mediaMetaData = this.props.mediaMetaData const publisher = this.props.publisher const verified = publisher.verified let logo = publisher.logo @@ -192,7 +200,7 @@ class Banner extends React.Component { domain={publisher.publisherKey} title={publisher.title} name={publisher.name} - screenName={this.getScreenName(tweetMetaData, redditMetaData)} + screenName={this.getScreenName(mediaMetaData)} provider={publisher.provider as Provider} recurringDonation={this.hasRecurringTip(publisher.publisherKey)} balance={total.toString() || '0'} @@ -210,11 +218,13 @@ class Banner extends React.Component { addFundsLink={this.addFundsLink} > { - this.props.tweetMetaData + mediaMetaData + ? mediaMetaData.mediaType === 'twitter' ? this.getTweetText() - : this.props.redditMetaData - ? this.getRedditText() - : publisher.description + : mediaMetaData.mediaType === 'reddit' + ? this.getRedditText() + : publisher.description + : null } ) diff --git a/components/brave_rewards/resources/tip/components/tipTwitterUser.tsx b/components/brave_rewards/resources/tip/components/tipMediaUser.tsx similarity index 55% rename from components/brave_rewards/resources/tip/components/tipTwitterUser.tsx rename to components/brave_rewards/resources/tip/components/tipMediaUser.tsx index b6a42067cb65..c318d59cd7ab 100644 --- a/components/brave_rewards/resources/tip/components/tipTwitterUser.tsx +++ b/components/brave_rewards/resources/tip/components/tipMediaUser.tsx @@ -17,19 +17,29 @@ import { getLocale } from '../../../../common/locale' interface Props extends RewardsTip.ComponentProps { url: string publisher: RewardsTip.Publisher - tweetMetaData: RewardsTip.TweetMetaData + mediaMetaData: RewardsTip.MediaMetaData } -class TipTwitterUser extends React.Component { +class TipMediaUser extends React.Component { get actions () { return this.props.actions } onTweet = () => { - this.actions.onTweet( - `@${this.props.tweetMetaData.screenName}`, - this.props.tweetMetaData.tweetId) + const mediaMetaData = this.props.mediaMetaData + if (!mediaMetaData) { + return + } + + if (mediaMetaData.mediaType === 'twitter') { + this.actions.onTweet( + `@${mediaMetaData.screenName}`, + mediaMetaData.tweetId) + } else if (mediaMetaData.mediaType === 'reddit') { + let name = this.props.publisher.name + this.actions.onTweet(name, '') + } this.actions.onCloseDialog() } @@ -37,20 +47,32 @@ class TipTwitterUser extends React.Component { const { finished, error } = this.props.rewardsDonateData const publisher = this.props.publisher - const tweetMetaData = this.props.tweetMetaData - const key = - tweetMetaData && - tweetMetaData.tweetText && - tweetMetaData.tweetText.length > 0 - ? 'tweetTipTitle' - : 'tweetTipTitleEmpty' - publisher.title = getLocale(key, { user: tweetMetaData.screenName }) + const mediaMetaData = this.props.mediaMetaData + if (!mediaMetaData) { + return + } + + if (mediaMetaData.mediaType === 'twitter') { + const key = + mediaMetaData.tweetText && + mediaMetaData.tweetText.length > 0 + ? 'tweetTipTitle' + : 'tweetTipTitleEmpty' + publisher.title = getLocale(key, { user: mediaMetaData.screenName }) + } else if (mediaMetaData.mediaType === 'reddit') { + const key = + mediaMetaData.postText && + mediaMetaData.postText.length > 0 + ? 'redditTipTitle' + : 'redditTipTitleEmpty' + publisher.title = getLocale(key, { user: 'u/' + mediaMetaData.userName }) + } return ( <> { !finished && !error - ? + ? : null } { @@ -78,4 +100,4 @@ export const mapDispatchToProps = (dispatch: Dispatch) => ({ export default connect( mapStateToProps, mapDispatchToProps -)(TipTwitterUser) +)(TipMediaUser) diff --git a/components/brave_rewards/resources/tip/components/tipRedditUser.tsx b/components/brave_rewards/resources/tip/components/tipRedditUser.tsx deleted file mode 100644 index db6654a1de79..000000000000 --- a/components/brave_rewards/resources/tip/components/tipRedditUser.tsx +++ /dev/null @@ -1,80 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -import * as React from 'react' -import { bindActionCreators, Dispatch } from 'redux' -import { connect } from 'react-redux' - -// Components -import Banner from './siteBanner' -import TransientTipOverlay from './transientTipOverlay' - -// Utils -import * as rewardsActions from '../actions/tip_actions' -import { getLocale } from '../../../../common/locale' - -interface Props extends RewardsTip.ComponentProps { - url: string - publisher: RewardsTip.Publisher - redditMetaData: RewardsTip.RedditMetaData -} - -class TipRedditUser extends React.Component { - get actions () { - return this.props.actions - } - - onTweet = () => { - let name = this.props.publisher.name - - this.actions.onTweet(name, '') - this.actions.onCloseDialog() - } - - render () { - const { finished, error } = this.props.rewardsDonateData - - const publisher = this.props.publisher - const redditMetaData = this.props.redditMetaData - const key = - redditMetaData && - redditMetaData.postText && - redditMetaData.postText.length > 0 - ? 'redditTipTitle' - : 'redditTipTitleEmpty' - publisher.title = getLocale(key, { user: 'u/' + redditMetaData.userName }) - - return ( - <> - { - !finished && !error - ? - : null - } - { - finished - ? - : null - } - - ) - } -} - -export const mapStateToProps = (state: RewardsTip.ApplicationState) => ({ - rewardsDonateData: state.rewardsDonateData -}) - -export const mapDispatchToProps = (dispatch: Dispatch) => ({ - actions: bindActionCreators(rewardsActions, dispatch) -}) - -export default connect( - mapStateToProps, - mapDispatchToProps -)(TipRedditUser) diff --git a/components/definitions/chromel.d.ts b/components/definitions/chromel.d.ts index d7a9dccd2866..0ff1d463b7f8 100644 --- a/components/definitions/chromel.d.ts +++ b/components/definitions/chromel.d.ts @@ -15,8 +15,8 @@ declare namespace chrome.dns { declare namespace chrome.braveRewards { const createWallet: () => {} const tipSite: (tabId: number, publisherKey: string) => {} - const tipTwitterUser: (tabId: number, tweetMetaData: RewardsTip.TweetMetaData) => {} - const tipRedditUser: (tabId: number, redditMetaData: RewardsTip.RedditMetaData) => {} + const tipTwitterUser: (tabId: number, mediaMetaData: RewardsTip.MediaMetaData) => {} + const tipRedditUser: (tabId: number, mediaMetaData: RewardsTip.MediaMetaData) => {} const getPublisherData: (windowId: number, url: string, faviconUrl: string, publisherBlob: string | undefined) => {} const getWalletProperties: () => {} const getCurrentReport: () => {} diff --git a/components/definitions/rewardsTip.d.ts b/components/definitions/rewardsTip.d.ts index 7ff5836d24a9..5bf60037121f 100644 --- a/components/definitions/rewardsTip.d.ts +++ b/components/definitions/rewardsTip.d.ts @@ -33,13 +33,19 @@ declare namespace RewardsTip { verified: boolean } - interface TweetMetaData { - name: string + type MediaMetaData = { + mediaType: 'twitter', + twitterName: string screenName: string userId: string tweetId: string tweetTimestamp: number tweetText: string + } | { + mediaType: 'reddit' + userName: string + postText: string + postRelDate: string } interface RedditMetaData {