Skip to content

Commit

Permalink
Auto Contribution support for github
Browse files Browse the repository at this point in the history
  • Loading branch information
jdkuki authored and NejcZdovc committed Sep 19, 2019
1 parent 3c9db54 commit 133014b
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 17 deletions.
34 changes: 21 additions & 13 deletions vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -190,19 +190,27 @@ void LedgerImpl::OnHide(uint32_t tab_id, const uint64_t& current_time) {
}

DCHECK(last_tab_active_time_);

auto callback = std::bind(&LedgerImpl::OnSaveVisit,
this,
_1,
_2);

bat_publisher_->SaveVisit(
iter->second.tld,
iter->second,
current_time - last_tab_active_time_,
0,
callback);
last_tab_active_time_ = 0;
std::string type = bat_media_->GetLinkType(iter->second.tld, "", "");
auto duration = current_time - last_tab_active_time_;
// TODO(jdkuki) add support for other media types
if (type == GITHUB_MEDIA_TYPE) {
std::map<std::string, std::string> parts;
parts["duration"] = std::to_string(duration);
bat_media_->ProcessMedia(parts, type, iter->second.Clone());
} else {
auto callback = std::bind(&LedgerImpl::OnSaveVisit,
this,
_1,
_2);

bat_publisher_->SaveVisit(
iter->second.tld,
iter->second,
duration,
0,
callback);
last_tab_active_time_ = 0;
}
}

