├── usocial ├── __init__.py ├── controllers │ ├── __init__.py │ ├── api.py │ ├── account.py │ └── feed.py ├── static │ ├── favicon.ico │ ├── webfonts │ │ ├── fa-solid-900.eot │ │ ├── fa-solid-900.ttf │ │ ├── fa-brands-400.eot │ │ ├── fa-brands-400.ttf │ │ ├── fa-brands-400.woff │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.eot │ │ ├── fa-regular-400.ttf │ │ ├── fa-regular-400.woff │ │ ├── fa-solid-900.woff │ │ ├── fa-solid-900.woff2 │ │ └── fa-regular-400.woff2 │ ├── style.css │ ├── mu.svg │ └── utils.js ├── templates │ ├── add_website.html │ ├── login.html │ ├── password.html │ ├── account.html │ ├── search_podcasts.html │ ├── base.html │ └── items.html ├── forms.py ├── scripts │ └── experiments │ │ ├── crawl_nownownow.py │ │ └── keywords.py ├── payments.py ├── main.py └── models.py ├── migrations ├── README ├── versions │ ├── 01f04eb3cb6d_initial_migration.py │ └── 7d065f861dd3_item_url_unique_per_feed.py ├── script.py.mako ├── alembic.ini └── env.py ├── .gitignore ├── requirements.txt ├── setup.py ├── TODO.md ├── docker-compose.yml ├── config.py ├── create-manifest.sh ├── Dockerfile ├── start.sh ├── .github └── workflows │ ├── tag.yml │ └── push.yml ├── README.md └── LICENSE /usocial/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /usocial/controllers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /migrations/README: -------------------------------------------------------------------------------- 1 | Single-database configuration for Flask. 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | .pytest_cache 3 | *.egg-info 4 | venv 5 | instance/ 6 | -------------------------------------------------------------------------------- /usocial/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/favicon.ico -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /usocial/static/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ibz/usocial/HEAD/usocial/static/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | babel 2 | bs4 3 | feedparsley 4 | Flask 5 | Flask-Bcrypt 6 | Flask-Cors 7 | Flask-JWT-Extended 8 | Flask-Migrate 9 | Flask-WTF 10 | lnd-grpc-client 11 | pytest 12 | python-podcastindex 13 | requests 14 | wheel -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | requirements = None 4 | with open('requirements.txt', 'r') as r: 5 | requirements = [l.strip() for l in r.readlines()] 6 | 7 | setup( 8 | name='usocial', 9 | packages=['usocial'], 10 | include_package_data=True, 11 | install_requires=requirements, 12 | ) 13 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | * Ability to play podcasts on the server (this could be used for example when running `usocial` on a home server, like [Umbrel](https://getumbrel.com/), that is connected to an audio system) 2 | * Detect when a website supports [Lightning Address](https://lightningaddress.com/) and make it easy to send one-time or recurring donations 3 | * Support more features of the ["podcast" namespace](https://github.com/Podcastindex-org/podcast-namespace) 4 | -------------------------------------------------------------------------------- /usocial/templates/add_website.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block content %} 3 |
| Total played | {{ played_value }} minutes |
| Total {{ action_name }} | {{ amount }} sats |
| {{ user.username }} {% if user.password %}{% else %}{% endif %} | set password |
| API key | {{ user.fever_api_key }} |
| log out |
| Version | {{ version }} |
| Build | {{ build }} |
| Website | usocial.me |
| LND | {% if lnd_info %}connected to node {{ lnd_info.identity_pubkey }}{% else %}not connected{% endif %} |
|
16 | |
18 |
19 | {{ feed.title }} ({{ feed.domain }})
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | {% for cat in feed.categories %}{{ cat }} {% endfor %}
28 |
29 | |
30 |
13 |
|
58 |
59 | {% if feed %}
60 | {{ feed.title }}61 |
|
168 |