brave-core icon indicating copy to clipboard operation
brave-core copied to clipboard

Update Brave News to use the new `channels` field from the API (when available)

Open fallaciousreasoning opened this issue 1 year ago • 0 comments

Resolves

Production sources: https://brave-today-cdn.brave.com/sources.json

Staging sources: https://brave-today-cdn.bravesoftware.com/sources.en_US.json

This PR is in the somewhat awkward position of adding new functionality from a new, future version of the sources API. The PR adds the ability to parse the channel field if it exists, and when it does not, falls back to the existing behavior.

This PR does the following:

  1. Migrate from using publisher.isEnabled to using the Top Sources channel to decide which sources are available by default (on Desktop) if (and only if) there are channels available.
  2. Adds a new switch --brave-news-region to override the current region
  3. Adds a ChannelsController for fetching Channels and managing channel subscriptions
  4. Updates BuildFeed to take Channel subscriptions into account.
  5. Subscribes all users to Top Sources channel by default (this has no effect if the server doesn't return channels).

Running the PR

To use the new channels before the API change lands in prod, you need to add the following two flags to point at the staging sources.json.

npm run start -- --brave-today-host=brave-today-cdn.bravesoftware.com --brave-news-region=en_US

Submitter Checklist:

  • [ ] I confirm that no security/privacy review is needed, or that I have requested one
  • [ ] There is a ticket for my issue
  • [ ] Used Github auto-closing keywords in the PR description above
  • [ ] Wrote a good PR/commit description
  • [ ] Squashed any review feedback or "fixup" commits before merge, so that history is a record of what happened in the repo, not your PR
  • [ ] Added appropriate labels (QA/Yes or QA/No; release-notes/include or release-notes/exclude; OS/...) to the associated issue
  • [ ] Checked the PR locally: npm run test -- brave_browser_tests, npm run test -- brave_unit_tests, npm run lint, npm run gn_check, npm run tslint
  • [ ] Ran git rebase master (if needed)

Reviewer Checklist:

  • [ ] A security review is not needed, or a link to one is included in the PR description
  • [ ] New files have MPL-2.0 license header
  • [ ] Adequate test coverage exists to prevent regressions
  • [ ] Major classes, functions and non-trivial code blocks are well-commented
  • [ ] Changes in component dependencies are properly reflected in gn
  • [ ] Code follows the style guide
  • [ ] Test plan is specified in PR before merging

After-merge Checklist:

  • [ ] The associated issue milestone is set to the smallest version that the changes has landed on
  • [ ] All relevant documentation has been updated, for instance:
    • [ ] https://github.com/brave/brave-browser/wiki/Deviations-from-Chromium-(features-we-disable-or-remove)
    • [ ] https://github.com/brave/brave-browser/wiki/Proxy-redirected-URLs
    • [ ] https://github.com/brave/brave-browser/wiki/Fingerprinting-Protections
    • [ ] https://github.com/brave/brave-browser/wiki/Brave%E2%80%99s-Use-of-Referral-Codes
    • [ ] https://github.com/brave/brave-browser/wiki/Custom-Headers
    • [ ] https://github.com/brave/brave-browser/wiki/Web-Compatibility-Exceptions-in-Brave
    • [ ] https://github.com/brave/brave-browser/wiki/QA-Guide
    • [ ] https://github.com/brave/brave-browser/wiki/P3A

Test Plan:

Run Brave as per normal. There should be no changes to your currently active Brave News sources.

fallaciousreasoning avatar Aug 03 '22 00:08 fallaciousreasoning