From 8b7bbbc0f605a7cf7632c2e5d902418f7390bce2 Mon Sep 17 00:00:00 2001 From: Nejc Zdovc Date: Mon, 7 Jan 2019 05:45:15 +0100 Subject: [PATCH] Merge pull request #1230 from brave/youtube-url Adds support for different watch youtube urls --- .gitignore | 2 +- test/BUILD.gn | 1 + vendor/bat-native-ledger/src/bat_get_media.cc | 26 ++++++++-- vendor/bat-native-ledger/src/bat_get_media.h | 4 +- .../src/bat_get_media_unittest.cc | 52 +++++++++++++++++++ 5 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 vendor/bat-native-ledger/src/bat_get_media_unittest.cc diff --git a/.gitignore b/.gitignore index 8127eb4148c9..47ca375dcb9c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ /components/brave_sync/extension/brave-sync/ /dist/ /out/ -/vendor +/vendor/* !/vendor/bat-native-ledger node_modules/ *.xcodeproj diff --git a/test/BUILD.gn b/test/BUILD.gn index 76f9d8052bf0..875b34da0f31 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -85,6 +85,7 @@ test("brave_unit_tests") { if (brave_rewards_enabled) { sources += [ + "//brave/vendor/bat-native-ledger/src/bat_get_media_unittest.cc", "//brave/vendor/bat-native-ledger/src/test/niceware_partial_unittest.cc", "//brave/vendor/bat-native-usermodel/test/usermodel_unittest.cc", "//brave/components/brave_rewards/browser/rewards_service_impl_unittest.cc", diff --git a/vendor/bat-native-ledger/src/bat_get_media.cc b/vendor/bat-native-ledger/src/bat_get_media.cc index 5a9c56ebae96..44bacbbc245b 100644 --- a/vendor/bat-native-ledger/src/bat_get_media.cc +++ b/vendor/bat-native-ledger/src/bat_get_media.cc @@ -7,6 +7,7 @@ #include #include +#include #include "bat_get_media.h" #include "bat_helper.h" @@ -758,11 +759,28 @@ std::string BatGetMedia::parseChannelId(const std::string& data) { return id; } +// static std::string BatGetMedia::getYoutubeMediaIdFromUrl(const ledger::VisitData& visit_data) { - std::vector m_url = - braveledger_bat_helper::split(visit_data.url, '='); - if (m_url.size() > 1) { - return m_url[1]; + std::vector first_split = + braveledger_bat_helper::split(visit_data.url, '?'); + + if (first_split.size() < 2) { + return std::string(); + } + + std::vector and_split = + braveledger_bat_helper::split(first_split[1], '&'); + + for (const auto& item : and_split) { + std::vector m_url = braveledger_bat_helper::split(item, '='); + + if (m_url.size() < 2) { + continue; + } + + if (m_url[0] == "v") { + return m_url[1]; + } } return std::string(); diff --git a/vendor/bat-native-ledger/src/bat_get_media.h b/vendor/bat-native-ledger/src/bat_get_media.h index 6afdeb7b532a..ff61e316f231 100644 --- a/vendor/bat-native-ledger/src/bat_get_media.h +++ b/vendor/bat-native-ledger/src/bat_get_media.h @@ -45,6 +45,8 @@ class BatGetMedia { const ledger::VisitData& visit_data, const std::string& providerType); + static std::string getYoutubeMediaIdFromUrl(const ledger::VisitData& visit_data); + private: std::string getMediaURL(const std::string& mediaId, const std::string& providerName); void getPublisherFromMediaPropsCallback(const uint64_t& duration, @@ -171,8 +173,6 @@ class BatGetMedia { std::string parseChannelId(const std::string& data); - std::string getYoutubeMediaIdFromUrl(const ledger::VisitData& visit_data); - std::string getYoutubeMediaKeyFromUrl(const std::string& provider_type, const std::string& media_id); std::string getYoutubePublisherKeyFromUrl(const ledger::VisitData& visit_data); diff --git a/vendor/bat-native-ledger/src/bat_get_media_unittest.cc b/vendor/bat-native-ledger/src/bat_get_media_unittest.cc new file mode 100644 index 000000000000..a3fe84ca6f72 --- /dev/null +++ b/vendor/bat-native-ledger/src/bat_get_media_unittest.cc @@ -0,0 +1,52 @@ +/* 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/. */ + +#include "brave/vendor/bat-native-ledger/include/bat/ledger/ledger.h" +#include "brave/vendor/bat-native-ledger/src/bat_get_media.h" +#include "testing/gtest/include/gtest/gtest.h" + +TEST(BatGetMediaTest, GetYoutubeMediaIdFromUrl) { + //BatGetMedia media = new BatGetMedia(nullptr); + + // missing video id + ledger::VisitData data; + data.url = "https://www.youtube.com/watch"; + + std::string media = + braveledger_bat_get_media::BatGetMedia::getYoutubeMediaIdFromUrl(data); + + ASSERT_EQ(media, ""); + + // single element in the url + data.url = "https://www.youtube.com/watch?v=44444444"; + + media = + braveledger_bat_get_media::BatGetMedia::getYoutubeMediaIdFromUrl(data); + + ASSERT_EQ(media, "44444444"); + + // single element in the url with & appended + data.url = "https://www.youtube.com/watch?v=44444444&"; + + media = + braveledger_bat_get_media::BatGetMedia::getYoutubeMediaIdFromUrl(data); + + ASSERT_EQ(media, "44444444"); + + // multiple elements in the url (id first) + data.url = "https://www.youtube.com/watch?v=44444444&time_continue=580"; + + media = + braveledger_bat_get_media::BatGetMedia::getYoutubeMediaIdFromUrl(data); + + ASSERT_EQ(media, "44444444"); + + // multiple elements in the url + data.url = "https://www.youtube.com/watch?time_continue=580&v=44444444"; + + media = + braveledger_bat_get_media::BatGetMedia::getYoutubeMediaIdFromUrl(data); + + ASSERT_EQ(media, "44444444"); +} \ No newline at end of file