tsacdop-podcast-app-android/README.md

187 lines
7.3 KiB
Markdown
Raw Normal View History

2020-07-09 09:46:34 +02:00
[![Tsacdop Banner][]][google play]
[![Build Status - Cirrus][]][build status]
[![GitHub Release][]][github release - recent]
[![Github Downloads][]][github release - recent]
[![Localizely][]][localizely - website]
2020-07-26 12:20:42 +02:00
[![style: effective dart][]][effective dart pub]
2020-08-01 17:11:26 +02:00
[![License badge][]][license]
2020-04-21 10:41:38 +02:00
## About
2020-06-05 20:33:47 +02:00
Enjoy podcasts with Tsacdop.
2020-02-12 14:09:03 +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-02-09 13:42:33 +01:00
Credit to Flutter team and all involved plugins, especially [webfeed](https://github.com/witochandra/webfeed) and [Just_Audio](https://pub.dev/packages/just_audio).
2020-02-09 13:42:33 +01:00
The podcast search engine is powered by [ListenNotes](https://listennotes.com).
2020-03-14 04:27:44 +01:00
2020-04-03 08:25:04 +02:00
## Features
2020-06-05 20:33:47 +02:00
* Podcast group management
2020-07-06 12:32:44 +02:00
* Playlist support
* Sleep timer / speed setting
2020-07-06 12:32:44 +02:00
* OMPL file export and import
* Auto syncing in background
* Listening and subscription history record
* Dark mode / accent color
* Download for offline play
* Auto download new episodes / auto delete outdated downloads
* Settings backup
2020-08-15 19:27:31 +02:00
* Skip silence
* Boost volume
2020-04-03 08:36:14 +02:00
2020-04-03 08:25:04 +02:00
More to come...
2020-04-03 08:36:14 +02:00
## Preview
2020-06-05 20:33:47 +02:00
| Home Page | Group | Podcast | Episode| Dark Mode |
2020-07-09 20:04:14 +02:00
| ----- | ----- | ----- | ------ | ----- |
2020-07-09 09:46:34 +02:00
|![][Homepage ScreenShot]|![][Group Screenshot] | ![][Podcast Screenshot] | ![][Episode Screenshot]| ![][Darkmode Screenshot] |
2020-04-03 08:36:14 +02:00
2020-07-07 17:29:21 +02:00
## Localization
2020-07-07 17:41:48 +02:00
Please [Email](mailto:<tsacdop.app@gmail.com>) me you'd like to contribute to support more languages!
2020-07-07 17:29:21 +02:00
Credit to [Localizely](https://localizely.com/) for kind support to open source projects.
2020-07-07 17:29:21 +02:00
2020-08-06 17:04:44 +02:00
### ![English]
### ![Chinese Simplified]
### ![French]
### ![Spanish]
2020-02-12 14:18:20 +01:00
## License
Tsacdop is licensed under the [GPL v3.0](https://github.com/stonega/tsacdop/blob/master/LICENSE) license.
2020-02-12 14:09:03 +01:00
2020-04-21 10:41:38 +02:00
## Build
2020-08-06 16:18:32 +02:00
1. If you don't have Flutter SDK installed, please visit offcial [Flutter][Flutter Install] site.
2. Fetch latest sorce code from master branch.
```
git clone https://github.com/stonega/tsacdop.git
```
3. Add api search api configure file.
Tsacdop uses ListenNotes API 1.0 pro to search for podcasts, which is not free, so I can not expose the API key in the repo.
2020-08-01 17:11:26 +02:00
If you want to build the app, you need to create a new file named `.env.dart` in lib folder. Add the following code to `.env.dart` .
2020-08-06 16:18:32 +02:00
You can get your own API key on [ListenNotes](https://www.listennotes.com/api/), remember that you need to get pro plan API, because basic plan dosen't provide rss link for serach result. If no api key is added, the search function in the app won't work. But you can still add podcasts by using an RSS link or importing an OMPL file.
2020-04-21 10:41:38 +02:00
2020-07-06 12:32:44 +02:00
``` dart
2020-07-04 16:42:56 +02:00
final environment = {"apiKey":"APIKEY"};
2020-04-21 10:41:38 +02:00
```
2020-08-06 16:18:32 +02: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.
2020-04-21 10:41:38 +02:00
2020-07-07 17:29:21 +02:00
## Archetecture
2020-07-06 12:32:44 +02:00
2020-07-07 17:29:21 +02:00
### Plugins
2020-07-06 12:32:44 +02:00
2020-07-07 17:29:21 +02:00
* Local storage
2020-07-09 09:46:34 +02:00
+ sqflite
+ shared_preferences
2020-07-07 17:29:21 +02:00
* Audio
2020-07-09 09:46:34 +02:00
+ just_audio
+ audio_service
2020-07-07 17:29:21 +02:00
* State management
2020-07-09 09:46:34 +02:00
+ provider
2020-07-07 17:29:21 +02:00
* Download
2020-07-09 09:46:34 +02:00
+ flutter_downloader
2020-08-06 16:18:32 +02:00
* Background task
+ workmanager
2020-07-06 12:32:44 +02:00
2020-07-07 17:29:21 +02:00
### Directory Structure
2020-07-06 12:32:44 +02:00
2020-07-09 09:46:34 +02:00
```
UI
2020-07-07 17:29:21 +02:00
src
├──home
2020-07-09 09:46:34 +02:00
├──home.dart [Homepage]
├──searc_podcast.dart [Search Page]
2020-08-06 16:18:32 +02:00
└──playlist.dart [Playlist Page]
2020-07-07 17:29:21 +02:00
├──podcasts
├──podcast_manage.dart [Group Page]
2020-08-06 16:18:32 +02:00
└──podcast_detail.dart [Podcast Page]
2020-07-07 17:29:21 +02:00
├──episodes
2020-08-06 16:18:32 +02:00
└──episode_detail.dart [Episode Page]
2020-07-07 17:29:21 +02:00
├──settings
2020-08-06 16:18:32 +02:00
└──setting.dart [Setting Page]
2020-07-07 17:29:21 +02:00
2020-07-30 19:16:14 +02:00
STATE
2020-07-07 17:29:21 +02:00
src
├──state
2020-07-09 09:46:34 +02:00
├──audio_state.dart [Audio State]
2020-07-07 17:29:21 +02:00
├──download_state.dart [Episode Download]
├──podcast_group.dart [Podcast Groups]
2020-07-09 09:46:34 +02:00
├──refresh_podcast.dart [Episode Refresh]
2020-08-06 16:18:32 +02:00
└──setting_state.dart [Setting]
Service
src
├──service
├──api_service.dart [Podcast Search]
└──ompl_builde.dart [OMPL export]
2020-07-09 09:46:34 +02:00
```
2020-07-06 12:32:44 +02:00
2020-06-16 06:40:51 +02:00
## Known Issue
* Playlist is unstable
2020-06-16 06:40:51 +02:00
2020-08-06 16:18:32 +02:00
## Contact
2020-08-11 20:18:45 +02:00
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).
2020-08-06 16:18:32 +02:00
## Getting Started with Flutter
2020-02-09 13:13:56 +01:00
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:
2020-02-09 13:13:56 +01:00
2020-07-06 12:32:44 +02:00
* [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
* [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
2020-02-09 13:13:56 +01:00
For help getting started with Flutter, view our
2020-07-04 16:42:56 +02:00
[online documentation](https://flutter.dev/docs), which offers tutorials, samples, guidance on mobile development, and a full API reference.
2020-08-06 16:18:32 +02:00
[Flutter Install]: https://flutter.dev/docs/get-started/install
2020-07-09 09:46:34 +02:00
[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
[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
[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
2020-08-06 16:39:08 +02:00
[English]: https://img.shields.io/badge/dynamic/json?style=for-the-badge&color=%2323CCC6&label=English&query=%24.languages%5B0%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%5B1%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%5B3%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%5B5%5D.reviewedProgress&url=https%3A%2F%2Fapi.localizely.com%2Fv1%2Fprojects%2Fbde4e9bd-4cb2-449b-9de2-18f231ddb47d%2Fstatus&suffix=%
2020-07-09 09:46:34 +02:00
[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
2020-07-26 12:20:42 +02:00
[style: effective dart]: https://img.shields.io/badge/style-effective_dart-40c4ff.svg
[effective dart pub]: https://pub.dev/packages/effective_dart
2020-08-01 17:11:26 +02:00
[license]: https://github.com/stonega/tsacdop/blob/master/LICENSE
[License badge]: https://img.shields.io/badge/license-GPLv3-yellow.svg