2020-03-14 04:14:24 +01:00
< p align = "center" >
2020-03-31 18:36:20 +02:00
< img src = "https://raw.githubusercontent.com/stonega/tsacdop/master/android/app/src/main/res/mipmap-xhdpi/ic_notification.png" art = "Logo" / >
2020-03-14 04:27:44 +01:00
< / br >
< img src = "https://raw.githubusercontent.com/stonega/tsacdop/master/android/app/src/main/res/mipmap-xhdpi/text.png" art = "Tsacdop" / >
2020-03-19 20:58:30 +01:00
< / p >
2020-02-09 13:13:56 +01:00
2020-07-08 15:18:08 +02:00
[![Build Status - Cirrus][]][Build status]
[![GitHub Release][]][Github Release - Recent]
[![Github Downloads][]][Github Release - Recent]
[![Localizely][]][Localizely - Website]
[![Google Play - Icon][]][Google Play]
2020-04-21 10:41:38 +02:00
## About
2020-06-05 20:33:47 +02:00
2020-02-12 14:09:03 +01:00
Enjoy podcasts with Tsacdop.
2020-07-08 15:18:08 +02:00
Tsacdop is a podcast player developed with flutter, a clean, simply beautiful and friendly app, and is free and opensource.
2020-02-09 13:42:33 +01:00
2020-07-04 16:42:56 +02: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
2020-02-11 14:01:57 +01:00
The podcasts 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
2020-07-06 12:32:44 +02:00
* Podcasts group management
* Playlist support
* Sleep timer / Speed setting
* OMPL file export and import
* Auto syncing in background
* Listen and subscribe history record
* Dark mode / Accent color
* Download for offline playing
* Auto download new episodes / Auto delete outdated downloads
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
| HomePage | Group | Podcast | Episode | DarkMode |
2020-07-04 16:42:56 +02:00
| ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
2020-06-05 20:33:47 +02:00
| < img src = "https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585893838840.png" art = "HomePage" / > | < img src = "https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585894051734.png" art = "Groups" / > | < img src = "https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585893877702.png" art = "Podcast" / > | < img src = "https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585896237809.png" art = "Episode" / > | < img src = "https://raw.githubusercontent.com/stonega/tsacdop/master/preview/1585893920721.png" art = "DarkMode" / > |
2020-04-03 08:36:14 +02:00
2020-07-07 17:29:21 +02:00
## Localization
Support languages
* English
* Chinese Simplified (beta)
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 project.
2020-02-12 14:18:20 +01:00
## License
2020-03-31 18:36:20 +02:00
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
Tsacdop is using ListenNotes api 1.0 pro to search podcast, 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 lib folder. Add below code in .env.dart.
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-06-05 20:33:47 +02:00
You can get own api key on [ListenNotes ](https://www.listennotes.com/api/ ), basic plan is free to all, and replace "APIKEY" with it.
2020-04-21 10:41:38 +02:00
If no api key added, the search function in the app won't work. But you can still add podcasts by serach rss link or import ompl file.
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
- sqflite
2020-07-08 18:18:32 +02:00
- shared_preferences
2020-07-07 17:29:21 +02:00
* Audio
- just_audio
- audio_service
* State management
- provider
* Download
- flutter_downloader
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-07 17:29:21 +02:00
```
UI
src
├──home
├──home.dart [Homepage]
├──addpodcast.dart [Search Page]
├──playlist.dart [Playlist Page]
├──podcasts
├──podcast_manage.dart [Group Page]
├──podcast_detail.dart [Podcast Page]
├──episodes
├──episode_detail.dart [Episode Page]
├──settings
├──setting.dart [Setting Page]
STATES
src
├──state
├──audio_state.dart [Audio State]
├──download_state.dart [Episode Download]
├──podcast_group.dart [Podcast Groups]
├──refresh_podcast.dart [Episode Refresh]
├──setting_state.dart [Setting]
├──subscribe_podcast.dart [Podcast Subscribe]
```
2020-07-06 12:32:44 +02:00
2020-06-16 06:40:51 +02:00
## Known Issue
2020-07-06 12:32:44 +02:00
* Playlist unstable
2020-06-16 06:40:51 +02:00
2020-02-09 13:13:56 +01:00
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
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-07-08 15:18:08 +02:00
[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
[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