void LedgerImpl::OnForeground(uint32_t tab_id, const uint64_t& current_time) {
Expand Down
37 changes: 33 additions & 4 deletions vendor/bat-native-ledger/src/bat/ledger/internal/media/github.cc
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ GitHub::GitHub(bat_ledger::LedgerImpl* ledger) : ledger_(ledger) {
GitHub::~GitHub() {
}

// static
std::string GitHub::GetLinkType(const std::string& url) {
return url.find(GITHUB_TLD) != std::string::npos ? GITHUB_MEDIA_TYPE : "";
}

// static
bool GitHub::GetJSONIntValue(const std::string& key,
const std::string& json_string,
Expand Down Expand Up @@ -215,6 +220,25 @@ void GitHub::ProcessActivityFromUrl(uint64_t window_id,
media_key));
}


void GitHub::ProcessMedia(const std::map<std::string, std::string> parts,
const ledger::VisitData& visit_data) {
const std::string user_name = GetUserNameFromURL(visit_data.path);
const std::string url = GetProfileAPIURL(user_name);
auto iter = parts.find("duration");
uint64_t duration = iter != parts.end() ? std::stoull(iter->second) : 0U;

FetchDataFromUrl(url,
std::bind(&GitHub::OnUserPage,
this,
duration,
0,
visit_data,
_1,
_2,
_3));
}

void GitHub::OnMediaPublisherActivity(
ledger::Result result,
ledger::PublisherInfoPtr info,
Expand All @@ -234,6 +258,7 @@ void GitHub::OnMediaPublisherActivity(
FetchDataFromUrl(url,
std::bind(&GitHub::OnUserPage,
this,
0,
window_id,
visit_data,
_1,
Expand Down Expand Up @@ -296,6 +321,7 @@ void GitHub::OnPublisherPanelInfo(
FetchDataFromUrl(url,
std::bind(&GitHub::OnUserPage,
this,
0,
window_id,
visit_data,
_1,
Expand All @@ -318,6 +344,7 @@ void GitHub::FetchDataFromUrl(
}

void GitHub::OnUserPage(
const uint64_t duration,
uint64_t window_id,
const ledger::VisitData& visit_data,
int response_status_code,
Expand All @@ -338,7 +365,8 @@ void GitHub::OnUserPage(
_1,
_2);

SavePublisherInfo(user_id,
SavePublisherInfo(duration,
user_id,
user_name,
publisher_name,
profile_picture,
Expand All @@ -352,6 +380,7 @@ void GitHub::OnSaveMediaVisit(
}

void GitHub::SavePublisherInfo(
const uint64_t duration,
const std::string& user_id,
const std::string& screen_name,
const std::string& publisher_name,
Expand All @@ -375,10 +404,9 @@ void GitHub::SavePublisherInfo(
visit_data.url = url;
visit_data.favicon_url = profile_picture;
visit_data.name = publisher_name;

ledger_->SaveMediaVisit(publisher_key,
visit_data,
0,
duration,
window_id,
callback);

Expand All @@ -403,7 +431,8 @@ void GitHub::OnMediaPublisherInfo(
}

if (!publisher_info || result == ledger::Result::NOT_FOUND) {
SavePublisherInfo(user_id,
SavePublisherInfo(0,
user_id,
screen_name,
publisher_name,
profile_picture,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,18 @@ class GitHub : public ledger::LedgerCallbackHandler {
public:
explicit GitHub(bat_ledger::LedgerImpl* ledger);

static std::string GetLinkType(const std::string& url);

void SaveMediaInfo(
const std::map<std::string, std::string>& data,
ledger::PublisherInfoCallback callback);

void ProcessActivityFromUrl(uint64_t window_id,
const ledger::VisitData& visit_data);

void ProcessMedia(const std::map<std::string, std::string> parts,
const ledger::VisitData& vist_data);

~GitHub() override;

private:
Expand All @@ -47,6 +53,7 @@ class GitHub : public ledger::LedgerCallbackHandler {
braveledger_media::FetchDataFromUrlCallback callback);

void OnUserPage(
const uint64_t duration,
uint64_t window_id,
const ledger::VisitData& visit_data,
int response_status_code,
Expand All @@ -58,6 +65,7 @@ class GitHub : public ledger::LedgerCallbackHandler {
ledger::PublisherInfoPtr info);

void SavePublisherInfo(
const uint64_t duration,
const std::string& user_id,
const std::string& user_name,
const std::string& publisher_name,
Expand Down Expand Up @@ -126,6 +134,7 @@ void OnMediaPublisherInfo(

// For testing purposes
friend class MediaGitHubTest;
FRIEND_TEST_ALL_PREFIXES(MediaGitHubTest, GetLinkType);
FRIEND_TEST_ALL_PREFIXES(MediaGitHubTest, GetProfileURL);
FRIEND_TEST_ALL_PREFIXES(MediaGitHubTest, GetProfileAPIURL);
FRIEND_TEST_ALL_PREFIXES(MediaGitHubTest, GetProfileImageURL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,29 @@ std::string MediaGitHubTest::CreateTestJSONString() {
})";
}

TEST(MediaGitHubTest, GetLinkType) {
// empty
std::string result =
braveledger_media::GitHub::GetLinkType("");
ASSERT_TRUE(result.empty());

// wrong website
result = braveledger_media::GitHub::GetLinkType("https://twitter.com");
ASSERT_TRUE(result.empty());

// correct site
result = braveledger_media::GitHub::GetLinkType("https://github.com");
ASSERT_EQ(result, GITHUB_MEDIA_TYPE);

// sub domain
result = braveledger_media::GitHub::GetLinkType("https://gist.github.com");
ASSERT_EQ(result, GITHUB_MEDIA_TYPE);

// profile page
result = braveledger_media::GitHub::GetLinkType("https://github.com/jdkuki");
ASSERT_EQ(result, GITHUB_MEDIA_TYPE);
}

TEST(MediaGitHubTest, GetProfileURL) {
// empty
std::string result =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Media::Media(bat_ledger::LedgerImpl* ledger):

Media::~Media() {}

// static
std::string Media::GetLinkType(const std::string& url,
const std::string& first_party_url,
const std::string& referrer) {
Expand All @@ -41,6 +42,9 @@ std::string Media::GetLinkType(const std::string& url,
if (type.empty()) {
type = braveledger_media::Vimeo::GetLinkType(url);
}
if (type.empty()) {
type = braveledger_media::GitHub::GetLinkType(url);
}

return type;
}
Expand All @@ -66,6 +70,11 @@ void Media::ProcessMedia(const std::map<std::string, std::string>& parts,
media_vimeo_->ProcessMedia(parts);
return;
}

if (type == GITHUB_MEDIA_TYPE) {
media_github_->ProcessMedia(parts, *visit_data);
return;
}
}

void Media::GetMediaActivityFromUrl(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ std::string getProviderName(const std::string& publisher_id) {
return TWITTER_MEDIA_TYPE;
} else if (publisher_id.find(VIMEO_MEDIA_TYPE) != std::string::npos) {
return VIMEO_MEDIA_TYPE;
} else if (publisher_id.find(GITHUB_MEDIA_TYPE) != std::string::npos) {
return GITHUB_MEDIA_TYPE;
}

return "";
Expand Down

0 comments on commit 133014b

Please sign in to comment.