GithubHelp home page GithubHelp logo

podstation / podstation Goto Github PK

View Code? Open in Web Editor NEW
150.0 12.0 38.0 2.13 MB

podStation is a web podcast aggregator for Chrome.

Home Page: http://podstation.github.io

License: MIT License

Shell 0.22% JavaScript 76.21% CSS 1.95% HTML 14.45% TypeScript 7.17%
podcast-aggregator chrome extension addon podcast podcasts chrome-extension chrome-extensions podcasting20 lightning-network

podstation's Introduction

podStation Chrome Extension

Build Status

About

podStation is a free/libre and open-source (FLOSS) podcast aggregator and player for Chrome and other compatible browsers. It is distributed as a browser extension (see https://en.wikipedia.org/wiki/Browser_extension), but it behaves essentially like a standalone app that uses the browser as a platform.

Chrome Web Store

Chrome Web Store Chrome Web Store Chrome Web Store

How to install

You can install it at the chrome web store.

Although not officially supported yet (no tests in place), it also works on:

If there is any browser not listed above where you use podStation, please let me know. If you want to request a port for a browser, create an issue here, or send us a mail (see the session Support and Contact) A port to Firefox is part of the long term vision of the project, but not in active development.

History

Back in the days before I had a good Bluetooth headset, that I now use with all my devices, switching between audio from PCs (at work and at home) to mobile was not the most comfortable thing.

As such, I was searching for a cost effective solution to listen to podcasts on desktop operational systems, and also synchronize the list of podcasts between my home and work PC.

There were solutions on the market, but I was thinking that I could build something myself. Due to the projects I was working on at the time, I was learning front end development and also how to create chrome extensions.

After some research, I decided that a very cost effective way of keeping my list of podcasts in sync would be to use chrome's sync storage (in the order of Kilobytes) for extensions and chrome apps.

That was how the development of podStation started.

Vision

podStation has reached a mature state where increments are more typically on the direction of bug fixes, optimizations and reduction of technical debt (see https://en.wikipedia.org/wiki/Technical_debt).

If you would like to see all the proposed enhancements, check the open issues:

For an idea of the work in progress, check our planning project.

Some features I consider more important (I will add links to existing issues later):

  • Become podStation Browser Extension: podStation is currently only available for chrome. Although this most likely address the majority of possible users, I don't like the idea of contributing to vendor lock-in. Having a port that works on other browsers would make it easier for our users to choose other browsers, and contribute to the competitiveness of this market
  • Reduce the necessary permissions required by podStation

There are also some features that I would like to implement, but they are unlikely to become a reality, as it would be a lot of effort:

  • Support marking episodes as listened (history) - not enough Sync Storage space
  • Integration with mygpo (http://gpodder.net/)

Development

Installing the dependencies

You will need to install Node.js.

I have recently updated to v14.17.6, but it worked well with v10.15.1 before that.

If you use nvm to manage your node installations, you can install and set the current version of node by navigating to the folder of this repo (after cloning it) and running the commands:

nvm install
nvm use

After that, install the dependencies with the command:

npm install

Running locally

  1. Build the extension (for development) with the command:
    npm start
    
  2. Go to chrome's extensions page chrome://extensions/
  3. Enable the Developer Mode
  4. Click the button Load unpacked extension.
  5. Choose the dist folder

Voilà!
You should see podStation's icon on chrome's toolbar.
You are now running a local copy of podStation, have fun!

Automated tests

We use Karma and Jasmine for automated tests.

You can run the tests with the command line npm test. If you want to debug the tests run npm run test-chrome-debugging if you just want to run them.

Documentation

You can find the documentation on the docs folder.

Podcasting 2.0

podStation is committed to support in its best capacity the new features introduced with with Podcasting 2.0.

Currently it supports:

Learn more at Podcasting 2.0.

Find more Podcastings 2.0 apps at https://podcastindex.org/apps.

Find Podcasting 2.0 projects on GitHub by looking for the topic podcasting20.

Find podStation backlog for Podcasting 2.0 by looking for issues with the label pc20.

Contributing

If you are interesting in contributing to podStation, take a look at our contribution documentation.

Support and Contact

If you would like to report bugs, request new features, ask questions or contact the owners of this project for any general topic, create an issue in any of the platforms below:

If you are not sure how to use any of these platforms, or you do not want to communicate in public for any reason, reach us by email at [email protected].

Get Social

Wanna chat? Here is podStation's accounts on social media (in order of coolness):

Open source podcasting projects

Here are other great open source projects related to podcastings:

References

podstation's People

Contributors

ashishpatel1992 avatar dellagustin avatar dellagustin-sap avatar dependabot[bot] avatar dhara03 avatar tkthundr avatar vistaus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

podstation's Issues

Botão remover/oculta

Gostei bastante do seu projeto e gostaria de sugerir um botão para ocultar ou remover os episódios que ja foram ouvidos ou que não quero ouvir da lista de últimos episódios.

Sou programador e gostaria de contribuir, mas não entendo nada sobre as ferramentas que esta utilizando. Tem alguma coisa que eu possa fazer pelo projeto?

Shortcuts

Hello,

Awesome job on this extension. I am loving it!

Just one question, Is there any shortcut support or personalization planned?

thanks!

phase out bitbucket repository

The project started with bitbucket as main git service because it was closed sourced. It continued there because I wanted to allow Anonymous creation of issues, but that has over time proven to be very unfruitful, as most anonymous reporters will not come back to the tool.

- [ ] Move issues to github


Update

At the end I decided to keep bitbucket, and in fact branch out to other git repo managers, such as gitlab.
I myself will for now use github as the main repository manager.

The idea is actually to give contributors the option to work where they prefer, and keep a low vendor lock in.

To Do

Create a follow up tasks for the topic of having multiple git repo managers, here is some tasks to take care:

  • Automate the update of the master branch on bitbucket
  • Create a corresponding org on gitlab

Migrate local storage

We currently store all the episodes from podcasts to chrome.storage.local, which is aimed for simple JSON document storage, without any kind of indexing.

Because of this type of storage, all episodes must be load into memory.
This issue represents the task of evaluating other storage options more suitable to store this data, such as IndexedDB.
Check the See Also section of the IndexedDB API documentation on MDN for more options.

To be considered:

  • One time migration from chrome.storage.local to new storage

Clicking on the Global Media Control entry does not navigate to a podStation window

This issue is a follow up of #38 .

As a podcast listener, I expect the app to navigate to a window of its own when I click a global media control entry that belongs to the app.

Analysis

The audio is played from the background page, so clicking on it does not automatically show any page.

To Do

  • Research if there is any event on the background page we can watch for
  • Report feature request to chromium project

References

Migrate from bower to NPM

bower is deprecated, we should migrate the package provision to NPM instead.

I should create a milestone in case it span to more issues.

Challenges

  • usage of tools like webpack and browserify, etc...

podStation lost list of podcasts (stations).

I have been contacted by e-mail and through chrome web store by two different users reporting the same issue: podStation is now empty (no list of podcasts, or stations as some call them).

One of the users reported being using Linux Mint with Google Chrome.

If you are also having this issue, please react to this issue with a 👍

Better information on errors

Based on the feedback a user gave on chrome web store:

Doesn't work very well. Many failed to update errors.
No logs or no reason given.

Oops, i forgot to grant access to all sites so the Podstation could not update the podcasts.
Now it works.

It would be good to do better error handling and make it more transparent to the user.

Merge episodes from two or more podcasts into a single list

This feature was requested by a user in order to merge episodes from a single show that has two feeds, a free feed and one for paid subscriptions.

Original text:
Hola, quiero saber si es posible tener los episodios pagados y no pagados de un podcast en la misma "lista". Por ejemplo, soy patreon de Chapo Trap House, ellos tienen episodios gratis y episodios privados del patreon, actualmente esos dos me quedan en listas distintas, es como tener dos estaciones de poscast distintas para el mismo creador, lo que lo hace inconveniente para ver los episodios anteriores. gracias.

Enhancement: Add Chromecast support for player.

Enhancement Request:

It seems that the chromecast tabcast does not output audio from the player to the connected device. Please add the support for chromecast.

Repro:
Open RSS Feed for podcast in chrome browser
Click the Cast button in the top right hand corner of the browser
Connect to supported device
Notice that the sound does not output and is still playing in the browser even though the tab is mirrored

Consent for analytics

Although no one every inquired about this, I felt already for a long time this was necessary, but never had the time to address it.

Although podStation does provide the option to disable analytics, it never asks for consent, and this should be done.
Aside from there, is is not clear for new users that data is being collected, I only informed the existing users when it was introduced.

Remove static usage of "tabs" permissions

Follow up of #26

Regarding Tabs Permission

https://developer.chrome.com/extensions/tabs

When a user installs podStation, chrome shows the warning:

(It can) Read your browsing history

Why do we use it: Tabs is necessary so that we can bring a podstation tab into focus, if it is already open: https://github.com/podStation/podStation/blob/master/extension/background/podstation_bg.js

The majority of the chrome.tabs API can be used without declaring any permission. However, the "tabs" permission is required in order to populate the url, pendingUrl, title, and favIconUrl properties of Tab.

But we need to query for open tabs of podStation.
The documentation of the query function states the following regarding the url property of the queryInfo parameter:

Match tabs against one or more URL patterns. Fragment identifiers are not matched. This property is ignored if the extension does not have the "tabs" permission.

I tested removing the "tabs" permission and changing the url of the queryInfo object into chrome-extension://${chrome.runtime.id}/podstation.html with the ropes the rule would not apply in for tabs belonging to the extension, no luck.

Current solution proposal

  • Use the "activeTab" permission instead of "tabs"
  • Use method getViews and getCurrent, see #54 (comment)

References

Rename repository

As we may branch out into other podStation related repositories, it would be interesting to add to this one that it is a browser extension.

  • Check for incoming links.

Specify the persistence data models

The idea is to specify the persistence data model used for storage of local and sync data using something like json schema.

I believe this would make possible to check the data for consistency with the specification before saving, and also serve as documentation.

Remove usage of content scripts

Reasoning

Although not explicitly mentioned in the Chrome API documentation:

The usage of Content Scripts as used in podStation:

"content_scripts": [
	{
		"matches": ["http://*/*", "https://*/*"],
		"js": [
			"lib/jquery.min.js",
			"feedFinder.js"
		]
	}
],

Does cause the installation warning: Read and change all your data on the websites you visit

Why do we use content scripts?

At the moment, we inject the script https://github.com/podStation/podStation/blob/master/extension/feedFinder.js into every visited webpage to detect rss feeds.

When a feed is found, the extension button on the toolbar will change and give you the option to add the podcast from a popup window:
image

About the feed finder feature

When I introduced this feature, it sounded like a cool idea.
It is used, at least according to analytics:
image

More than 1000 times over the course of 6 months.

I particularly do not find it very useful, as many podcast webpages will not correctly expose the podcast feed in the webpage metadata, but I do not want to de-comission the feature.

Alternative implementation

My idea on how to keep this feature while avoiding injecting a script in every webpage the user visits is to use chrome.declarativeContent, maybe in combination with the activeTab permission.

Support for chrome's Global Media Control (MediaSession)

as shown on the image below, chrome introduced a central user interface for media control (finally! I wanted something like that for a long time...)

We probably need to consume some API (I need to check the documentation) to provide the metadata.
image

I already identified some bugs related to it:

  • in our player, the UI does not properly react when the control is changed with that button.
    • This does not seem to be happening anymore
  • when I click the podstation entry on the media controller, it does not navigate to podStation (this was actually not expected to work in the first place, as podStation's audio element is actually on the background page, since it has to remain playing when the tab is closed). - created a issue just for this - #55
  • using the stop function on the player does not remove the media session from the global media control - solved with b7b03ab

I plan to create issues for these in separate, for the meantime, I will also label this issue as bug.

some news about it: https://techcrunch.com/2020/01/16/chrome-gets-global-media-controls/

More refs:
https://w3c.github.io/web-roadmaps/media/control.html
https://w3c.github.io/mediasession
https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API
https://github.com/w3c/mediasession/blob/master/explainer.md

Status Icons

Hello,

Would it be possible to change the player status indicator from |> and || to ► and ▐▐ respectively?

As is, they are difficult to interpret. I tried to make the changes for myself locally, but could not find where they are located in the code.

Review permissions: Use optional permissions when possible, specially for accessing feeds

https://developer.chrome.com/extensions/permissions#manifest

This was moved manually from bitbucket: https://bitbucket.org/dellagustin/podstation_chrome_ext/issues/112/feeds-use-optional-permissions-to-access

most critical permissions:

"tabs"
"http://*/",
"https://*/"

also:

"content_scripts": [
		{
			"matches": ["http://*/*", "https://*/*"],
			"js": [
				"lib/jquery.min.js",
				"feedFinder.js"
			]
		}
	],

about priority

This is a high priority issue.

I have been delaying it for some time, mainly because with the source being open and being the developer myself, I know that the extension is not harmful, but this should be better reflected in how we technically handle priorities.

The main reason for prioritizing this issue is that on my last update I got a notice that the release would be pending review due to the excessive use of permissions.

Permissions

Tabs

Tabs is necessary so that we can bring a podstation tab into focus, if it is already open: https://github.com/podStation/podStation/blob/master/extension/background/podstation_bg.js

I have created #54 to follow up on the tabs permission.

Generic url access permission

The generic website access permissions ("http:///", "https:///") are necessary in order to fetch the feeds.

This topic will be handled specifically with #62

Content Script

See #61

References

Featured shows

to be contributed by podcast owners with Pull Request

i.e. this feed: https://twitter.com/Skill_FM

maybe featured shows could show first on the search result

To Do

Define maximum number of featured shows per language, rotation strategy and selection criteria.

Idea

  • Have a featured shows page
    • Filtered (and filterable) by language

Player stops playing every few minutes

The pod station player keeps stopping every few minutes and requires multiple restarts of individual files. The issue does not seem to be podcast specific. The same behavior is observed across all podcasts, subscribed or otherwise. I even tried closing other tabs in my browser windows to reduce load or conflicts in extensions. I reinstalled the extension as well as other extensions looking for cross-extension issues. All, to no avail.

That's the best I have as far as a description of the issue.
Outside of this issue, the player is a good add-on.

Thank you

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.