tsacdop-podcast-app-android/README.md

196 lines
8.3 KiB
Markdown
Raw Permalink Normal View History

2020-10-28 13:10:43 +01:00
[![Tsacdop Banner][]][google play]
[![github action][]][github action link]
[![GitHub Release][]][github release - recent]
[![Github Downloads][]][github release - recent]
[![Localizely][]][localizely - website]
[![style: effective dart][]][effective dart pub]
[![License badge][]][license]
2021-03-28 14:16:27 +02:00
[![fdroid install][]][fdroid link]
2020-10-28 13:10:43 +01:00
## About
Enjoy podcasts with Tsacdop.
2021-12-04 09:51:22 +01:00
Tsacdop is a podcast player developed with Flutter, a clean, simply beautiful, and friendly app, which is also free and open source.
2020-10-28 13:10:43 +01:00
2021-12-04 09:51:22 +01:00
Credit to the Flutter team and all involved plugins, especially [webfeed](https://github.com/witochandra/webfeed), [Just_Audio](https://pub.dev/packages/just_audio), and [Provider](https://pub.dev/packages/provider).
2020-10-28 13:10:43 +01:00
2021-12-04 09:51:22 +01:00
The podcast search engine is powered by, [ListenNotes](https://listennotes.com) & [PodcastIndex](https://podcastindex.org/).
2020-10-28 13:10:43 +01:00
## Features
* Podcast group management
2021-01-09 11:16:58 +01:00
* Playlists support
2020-10-28 13:10:43 +01:00
* Sleep timer / speed setting
* OPML file export and import
2021-12-04 09:51:22 +01:00
* Auto-syncing in the background
2020-10-28 13:10:43 +01:00
* Listening and subscription history record
* Dark mode / accent color
* Download for offline play
2021-12-04 09:51:22 +01:00
* Auto-download new episodes / auto-delete outdated downloads
2020-10-28 13:10:43 +01:00
* Settings backup
* Skip silence
* Boost volume
More to come...
## Preview
| Home Page | Group | Podcast | Episode| Dark Mode |
| ----- | ----- | ----- | ------ | ----- |
|![][Homepage ScreenShot]|![][Group Screenshot] | ![][Podcast Screenshot] | ![][Episode Screenshot]| ![][Darkmode Screenshot] |
## Localization
Please [Email](mailto:<tsacdop.app@gmail.com>) me you'd like to contribute to support more languages!
Credit to [Localizely](https://localizely.com/) for kind support to open source projects.
### ![English]
### ![Chinese Simplified]
### ![French]
### ![Spanish]
### ![Portuguese]
## License
Tsacdop is licensed under the [GPL v3.0](https://github.com/stonega/tsacdop/blob/master/LICENSE) license.
## Build
2021-12-04 09:51:22 +01:00
1. If you don't have Flutter SDK installed; Please visit the official [Flutter][Flutter Install] site.
2. Fetch the latest source code from the master branch.
2020-10-28 13:10:43 +01:00
```
git clone https://github.com/stonega/tsacdop.git
```
3. Add api search api configure file.
2021-12-04 09:51:22 +01:00
Tsacdop uses the ListenNotes API 1.0 pro to search for podcasts, which is not free, so I can not expose the API key in the repo.
If you want to build the app, you need to create a new file named `.env.dart` in the lib folder. Add the following code to `.env.dart`. If you don't have a ListenNotes api key, keep the apiKey empty like ''. Then the app will only support the PodcastIndex search.
You can get your own ListenNotes API key on [ListenNotes](https://www.listennotes.com/api/). Remember that you need to get a pro plan API because the basic plan doesn't provide an rss link for the search result.
2020-10-28 13:10:43 +01:00
``` dart
2021-02-09 18:54:56 +01:00
final environment = {"apiKey":""};
2020-10-28 13:10:43 +01:00
```
4. Run the app with Android Studio or Visual Studio. Or the command line.
```
flutter pub get
flutter run
```
## Contribute
If you have an issue or found a bug, please raise a GitHub issue. Pull requests are also welcome.
2021-12-04 09:51:22 +01:00
## Architecture
2020-10-28 13:10:43 +01:00
### Plugins
* Local storage
+ sqflite
+ shared_preferences
* Audio
+ just_audio
+ audio_service
* State management
+ provider
* Download
+ flutter_downloader
* Background task
+ workmanager
### Directory Structure
```
UI
src
2020-12-20 10:35:39 +01:00
└──home
2020-10-28 13:10:43 +01:00
├──home.dart [Homepage]
├──searc_podcast.dart [Search Page]
└──playlist.dart [Playlist Page]
2020-12-20 10:35:39 +01:00
└──podcasts
2020-10-28 13:10:43 +01:00
├──podcast_manage.dart [Group Page]
└──podcast_detail.dart [Podcast Page]
2020-12-20 10:35:39 +01:00
└──episodes
2020-10-28 13:10:43 +01:00
└──episode_detail.dart [Episode Page]
2020-12-20 10:35:39 +01:00
└──settings
2020-10-28 13:10:43 +01:00
└──setting.dart [Setting Page]
STATE
src
2020-12-20 10:35:39 +01:00
└──state
2020-10-28 13:10:43 +01:00
├──audio_state.dart [Audio State]
├──download_state.dart [Episode Download]
├──podcast_group.dart [Podcast Groups]
├──refresh_podcast.dart [Episode Refresh]
└──setting_state.dart [Setting]
Service
src
2020-12-20 10:35:39 +01:00
└──service
2020-10-28 13:10:43 +01:00
├──api_service.dart [Podcast Search]
2020-12-20 10:35:39 +01:00
├──gpodder_api.dart [Gpodder intergate]
2020-10-28 13:10:43 +01:00
└──ompl_builde.dart [OMPL export]
```
## Known Issue
* Playlist is unstable
## Contact
You can reach out to me directly at [tsacdop.app@gmail.com](mailto:<tsacdop.app@gmail.com>).
Or you can join our [Telegram Group](https://t.me/joinchat/Bk3LkRpTHy40QYC78PK7Qg).
## Getting Started with Flutter
This project is a starting point for a Flutter application.
Here are a few resources to get you started if this is your first Flutter project:
* [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
* [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials, samples, guidance on mobile development, and a full API reference.
[Flutter Install]: https://flutter.dev/docs/get-started/install
[tsacdop banner]: https://raw.githubusercontent.com/stonega/tsacdop/master/preview/banner.png
[build status - cirrus]: https://circleci.com/gh/stonega/tsacdop/tree/master.svg?style=shield
[github action]: https://github.com/stonega/tsacdop/workflows/Flutter%20Build/badge.svg
[github action link]: https://github.com/stonega/tsacdop/actions
[build status ]: https://circleci.com/gh/stonega/tsacdop/tree/master
[github release]: https://img.shields.io/github/v/release/stonega/tsacdop
[github release - recent]: https://github.com/stonega/tsacdop/releases
[github downloads]: https://img.shields.io/github/downloads/stonega/tsacdop/total?color=%230000d&label=downloads
2021-03-28 15:40:05 +02:00
[fdroid install]: https://img.shields.io/f-droid/v/com.stonegate.tsacdop?include_prereleases
2021-03-28 14:16:27 +02:00
[fdroid link]: https://f-droid.org/en/packages/com.stonegate.tsacdop/
2020-10-28 13:10:43 +01:00
[localizely]: https://img.shields.io/badge/dynamic/json?color=%2326c6da&label=localizely&query=%24.languages.length&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus
[English]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=English&query=%24.languages%5B3%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[Chinese Simplified]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=Chinese%20Simplified&query=%24.languages%5B2%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[French]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=French(ppp)&query=%24.languages%5B5%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[Spanish]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=Spanish(Joel)&query=%24.languages%5B7%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[Portuguese]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=portuguese(Bruno)&query=%24.languages%5B9%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
[localizely - website]: https://localizely.com/
[google play - icon]: https://img.shields.io/badge/google-playStore-%2323CCC6
[google play]: https://play.google.com/store/apps/details?id=com.stonegate.tsacdop
[Homepage ScreenShot]: https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585893838840.png
[Group Screenshot]: https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585894051734.png
[Podcast Screenshot]: https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585893877702.png
[Episode Screenshot]: https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585896237809.png
[Darkmode Screenshot]: https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585893920721.png
[style: effective dart]: https://img.shields.io/badge/style-effective_dart-40c4ff.svg
[effective dart pub]: https://pub.dev/packages/effective_dart
[license]: https://github.com/stonega/tsacdop/blob/master/LICENSE
[License badge]: https://img.shields.io/badge/license-GPLv3-yellow.svg